commit 072e4f97a34eb0dbde49142823a754164882db07 Author: Admin Date: Wed Nov 26 15:13:27 2025 +0400 Добавьте файлы проекта. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/AddAdmProduct.Designer.cs b/AddAdmProduct.Designer.cs new file mode 100644 index 0000000..1664b45 --- /dev/null +++ b/AddAdmProduct.Designer.cs @@ -0,0 +1,387 @@ +namespace demMalyhin +{ + partial class AddAdmProduct + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxSale = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.textBoxArticle = new System.Windows.Forms.TextBox(); + this.btnAdd = new System.Windows.Forms.Button(); + this.comboBoxCategory = new System.Windows.Forms.ComboBox(); + this.comboBoxManufacturer = new System.Windows.Forms.ComboBox(); + this.textBoxQuantity = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.comboBoxSupplier = new System.Windows.Forms.ComboBox(); + this.pictureBoxProductImage = new System.Windows.Forms.PictureBox(); + this.btnChooseImage = new System.Windows.Forms.Button(); + this.openFileDialogImage = new System.Windows.Forms.OpenFileDialog(); + this.label11 = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxProductImage)).BeginInit(); + this.SuspendLayout(); + // + // textBoxSale + // + this.textBoxSale.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxSale.Location = new System.Drawing.Point(157, 219); + this.textBoxSale.Name = "textBoxSale"; + this.textBoxSale.Size = new System.Drawing.Size(194, 22); + this.textBoxSale.TabIndex = 20; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxUnit.Location = new System.Drawing.Point(157, 243); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.Size = new System.Drawing.Size(194, 22); + this.textBoxUnit.TabIndex = 19; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxPrice.Location = new System.Drawing.Point(157, 112); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.Size = new System.Drawing.Size(194, 22); + this.textBoxPrice.TabIndex = 18; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxDesc.Location = new System.Drawing.Point(157, 262); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.Size = new System.Drawing.Size(194, 22); + this.textBoxDesc.TabIndex = 17; + // + // textBoxName + // + this.textBoxName.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxName.Location = new System.Drawing.Point(157, 88); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(194, 22); + this.textBoxName.TabIndex = 16; + // + // textBoxArticle + // + this.textBoxArticle.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxArticle.Location = new System.Drawing.Point(157, 65); + this.textBoxArticle.Name = "textBoxArticle"; + this.textBoxArticle.Size = new System.Drawing.Size(194, 22); + this.textBoxArticle.TabIndex = 15; + // + // btnAdd + // + this.btnAdd.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnAdd.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.btnAdd.Location = new System.Drawing.Point(212, 486); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(75, 23); + this.btnAdd.TabIndex = 21; + this.btnAdd.Text = "Добавить"; + this.btnAdd.UseVisualStyleBackColor = false; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // comboBoxCategory + // + this.comboBoxCategory.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.comboBoxCategory.FormattingEnabled = true; + this.comboBoxCategory.Location = new System.Drawing.Point(195, 190); + this.comboBoxCategory.Name = "comboBoxCategory"; + this.comboBoxCategory.Size = new System.Drawing.Size(121, 23); + this.comboBoxCategory.TabIndex = 22; + // + // comboBoxManufacturer + // + this.comboBoxManufacturer.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.comboBoxManufacturer.FormattingEnabled = true; + this.comboBoxManufacturer.Location = new System.Drawing.Point(195, 163); + this.comboBoxManufacturer.Name = "comboBoxManufacturer"; + this.comboBoxManufacturer.Size = new System.Drawing.Size(121, 23); + this.comboBoxManufacturer.TabIndex = 24; + // + // textBoxQuantity + // + this.textBoxQuantity.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxQuantity.Location = new System.Drawing.Point(157, 285); + this.textBoxQuantity.Name = "textBoxQuantity"; + this.textBoxQuantity.Size = new System.Drawing.Size(194, 22); + this.textBoxQuantity.TabIndex = 25; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.Location = new System.Drawing.Point(66, 67); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(50, 15); + this.label1.TabIndex = 26; + this.label1.Text = "артикул"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label2.Location = new System.Drawing.Point(54, 93); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(97, 15); + this.label2.TabIndex = 27; + this.label2.Text = "название товара"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label3.Location = new System.Drawing.Point(68, 119); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(33, 15); + this.label3.TabIndex = 28; + this.label3.Text = "цена"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label4.Location = new System.Drawing.Point(68, 142); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(67, 15); + this.label4.TabIndex = 29; + this.label4.Text = "поставщик"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label5.Location = new System.Drawing.Point(66, 169); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(89, 15); + this.label5.TabIndex = 30; + this.label5.Text = "производитель"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label6.Location = new System.Drawing.Point(66, 192); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(62, 15); + this.label6.TabIndex = 31; + this.label6.Text = "категория"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label7.Location = new System.Drawing.Point(66, 217); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 15); + this.label7.TabIndex = 32; + this.label7.Text = "скидка"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label8.Location = new System.Drawing.Point(66, 236); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(85, 15); + this.label8.TabIndex = 33; + this.label8.Text = "ед. измерения"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label9.Location = new System.Drawing.Point(68, 259); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(60, 15); + this.label9.TabIndex = 34; + this.label9.Text = "описание"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label10.Location = new System.Drawing.Point(66, 285); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(69, 15); + this.label10.TabIndex = 35; + this.label10.Text = "количество"; + // + // comboBoxSupplier + // + this.comboBoxSupplier.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.comboBoxSupplier.FormattingEnabled = true; + this.comboBoxSupplier.Location = new System.Drawing.Point(195, 136); + this.comboBoxSupplier.Name = "comboBoxSupplier"; + this.comboBoxSupplier.Size = new System.Drawing.Size(121, 23); + this.comboBoxSupplier.TabIndex = 23; + // + // pictureBoxProductImage + // + this.pictureBoxProductImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxProductImage.Location = new System.Drawing.Point(85, 327); + this.pictureBoxProductImage.Name = "pictureBoxProductImage"; + this.pictureBoxProductImage.Size = new System.Drawing.Size(188, 132); + this.pictureBoxProductImage.TabIndex = 36; + this.pictureBoxProductImage.TabStop = false; + // + // btnChooseImage + // + this.btnChooseImage.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnChooseImage.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.btnChooseImage.Location = new System.Drawing.Point(289, 385); + this.btnChooseImage.Name = "btnChooseImage"; + this.btnChooseImage.Size = new System.Drawing.Size(75, 39); + this.btnChooseImage.TabIndex = 37; + this.btnChooseImage.Text = "Выбрать фото"; + this.btnChooseImage.UseVisualStyleBackColor = false; + this.btnChooseImage.Click += new System.EventHandler(this.btnChooseImage_Click); + // + // openFileDialogImage + // + this.openFileDialogImage.FileName = "openFileDialogImage"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(173, 9); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(162, 33); + this.label11.TabIndex = 38; + this.label11.Text = "Добавление"; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(376, 470); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 39; + this.btnBack.Text = "Назад"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(451, 9); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 40; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AddAdmProduct + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(487, 521); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.label11); + this.Controls.Add(this.btnChooseImage); + this.Controls.Add(this.pictureBoxProductImage); + this.Controls.Add(this.label10); + this.Controls.Add(this.label9); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxQuantity); + this.Controls.Add(this.comboBoxManufacturer); + this.Controls.Add(this.comboBoxSupplier); + this.Controls.Add(this.comboBoxCategory); + this.Controls.Add(this.btnAdd); + this.Controls.Add(this.textBoxSale); + this.Controls.Add(this.textBoxUnit); + this.Controls.Add(this.textBoxPrice); + this.Controls.Add(this.textBoxDesc); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.textBoxArticle); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AddAdmProduct"; + this.Text = "AddAdmProduct"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxProductImage)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxSale; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.TextBox textBoxArticle; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.ComboBox comboBoxCategory; + private System.Windows.Forms.ComboBox comboBoxManufacturer; + private System.Windows.Forms.TextBox textBoxQuantity; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox comboBoxSupplier; + private System.Windows.Forms.PictureBox pictureBoxProductImage; + private System.Windows.Forms.Button btnChooseImage; + private System.Windows.Forms.OpenFileDialog openFileDialogImage; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AddAdmProduct.cs b/AddAdmProduct.cs new file mode 100644 index 0000000..14b79c6 --- /dev/null +++ b/AddAdmProduct.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class AddAdmProduct : Form + { + private byte[] imageData = null; + + public AddAdmProduct() + { + InitializeComponent(); + LoadCategories(); + LoadManufacturers(); + LoadSuppliers(); + } + + private void LoadCategories() + { + DB db = new DB(); + DataTable categories = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT Category_name FROM Category", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(categories); + + comboBoxCategory.DataSource = categories; + comboBoxCategory.DisplayMember = "Category_name"; + comboBoxCategory.ValueMember = "Category_name"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void LoadSuppliers() + { + DB db = new DB(); + DataTable suppliers = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT supplier_name FROM Supplier", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(suppliers); + + comboBoxSupplier.DataSource = suppliers; + comboBoxSupplier.DisplayMember = "supplier_name"; + comboBoxSupplier.ValueMember = "supplier_name"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void LoadManufacturers() + { + DB db = new DB(); + DataTable Manufacturer = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT Manufacturer_name FROM Manufacturer", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(Manufacturer); + + comboBoxManufacturer.DataSource = Manufacturer; + comboBoxManufacturer.DisplayMember = "Manufacturer_name"; + comboBoxManufacturer.ValueMember = "Manufacturer_name"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void btnChooseImage_Click(object sender, EventArgs e) + { + openFileDialogImage.Filter = "Image Files (*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg"; + openFileDialogImage.Title = "Выберите изображение товара"; + + if (openFileDialogImage.ShowDialog() == DialogResult.OK) + { + try + { + string filePath = openFileDialogImage.FileName; + // Если pictureBoxProductImage еще нет, создайте его в дизайнере + if (pictureBoxProductImage != null) + { + pictureBoxProductImage.Image = Image.FromFile(filePath); + pictureBoxProductImage.SizeMode = PictureBoxSizeMode.Zoom; + } + + using (var ms = new MemoryStream()) + { + // Загружаем в MemoryStream, чтобы сохранить исходный формат + using (Image originalImage = Image.FromFile(filePath)) + { + originalImage.Save(ms, originalImage.RawFormat); + imageData = ms.ToArray(); + } + } + // Опционально: можно добавить сообщение пользователю + // MessageBox.Show("Изображение выбрано."); + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + // Сбрасываем при ошибке + if (pictureBoxProductImage != null) pictureBoxProductImage.Image = null; + imageData = null; + } + } + } + + private async void btnAdd_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxName.Text) || string.IsNullOrEmpty(textBoxArticle.Text) || string.IsNullOrEmpty(textBoxPrice.Text) || string.IsNullOrEmpty(textBoxSale.Text) || string.IsNullOrEmpty(textBoxUnit.Text) || string.IsNullOrEmpty(textBoxDesc.Text) || string.IsNullOrEmpty(textBoxQuantity.Text)) + { + MessageBox.Show("Заполните все обязательные поля!"); + return; + } + + + if (!int.TryParse(textBoxQuantity.Text, out int quantity) || quantity <= 0) + { + MessageBox.Show("Пожалуйста, введите корректное значение количества"); + return; + } + + if (!decimal.TryParse(textBoxPrice.Text, out decimal price) || price <= 0) + { + MessageBox.Show("Пожалуйста введите корректное значение цены"); + return; + } + + + DB db = new DB(); + + try + { + db.openConnection(); + + string query = "INSERT INTO products (article_product, product_name, price, supplier_id, manufacturer_id, category_id, sale_percent, unit_type, description, quantity_in_stock, photo)" + + "VALUES (@article, @pr_name, @price, (SELECT id_Supplier FROM Supplier WHERE supplier_name = @sup_name), (SELECT id_Manufacturer FROM Manufacturer WHERE Manufacturer_name = @manu_name), (SELECT id_Category FROM Category WHERE Category_name = @category), @sale, @unit, @desc, @quantity, @product_photo)"; + + using (MySqlCommand command = new MySqlCommand(query, db.getConnection())) + { + + command.Parameters.AddWithValue("@article", textBoxArticle.Text); + command.Parameters.AddWithValue("@pr_name", textBoxName.Text); + command.Parameters.AddWithValue("@price", price); + command.Parameters.AddWithValue("@sup_name", comboBoxSupplier.SelectedValue.ToString()); + command.Parameters.AddWithValue("@manu_name", comboBoxManufacturer.SelectedValue.ToString()); + command.Parameters.AddWithValue("@category", comboBoxCategory.SelectedValue.ToString()); + command.Parameters.AddWithValue("@sale", textBoxSale.Text); + command.Parameters.AddWithValue("@unit", textBoxUnit.Text); + command.Parameters.AddWithValue("@desc", textBoxDesc.Text); + command.Parameters.AddWithValue("@quantity", quantity); + + if (imageData != null) + { + // Если изображение было выбрано + command.Parameters.Add(new MySqlParameter("@product_photo", MySqlDbType.MediumBlob) { Value = imageData }); + } + else + { + // Если изображение не было выбрано, записываем NULL + command.Parameters.Add(new MySqlParameter("@product_photo", MySqlDbType.MediumBlob) { Value = DBNull.Value }); + } + + + int rowsAffected = await command.ExecuteNonQueryAsync(); + + if (rowsAffected > 0) + { + MessageBox.Show("Товар успешно добавлен!"); + DialogResult = DialogResult.OK; + Close(); + } + else + { + MessageBox.Show("Ошибка при добавлении продукта."); + } + } + } + catch (MySqlException ex) + { + if (ex.Number == 1452) + { + MessageBox.Show("Указанная категория не существует. Введите допустимое название категории."); + } + else + { + MessageBox.Show("Ошибка базы данных: " + ex.Message); + } + } + catch (Exception ex) + { + MessageBox.Show("Произошла: " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Close(); + AdmMainForm amf = new AdmMainForm(); + amf.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/AddAdmProduct.resx b/AddAdmProduct.resx new file mode 100644 index 0000000..203b438 --- /dev/null +++ b/AddAdmProduct.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AdmAddOrder.Designer.cs b/AdmAddOrder.Designer.cs new file mode 100644 index 0000000..51cd2cb --- /dev/null +++ b/AdmAddOrder.Designer.cs @@ -0,0 +1,230 @@ +namespace demMalyhin +{ + partial class AdmAddOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label5 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.comboBoxUser = new System.Windows.Forms.ComboBox(); + this.comboBoxPoint = new System.Windows.Forms.ComboBox(); + this.textBoxCode = new System.Windows.Forms.TextBox(); + this.textBoxDelivery = new System.Windows.Forms.TextBox(); + this.textBoxDate = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.btnAdd = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label5.Location = new System.Drawing.Point(148, 192); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(84, 15); + this.label5.TabIndex = 42; + this.label5.Text = "Пункт выдачи"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label3.Location = new System.Drawing.Point(70, 154); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(27, 15); + this.label3.TabIndex = 40; + this.label3.Text = "Код"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label2.Location = new System.Drawing.Point(12, 130); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(85, 15); + this.label2.TabIndex = 39; + this.label2.Text = "Дата доставки"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.Location = new System.Drawing.Point(27, 107); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(70, 15); + this.label1.TabIndex = 38; + this.label1.Text = "Дата заказа"; + // + // comboBoxUser + // + this.comboBoxUser.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.comboBoxUser.FormattingEnabled = true; + this.comboBoxUser.Location = new System.Drawing.Point(127, 260); + this.comboBoxUser.Name = "comboBoxUser"; + this.comboBoxUser.Size = new System.Drawing.Size(133, 23); + this.comboBoxUser.TabIndex = 37; + // + // comboBoxPoint + // + this.comboBoxPoint.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.comboBoxPoint.FormattingEnabled = true; + this.comboBoxPoint.Location = new System.Drawing.Point(127, 210); + this.comboBoxPoint.Name = "comboBoxPoint"; + this.comboBoxPoint.Size = new System.Drawing.Size(133, 23); + this.comboBoxPoint.TabIndex = 36; + // + // textBoxCode + // + this.textBoxCode.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxCode.Location = new System.Drawing.Point(103, 151); + this.textBoxCode.Name = "textBoxCode"; + this.textBoxCode.Size = new System.Drawing.Size(194, 22); + this.textBoxCode.TabIndex = 34; + // + // textBoxDelivery + // + this.textBoxDelivery.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxDelivery.Location = new System.Drawing.Point(103, 127); + this.textBoxDelivery.Name = "textBoxDelivery"; + this.textBoxDelivery.Size = new System.Drawing.Size(194, 22); + this.textBoxDelivery.TabIndex = 33; + // + // textBoxDate + // + this.textBoxDate.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.textBoxDate.Location = new System.Drawing.Point(103, 104); + this.textBoxDate.Name = "textBoxDate"; + this.textBoxDate.Size = new System.Drawing.Size(194, 22); + this.textBoxDate.TabIndex = 32; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(121, 23); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(162, 33); + this.label11.TabIndex = 44; + this.label11.Text = "Добавление"; + // + // btnAdd + // + this.btnAdd.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnAdd.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.btnAdd.Location = new System.Drawing.Point(151, 342); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(75, 23); + this.btnAdd.TabIndex = 45; + this.btnAdd.Text = "Добавить"; + this.btnAdd.UseVisualStyleBackColor = false; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Times New Roman", 9.75F); + this.label6.Location = new System.Drawing.Point(124, 242); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(140, 15); + this.label6.TabIndex = 47; + this.label6.Text = "Идентификатор клиента"; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(272, 399); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 48; + this.btnBack.Text = "Назад"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(347, 12); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 49; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AdmAddOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(383, 450); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.label6); + this.Controls.Add(this.btnAdd); + this.Controls.Add(this.label11); + this.Controls.Add(this.label5); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.comboBoxUser); + this.Controls.Add(this.comboBoxPoint); + this.Controls.Add(this.textBoxCode); + this.Controls.Add(this.textBoxDelivery); + this.Controls.Add(this.textBoxDate); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AdmAddOrder"; + this.Text = "AdmAddOrder"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox comboBoxUser; + private System.Windows.Forms.ComboBox comboBoxPoint; + private System.Windows.Forms.TextBox textBoxCode; + private System.Windows.Forms.TextBox textBoxDelivery; + private System.Windows.Forms.TextBox textBoxDate; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AdmAddOrder.cs b/AdmAddOrder.cs new file mode 100644 index 0000000..fbf7768 --- /dev/null +++ b/AdmAddOrder.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class AdmAddOrder : Form + { + public AdmAddOrder() + { + InitializeComponent(); + LoadPickup(); + LoadUser(); + } + + private void LoadPickup() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idpickup_points, pickup_points.index FROM pickup_points"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable categoryTable = new DataTable(); + categoryTable.Load(reader); + + comboBoxPoint.DataSource = categoryTable; + comboBoxPoint.DisplayMember = "index"; + comboBoxPoint.ValueMember = "idpickup_points"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void LoadUser() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_users FROM users"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable userTable = new DataTable(); + userTable.Load(reader); + + comboBoxUser.DataSource = userTable; + comboBoxUser.DisplayMember = "id_users"; + comboBoxUser.ValueMember = "id_users"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private async void btnAdd_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxDate.Text) || string.IsNullOrEmpty(textBoxDelivery.Text) || string.IsNullOrEmpty(textBoxCode.Text)) + { + MessageBox.Show("Заполните все обязательные поля!"); + return; + } + + + + DB db = new DB(); + + try + { + db.openConnection(); + + string query = "INSERT INTO Orders (order_date, delivery_date, pickup_point_id, user_initials_id, Orders.code, orderstatus_id)" + + "VALUES (@od, @dd, @pp, (SELECT id_users FROM users WHERE id_users = @user), @code, 1)"; + + using (MySqlCommand command = new MySqlCommand(query, db.getConnection())) + { + command.Parameters.AddWithValue("@od", textBoxDate.Text); + command.Parameters.AddWithValue("@pp", comboBoxPoint.SelectedValue.ToString()); + command.Parameters.AddWithValue("@user", comboBoxUser.SelectedValue.ToString()); + command.Parameters.AddWithValue("@dd", textBoxDelivery.Text); + command.Parameters.AddWithValue("@code", textBoxCode.Text); + + + + int rowsAffected = await command.ExecuteNonQueryAsync(); + + if (rowsAffected > 0) + { + MessageBox.Show("Заказ успешно добавлен!"); + DialogResult = DialogResult.OK; + this.Close(); + AdmOrder ado = new AdmOrder(); + ado.Show(); + } + else + { + MessageBox.Show("Ошибка при добавлении заказа."); + } + } + } + catch (MySqlException ex) + { + if (ex.Number == 1452) + { + MessageBox.Show("Указанная категория не существует. Введите допустимое название категории."); + } + else + { + MessageBox.Show("Ошибка базы данных: " + ex.Message); + } + } + catch (Exception ex) + { + MessageBox.Show("Произошла: " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Hide(); + AdmOrder ador = new AdmOrder(); + ador.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/AdmAddOrder.resx b/AdmAddOrder.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdmAddOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AdmEditOrder.Designer.cs b/AdmEditOrder.Designer.cs new file mode 100644 index 0000000..d8c596e --- /dev/null +++ b/AdmEditOrder.Designer.cs @@ -0,0 +1,175 @@ +namespace demMalyhin +{ + partial class AdmEditOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxId = new System.Windows.Forms.TextBox(); + this.textBoxDelivery = new System.Windows.Forms.TextBox(); + this.textBoxDate = new System.Windows.Forms.TextBox(); + this.comboBoxStatus = new System.Windows.Forms.ComboBox(); + this.comboBoxPoint = new System.Windows.Forms.ComboBox(); + this.button3 = new System.Windows.Forms.Button(); + this.label11 = new System.Windows.Forms.Label(); + this.textBoxCode = new System.Windows.Forms.TextBox(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxId + // + this.textBoxId.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxId.Location = new System.Drawing.Point(94, 116); + this.textBoxId.Name = "textBoxId"; + this.textBoxId.ReadOnly = true; + this.textBoxId.Size = new System.Drawing.Size(194, 20); + this.textBoxId.TabIndex = 43; + // + // textBoxDelivery + // + this.textBoxDelivery.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDelivery.Location = new System.Drawing.Point(94, 168); + this.textBoxDelivery.Name = "textBoxDelivery"; + this.textBoxDelivery.Size = new System.Drawing.Size(194, 20); + this.textBoxDelivery.TabIndex = 42; + // + // textBoxDate + // + this.textBoxDate.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDate.Location = new System.Drawing.Point(94, 142); + this.textBoxDate.Name = "textBoxDate"; + this.textBoxDate.Size = new System.Drawing.Size(194, 20); + this.textBoxDate.TabIndex = 41; + // + // comboBoxStatus + // + this.comboBoxStatus.FormattingEnabled = true; + this.comboBoxStatus.Location = new System.Drawing.Point(134, 247); + this.comboBoxStatus.Name = "comboBoxStatus"; + this.comboBoxStatus.Size = new System.Drawing.Size(121, 21); + this.comboBoxStatus.TabIndex = 39; + // + // comboBoxPoint + // + this.comboBoxPoint.FormattingEnabled = true; + this.comboBoxPoint.Location = new System.Drawing.Point(134, 220); + this.comboBoxPoint.Name = "comboBoxPoint"; + this.comboBoxPoint.Size = new System.Drawing.Size(121, 21); + this.comboBoxPoint.TabIndex = 38; + // + // button3 + // + this.button3.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button3.Location = new System.Drawing.Point(153, 286); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 44; + this.button3.Text = "Сохранить"; + this.button3.UseVisualStyleBackColor = false; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(88, 46); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(213, 33); + this.label11.TabIndex = 45; + this.label11.Text = "Редактирование"; + // + // textBoxCode + // + this.textBoxCode.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxCode.Location = new System.Drawing.Point(94, 194); + this.textBoxCode.Name = "textBoxCode"; + this.textBoxCode.Size = new System.Drawing.Size(194, 20); + this.textBoxCode.TabIndex = 46; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(273, 399); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 47; + this.btnBack.Text = "Назад"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(348, 12); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 48; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AdmEditOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(395, 450); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.textBoxCode); + this.Controls.Add(this.label11); + this.Controls.Add(this.button3); + this.Controls.Add(this.textBoxId); + this.Controls.Add(this.textBoxDelivery); + this.Controls.Add(this.textBoxDate); + this.Controls.Add(this.comboBoxStatus); + this.Controls.Add(this.comboBoxPoint); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AdmEditOrder"; + this.Text = "AdmEditOrder"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxId; + private System.Windows.Forms.TextBox textBoxDelivery; + private System.Windows.Forms.TextBox textBoxDate; + private System.Windows.Forms.ComboBox comboBoxStatus; + private System.Windows.Forms.ComboBox comboBoxPoint; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox textBoxCode; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AdmEditOrder.cs b/AdmEditOrder.cs new file mode 100644 index 0000000..12abdf5 --- /dev/null +++ b/AdmEditOrder.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class AdmEditOrder : Form + { + private string productId; + public AdmEditOrder(string productId) + { + InitializeComponent(); + LoadProductData(productId); + LoadPickup(); + LoadStatus(); + } + + private void LoadProductData(string productId) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT order_date, delivery_date, pickup_point_id, user_initials_id, code, orderstatus_id FROM Orders WHERE id_Orders = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", productId); + using (MySqlDataReader reader = command.ExecuteReader()) + { + if (reader.Read()) + { + textBoxId.Text = productId; + textBoxDate.Text = reader["order_date"].ToString(); + textBoxDelivery.Text = reader["delivery_date"].ToString(); + comboBoxPoint.Text = reader["pickup_point_id"].ToString(); + textBoxCode.Text = reader["code"].ToString(); + comboBoxStatus.Text = reader["orderstatus_id"].ToString(); + } + else + { + MessageBox.Show("Продукт с указанным ID не найден."); + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке данных продукта: " + ex.Message); + } + } + + private void LoadPickup() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idpickup_points, pickup_points.index FROM pickup_points"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable categoryTable = new DataTable(); + categoryTable.Load(reader); + + comboBoxPoint.DataSource = categoryTable; + comboBoxPoint.DisplayMember = "index"; + comboBoxPoint.ValueMember = "idpickup_points"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void LoadStatus() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_OrderStatus, status_name FROM OrderStatus"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable statusTable = new DataTable(); + statusTable.Load(reader); + + comboBoxStatus.DataSource = statusTable; + comboBoxStatus.DisplayMember = "status_name"; + comboBoxStatus.ValueMember = "id_OrderStatus"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void button3_Click(object sender, EventArgs e) + { + try + { + + object supplierId = comboBoxStatus.SelectedValue; + object manufacturerId = comboBoxPoint.SelectedValue; + + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "UPDATE Orders SET order_date = @od, delivery_date = @dd, pickup_point_id = @point, orderstatus_id = @status, Orders.code = @code WHERE id_Orders = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", textBoxId.Text); + command.Parameters.AddWithValue("@od", textBoxDate.Text); + command.Parameters.AddWithValue("@dd", textBoxDelivery.Text); + command.Parameters.AddWithValue("@code", textBoxCode.Text); + command.Parameters.AddWithValue("@status", supplierId); + command.Parameters.AddWithValue("@point", manufacturerId); + + + int rowsAffected = command.ExecuteNonQuery(); + if (rowsAffected > 0) + { + MessageBox.Show("Данные продукта успешно обновлены."); + this.DialogResult = DialogResult.OK; + this.Close(); + } + else + { + MessageBox.Show("Не удалось обновить данные продукта."); + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при сохранении данных продукта: " + ex.Message); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Close(); + AdmOrder admeo = new AdmOrder(); + admeo.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/AdmEditOrder.resx b/AdmEditOrder.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdmEditOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AdmEditProduct.Designer.cs b/AdmEditProduct.Designer.cs new file mode 100644 index 0000000..5f5ba3c --- /dev/null +++ b/AdmEditProduct.Designer.cs @@ -0,0 +1,268 @@ +namespace demMalyhin +{ + partial class AdmEditProduct + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.comboBoxSupplier = new System.Windows.Forms.ComboBox(); + this.comboBoxCategory = new System.Windows.Forms.ComboBox(); + this.comboBoxManufacturer = new System.Windows.Forms.ComboBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.pictureBoxEditProduct = new System.Windows.Forms.PictureBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.openFileDialogImage = new System.Windows.Forms.OpenFileDialog(); + this.button3 = new System.Windows.Forms.Button(); + this.textBoxArticle = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxQuantity = new System.Windows.Forms.TextBox(); + this.textBoxSale = new System.Windows.Forms.TextBox(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEditProduct)).BeginInit(); + this.SuspendLayout(); + // + // comboBoxSupplier + // + this.comboBoxSupplier.FormattingEnabled = true; + this.comboBoxSupplier.Location = new System.Drawing.Point(193, 151); + this.comboBoxSupplier.Name = "comboBoxSupplier"; + this.comboBoxSupplier.Size = new System.Drawing.Size(121, 21); + this.comboBoxSupplier.TabIndex = 0; + // + // comboBoxCategory + // + this.comboBoxCategory.FormattingEnabled = true; + this.comboBoxCategory.Location = new System.Drawing.Point(193, 205); + this.comboBoxCategory.Name = "comboBoxCategory"; + this.comboBoxCategory.Size = new System.Drawing.Size(121, 21); + this.comboBoxCategory.TabIndex = 1; + // + // comboBoxManufacturer + // + this.comboBoxManufacturer.FormattingEnabled = true; + this.comboBoxManufacturer.Location = new System.Drawing.Point(193, 178); + this.comboBoxManufacturer.Name = "comboBoxManufacturer"; + this.comboBoxManufacturer.Size = new System.Drawing.Size(121, 21); + this.comboBoxManufacturer.TabIndex = 2; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxPrice.Location = new System.Drawing.Point(153, 125); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.Size = new System.Drawing.Size(194, 20); + this.textBoxPrice.TabIndex = 29; + // + // textBoxName + // + this.textBoxName.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxName.Location = new System.Drawing.Point(153, 99); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(194, 20); + this.textBoxName.TabIndex = 27; + // + // pictureBoxEditProduct + // + this.pictureBoxEditProduct.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxEditProduct.Location = new System.Drawing.Point(113, 347); + this.pictureBoxEditProduct.Name = "pictureBoxEditProduct"; + this.pictureBoxEditProduct.Size = new System.Drawing.Size(162, 111); + this.pictureBoxEditProduct.TabIndex = 33; + this.pictureBoxEditProduct.TabStop = false; + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button1.Location = new System.Drawing.Point(281, 347); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 37); + this.button1.TabIndex = 34; + this.button1.Text = "Удалить фото"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.btnEditRemoveImage_Click); + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button2.Location = new System.Drawing.Point(281, 390); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 47); + this.button2.TabIndex = 35; + this.button2.Text = "Изменить фото"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.btnEditChooseImage_Click); + // + // openFileDialogImage + // + this.openFileDialogImage.FileName = "openFileDialog1"; + // + // button3 + // + this.button3.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button3.Location = new System.Drawing.Point(227, 468); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 36; + this.button3.Text = "Сохранить"; + this.button3.UseVisualStyleBackColor = false; + this.button3.Click += new System.EventHandler(this.btnSave_Click); + // + // textBoxArticle + // + this.textBoxArticle.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxArticle.Location = new System.Drawing.Point(153, 73); + this.textBoxArticle.Name = "textBoxArticle"; + this.textBoxArticle.ReadOnly = true; + this.textBoxArticle.Size = new System.Drawing.Size(194, 20); + this.textBoxArticle.TabIndex = 37; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(143, 9); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(213, 33); + this.label11.TabIndex = 39; + this.label11.Text = "Редактирование"; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDesc.Location = new System.Drawing.Point(153, 285); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.Size = new System.Drawing.Size(194, 20); + this.textBoxDesc.TabIndex = 28; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxUnit.Location = new System.Drawing.Point(153, 262); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.Size = new System.Drawing.Size(194, 20); + this.textBoxUnit.TabIndex = 30; + // + // textBoxQuantity + // + this.textBoxQuantity.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxQuantity.Location = new System.Drawing.Point(153, 311); + this.textBoxQuantity.Name = "textBoxQuantity"; + this.textBoxQuantity.Size = new System.Drawing.Size(194, 20); + this.textBoxQuantity.TabIndex = 32; + // + // textBoxSale + // + this.textBoxSale.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxSale.Location = new System.Drawing.Point(153, 243); + this.textBoxSale.Name = "textBoxSale"; + this.textBoxSale.Size = new System.Drawing.Size(194, 20); + this.textBoxSale.TabIndex = 31; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(391, 461); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 40; + this.btnBack.Text = "Назад"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(466, 12); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 41; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AdmEditProduct + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(502, 510); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.label11); + this.Controls.Add(this.textBoxArticle); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.pictureBoxEditProduct); + this.Controls.Add(this.textBoxQuantity); + this.Controls.Add(this.textBoxSale); + this.Controls.Add(this.textBoxUnit); + this.Controls.Add(this.textBoxPrice); + this.Controls.Add(this.textBoxDesc); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.comboBoxManufacturer); + this.Controls.Add(this.comboBoxCategory); + this.Controls.Add(this.comboBoxSupplier); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AdmEditProduct"; + this.Text = "AdmEditProduct"; + this.Load += new System.EventHandler(this.AdmEditProduct_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEditProduct)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox comboBoxSupplier; + private System.Windows.Forms.ComboBox comboBoxCategory; + private System.Windows.Forms.ComboBox comboBoxManufacturer; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.PictureBox pictureBoxEditProduct; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.OpenFileDialog openFileDialogImage; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.TextBox textBoxArticle; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxQuantity; + private System.Windows.Forms.TextBox textBoxSale; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AdmEditProduct.cs b/AdmEditProduct.cs new file mode 100644 index 0000000..e97532c --- /dev/null +++ b/AdmEditProduct.cs @@ -0,0 +1,291 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class AdmEditProduct : Form + { + private string productId; + + private byte[] imageData = null; + + public AdmEditProduct(string productId) + { + InitializeComponent(); + LoadSuppliers(); + LoadCategories(); + LoadManufacturers(); + LoadProductData(productId); + + } + + private void LoadProductData(string productId) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT product_name, category_id, supplier_id, manufacturer_id, price, quantity_in_stock, description, unit_type, sale_percent, photo FROM products WHERE article_product = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", productId); + using (MySqlDataReader reader = command.ExecuteReader()) + { + if (reader.Read()) + { + textBoxArticle.Text = productId; + textBoxName.Text = reader["product_name"].ToString(); + comboBoxCategory.Text = reader["category_id"].ToString(); + comboBoxSupplier.Text = reader["supplier_id"].ToString(); + comboBoxManufacturer.Text = reader["manufacturer_id"].ToString(); + textBoxPrice.Text = reader["price"].ToString(); + textBoxQuantity.Text = reader["quantity_in_stock"].ToString(); + textBoxDesc.Text = reader["description"].ToString(); + textBoxUnit.Text = reader["unit_type"].ToString(); + textBoxSale.Text = reader["sale_percent"].ToString(); + } + else + { + MessageBox.Show("Продукт с указанным ID не найден."); + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + if (reader["photo"] != DBNull.Value) + { + // Загружаем данные изображения из базы данных в класс-уровневую переменную imageData + this.imageData = (byte[])reader["photo"]; + using (MemoryStream ms = new MemoryStream(this.imageData)) + { + pictureBoxEditProduct.Image = Image.FromStream(ms); + pictureBoxEditProduct.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + this.imageData = null; // Убеждаемся, что imageData обнуляется, если фото нет + pictureBoxEditProduct.Image = null; // Или устанавливаем стандартную заглушку + // pictureBoxEditProduct.Image = Properties.Resources.picture; + } + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке данных продукта: " + ex.Message); + } + } + + private void btnEditChooseImage_Click(object sender, EventArgs e) + { + openFileDialogImage.Filter = "Image Files (*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg"; + openFileDialogImage.Title = "Выберите новое изображение товара"; + + if (openFileDialogImage.ShowDialog() == DialogResult.OK) + { + try + { + string filePath = openFileDialogImage.FileName; + pictureBoxEditProduct.Image = Image.FromFile(filePath); + pictureBoxEditProduct.SizeMode = PictureBoxSizeMode.Zoom; + + using (var ms = new MemoryStream()) + { + using (Image originalImage = Image.FromFile(filePath)) + { + originalImage.Save(ms, originalImage.RawFormat); + imageData = ms.ToArray(); + } + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + pictureBoxEditProduct.Image = null; + imageData = null; + } + } + } + + private void btnEditRemoveImage_Click(object sender, EventArgs e) + { + pictureBoxEditProduct.Image = null; + imageData = null; + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + + object supplierId = comboBoxSupplier.SelectedValue; + object manufacturerId = comboBoxManufacturer.SelectedValue; + object categoryId = comboBoxCategory.SelectedValue; + + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "UPDATE products SET product_name = @pr_name, category_id = @category_id, manufacturer_id = @manufacturer_id, unit_type = @unit, quantity_in_stock = @quantity, price = @price, supplier_id = @supplier_id, description = @desc, photo = @product_photo, sale_percent = @sale WHERE article_product = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", textBoxArticle.Text); + command.Parameters.AddWithValue("@pr_name", textBoxName.Text); + command.Parameters.AddWithValue("@desc", textBoxDesc.Text); + command.Parameters.AddWithValue("@sale", textBoxSale.Text); + command.Parameters.AddWithValue("@unit", textBoxUnit.Text); + command.Parameters.AddWithValue("@quantity", textBoxQuantity.Text); + command.Parameters.AddWithValue("@price", Convert.ToDecimal(textBoxPrice.Text)); + command.Parameters.AddWithValue("@supplier_id", supplierId); + command.Parameters.AddWithValue("@manufacturer_id", manufacturerId); + command.Parameters.AddWithValue("@category_id", categoryId); + + if (imageData != null) + { + // Если изображение было выбрано или изменено + command.Parameters.Add(new MySqlParameter("@product_photo", MySqlDbType.MediumBlob) { Value = imageData }); + } + else + { + // Если изображение удалено или не было выбрано + command.Parameters.Add(new MySqlParameter("@product_photo", MySqlDbType.MediumBlob) { Value = imageData }); + } + + int rowsAffected = command.ExecuteNonQuery(); + if (rowsAffected > 0) + { + MessageBox.Show("Данные продукта успешно обновлены."); + this.DialogResult = DialogResult.OK; + this.Close(); + } + else + { + MessageBox.Show("Не удалось обновить данные продукта."); + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при сохранении данных продукта: " + ex.Message); + } + } + + private void LoadCategories() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_Category, Category_name FROM Category"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable categoryTable = new DataTable(); + categoryTable.Load(reader); + + comboBoxCategory.DataSource = categoryTable; + comboBoxCategory.DisplayMember = "Category_name"; + comboBoxCategory.ValueMember = "id_Category"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void LoadSuppliers() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_Supplier, supplier_name FROM Supplier"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable suppTable = new DataTable(); + suppTable.Load(reader); + + comboBoxSupplier.DataSource = suppTable; + comboBoxSupplier.DisplayMember = "supplier_name"; + comboBoxSupplier.ValueMember = "id_Supplier"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void LoadManufacturers() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_Manufacturer, Manufacturer_name FROM Manufacturer"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + DataTable manuTable = new DataTable(); + manuTable.Load(reader); + + comboBoxManufacturer.DataSource = manuTable; + comboBoxManufacturer.DisplayMember = "Manufacturer_name"; + comboBoxManufacturer.ValueMember = "id_Manufacturer"; + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке категорий: " + ex.Message); + } + } + + private void AdmEditProduct_Load(object sender, EventArgs e) + { + + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Close(); + AdmMainForm amf = new AdmMainForm(); + amf.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } + + +} diff --git a/AdmEditProduct.resx b/AdmEditProduct.resx new file mode 100644 index 0000000..203b438 --- /dev/null +++ b/AdmEditProduct.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AdmMainForm.Designer.cs b/AdmMainForm.Designer.cs new file mode 100644 index 0000000..611180d --- /dev/null +++ b/AdmMainForm.Designer.cs @@ -0,0 +1,531 @@ +namespace demMalyhin +{ + partial class AdmMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.labelFIO = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.SaleLabel = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBoxFP = new System.Windows.Forms.TextBox(); + this.textBoxStock = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxSup = new System.Windows.Forms.TextBox(); + this.textBoxManuf = new System.Windows.Forms.TextBox(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.StockLabel = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.PriceLabel = new System.Windows.Forms.Label(); + this.SupplierLabel = new System.Windows.Forms.Label(); + this.ManufacturerLabel = new System.Windows.Forms.Label(); + this.DescriptionLabel = new System.Windows.Forms.Label(); + this.NameLabel = new System.Windows.Forms.Label(); + this.CategoryLabel = new System.Windows.Forms.Label(); + this.pictureBoxPhoto = new System.Windows.Forms.PictureBox(); + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.textBoxSearch = new System.Windows.Forms.TextBox(); + this.comboBoxSort = new System.Windows.Forms.ComboBox(); + this.comboBoxFilter = new System.Windows.Forms.ComboBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.OrdersBtn = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Chartreuse; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.Location = new System.Drawing.Point(586, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(90, 15); + this.label1.TabIndex = 0; + this.label1.Text = "ФИО Клиента -"; + // + // labelFIO + // + this.labelFIO.AutoSize = true; + this.labelFIO.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelFIO.Location = new System.Drawing.Point(676, 9); + this.labelFIO.Name = "labelFIO"; + this.labelFIO.Size = new System.Drawing.Size(0, 15); + this.labelFIO.TabIndex = 1; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(28, 538); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 3; + this.btnBack.Text = "Главное меню"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Chartreuse; + this.label2.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label2.Location = new System.Drawing.Point(258, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(313, 33); + this.label2.TabIndex = 4; + this.label2.Text = "Каталог администратора"; + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.pictureBoxPhoto); + this.panel1.Location = new System.Drawing.Point(28, 314); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(789, 218); + this.panel1.TabIndex = 5; + // + // panel3 + // + this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.SaleLabel); + this.panel3.Location = new System.Drawing.Point(623, 14); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(142, 189); + this.panel3.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label4.Location = new System.Drawing.Point(29, 51); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(73, 28); + this.label4.TabIndex = 4; + this.label4.Text = "Действующая\r\nскидка"; + this.label4.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // SaleLabel + // + this.SaleLabel.AutoSize = true; + this.SaleLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SaleLabel.Location = new System.Drawing.Point(53, 87); + this.SaleLabel.Name = "SaleLabel"; + this.SaleLabel.Size = new System.Drawing.Size(0, 14); + this.SaleLabel.TabIndex = 2; + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.textBoxFP); + this.panel2.Controls.Add(this.textBoxStock); + this.panel2.Controls.Add(this.textBoxUnit); + this.panel2.Controls.Add(this.textBoxPrice); + this.panel2.Controls.Add(this.textBoxSup); + this.panel2.Controls.Add(this.textBoxManuf); + this.panel2.Controls.Add(this.textBoxDesc); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.StockLabel); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.PriceLabel); + this.panel2.Controls.Add(this.SupplierLabel); + this.panel2.Controls.Add(this.ManufacturerLabel); + this.panel2.Controls.Add(this.DescriptionLabel); + this.panel2.Controls.Add(this.NameLabel); + this.panel2.Controls.Add(this.CategoryLabel); + this.panel2.Location = new System.Drawing.Point(212, 14); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(395, 189); + this.panel2.TabIndex = 1; + // + // textBoxFP + // + this.textBoxFP.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxFP.Location = new System.Drawing.Point(247, 113); + this.textBoxFP.Name = "textBoxFP"; + this.textBoxFP.ReadOnly = true; + this.textBoxFP.Size = new System.Drawing.Size(95, 20); + this.textBoxFP.TabIndex = 15; + // + // textBoxStock + // + this.textBoxStock.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxStock.Location = new System.Drawing.Point(148, 158); + this.textBoxStock.Name = "textBoxStock"; + this.textBoxStock.ReadOnly = true; + this.textBoxStock.Size = new System.Drawing.Size(194, 20); + this.textBoxStock.TabIndex = 14; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxUnit.Location = new System.Drawing.Point(148, 135); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.ReadOnly = true; + this.textBoxUnit.Size = new System.Drawing.Size(194, 20); + this.textBoxUnit.TabIndex = 13; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxPrice.Location = new System.Drawing.Point(148, 113); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.ReadOnly = true; + this.textBoxPrice.Size = new System.Drawing.Size(95, 20); + this.textBoxPrice.TabIndex = 12; + // + // textBoxSup + // + this.textBoxSup.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxSup.Location = new System.Drawing.Point(148, 87); + this.textBoxSup.Name = "textBoxSup"; + this.textBoxSup.ReadOnly = true; + this.textBoxSup.Size = new System.Drawing.Size(194, 20); + this.textBoxSup.TabIndex = 11; + // + // textBoxManuf + // + this.textBoxManuf.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxManuf.Location = new System.Drawing.Point(148, 64); + this.textBoxManuf.Name = "textBoxManuf"; + this.textBoxManuf.ReadOnly = true; + this.textBoxManuf.Size = new System.Drawing.Size(194, 20); + this.textBoxManuf.TabIndex = 10; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDesc.Location = new System.Drawing.Point(148, 41); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.ReadOnly = true; + this.textBoxDesc.Size = new System.Drawing.Size(194, 20); + this.textBoxDesc.TabIndex = 9; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label3.Location = new System.Drawing.Point(131, 14); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 15); + this.label3.TabIndex = 8; + this.label3.Text = "I"; + // + // StockLabel + // + this.StockLabel.AutoSize = true; + this.StockLabel.BackColor = System.Drawing.Color.Chartreuse; + this.StockLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.StockLabel.Location = new System.Drawing.Point(14, 158); + this.StockLabel.Name = "StockLabel"; + this.StockLabel.Size = new System.Drawing.Size(112, 14); + this.StockLabel.TabIndex = 7; + this.StockLabel.Text = "Количество на складе:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Chartreuse; + this.label9.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label9.Location = new System.Drawing.Point(21, 135); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(104, 14); + this.label9.TabIndex = 6; + this.label9.Text = "Единица измерения:"; + // + // PriceLabel + // + this.PriceLabel.AutoSize = true; + this.PriceLabel.BackColor = System.Drawing.Color.Chartreuse; + this.PriceLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.PriceLabel.Location = new System.Drawing.Point(57, 113); + this.PriceLabel.Name = "PriceLabel"; + this.PriceLabel.Size = new System.Drawing.Size(69, 14); + this.PriceLabel.TabIndex = 5; + this.PriceLabel.Text = "Цена товара:"; + // + // SupplierLabel + // + this.SupplierLabel.AutoSize = true; + this.SupplierLabel.BackColor = System.Drawing.Color.Chartreuse; + this.SupplierLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SupplierLabel.Location = new System.Drawing.Point(63, 90); + this.SupplierLabel.Name = "SupplierLabel"; + this.SupplierLabel.Size = new System.Drawing.Size(63, 14); + this.SupplierLabel.TabIndex = 4; + this.SupplierLabel.Text = "Поставщик:"; + // + // ManufacturerLabel + // + this.ManufacturerLabel.AutoSize = true; + this.ManufacturerLabel.BackColor = System.Drawing.Color.Chartreuse; + this.ManufacturerLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.ManufacturerLabel.Location = new System.Drawing.Point(44, 67); + this.ManufacturerLabel.Name = "ManufacturerLabel"; + this.ManufacturerLabel.Size = new System.Drawing.Size(82, 14); + this.ManufacturerLabel.TabIndex = 3; + this.ManufacturerLabel.Text = "Производитель:"; + // + // DescriptionLabel + // + this.DescriptionLabel.AutoSize = true; + this.DescriptionLabel.BackColor = System.Drawing.Color.Chartreuse; + this.DescriptionLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.DescriptionLabel.Location = new System.Drawing.Point(34, 44); + this.DescriptionLabel.Name = "DescriptionLabel"; + this.DescriptionLabel.Size = new System.Drawing.Size(92, 14); + this.DescriptionLabel.TabIndex = 2; + this.DescriptionLabel.Text = "Описание товара:"; + // + // NameLabel + // + this.NameLabel.AutoSize = true; + this.NameLabel.BackColor = System.Drawing.Color.Chartreuse; + this.NameLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.NameLabel.Location = new System.Drawing.Point(157, 16); + this.NameLabel.Name = "NameLabel"; + this.NameLabel.Size = new System.Drawing.Size(112, 14); + this.NameLabel.TabIndex = 1; + this.NameLabel.Text = "Наименование товара"; + // + // CategoryLabel + // + this.CategoryLabel.AutoSize = true; + this.CategoryLabel.BackColor = System.Drawing.Color.Chartreuse; + this.CategoryLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.CategoryLabel.Location = new System.Drawing.Point(19, 16); + this.CategoryLabel.Name = "CategoryLabel"; + this.CategoryLabel.Size = new System.Drawing.Size(92, 14); + this.CategoryLabel.TabIndex = 0; + this.CategoryLabel.Text = "Категория товара"; + // + // pictureBoxPhoto + // + this.pictureBoxPhoto.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxPhoto.Location = new System.Drawing.Point(17, 14); + this.pictureBoxPhoto.Name = "pictureBoxPhoto"; + this.pictureBoxPhoto.Size = new System.Drawing.Size(174, 189); + this.pictureBoxPhoto.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxPhoto.TabIndex = 0; + this.pictureBoxPhoto.TabStop = false; + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(70, 85); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(691, 223); + this.DataGridViewProduct.TabIndex = 6; + this.DataGridViewProduct.Click += new System.EventHandler(this.dataGridViewProd_Click); + // + // textBoxSearch + // + this.textBoxSearch.BackColor = System.Drawing.Color.MediumSpringGreen; + this.textBoxSearch.Location = new System.Drawing.Point(28, 59); + this.textBoxSearch.Name = "textBoxSearch"; + this.textBoxSearch.Size = new System.Drawing.Size(455, 20); + this.textBoxSearch.TabIndex = 7; + this.textBoxSearch.TextChanged += new System.EventHandler(this.textBoxSearch_TextChanged); + // + // comboBoxSort + // + this.comboBoxSort.BackColor = System.Drawing.Color.MediumSpringGreen; + this.comboBoxSort.FormattingEnabled = true; + this.comboBoxSort.Location = new System.Drawing.Point(489, 59); + this.comboBoxSort.Name = "comboBoxSort"; + this.comboBoxSort.Size = new System.Drawing.Size(160, 21); + this.comboBoxSort.TabIndex = 8; + this.comboBoxSort.SelectedIndexChanged += new System.EventHandler(this.comboBoxSort_SelectedIndexChanged); + // + // comboBoxFilter + // + this.comboBoxFilter.BackColor = System.Drawing.Color.MediumSpringGreen; + this.comboBoxFilter.FormattingEnabled = true; + this.comboBoxFilter.Location = new System.Drawing.Point(657, 59); + this.comboBoxFilter.Name = "comboBoxFilter"; + this.comboBoxFilter.Size = new System.Drawing.Size(160, 21); + this.comboBoxFilter.TabIndex = 9; + this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.comboBoxFilter_SelectedIndexChanged); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button1.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.button1.Location = new System.Drawing.Point(241, 537); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(99, 39); + this.button1.TabIndex = 10; + this.button1.Text = "Добавить"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button2.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.button2.Location = new System.Drawing.Point(370, 537); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(141, 39); + this.button2.TabIndex = 11; + this.button2.Text = "Редактировать"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // btnDelete + // + this.btnDelete.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnDelete.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnDelete.Location = new System.Drawing.Point(537, 538); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(99, 39); + this.btnDelete.TabIndex = 12; + this.btnDelete.Text = "Удалить"; + this.btnDelete.UseVisualStyleBackColor = false; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // OrdersBtn + // + this.OrdersBtn.BackColor = System.Drawing.Color.MediumSpringGreen; + this.OrdersBtn.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.OrdersBtn.Location = new System.Drawing.Point(718, 538); + this.OrdersBtn.Name = "OrdersBtn"; + this.OrdersBtn.Size = new System.Drawing.Size(99, 39); + this.OrdersBtn.TabIndex = 13; + this.OrdersBtn.Text = "Заказы"; + this.OrdersBtn.UseVisualStyleBackColor = false; + this.OrdersBtn.Click += new System.EventHandler(this.OrdersBtn_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(12, 5); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 14; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AdmMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(840, 589); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.OrdersBtn); + this.Controls.Add(this.btnDelete); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.comboBoxFilter); + this.Controls.Add(this.comboBoxSort); + this.Controls.Add(this.textBoxSearch); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.panel1); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.labelFIO); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AdmMainForm"; + this.Text = "6"; + this.Load += new System.EventHandler(this.AdmMainForm_Load); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label labelFIO; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pictureBoxPhoto; + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Label StockLabel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label PriceLabel; + private System.Windows.Forms.Label SupplierLabel; + private System.Windows.Forms.Label ManufacturerLabel; + private System.Windows.Forms.Label DescriptionLabel; + private System.Windows.Forms.Label NameLabel; + private System.Windows.Forms.Label CategoryLabel; + private System.Windows.Forms.TextBox textBoxStock; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxSup; + private System.Windows.Forms.TextBox textBoxManuf; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label SaleLabel; + private System.Windows.Forms.TextBox textBoxFP; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox textBoxSearch; + private System.Windows.Forms.ComboBox comboBoxSort; + private System.Windows.Forms.ComboBox comboBoxFilter; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button OrdersBtn; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AdmMainForm.cs b/AdmMainForm.cs new file mode 100644 index 0000000..fd0bdea --- /dev/null +++ b/AdmMainForm.cs @@ -0,0 +1,446 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.Common; +using System.Diagnostics.Eventing.Reader; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace demMalyhin +{ + public partial class AdmMainForm : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + + public AdmMainForm() + { + InitializeComponent(); + LoadProdData(); + LoadSortOptions(); + LoadFilterOptions(); + } + + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT article_product AS `Артикул`, product_name AS `Название товара`, price AS `Цена`, supplier_name AS `Поставщик`, Manufacturer_name AS `Производитель`, Category_name AS `Категория`, sale_percent AS `Скидка`, unit_type AS `Единица измерения`, description AS `описание`, quantity_in_stock AS `Количество на складе`, photo AS `фото` FROM products LEFT JOIN Category ON products.category_id = Category.id_Category JOIN Supplier ON products.supplier_id = Supplier.id_Supplier JOIN Manufacturer ON products.manufacturer_id = Manufacturer.id_Manufacturer"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void dataGridViewProd_Click(object sender, EventArgs e) + { + textBoxDesc.Text = DataGridViewProduct.CurrentRow.Cells[8].Value.ToString(); + textBoxManuf.Text = DataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + textBoxSup.Text = DataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + textBoxPrice.Text = DataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + textBoxUnit.Text = DataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + textBoxStock.Text = DataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + NameLabel.Text = DataGridViewProduct.CurrentRow.Cells[1].Value.ToString(); + CategoryLabel.Text = DataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SaleLabel.Text = DataGridViewProduct.CurrentRow.Cells[6].Value.ToString() + "%"; + + try + { + object photoData = DataGridViewProduct.CurrentRow.Cells[10].Value; + if (photoData != DBNull.Value) + { + byte[] imageData = (byte[])photoData; + if (imageData != null && imageData.Length > 0) + { + using (MemoryStream ms = new MemoryStream(imageData)) + { + pictureBoxPhoto.Image = Image.FromStream(ms); + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message); + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + try + { + var currentRow = DataGridViewProduct.CurrentRow; + if (currentRow == null) return; + + Color defaultColor = SystemColors.Window; + textBoxPrice.BackColor = defaultColor; + textBoxSup.BackColor = defaultColor; + textBoxManuf.BackColor = defaultColor; + textBoxStock.BackColor = defaultColor; + textBoxPrice.ForeColor = Color.Black; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Regular); + textBoxFP.Text = ""; + decimal originalPrice = 0m; + int salePercent = 0; + int quantityInStock = 0; + + decimal.TryParse(currentRow.Cells[2].Value?.ToString(), out originalPrice); + int.TryParse(currentRow.Cells[6].Value?.ToString(), out salePercent); + int.TryParse(currentRow.Cells[9].Value?.ToString(), out quantityInStock); + + if (salePercent > 15) + { + Color highDiscountColor = ColorTranslator.FromHtml("#2E8B57"); + textBoxPrice.BackColor = highDiscountColor; + textBoxSup.BackColor = highDiscountColor; + textBoxManuf.BackColor = highDiscountColor; + textBoxStock.BackColor = highDiscountColor; + textBoxDesc.BackColor = highDiscountColor; + textBoxFP.BackColor = highDiscountColor; + textBoxUnit.BackColor = highDiscountColor; + panel3.BackColor = highDiscountColor; + + } + + else + { + textBoxPrice.BackColor = Color.White; + textBoxSup.BackColor = Color.White; + textBoxManuf.BackColor = Color.White; + textBoxStock.BackColor = Color.White; + textBoxDesc.BackColor = Color.White; + textBoxFP.BackColor = Color.White; + textBoxUnit.BackColor = Color.White; + panel3.BackColor = Color.White; + } + + if (salePercent > 0) + { + decimal finalPrice = originalPrice * (1 - (decimal)salePercent / 100); + textBoxPrice.Text = $"{originalPrice:N2}"; + textBoxPrice.ForeColor = Color.Red; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Strikeout); + textBoxFP.Text = $"{finalPrice:N2}"; + textBoxFP.ForeColor = Color.Black; + textBoxFP.Font = new Font(textBoxFP.Font, FontStyle.Regular); + } + else + { + textBoxPrice.Text = $"{originalPrice:N2}"; + } + if (quantityInStock <= 0) + { + textBoxStock.BackColor = Color.LightBlue; + } + + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при обработке данных товара: " + ex.Message); + } + } + + private void LoadSortOptions() + { + comboBoxSort.Items.Add("По умолчанию"); + comboBoxSort.Items.Add("Название (А-Я)"); + comboBoxSort.Items.Add("Название (Я-А)"); + comboBoxSort.Items.Add("Цена (возрастающая)"); + comboBoxSort.Items.Add("Цена (убывающая)"); + + comboBoxSort.SelectedIndex = 0; + } + + private void comboBoxSort_SelectedIndexChanged(object sender, EventArgs e) + { + string sortOption = comboBoxSort.SelectedItem.ToString(); + + switch (sortOption) + { + case "По умолчанию": + bindingSource.Sort = ""; + break; + case "Название (А-Я)": + bindingSource.Sort = "Название товара ASC"; + break; + case "Название (Я-А)": + bindingSource.Sort = "Название товара DESC"; + break; + case "Цена (возрастающая)": + bindingSource.Sort = "Цена ASC"; + break; + case "Цена (убывающая)": + bindingSource.Sort = "Цена DESC"; + break; + } + + } + + private void LoadFilterOptions() + { + comboBoxFilter.Items.Add("По умолчанию"); + comboBoxFilter.Items.Add("Мужская обувь"); + comboBoxFilter.Items.Add("Женская обувь"); + + comboBoxSort.SelectedIndex = 0; + + } + + private void comboBoxFilter_SelectedIndexChanged(object sender, EventArgs e) + { + string filterOption = comboBoxFilter.SelectedItem.ToString().Trim(); + + switch (filterOption) + { + case "По умолчанию": + bindingSource.Filter = ""; + break; + + case "Мужская обувь": + bindingSource.Filter = "[Категория] = 'Мужская обувь'"; + break; + + case "Женская обувь": + bindingSource.Filter = "[Категория] = 'Женская обувь'"; + break; + + default: + bindingSource.Filter = ""; + break; + } + } + + private void textBoxSearch_TextChanged(object sender, EventArgs e) + { + string searchText = textBoxSearch.Text.Trim(); + + if (string.IsNullOrEmpty(searchText)) + { + bindingSource.Filter = ""; + } + else + { + string s = searchText.Replace("'", "''"); + string pattern = string.Format("%{0}%", s); + + bindingSource.Filter = string.Format( + "[Артикул] LIKE '{0}' OR [Название товара] LIKE '{0}' OR [Поставщик] LIKE '{0}' OR [Производитель] LIKE '{0}' OR [Категория] LIKE '{0}' OR [Единица измерения] LIKE '{0}' OR " + + "Convert([Цена], 'System.String') LIKE '{0}' OR Convert([Скидка], 'System.String') LIKE '{0}' OR Convert([Количество на складе], 'System.String') LIKE '{0}'", + pattern); + } + } + + private void AdmMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = LoginForm.ClientSurname + " " + LoginForm.ClientName + " " + LoginForm.ClientPatronymic; + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Hide(); + LoginForm log = new LoginForm(); + log.Show(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + AddAdmProduct addProductForm = new AddAdmProduct(); + DialogResult result = addProductForm.ShowDialog(); + if (result == DialogResult.OK) + { + LoadProdData(); + } + } + + private void button2_Click(object sender, EventArgs e) + { + if (DataGridViewProduct.SelectedRows.Count > 0) + { + string articleToEdit = Convert.ToString(DataGridViewProduct.SelectedRows[0].Cells["Артикул"].Value); + + this.Hide(); + + AdmEditProduct editProductForm = new AdmEditProduct(articleToEdit); + + DialogResult result = editProductForm.ShowDialog(); + + + if (result == DialogResult.OK) + { + LoadProdData(); + } + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для редактирования."); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + if (DataGridViewProduct.SelectedRows.Count > 0) + { + int rowIndex = DataGridViewProduct.SelectedRows[0].Index; + + string idToDelete = Convert.ToString(DataGridViewProduct.SelectedRows[0].Cells["Артикул"].Value); + + if (IsProductInOrders(idToDelete)) + { + MessageBox.Show( + "Невозможно удалить товар, так как он участвует в существующих заказах.", + "Предупреждение", + MessageBoxButtons.OK, + MessageBoxIcon.Warning + ); + return; // Прекращаем выполнение, если товар найден в заказах + } + + DialogResult result = MessageBox.Show( + "Вы действительно хотите удалить товар с артикулом '" + idToDelete + "'?", + "Подтверждение удаления", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question // Используем иконку вопроса + ); + + // Проверяем, нажал ли пользователь "Да" + if (result == DialogResult.Yes) + { + // Если пользователь подтвердил, вызываем метод удаления + DeleteData(idToDelete); + } + + + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для удаления."); + } + } + private void DeleteData(string idToDelete) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "DELETE FROM products WHERE article_product = @art"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@art", idToDelete); + + int rowsAffected = command.ExecuteNonQuery(); + + if (rowsAffected > 0) + { + MessageBox.Show("Запись успешно удалена."); + LoadProdData(); + } + else + { + MessageBox.Show("Не удалось удалить запись."); + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса удаления: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка при удалении: " + ex.Message); + } + } + + private bool IsProductInOrders(string productArticle) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + // Предполагаем, что в таблице orderitems столбец с артикулом товара называется 'product_article' + string query = "SELECT COUNT(*) FROM OrderItems WHERE product_article = @art"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@art", productArticle); + + // ExecuteScalar возвращает первый столбец первой строки в результирующем наборе + // или null, если результирующий набор пуст. + // В нашем случае, COUNT(*) всегда вернет число. + long count = (long)command.ExecuteScalar(); + + return count > 0; // Если count > 0, значит товар участвует в заказах + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при проверке наличия товара в заказах: " + ex.Message, "Ошибка базы данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; // Возвращаем true, чтобы предотвратить удаление при ошибке, для безопасности + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка при проверке наличия товара в заказах: " + ex.Message, "Общая ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; // Возвращаем true, чтобы предотвратить удаление при ошибке, для безопасности + } + } + + private void OrdersBtn_Click(object sender, EventArgs e) + { + this.Hide(); + AdmOrder ao = new AdmOrder(); + ao.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} + + + diff --git a/AdmMainForm.resx b/AdmMainForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdmMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AdmOrder.Designer.cs b/AdmOrder.Designer.cs new file mode 100644 index 0000000..5132316 --- /dev/null +++ b/AdmOrder.Designer.cs @@ -0,0 +1,160 @@ +namespace demMalyhin +{ + partial class AdmOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnDelete = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.label2 = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.SuspendLayout(); + // + // btnDelete + // + this.btnDelete.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnDelete.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnDelete.Location = new System.Drawing.Point(501, 483); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(99, 39); + this.btnDelete.TabIndex = 25; + this.btnDelete.Text = "Удалить"; + this.btnDelete.UseVisualStyleBackColor = false; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button2.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.button2.Location = new System.Drawing.Point(354, 483); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(141, 39); + this.button2.TabIndex = 24; + this.button2.Text = "Редактировать"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.MediumSpringGreen; + this.button1.Font = new System.Drawing.Font("Times New Roman", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.button1.Location = new System.Drawing.Point(248, 483); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(99, 39); + this.button1.TabIndex = 23; + this.button1.Text = "Добавить"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.DataGridViewProduct.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(66, 52); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(691, 425); + this.DataGridViewProduct.TabIndex = 19; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Chartreuse; + this.label2.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label2.Location = new System.Drawing.Point(254, 4); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(301, 33); + this.label2.TabIndex = 17; + this.label2.Text = "Заказы администратора"; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(86, 483); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 16; + this.btnBack.Text = "Каталог"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(810, 12); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 26; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // AdmOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(846, 532); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnDelete); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnBack); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "AdmOrder"; + this.Text = "AdmOrder"; + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/AdmOrder.cs b/AdmOrder.cs new file mode 100644 index 0000000..db706cd --- /dev/null +++ b/AdmOrder.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.Common; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class AdmOrder : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + public AdmOrder() + { + InitializeComponent(); + LoadProdData(); + } + + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_Orders AS `Идентификатор`, order_date AS `Дата заказа`, delivery_date AS `Дата доставки`, pickup_points.index AS `Почтовый индекс`, pickup_points.street AS `Улица`, pickup_points.city AS `Город`, pickup_points.house_number AS `Номер здания`, users.Surname AS `Фамилия клиента`, users.Name AS `Имя клиента`, users.Patronymic AS `Отчество`, Orders.code AS `Код заказа`, OrderStatus.status_name AS `Статус заказа` FROM Orders LEFT JOIN pickup_points ON Orders.pickup_point_id = pickup_points.idpickup_points JOIN users ON Orders.user_initials_id = users.id_users JOIN OrderStatus ON Orders.orderstatus_id = OrderStatus.id_OrderStatus"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void button1_Click(object sender, EventArgs e) + { + this.Close(); + AdmAddOrder addProductForm = new AdmAddOrder(); + DialogResult result = addProductForm.ShowDialog(); + if (result == DialogResult.OK) + { + LoadProdData(); + } + } + + private void button2_Click(object sender, EventArgs e) + { + if (DataGridViewProduct.SelectedRows.Count > 0) + { + string articleToEdit = Convert.ToString(DataGridViewProduct.SelectedRows[0].Cells["Идентификатор"].Value); + this.Close(); + + + + AdmEditOrder editProductForm = new AdmEditOrder(articleToEdit); + + DialogResult result = editProductForm.ShowDialog(); + + + if (result == DialogResult.OK) + { + LoadProdData(); + } + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для редактирования."); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Close(); + AdmMainForm mainForm = new AdmMainForm(); + mainForm.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void btnDelete_Click(object sender, EventArgs e) + { + if (DataGridViewProduct.SelectedRows.Count > 0) + { + int rowIndex = DataGridViewProduct.SelectedRows[0].Index; + + string idToDelete = Convert.ToString(DataGridViewProduct.SelectedRows[0].Cells["Идентификатор"].Value); + + + + DialogResult result = MessageBox.Show( + "Вы действительно хотите удалить заказ с идентификатором '" + idToDelete + "'?", + "Подтверждение удаления", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question // Используем иконку вопроса + ); + + // Проверяем, нажал ли пользователь "Да" + if (result == DialogResult.Yes) + { + // Если пользователь подтвердил, вызываем метод удаления + DeleteData(idToDelete); + } + + + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для удаления."); + } + } + private void DeleteData(string idToDelete) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "DELETE FROM Orders WHERE id_Orders = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", idToDelete); + + int rowsAffected = command.ExecuteNonQuery(); + + if (rowsAffected > 0) + { + MessageBox.Show("Запись успешно удалена."); + LoadProdData(); + } + else + { + MessageBox.Show("Не удалось удалить запись."); + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса удаления: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка при удалении: " + ex.Message); + } + } + } +} diff --git a/AdmOrder.resx b/AdmOrder.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdmOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/App.config b/App.config new file mode 100644 index 0000000..abb8196 --- /dev/null +++ b/App.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DB.cs b/DB.cs new file mode 100644 index 0000000..4531bd2 --- /dev/null +++ b/DB.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + internal class DB + { + MySqlConnection connection = new MySqlConnection("server=cfif31.ru;port=3306;username=ISPr25-21_MalykhinID;password=ISPr25-21_MalykhinID;database=ISPr25-21_MalykhinID_shoestore"); + + public void openConnection() + { + if (connection.State == System.Data.ConnectionState.Closed) + connection.Open(); + } + public void closeConnection() + { + if (connection.State == System.Data.ConnectionState.Open) + connection.Close(); + } + public MySqlConnection getConnection() + { + return connection; + } + } +} diff --git a/GuestMainForm.Designer.cs b/GuestMainForm.Designer.cs new file mode 100644 index 0000000..948b2a1 --- /dev/null +++ b/GuestMainForm.Designer.cs @@ -0,0 +1,406 @@ +namespace demMalyhin +{ + partial class GuestMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.SaleLabel = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBoxFP = new System.Windows.Forms.TextBox(); + this.textBoxStock = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxSup = new System.Windows.Forms.TextBox(); + this.textBoxManuf = new System.Windows.Forms.TextBox(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.StockLabel = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.PriceLabel = new System.Windows.Forms.Label(); + this.SupplierLabel = new System.Windows.Forms.Label(); + this.ManufacturerLabel = new System.Windows.Forms.Label(); + this.DescriptionLabel = new System.Windows.Forms.Label(); + this.NameLabel = new System.Windows.Forms.Label(); + this.CategoryLabel = new System.Windows.Forms.Label(); + this.pictureBoxPhoto = new System.Windows.Forms.PictureBox(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + this.label11 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).BeginInit(); + this.SuspendLayout(); + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(52, 58); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(748, 223); + this.DataGridViewProduct.TabIndex = 8; + this.DataGridViewProduct.Click += new System.EventHandler(this.dataGridViewProd_Click); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.pictureBoxPhoto); + this.panel1.Location = new System.Drawing.Point(34, 287); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(789, 218); + this.panel1.TabIndex = 7; + // + // panel3 + // + this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.SaleLabel); + this.panel3.Location = new System.Drawing.Point(623, 14); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(142, 189); + this.panel3.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label4.Location = new System.Drawing.Point(29, 51); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(73, 28); + this.label4.TabIndex = 4; + this.label4.Text = "Действующая\r\nскидка"; + this.label4.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // SaleLabel + // + this.SaleLabel.AutoSize = true; + this.SaleLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SaleLabel.Location = new System.Drawing.Point(53, 87); + this.SaleLabel.Name = "SaleLabel"; + this.SaleLabel.Size = new System.Drawing.Size(0, 14); + this.SaleLabel.TabIndex = 2; + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.textBoxFP); + this.panel2.Controls.Add(this.textBoxStock); + this.panel2.Controls.Add(this.textBoxUnit); + this.panel2.Controls.Add(this.textBoxPrice); + this.panel2.Controls.Add(this.textBoxSup); + this.panel2.Controls.Add(this.textBoxManuf); + this.panel2.Controls.Add(this.textBoxDesc); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.StockLabel); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.PriceLabel); + this.panel2.Controls.Add(this.SupplierLabel); + this.panel2.Controls.Add(this.ManufacturerLabel); + this.panel2.Controls.Add(this.DescriptionLabel); + this.panel2.Controls.Add(this.NameLabel); + this.panel2.Controls.Add(this.CategoryLabel); + this.panel2.Location = new System.Drawing.Point(212, 14); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(395, 189); + this.panel2.TabIndex = 1; + // + // textBoxFP + // + this.textBoxFP.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxFP.Location = new System.Drawing.Point(247, 113); + this.textBoxFP.Name = "textBoxFP"; + this.textBoxFP.ReadOnly = true; + this.textBoxFP.Size = new System.Drawing.Size(95, 20); + this.textBoxFP.TabIndex = 15; + // + // textBoxStock + // + this.textBoxStock.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxStock.Location = new System.Drawing.Point(148, 158); + this.textBoxStock.Name = "textBoxStock"; + this.textBoxStock.ReadOnly = true; + this.textBoxStock.Size = new System.Drawing.Size(194, 20); + this.textBoxStock.TabIndex = 14; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxUnit.Location = new System.Drawing.Point(148, 135); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.ReadOnly = true; + this.textBoxUnit.Size = new System.Drawing.Size(194, 20); + this.textBoxUnit.TabIndex = 13; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxPrice.Location = new System.Drawing.Point(148, 113); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.ReadOnly = true; + this.textBoxPrice.Size = new System.Drawing.Size(95, 20); + this.textBoxPrice.TabIndex = 12; + // + // textBoxSup + // + this.textBoxSup.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxSup.Location = new System.Drawing.Point(148, 87); + this.textBoxSup.Name = "textBoxSup"; + this.textBoxSup.ReadOnly = true; + this.textBoxSup.Size = new System.Drawing.Size(194, 20); + this.textBoxSup.TabIndex = 11; + // + // textBoxManuf + // + this.textBoxManuf.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxManuf.Location = new System.Drawing.Point(148, 64); + this.textBoxManuf.Name = "textBoxManuf"; + this.textBoxManuf.ReadOnly = true; + this.textBoxManuf.Size = new System.Drawing.Size(194, 20); + this.textBoxManuf.TabIndex = 10; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDesc.Location = new System.Drawing.Point(148, 41); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.ReadOnly = true; + this.textBoxDesc.Size = new System.Drawing.Size(194, 20); + this.textBoxDesc.TabIndex = 9; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label3.Location = new System.Drawing.Point(131, 14); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 15); + this.label3.TabIndex = 8; + this.label3.Text = "I"; + // + // StockLabel + // + this.StockLabel.AutoSize = true; + this.StockLabel.BackColor = System.Drawing.Color.Chartreuse; + this.StockLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.StockLabel.Location = new System.Drawing.Point(14, 158); + this.StockLabel.Name = "StockLabel"; + this.StockLabel.Size = new System.Drawing.Size(112, 14); + this.StockLabel.TabIndex = 7; + this.StockLabel.Text = "Количество на складе:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Chartreuse; + this.label9.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label9.Location = new System.Drawing.Point(21, 135); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(104, 14); + this.label9.TabIndex = 6; + this.label9.Text = "Единица измерения:"; + // + // PriceLabel + // + this.PriceLabel.AutoSize = true; + this.PriceLabel.BackColor = System.Drawing.Color.Chartreuse; + this.PriceLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.PriceLabel.Location = new System.Drawing.Point(57, 113); + this.PriceLabel.Name = "PriceLabel"; + this.PriceLabel.Size = new System.Drawing.Size(69, 14); + this.PriceLabel.TabIndex = 5; + this.PriceLabel.Text = "Цена товара:"; + // + // SupplierLabel + // + this.SupplierLabel.AutoSize = true; + this.SupplierLabel.BackColor = System.Drawing.Color.Chartreuse; + this.SupplierLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SupplierLabel.Location = new System.Drawing.Point(63, 90); + this.SupplierLabel.Name = "SupplierLabel"; + this.SupplierLabel.Size = new System.Drawing.Size(63, 14); + this.SupplierLabel.TabIndex = 4; + this.SupplierLabel.Text = "Поставщик:"; + // + // ManufacturerLabel + // + this.ManufacturerLabel.AutoSize = true; + this.ManufacturerLabel.BackColor = System.Drawing.Color.Chartreuse; + this.ManufacturerLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.ManufacturerLabel.Location = new System.Drawing.Point(44, 67); + this.ManufacturerLabel.Name = "ManufacturerLabel"; + this.ManufacturerLabel.Size = new System.Drawing.Size(82, 14); + this.ManufacturerLabel.TabIndex = 3; + this.ManufacturerLabel.Text = "Производитель:"; + // + // DescriptionLabel + // + this.DescriptionLabel.AutoSize = true; + this.DescriptionLabel.BackColor = System.Drawing.Color.Chartreuse; + this.DescriptionLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.DescriptionLabel.Location = new System.Drawing.Point(34, 44); + this.DescriptionLabel.Name = "DescriptionLabel"; + this.DescriptionLabel.Size = new System.Drawing.Size(92, 14); + this.DescriptionLabel.TabIndex = 2; + this.DescriptionLabel.Text = "Описание товара:"; + // + // NameLabel + // + this.NameLabel.AutoSize = true; + this.NameLabel.BackColor = System.Drawing.Color.Chartreuse; + this.NameLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.NameLabel.Location = new System.Drawing.Point(157, 16); + this.NameLabel.Name = "NameLabel"; + this.NameLabel.Size = new System.Drawing.Size(112, 14); + this.NameLabel.TabIndex = 1; + this.NameLabel.Text = "Наименование товара"; + // + // CategoryLabel + // + this.CategoryLabel.AutoSize = true; + this.CategoryLabel.BackColor = System.Drawing.Color.Chartreuse; + this.CategoryLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.CategoryLabel.Location = new System.Drawing.Point(19, 16); + this.CategoryLabel.Name = "CategoryLabel"; + this.CategoryLabel.Size = new System.Drawing.Size(92, 14); + this.CategoryLabel.TabIndex = 0; + this.CategoryLabel.Text = "Категория товара"; + // + // pictureBoxPhoto + // + this.pictureBoxPhoto.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxPhoto.Location = new System.Drawing.Point(17, 14); + this.pictureBoxPhoto.Name = "pictureBoxPhoto"; + this.pictureBoxPhoto.Size = new System.Drawing.Size(174, 189); + this.pictureBoxPhoto.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxPhoto.TabIndex = 0; + this.pictureBoxPhoto.TabStop = false; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(382, 511); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 9; + this.btnBack.Text = "Главное меню"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(843, 2); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 10; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(318, 9); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(245, 33); + this.label11.TabIndex = 39; + this.label11.Text = "Каталог (гостевой)"; + // + // GuestMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(870, 563); + this.Controls.Add(this.label11); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "GuestMainForm"; + this.Text = "GuestMainForm"; + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label SaleLabel; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox textBoxFP; + private System.Windows.Forms.TextBox textBoxStock; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxSup; + private System.Windows.Forms.TextBox textBoxManuf; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label StockLabel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label PriceLabel; + private System.Windows.Forms.Label SupplierLabel; + private System.Windows.Forms.Label ManufacturerLabel; + private System.Windows.Forms.Label DescriptionLabel; + private System.Windows.Forms.Label NameLabel; + private System.Windows.Forms.Label CategoryLabel; + private System.Windows.Forms.PictureBox pictureBoxPhoto; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + private System.Windows.Forms.Label label11; + } +} \ No newline at end of file diff --git a/GuestMainForm.cs b/GuestMainForm.cs new file mode 100644 index 0000000..08eba71 --- /dev/null +++ b/GuestMainForm.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class GuestMainForm : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + public GuestMainForm() + { + InitializeComponent(); + LoadProdData(); + } + + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT article_product AS `Артикул`, product_name AS `Название товара`, price AS `Цена`, supplier_name AS `Поставщик`, Manufacturer_name AS `Производитель`, Category_name AS `Категория`, sale_percent AS `Скидка`, unit_type AS `Единица измерения`, description AS `описание`, quantity_in_stock AS `Количество на складе`, photo AS `фото` FROM products LEFT JOIN Category ON products.category_id = Category.id_Category JOIN Supplier ON products.supplier_id = Supplier.id_Supplier JOIN Manufacturer ON products.manufacturer_id = Manufacturer.id_Manufacturer"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void dataGridViewProd_Click(object sender, EventArgs e) + { + textBoxDesc.Text = DataGridViewProduct.CurrentRow.Cells[8].Value.ToString(); + textBoxManuf.Text = DataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + textBoxSup.Text = DataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + textBoxPrice.Text = DataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + textBoxUnit.Text = DataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + textBoxStock.Text = DataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + NameLabel.Text = DataGridViewProduct.CurrentRow.Cells[1].Value.ToString(); + CategoryLabel.Text = DataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SaleLabel.Text = DataGridViewProduct.CurrentRow.Cells[6].Value.ToString() + "%"; + + try + { + object photoData = DataGridViewProduct.CurrentRow.Cells[10].Value; + if (photoData != DBNull.Value) + { + byte[] imageData = (byte[])photoData; + if (imageData != null && imageData.Length > 0) + { + using (MemoryStream ms = new MemoryStream(imageData)) + { + pictureBoxPhoto.Image = Image.FromStream(ms); + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message); + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + try + { + var currentRow = DataGridViewProduct.CurrentRow; + if (currentRow == null) return; + + Color defaultColor = SystemColors.Window; + textBoxPrice.BackColor = defaultColor; + textBoxSup.BackColor = defaultColor; + textBoxManuf.BackColor = defaultColor; + textBoxStock.BackColor = defaultColor; + textBoxPrice.ForeColor = Color.Black; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Regular); + textBoxFP.Text = ""; + decimal originalPrice = 0m; + int salePercent = 0; + int quantityInStock = 0; + + decimal.TryParse(currentRow.Cells[2].Value?.ToString(), out originalPrice); + int.TryParse(currentRow.Cells[6].Value?.ToString(), out salePercent); + int.TryParse(currentRow.Cells[9].Value?.ToString(), out quantityInStock); + + if (salePercent > 15) + { + Color highDiscountColor = ColorTranslator.FromHtml("#2E8B57"); + textBoxPrice.BackColor = highDiscountColor; + textBoxSup.BackColor = highDiscountColor; + textBoxManuf.BackColor = highDiscountColor; + textBoxStock.BackColor = highDiscountColor; + textBoxDesc.BackColor = highDiscountColor; + textBoxFP.BackColor = highDiscountColor; + textBoxUnit.BackColor = highDiscountColor; + panel3.BackColor = highDiscountColor; + + } + + else + { + textBoxPrice.BackColor = Color.White; + textBoxSup.BackColor = Color.White; + textBoxManuf.BackColor = Color.White; + textBoxStock.BackColor = Color.White; + textBoxDesc.BackColor = Color.White; + textBoxFP.BackColor = Color.White; + textBoxUnit.BackColor = Color.White; + panel3.BackColor = Color.White; + } + + if (salePercent > 0) + { + decimal finalPrice = originalPrice * (1 - (decimal)salePercent / 100); + textBoxPrice.Text = $"{originalPrice:N2}"; + textBoxPrice.ForeColor = Color.Red; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Strikeout); + textBoxFP.Text = $"{finalPrice:N2}"; + textBoxFP.ForeColor = Color.Black; + textBoxFP.Font = new Font(textBoxFP.Font, FontStyle.Regular); + } + else + { + textBoxPrice.Text = $"{originalPrice:N2}"; + } + if (quantityInStock <= 0) + { + textBoxStock.BackColor = Color.LightBlue; + } + + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при обработке данных товара: " + ex.Message); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Hide(); + LoginForm log = new LoginForm(); + log.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/GuestMainForm.resx b/GuestMainForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/GuestMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Icon.ico b/Icon.ico new file mode 100644 index 0000000..bdb7d56 Binary files /dev/null and b/Icon.ico differ diff --git a/LoginForm.Designer.cs b/LoginForm.Designer.cs new file mode 100644 index 0000000..b054d7c --- /dev/null +++ b/LoginForm.Designer.cs @@ -0,0 +1,171 @@ +namespace demMalyhin +{ + partial class LoginForm + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором форм Windows + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm)); + this.ButtonLogin = new System.Windows.Forms.Button(); + this.loginField = new System.Windows.Forms.TextBox(); + this.passField = new System.Windows.Forms.TextBox(); + this.checkBoxPass = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // ButtonLogin + // + this.ButtonLogin.BackColor = System.Drawing.Color.MediumSpringGreen; + this.ButtonLogin.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.ButtonLogin.ForeColor = System.Drawing.Color.Black; + this.ButtonLogin.Location = new System.Drawing.Point(121, 364); + this.ButtonLogin.Name = "ButtonLogin"; + this.ButtonLogin.Size = new System.Drawing.Size(119, 55); + this.ButtonLogin.TabIndex = 0; + this.ButtonLogin.Text = "Авторизоваться"; + this.ButtonLogin.UseVisualStyleBackColor = false; + this.ButtonLogin.Click += new System.EventHandler(this.ButtonLogin_Click); + // + // loginField + // + this.loginField.BackColor = System.Drawing.Color.Chartreuse; + this.loginField.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.loginField.Location = new System.Drawing.Point(109, 176); + this.loginField.Name = "loginField"; + this.loginField.Size = new System.Drawing.Size(144, 22); + this.loginField.TabIndex = 1; + // + // passField + // + this.passField.BackColor = System.Drawing.Color.Chartreuse; + this.passField.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.passField.Location = new System.Drawing.Point(109, 236); + this.passField.Name = "passField"; + this.passField.Size = new System.Drawing.Size(144, 22); + this.passField.TabIndex = 2; + this.passField.UseSystemPasswordChar = true; + // + // checkBoxPass + // + this.checkBoxPass.AutoSize = true; + this.checkBoxPass.BackColor = System.Drawing.Color.Chartreuse; + this.checkBoxPass.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.checkBoxPass.Location = new System.Drawing.Point(122, 294); + this.checkBoxPass.Name = "checkBoxPass"; + this.checkBoxPass.Size = new System.Drawing.Size(118, 19); + this.checkBoxPass.TabIndex = 3; + this.checkBoxPass.Text = "Показать пароль"; + this.checkBoxPass.UseVisualStyleBackColor = false; + this.checkBoxPass.CheckedChanged += new System.EventHandler(this.checkBoxPass_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.MediumSpringGreen; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.ForeColor = System.Drawing.Color.Black; + this.label1.Location = new System.Drawing.Point(134, 346); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(94, 15); + this.label1.TabIndex = 4; + this.label1.Text = "Войти как гость"; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // pictureBox1 + // + this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); + this.pictureBox1.Location = new System.Drawing.Point(132, 96); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(108, 74); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Chartreuse; + this.label2.Font = new System.Drawing.Font("Times New Roman", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label2.Location = new System.Drawing.Point(91, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(190, 36); + this.label2.TabIndex = 6; + this.label2.Text = "Авторизация"; + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(333, 3); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 8; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // LoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(359, 451); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.label2); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label1); + this.Controls.Add(this.checkBoxPass); + this.Controls.Add(this.passField); + this.Controls.Add(this.loginField); + this.Controls.Add(this.ButtonLogin); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "LoginForm"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.LoginForm_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress_NoSpaces); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button ButtonLogin; + private System.Windows.Forms.TextBox loginField; + private System.Windows.Forms.TextBox passField; + private System.Windows.Forms.CheckBox checkBoxPass; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnExit; + } +} + diff --git a/LoginForm.cs b/LoginForm.cs new file mode 100644 index 0000000..859950b --- /dev/null +++ b/LoginForm.cs @@ -0,0 +1,173 @@ +using System.Data.SqlClient; +using System.Data; +using System.Windows.Forms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; +using MySqlX.XDevAPI; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button; +using System.Diagnostics.Eventing.Reader; + +namespace demMalyhin +{ + public partial class LoginForm : Form + { + public static string ClientSurname { get; private set; } + public static string ClientName { get; private set; } + public static string ClientPatronymic { get; private set; } + public LoginForm() + { + InitializeComponent(); + loginField.KeyPress += TextBox_KeyPress_NoSpaces; + passField.KeyPress += TextBox_KeyPress_NoSpaces; + } + private void TextBox_KeyPress_NoSpaces(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == ' ') + { + e.Handled = true; + } + } + + private void label2_Click(object sender, EventArgs e) + { + } + + private void ButtonLogin_Click(object sender, EventArgs e) + { + string loginUser = loginField.Text; + string passUser = passField.Text; + + if (string.IsNullOrWhiteSpace(loginField.Text)) + { + MessageBox.Show("Введите логин.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (string.IsNullOrWhiteSpace(passField.Text)) + { + MessageBox.Show("Введите пароль.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + DB db = new DB(); + + using (MySqlConnection connection = db.getConnection()) + { + DataTable table = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT RoleID, login, Surname, Name, Patronymic FROM users WHERE login = @uL AND password = @uP", connection); + command.Parameters.Add("@uL", MySqlDbType.VarChar).Value = loginUser; + command.Parameters.Add("@uP", MySqlDbType.VarChar).Value = passUser; + + adapter.SelectCommand = command; + + try + { + connection.Open(); + adapter.Fill(table); + + if (table.Rows.Count == 1) + { + string roleID = table.Rows[0]["RoleID"].ToString(); + string userLogin = table.Rows[0]["login"].ToString(); + + ClientSurname = Convert.ToString(table.Rows[0]["Surname"]); + ClientName = Convert.ToString(table.Rows[0]["Name"]); + ClientPatronymic = Convert.ToString(table.Rows[0]["Patronymic"]); + + switch (roleID) + { + case "1": + MessageBox.Show("Вы авторизовались под ролью: Admin. Ваше фио: " + ClientSurname + " " + ClientName + " " + ClientPatronymic); + this.Hide(); + AdmMainForm adm = new AdmMainForm(); + adm.Show(); + break; + + case "2": + MessageBox.Show("Авторизация успешна, добро пожаловать! Вы авторизовались под ролью: Manager"); + this.Hide(); + ManagerMainForm usManager = new ManagerMainForm(); + usManager.Show(); + break; + + case "3": + MessageBox.Show("Авторизация успешна, добро пожаловать! Вы авторизовались под ролью: Authorized Client"); + this.Hide(); + UserMainForm usClient = new UserMainForm(); + usClient.Show(); + break; + } + } + else + { + MessageBox.Show("Введен неверный логин или пароль", "Ошибка авторизации", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка подключения к базе данных или выполнения запроса: " + ex.Message, "Ошибка БД", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + db.closeConnection(); + } + } + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void regLabel_Click(object sender, EventArgs e) + { + this.Hide(); + ManagerMainForm regForm = new ManagerMainForm(); + regForm.Show(); + } + + private void closeBtn_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.WindowState = FormWindowState.Minimized; + } + + private void checkBoxPass_CheckedChanged(object sender, EventArgs e) + { + if (checkBoxPass.Checked) + { + passField.UseSystemPasswordChar = false; + } + else + { + passField.UseSystemPasswordChar = true; + } + } + + private void label1_Click(object sender, EventArgs e) + { + this.Hide(); + GuestMainForm guest = new GuestMainForm(); + guest.Show(); + + } + + private void LoginForm_Load(object sender, EventArgs e) + { + pictureBox1.Image = Properties.Resources.Icon1; + } + } +} \ No newline at end of file diff --git a/LoginForm.resx b/LoginForm.resx new file mode 100644 index 0000000..be46f2a --- /dev/null +++ b/LoginForm.resx @@ -0,0 +1,2192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAA/8dJREFUeF7s + fQd0VMX79t3ed1NJQq+CgICAIBawUBQhgDQFEUUEFEH0J4iIiiKC0puVjgoiIII06VU6QgglISS0QAgl + pFfvd577n9lvMtlNdtMIMM8570my2d07d+7MvP19JUlAQEDABWRZVjGklmVZI8uyUZZlv8TExDrh4eHP + ff/99298/vnnn73xxhvfduzY8bc2bdr83rZt25U9evRYPnDgwNnjx48fvmrVqvYxMTHVZFn2kWXZIsuy + Dt/JXoO/toCAgICAgMAdAMf8tbIsOxITE2svW7asV7t27WbZbLb9RqPxgk6ni5ck6bYkSamSJGVIkpTJ + UDp5PUGj0VysWrXqngEDBkzZvHnzcykpKSGyLJsgWLDX48chICAgICAgUIpgGL//4cOHm7zzzjsf2Gy2 + rZIkXdLr9betViuYfbYkSTmUdDrdf3q9/j+NRvOfWq1WyGQy/SdJEihbr9dDILgpSVJ4w4YNF48ePXrw + zZs3G8iybCcWBpAQAgQEBAQEBEoTjMavuXXrls+VK1ce6dWr14fly5ffIklSrCRJaSaTiTL9/xwOh5PZ + EyafhyAQ0N+pgEAEh2RJki5bLJb148ePHyTLcm3iXhBCgICAgICAQGmBYf5gwjUmT578miRJqwnjh7av + aPlg+FqtNg+jV6lUTq0fv/P/d/E6tRyk63S6C4GBgQv++uuv1rIsVxBCgICAgICAQCkBTPfmzZuOK1eu + PNW0adOpkiSdtlqtqTabLZtl3FQAALHaPfseKgjgd7vdnus9sALQv+Ee0Gg0EAKyTSZTosFg2D5kyJDP + 09PTYQ1AwKEQAgQEBAQEBEoCROuHxu175MiR0PLly6/W6XRxZrMZQXyKqR8Ehm8wGFgNPpdAwL/OEj5n + sVhyfQaE361WK30d1gXECFx76qmnZsmyXF+WZYMQAgQEBAQEBIoZDPP3+e2333oEBQX9RSL6s7VarZP5 + 8yZ9MHRWkwdREz91BdDXWeEAFgNWiKAWBEY4yDGZTFmSJF2tXr36d7GxsU1kWdYLIUBAQEBAQKAYwPj7 + wfxt27Zt6+br67tNkqQkq9Wq+OZZ835pECM4KC4Bs9kcGxwc/F1MTMzDJF1QCAECAgICAgLegmH6LPO3 + b9mypaMkSTuRrx8QEKBE+FOtvSDTfnESbzmQJCnLaDReql279vRTp07BEqAIAZT4+xMQEBAQEBBwAY7x + K2b/5cuXdw4JCfkb6X0qlYpG5f/n4+OjMGHezF/S5CKdEHEIMZUrV5565syZR2RZNgshQEBAQEBAwAsw + zB/R9T5//vln94CAABT2SQ4MDHQyf1q4xwUzLnGiVgAu6yDDZDJFVaxYcUZERERzVgjg71FAQEBAQECA + Aav9375922/v3r3dJUnapVKplDQ/yvzNZrOT+bqK+C8NwvXhekCWAH4naYIZBoMhOigoaOaFCxdgCUCt + AiEACAgICAgIuAOn+Qfv2bPnFUmSdhsMBtToh78/B1o3TcsDuYryLyliawZQotkEzGuKEGAymc6XL19+ + FokJECmCAgICAgIC7kAEANT0L7927dr+YP42my2Z+vxZRu/v7+/8nc3b95CcaYPeUkHlhIlbAt+fqdVq + L1arVm16ZGQksgOEJUBAQEBAQIAHYf7Q/MutX7/+Dbvdvhc+f71enyvaH0QFAWjebPW+QhCNJ3DGFRRE + YP4YC9X6WQsA0hEZa0COwWBQAgORHRATE9NYWAIEBAQEBAQYMMzf9/Dhwz10Oh1S/VKITz0H/n6eEedH + YNBUSNDr9TxzV5r7qFQqtAa+KEnSBUmS4jUaTYparXZ2DITVAcyeFTb467gjrk5ApsViuRwcHDzr6tWr + qBgIC4cIDBQQEBAQuL/B+P0t58+ff7ZixYp/mUymJMr8oVV7muNPmTVjogcTx/dkq9VqVO273rx5801j + x44dvGXLlsdiYmKqRUVFPbBy5crnRo4cOSEoKGiPSqW6abVaM+n18T0QQDwdA4ivE6BSqdA/4HrNmjVn + xcTEPEiEAKWJkBAGBAQEBATuOzDMX5+RkfFQ3759Z6KjHzX7UwbqKfOlWrrRaES8AGXgYPwpFStW/OPv + v/9uhSZCPPMlf5vi4uJqTJ06dbAkSYdQbwDCA602yF8rP+IFAEL4jpvBwcHfXr9+vQ5rCRACgICAgIDA + fQXC/MAIK/3000/DJEkK8/X1pe18czFQTyL9aV0AYsKHEJGp1+uvNGrUaGF4eHg9uBm4a/OkNBrauXNn + 14CAgPWSJCUQl0G2w+HIM6b8iAoBnOsA3xNfoUKFqRcuXKgh3AECAgICAvcdCOPTQCNPSUnpGBAQsE6S + pERisnfm9tMOfGzqXz6kpAqC0apUqnS9Xn+xRo0aE9PT06vTlr35EK06qJQdDg8Pf65cuXLLER8QEhIC + oQSCAH+9XMQzfFIbIJdLgnzPjaCgoCmXL19GK2HFHcDPj4CAgICAwD0JwnQRFV9v1KhRkxCQZzQa8zBZ + Kgh4EISnmOp1Oh2+I81kMp1t1KjRZ9euXaspy7KOYfJOpk/HwYyHFQQc//77b7ugoKClkiTFabVauBLy + tQIUlCJIXBlKF0GdTgfBYlpcXJxTOOHnSEBAQEBA4J4DYbL+N2/efEWn0+2y2WxKsR+Hw+FkmJT542cB + AoDC/DUaDTR/fM+p6tWrj0lPT69FmD9l6m6ZrBtrgP3MmTPPBwcHL1WpVHEknqBIQkBgYKAyXpVKlWW1 + Wm+WL19+EusO4MclICAgICBwz4AwWb0sy/XHjBkzXavVXoZpnA32MxqNHpv9qWldrVaD+R9v0aLFpzdu + 3KhLrpEv43cHRhjwOXjw4PPEEnCdmPDdCgF8nQC2eiAXzEgzFG5UqVLlm4sXL8JS4XRT8OMREBAQEBC4 + 60GYnF2W5RdDQkJ2wGTvIbN3MlFSG0Bh/mazGSb1VJVKFVa7du2Pr1y5AuaPyntOkz8/hoLACAAa9CQ4 + e/bsczabbZXNZrtJ2v86hQAap+ApcVkC2RaLJTY4OBhCACwWIjBQQEBAQODeBGHMIYcOHfrQbref8yTA + jiUa7U8D/gwGQ7IkSSfq1av3eUZGBvLsEVtQaOZPwQoBCQkJKFLUxeFwrDMYDLfIdeF2UMaCegX8ON0R + JwAo7gCTyXSlVq1aE06ePAkhAJYL1iVR6HsQEBAQEBAoMyCm7rpjxoz5Ua1W38jPpM4S3AL0d8r8JUmC + 2T/82Wef/erSpUuNiqr582CYML7T78iRI90sFstqm80GIYC6H/KMNT9yUScA34H4ggvVqlUbd/bsWVQM + pEJAsd2LgICAgIDAHQVhbo8//vjjyLVP4xmkO6K1AKj5X6PRZBoMhotovXvlyhW03jV7EvDnDThNHN/r + e+zYMaQtrtfr9RA+slF0yNNiRZRc1QlQqVToIniuatWqE86fPw83hklYAQQEBAQE7hkQRh1qt9sPQ/P1 + 1P/PMMocHx8faP+3JUlaHRMT8wxKCZektswIAErPAlgCbDbbdqPRmIJ7MJlMBVoCXDB8PmsA35Gh0Wgi + AwMDx8bExKCLoNJAqCTuSUBAQEBAoNRAmJnjwoUL/SRJikQkPBhhAWl+ToKvnZT5ReDf2aFDhw6Bf764 + NX9X4IWAsLCwLjabbZ3ZbIYgUmAcQ0EpgoRwb+kmk+l05cqVJxB3gGglLCAgICBwd4Mw0XK7du36UJKk + S6TpjkcCABgoeR9a7aajfsDJkycfLa3IecYcT4UAVAwM9fX13ehwOBCIWKAVoCAhwGKxKPcHIcBoNJ6q + UaPG2DNnzjRk3QH8uAQEBAQEBMo8wDxTU1MrLl++fLxGo4knwXwe5fzT9yAFT6vVJhsMhhWyLFdmGHOJ + M0dOCIDg4RseHo7AwK1oOlSQJSC/OgF8YKBWq0V8xMkaNWqMO3fuHIQA4Q4QEBAQELg7QRhnlfnz509F + dzzK9DyxALDMEY16Hn/88e9RTZB8b6kwRlbYIPeiQ52AyMjIULgDbDZbEsZXTHUC8B1pFoslIigoaDyp + b+BMEeTHJiAgICAgUGYBppmWllb1u+++m65Wq28ioI9ngPkRYgDIZ262aNFiKlLzyPeWKkNkBAC4ArSJ + iYkBhw4d6u5wODYbjUa4A4qtTgBxB0TCHXDp0qUHmN4GpXrPAgICAgIChQYRACrPnTt3sl6vv04FAC8t + AGCQibVq1ZqLgkLke0udGbpwBwT8+++/PS0WyxabzaYIAZ7EBbgi3h2A7ABJkmICAwPHEyFAlA0WEBAQ + ELh7QJhW8Pr16z+TJOkKZZCeCADMe6BZQyveGhcX14A1y/PXK0mw12WEgMBjx469HBAQsF2v1yMmAB0K + i6NOAOYp02q1XgwMDBwXGRnpbCBU2vctICAgICDgNQjD8jlz5swASZKiCTP3SEumWQCEmUK7Pj1lypQe + ZSE4jlxfcQfALXH48OEeTJ0AtAD26B5ZovdK7xvWEo1Gk6VWq+PLly//RWxsbJWSTn0UEBAQEBAoFhBG + aUpMTOyi1WpPgpF7EweAKoAkcwDMMLFOnToL4VK4U1YACs4SAB99cHh4+Gs2m22nyWRKLCg7AMRmBFBi + aySQeIIcm82WZTAYYoOCglAsqJpoJSwgICAgUOZBmKQ+Kyvr2YYNG+7TarWZ3vjJ2eA4nU6H+vknJk+e + /Iosy9Y7KQAALoSACsePHx/o6+u7y+FwJHgSE1BQnYCAgADl3tFAyGw2x4aEhHwlhAABAQEBgTIPairP + zMxs2KNHj9/NZrOSNkfr/OdHbDMgkmaXo9frb1ssliWXL19uXBZ84owQAHcAUvZqhIWFvWs2m3dLkkQt + AW6FAL5OAGsB4OaICkBXK1eu/NX58+eri8BAAQEBAYEyC6ohp6amVli1atWn6IBH3QCU2bkjMD7aChiE + NDuUBPbx8Tn76quvfijLcvk77RPnrABgyJbExMQ6kZGR79lstr02m00pG1yMdQIUS0BQUNCXly9frkTv + XwgCAgICAgJlCgxztF68eLGL2Wz+R6fTIcXNIwGAzae3WCyKFUCSpOTAwMANO3fubEfr5t9p5sfcJ6wS + ZggBhw8fHuFwOP4xGo2KEFCMdQIyjUZjbK1atUafPn0aQhCuKQQBAQEBAYGyA4YpwUfeqEePHgu1Wu0t + TwUA1gzO+MthVr/Url27cbIswx+umML5a5cmWOZLxoNa/g8dPXp0uNVqdVoC8nMH5Ecu6gTAHXC5atWq + H547dw7ZAU53iBACBAQEBATuOBiGBA01aOvWrUNJNkBWQW4AyvjYnHr8TXoDpEqStHXFihWhZSwgkN4r + hACMq97x48dHBAQE7Nfr9Yh/yC6mOgEQiNCWOKZChQofRUREICbAWTHwTs6FgICAgICAE4QpGbKyslq0 + atVqCWr7q1QqxALkYfysAACCuZwNCERLYaIFX37wwQe/kWW5zFTK4wQBJSaAWAI+stls+41GoyIEFEed + AOoO0Gg0kYGBgR+fPXu2pigbLCAgICBQpsBoxuVWrVo1WKfTHVepVBk802eJNf9zjE9hfnq9Pl2SpL2z + Z89+WZZlR1lifJwQYIMl4MSJE+/b7fYjJpNJKRbEM3ieCqoTQOcB82g2m0+GhISMCg8PhxAgGggJCAgI + CJQNMAxRn5mZ2bhPnz5zVCpVfH5uAFepghAEKIH5GQyGa5UqVZqdlJSEznl3PC2QBSP0QCuHJaDOiRMn + Rvj5+R10OBxwYRQoBBRUJ8BisSjzgC6CBoPheI0aNUacPHmyFq2WyI9JQEBAQECg1MEwRJ+zZ8++pFKp + dqtUqjQiBOQRBMDgIAS4i5gnEfUZWq12f1m0AgDMPUM4gRBQ68SJE8MsFssRMO2ChID86gTwgYGkF8Hh + atWqfRAdHV2nrGRICAgICAgIUIYIZlh9zJgxX+r1+vNqtRoR7UpxIKr1sz5/d0Rz4x0Oxw2bzfZDUlJS + vTJqBWCFAFNCQkKNqKgoCAH7rFYrhIBss9nsFASIVu8xYR5o2WBJklJMJtPhwMDA0efPn4dVxNk3oazM + iYCAgIDAfQiGGRoTEhKeqVq16mq0+iXMKwfMDPX/eSbniogmrKTEmUymoxMmTECJYHtZY3acEKCkCEII + OHLkyFAfH5+jBoMB7oBs9DygWj1bAMkdsZYArk5AisFgCKtUqdLYyMhIIQQICAgICJQNMMwwcOXKlYMk + SVLSAokWrGjCrvz/PEHrJe+D9eBW9erVv7t9+zaC4O5odUAeLPMlROsEVD927NhbZrN5j8ViSS5snQAI + Arw7gLgXTleqVOnLiIiIB0VgoICAgIDAHQfDCHUZGRn1n3322bkajeYmtQK48/nzRAPkSHdBuBH2//jj + j6gLYIYQwF/3TsGFAECFAGjmVdFAKCgoCBUDFSEAlgCq3XtKVAhgPoeWxOkajSYqMDBwQkxMDIQABCOW + KeFIQEBAQOA+A8MIrXv37u0sSdIRdAq02WxOK4CnROoCQHu+/uijj36dkpJyx3sE5AcXloCqsAQ4HI69 + NEXQYDDkuc+CCMzfRZ2ADMRZ2Gy2CadOnUK9hDIVIyEgICAgcJ+BY4KVO3bs+AMtEUy01zwMzhVRRkea + 7WRpNJrdq1atal3W0+CY+wdDRrR+pePHj7+JssFms5lmB+QrCLEZAfm8BmtCpsFguBAcHDzm9OnTopWw + gICAgMCdBWGASp58VFRUa71efxxM3G63e+QLZ4PfSKdAMLsbL7zwwicJCQm+ZVnTZQQA1h1QHu4AX1/f + Q35+frROQL7z4KpYECVYA4g7BU2IMi0Wy4UKFSqMDg8Pr1yWLSQCAgICAvc4GAYIZlT+xRdfnOnv749Y + gGyNRpMv46PMDz+ZYjiwHCAWYGt4ePjDZVnT5QQApyCEfglhYWFvmEymfYjmLygwkJr93WQE0PRAOj+Y + m0u1atX6hDQQKhPlkwUEBAQE7kMwzE8fERHRRpKkcNooiGd2lOGxTI6tF0Dq62fb7fbLr7zyyrskGLDM + Mjg3QoA2NTW1UmRk5GCbzbbHZrMhRTKLuDiU+7RarXnmxR1hnlgBgWRbXAoICPgsKioKlgCllTA/NgEB + AQEBgRIFy/xSUlJC+vXrN0OSpCR0zKPVAXmmxhIrAOj1emoyz6xQocKK+Pj4Mh0MCLgRAvRpaWlVDh8+ + PNjHx2cPbSAENwfV6D3NlIAAwPdQQEyATqeLq1Sp0uiTJ0/msgSU5bkSEBAQELjHwDA+w8GDB5/X6XTn + NBqN0/SdnxDAMkKkzxHXASh83rx5CAZUmBt/zbICOjZOCMCYkbdf5d9//33HarX+Y7PZbhMTvkvLSH7E + pQeCnO6AypUrfyiEAAEBAQGBOwKO8YWEhob+6kmdfBAYG4QA6hKAEABNWaVSJTZv3nxiWXcDsOCEABoT + ACFgSEBAwE69Xp8ASwCsI6QZksfEu05AiJfQarWx5cqV+zw6OrqqiAkQEBAQECh1MIxPt2nTpq6SJMW5 + EgDYNDf6EyZuJtgNv6OkLiwIR86ePYvKgHcdU2PnA3UCjh49+qbdbt9kMBiQKonSx3nmhifeckLdAUyH + QcUSgI6KNpttHEkRFEKAgICAgEDpgtF8Kzds2HCnSqXKEwHParJsuWAXJm7Qzffff78fjQO4m5iaC0tA + xfDw8NdsNtsWs9kMd0CeueHJXXogR7CWQAiI5esE3E3zJSAgICBwF4NheKZvv/32I71en8Q2yKFEhQCe + mcEsDqGAareoLFipUqXfUBOAfj9/zbIMTghATIBSNtjX13eXw+FAdkC+QgBrLXFFfJ0Aq9UaVbFixTFh + YWE1iNAhhAABAQEBgdIBYTqalJSUh81mc5jBYICfOg/zoowNJXP5xkH4H/kMmOP51atXP3E3MjNGAKBC + AIoFVQ4LCxtkNpt3kzoBbgUAStRiwgoDrPuEvIbvyZAkKapmzZqfnjlzpo4QAgQEBAQEShWE6djefffd + 2Wq1OpnWBGDr47sSClwQugSmdOjQ4aOyXBTIEzBCgFIn4OzZs2/abLZdVqtVKRZUTHUC8B3pJpPpdEBA + wBcXL16sRbsI0jHw4xIQEBAQECg2EGanPXjwYHuz2XwBjInN9/eUiOCQXaFChc2JiYn+d7s2ywgBOjQ8 + Onz48GsOhwNdBFE2uDjrBKTp9fpwpAieP3++OulV4LRG8OMSEBAQEBAoFjCMrsKjjz66BoV9SK1/J6Ny + FQPAE3EN4HMX169f3+JeYF6sJQBlg48ePfoa3AE2m432DsgzDwUR7x4g34PvO1qpUqWPT5w40VAIAQIC + AgICpQLCaCzffffdJ5IkIeAN5nyvNFzi+8Znknv16jUUsQX8de5WMEJA4L///tsnICBgh16vV2ICiqlO + QI5er4cQcNrhcEyKiIhoRFoXCwFAQEBAQKDkQE3dN2/efMLX1/c0TNxmszmXFcATAkPT6/XZfn5+62VZ + dvDXuVvhyhJgs9l2G41GJSagGOsEpBsMhgibzTbhzJkzsAQobZaFECAgICAgUCIgTAZFaao8++yz63Q6 + XRrtEGi32/MwM3dEg9vUavXZnTt3Nr6XGBcjBCBQL4TUCdhhMpmSC0oRBHniRiEWBcQERAQFBU2IjIys + x2YH3EvzKSAgICBQRkAYjP3nn38eqVar0SZYYWhms5lnUi6JDWzT6/U33njjjf5gmPx17lYwTJgKAUEn + Tpx42dfXd7vD4VACA/MTAgqqE8AEByqWAL1ef65ixYrfHDhwIJcQwI9LQEBAQECgSCAMBoztUUmSTsCU + j8JAYE587r8r4nLd04KCghajNwB/nbsZnBAAphwUHh7+utls3kMC+TBfboUAkLs6AfRvkoGB70CdgAtV + qlT5kpRYvqtTKwUEBAQEyiioGyA9Pb1W586dN4IB2Wy2fJmZKyIBcZmSJB04d+5cEH+duxWsBs4KAUlJ + SYGRkZHd4Q4oSp0AV4GBaCVsNBov+fj4jGUbCPFjExAQEBAQKBIIYwtYvHjxF5Ik3aJxAJ7UBaCMiwS2 + wRwe+csvvzS5FxkWYwkAaZOSksodOnSol8Ph2G40GpWYgMLUCaBCAOtO0Wg06B0QV758+fGRkZEoGwxL + wF3Xb0FAQEBAoAyDMBVTfHx8qMViiaB+bU9cAFQAINHtEByuvvLKKy9DS+avcy+AswZAM/c/cuTISxaL + ZYvNZiuwd4A7YrICKOE7siRJulK5cuWvwsPDne4AIQQICAgICBQLCENBHMAjTZo0QYfADBoH4CkxzCux + evXqU2/cuGHnr3MvgXEHQAgIPH78eK+AgIC1CISEEOBtnQDODUAJgZVZKpXqisPh+CoqKgplg52WAH5M + AgICAgICXoHRZqt+/vnnP0qSdBsMjGdS7ohjXohk33j06NGq/HUKC1caL6MJgxmylEdDdvVacYD5Xsxd + uSNHjnS12WxrjEYjhIAsT+oE5EdMdgDcAddsNtv4U6dOISbAea/8mAQEBAQEBLwCYSh+hw8ffg9R6GA8 + LjRSl8Q0ugHBbH30+++/b1oUBsUybYYQgW9HjX5ZluEXr5+SktI4ISGhSUJCQuPMzMyHZVl+SJblB1Db + QJblYFmWrTSdztV3576q9yDf47QEhIWF9bTZbGtNJpMiBBTkDnCVIkhjAtgUQa1Wm6XX668EBwd/cfbs + 2UoiHkBAQEBAoFhAmIkpPT29Xfny5Q/DjO2KObkiKiiQ9+Nz57p3796tMHEALpi+UoAnIyOj7pUrV55a + t27dm8OHD5/4xBNPLKlUqdImkoq3l9Bug8GwpWLFir8/+eST37300ktjlyxZ0uvs2bOPybKMhjt2Vhgo + DubJjRVCQEhYWNgrvr6+axwOR3xBQoCrOabpgSDEYXCWgNjKlSuPOXLkCAQcUSdAQEBAQKBoIIwE/uWG + rVu3/tNoNKbRFsH5EevnJq2EkcYWX7Nmzc/QZ4C/Tn5gGCm0W5TDrZCQkPDs/PnzP3vssceWEiYfI0nS + TZVKhdS7DLVaDQarECLnSSoicvNvmkymSyqV6qgkSRsaNmw4ffr06b3Onz+PDIWg4i63ywkBsAR0sVqt + f2IcBQkBlFjGT1+jwhXJKKCBgZcrV678KRMTUGz3ISAgICBwn4FhvJWnTZs2Xa1WX/dEAAAxWip+x2eS + 9Hr9z1evXi3HX8cVKPNihJAqsbGxbYcPH/65VqvdqtFoLqvValp1L8/13RDGAcrUaDRpSKmTJOmgTqdb + 8Oabb7594sSJR5D6SAUBfkyFATOHmsTExICoqKgXbTbbapvNdr2wdQJAmFuaWkjvyWQyRfv7+48lQoCw + BAgICAgIFB6Eifhv3759qEajOeeJ1gpimBMVBNIlSdqye/fu2mCI/HV4MNozmHGTMWPGfOXv779FkqRY + jUaTgfRCV6ZyT4hkM4DQ6CidMOOjDofj+yFDhvRDDAEsFcXBPJn7UCwBCQkJvocPH+7ocDhWGo3G24Wt + E4D3c3EWiM/IMBgM0UFBQWMjIiIeZC0aQhgQEBAQEPAKhHGYMzIyOjkcDiUOgGdGPLGBggyDgpn68Dff + fNMKGr2La7iigAMHDnRs1qzZrzBxEyFCCUTkiuQUivAdRBjAPaHc7hWNRvNP5cqVp/71119Py7Ls6y6L + wBswn6eR+o6jR4+2hzvAZrMlFaZOALUAuKgTgPs4S+oEoJVwLiGAH5uAgICAgIBLEMYBc3KLxo0boyww + mHAehsQSy5RoPIBWqwWTO9e1a9c32TgAF0wfBJ95tQULFrxls9m2q9VqpZgOmDXM5LxPnJK713liTe10 + rEjP8/HxgZCCOIIYtVq96PPPP++EAL7i8qkzQgDuz37s2LHnAgIC/tLr9agYqBRZ8qZOACXuvnOMRmO6 + RqOJDAgImBwTEwNrhrE4xi8gICAgcJ+BMKy6AwcOnK9SqRIK0lZZAYBWDiQm++u1atWaioA78r0841eE + DUT3w9dvMBiO6nQ6pbGO3W7PNwWRMsH83sMSCU5UiDW7I17BYrEgaPCqJElrXnnlFXQyRHR9sRTb4YQA + 2+HDh9vZbLY/jEYjLAE5hakTQO+bsYrgO9KNRmOkw+H4JiIiApYAkxACBAQEBAQ8BmVYqampFRYvXjxG + rVZf9EYAYGMBoF0bDIbliYmJyMnnGT/IdO3atUZvvfXWRK1Wi/LDStYBrUCIPgQmk8mtlu+NAADBhC1r + jO+GUEAZqNVqzTKbzeiBsP+pp556B9kHtAFPURkpJwRYwsPDn7HZbCvMZrMSE1DQ/DK1AJxEBSDWEqDV + atN0Ot3JwMDAcZGRkbAEoP5BkcYuICAgIHCfgGF4jlOnTr2m1WrDvYkD4OIB4J/efPjwYaTd5WKmYP4X + Llx4csiQIbMkSYrSarV4L7Rx5bPUNE61XJ4Bku93+TpPfn5+zt9ZSwDT6CiHBObBJZBst9sPtG3b9u3k + 5GQUESrumADMg/n48eOt/Pz8VjocDsUdwI+ZpYJiIJjgQHxPql6vP1WxYsWJ+/fvRyEmIx0DPy4BAQEB + AQEnGGZlTElJeV6r1f5DAvryMB6eCVFmRa0ABoMBefn/LF68+ClSzIcyQXx301deeeUnSZIuEubv/C5O + iChQCOBfc0Vg/NQCwFoCMG7GDw/XgyIESJJ0/JlnnhmCbn/MuItLCIB7wRIWFtbWYrH8hZTJgoQAkDuL + B50Dpk5AGoSqChUqTCPuAGXu+TEJCAgICAg4wTAqXWpq6uOPPPLIBviXeUbrIiLdFcFycGL8+PEvx8fH + 28j3ahMSEpo2b958nsFguEKK9vCfc0lgcOw1WaEDPzFGV4JIQcQKBLAEqFQqjDvVx8cnvHnz5h+Q7ADK + vD2OC2Dfx8yr83uuXbtmPX/+/OP+/v6LtVrtLWppYQIp84zVFVHBgJkb3EOG0Wg8b7fbp0ZFRaE0MhXA + PBq7gICAgMB9CmKqbvDiiy/+rFKpEnk/tDttlCNoozFdunR5nzBRfGfjp59+eg5q2sPk7gmTZs32lMAc + 8To/Bn6M/OdcEX0ffpLx0FTBNKvVer5Tp04QAlBCOJcQkB9D5Rh+HuZPftfExsaaT5w48XRQUBACAxOQ + PcHer7dCAHPPcGlkGgyGSyEhIdMiIyPrilbCAgICAgIFgjCpWqNGjZqhVquvudL4Oa3THcU/8cQTk1Fd + UJblh5999tmf1Go1KvIppXE9EQBYJojrQWN3dV28D//z5Dt5cmExgBAAgoUitmXLlh8QKwZl3rkEAX7+ + ABfM3xXhO+yXL1/uaLVaN6vVagQGIjtAGYenhYJALp4Rxo95vlaxYsXpYWFhKBbkzG5wN24BAQEBgfsY + hEFUWrhw4WfQ4hGdz2vUHloBUs1m81/Z2dkvt2nT5nudTgfmj2ZBSo6/i/e7JMqgaUU89n96vd6ZOcCT + B+NTiLdwQJBga+8bDIb4Nm3a/O/WrVs+PBPn5szl/3gw7wFDtmZkZDwYFhb2gc1mO6jVatOpcOXK+uGO + 3AhkCHDM1mg01/38/KZHRUUhI6NYUhwFBAQEBO5BEOYUsHv37nckSTrtLkiNFwpcELT86y+88MJJaKJg + ppRZu9PkXRGTsqcQvgO1BuCzZ0z2yu8WiwUlfxXrgicatAvN2UkQVEj9flgC4h966KEfIyMj65HSwUpm + g5u5A+H/8L0jJx8peQ60J46Pj39g//79Ty5atOjFsWPHDu7Vq9e0Jk2abPTx8TlvMBhopcD//P3984zH + WyJzpsyPXq+/YbVap0ZERKArojMrgx+/gICAgMB9DMIcrLGxsb1VKtVxNhXQHbPMhxQGBGbKmtk9EB6c + xGrCKN4D5k/GlI1ugEajEQwa5m7lb2a8LgUXdwSBgXc5kN+hRWfZ7fZbRqNx87hx4wbExcU1IPUC/EiM + AxoLoctgpZs3bz60a9eu1gsXLuz//vvvT33ppZeWgsn7+fkdVavVkch+IAJRglqtRjVCjD/bYrHkKoDk + 6+ubZ4w8uZpHap1h5hvfC+HremBg4ITTp09XE0KAgICAgEAeEMZgyM7O7mCz2fZptVpnKmAhBADFTO/j + 46P8TnP9vfkeysggRJjNZjB3jCfV398fFfxOGQyGw2q1+ogkSceMRuNpjUYD5oogPtqG1yNBAAIAiFoF + qDDg4+PjtDSYzWZUK7xkNpt31a1b95cBAwbMfP3116eHhoYubNSo0Z8+Pj7bkUaIUsharfay0Wi8Scob + 43OKcKLRaFDqOBvCDOm4iPtyulk8sVxQcicAUGI6NVJ3xrVKlSp9cejQoRrurBgCAgICAvcpiACAngCI + UN9iMpmc6XquGE5+xGmiuT5PhYH8CO+nHf2QogcfOTTowMDAja+88sqYjRs3drx06VKjjIyMOjdu3Ki3 + e/fu9u+99974SpUqbZIk6QJpmONWAHDlAuDvkYxfGQOYNvzqpCUvtPdbKpXqhlqthjZPmTwdr7vvpQJF + HuGEFijiYx08IZbx09fovTHpjhhfbIUKFdBFEO4AERQoICAgIPB/YHzYj7Zs2XI10V4VZkKZS2EYlCvi + mS//OjRjqn3rdDqlSE+nTp3GRUVFPQGfOumAx0bnm9HUJzo6uvl77703Fu9nu/Cx4/YmyI4jV8yb/7tM + EJ4X5pKZZwgmmUaj8Sp6B0RGRsISoKQI8utAQEBAQOA+BGGmjTt27LgUtQAoM6GMpbgEAJZopD+nlWc7 + HA7UDEBjoj1vvPHGe+np6WBazuI2XG4+TdHTp6WlVZs3b95QrVa7R5KkRNKlUPGze2NmL4DKJONniQoB + rAUCMQ3IbggODp5AhABYfIQlQEBAQOB+B2GiDfr3778AEeQ8UykuAYAVKnjzNUz+BoMB7odbWq12+0cf + ffQGguyYojYs42eJvq5NTU2tNGfOnIFGo3G7SqVyNuBxZ3m4V8mFqwNCC9wBFypXrvz58ePHUTFQFAsS + EBAQuN9BmGj9ESNG/EDy953Mg/frF5UgTPDfxzD/a1qtdv3w4cPRqhdR9jSP3W0uOycI4P0Vli5d+rrJ + ZNosSZJTCCguIeZuIM4NQAlpjplqtfqcj4/P9LNnz9bnLCsu51dAQEBA4B4GYZ4PfvXVV7M0Gk0s8R0r + jAOMkw9wKwqxNQHUajW0cyXITpKk6xaL5bePP/64K/z6JC4hX+bPghEC8Lnyv/32Wz+dTrdVkqSbJJCv + TJvuS5rIM8QcZCJjwWKxTA4PD0edA8RRFDi/AgICAsUKoXmUDZDn8MCMGTMmI+2N+I0VxlHcmjPzfYiy + p8w/TqfTbZo4ceILiYmJ/p5o/q7AaLPwcVdZsGDBAIPB8DfcCtQSwI/nXiJXghqNCWDrBKB3gEajORcY + GDj+1KlTj5FiR2IvCggIlBxYc2NhDpzCfk4gf5A5rTF//vwJarUa6XROkznV1nmzfWEIzIhJs6M5/rcf + eOCBZSNGjOhDCu14pfnzIPdCAwOrzps373Wz2fy32WxGYOE9LQS4EwAoMV0WMQfpBoPhbKVKlb47cOBA + SyoE8PMpICAgUCQUxLQZ/y3SvIykpCp+QpNT8+8HhDBQfCDzWOW33377QqfTnXflM2db6RaRlEh6ov2n + I2p/2LBhL8qyHMgw/kIxfwpWCJBlueKSJUtekyQJ7gBkOFAh4J4VBEAs4+f/R54t7h91E2KCg4O/CwsL + UywB/FwKCAgIeIyCmDL5Pxg96qWHpKenPxATE9N49+7dT69cubLDkiVLXli0aFG75cuXt9u3b9/TsbGx + TUkqGLRDCAUa7rvyvZ5AwSBzWGn16tWfgiGgmh9lFrSRDy8QuCI23Y6+n7UcECFC0f7VanW60Wg89c47 + 77zOaf7F8iwZIUB3/fr1Chs3buyr0Wg26fV6uAOyTCZTDr1Ps9nsKmhOIT5zwdX/Xb3Ov6cgCwpJiXRW + C3QloLiyxuB3b2ocUJcAGTOul2E0GqPtdvusyMjIR8keE3tKQEDAc7hjxuQ1aPLorlbz8uXLj2/YsKHr + 8OHDP2jcuPE8+H4lSdqH0q6SJIWrVKoTJpPpmFqtxt+HNBrN9goVKixv0qTJhJEjR/bfs2cPzJVID8NB + pVgH2Gu7GoNA/iBzFvLnn39+JElSNBrv8Bq/JwIACO1twVD510n0P2X+8EGfHTVq1OCSYP4UjBCgTU5O + Dtq/f3/3kJCQlZIkoawwYg9od0GF2XLMMQ/RDAZ3/6elhfnX2f/TNsb0OoRyMX78Tv329L30/dSFgiqC + 7DPin5c7ovfIvIaYAAgBFwICAr4jQoASGCj2koCAgEvkdzjQ1qeo3nb79u1HVq5c2f2tt94a9+CDD66z + 2Wxg7OdwCKMjmsFggBmSNnXBgYyUMDAJ6iPO0Gq1KQ6H47rJZIo2m80Ha9as+cvo0aNfj42NrcNqLJSJ + uBuXQF4w8xb8zz//jIAAwLYEdsfs3BHPlNigP5DJZMrQ6XTRAwYMGEka6xTZ5J8fmPvT3L592+/s2bNP + P/744zPh/w4KCkrDukMXQKPRmCs+gL9vdxYCyqh5AQmvke912cKYMnNOm1fei+wIaikhZvoUlUqFGIZ4 + i8WCIM04aO7kfYWyALh4HXvtcsWKFX86evTo48QNJ4QAAQGB/ztI+dcoyAELRhx07dq1h9etW9dtyJAh + nz700EN/WCyWMJVKhY5oN00mEw5cWj89zyHL/w1iGQhNGdPpdEk6nS5Gp9P9PXjw4H5Xr15FxzNndTOe + +PEK/H+wAsD27dsVAYBlhGBQnmqXLMPnTNMKQ7PZbNC6L/Xt23e0LMvlKGMu6WfECgFkndYYM2bMUIPB + sEOj0dykaxIMlWjfShYEvx5xb7hHep88I0XvAIZ586RYADAn5H3s3OD62Btg8ijEFGez2c7WqVNnX2ho + 6MqRI0dOnzlz5ogtW7Z0j46OfvTAgQOvV61a9R9JkpKtViv2RJ5nkR9RywP/OoQgjUZz1c/Pb35UVFRT + UTFQQOA+Bs9I6UFAfsdhaouLi6u+Zs2atiNHjvy4Xr1668qVKxcuSdIVUoQFzVyU9rC08QnT29158OAw + hemYNXu6MJPivdAgndqRwWDA918rV67cjvHjx7e9du0arA70sC9RzfJeATNflf78889PEAOA+QWjYpkE + z+xcEZs5gOdJXle6+mm1WmiycZ07d/4aefpFjfb3Ftw6VtZubGzsg2+88cZYh8NxHJUD0bmPDRIkdQqU + pkDMunMpvLJE1i9d48pniIkfjB5rFv0WEk0m06UHHnjgnw4dOiwZNGjQ+MWLF7++efPm1pGRkXXhsiBx + MljTMMnToFhl7FFRUR1q1aq1Gd0HbTabV0IAt6d4wr66ZbVafzp58iSKBYlWwgIC9wtYJs+9joPAjICq + 7du3P/nBBx98Ur9+/YMqlSoeJkqYKlHRjR54YPLoAOfmkFEIByXDKJyHkys/LBUO8Ds0KaZxDA5n+JRj + H3vssUnx8fFgLqygIg4uN2AYIlw21ffs2fOZXq+HewYuGGcAIH0u/PNzR4z2jEA7xecP8/KTTz75dUpK + Ci3yU6oCAMDcr3JN8tMUFhZW45NPPhnm5+e312g0XifmdUVwZZi+UygAc6cCEe4Tgg8x9eNeFbcVZfRw + XdWtW/d4q1atVr/33nszJ0+ePGzDhg3PoSZ/fHy8jWHqdEx55oIbN0iLz549e/a5gICAdZIkJTH7Ic/z + cEV0n7FCNv0f3BBarTY5MDBwwalTp1A2uMStNAICAncYzEFDDxtoHQHbt29/5KOPPvq8bt26B3x8fJAn + jo5rSutVRFIzfcjzHDLMoZLnNfo3tE1qAWD/R83PlPHbbDbn/9iKcvRwtlgs6CC3dtu2bY2YMqelxmDu + NjDzg7lqsHjx4mkmkwnuGkWjhNWGf175EQ3+I0IdngmYKNbJhccee2x0SkoKhDMno7tTz4Vb4/QnGLHf + tm3b6g8dOvSrhg0b/o2YE1Qo1Gg0t3x8fGDRQhoh1j5+UkqwWCzX/Pz8jrZv3/63AQMGfDN9+vQBGzZs + aH3mzJk6pLARNHgIWW6DHfnXuL3ICwAgDSxe58+fb1OtWrU/icXNayGAZf7snoLwYzAYblesWHHxwYMH + nZYAdowCAgL3CJhDBhvdeunSpQcmTJgwuEqVKqipflGtViMQyRko5SrwiWpD7gQClsHTiGj+83gPjbbm + Pw8Ck6FWA3o9qskQs2uSzWZbv3DhwufZaGb+fgWczxyMKSg7O/uVli1b7oA1x26353lurp6nO6LaKGH+ + 0fXq1RsLV1F+DPBOwAWDpesf68YPHQaPHTv26G+//dZ12rRpb3755ZdDJ06cOHT27NkDFy1a1GfDhg2d + wsPDmyUkJCAGBQGN+ByEKY+YpSfvcQVGGMB1/Pft29e1SpUqa0gMgVt3AC9g80SfMRe7kRQSEvI9hBlc + jx+LgIDAXQzu4HNcvnz54Q8//PBdu92+Ef51Yr5VtEH+wChrRAQSmGfhkthGhABR5tQFqCkZFp64uLjO + 3bp1gxaJADS3GiRrMub/ByJCm6L5W61WmMDPBwUFTSFmZDBGqr2WuWfBCgEuXsc8sQWqcC+0XHGB98IJ + GAW+vyBw36e+efMm9m3HoKCg1UajEUGN8OM7n5k7YdoVUSGcPmMSvwOh+kcqBBTHPQgICNwh8AcSKZta + ed68ef0rV678F0y2FoslnfhA82j6dwHl+Pv7J6lUqvV79uxpSwKpxKFFwJi8feLj458ePXr0AgTo5ac9 + 5kesGdnf35+mrsX6+fn9sHnz5hZXr151CmHiORQfWCEArobw8PButWrVWqHVaq/hWdJCR94IAVQAYF+D + ZQ1CQGBg4E8IUKRCgHieAgJ3ITjfp/3GjRuPduzY8UuLxYIIfqQjObVAHAgI5uPN9WWVfHx86O+IPk/Q + 6/UroqOjnyLVB+/7A4vMAQ5wBKA1mzBhwgy1Wo3yvwheyzOfBRFnDcC6yTSbzSi0s5xYYHAdjzRlgcKB + 2ct+p0+ffi4oKGiZXq+/XhiBzpUAQF7Hs71doUKFBceOHUNMACwg9Lri2QoI3A1gtQaY/MPCwpBO9Du0 + fmhu/v7+zjrwCLpjI+/5Q6GsEY0NYMaKIi+XHnrooSlod0sPLX5O7hcwzB+m7AaLFi0aq9VqT8PNUxzP + FxHwKpUKboQ/JkyY0An+aUbYvG/nvaTB7GnNrVu3fGJiYtr7+vquUqvVN0lqo0um7o5Yiw5LyHTQaDS3 + fXx8FkRFRcGtI+oECAjcbaDM/59//ukYGBi4GkV6EODHMgEcAJ6aDcsa0SBCcohlWCyWY6NHj34L/u77 + +bAizx2WkFrr16//SKfT/UtS3vLMoTtyxxyg/dvtdkTFb+3bt29v0tzHaSrmxyJQfGAEACrgoeJhl4oV + K/6l1+sTkNLI1CUokOgzdvecjUZjotVq/eHEiRMNqWWNH5OAgEAZBDkkzEePHm1vMpkQOXwbndnYcqLI + /6bCAA4BX19f/hAos0QD1ejfpMFKosPh+OP48eOt7tcDizx3xHpUOXLkyFCbzXZQo9GkeePayScIEHOM + wMv97dq1G4QOfIyJ+L6b6zsFMt80O8AvKirqRbvdvs5sNqMBklfuAOoKoM+bfeY4LzQazXWHw/HdiRMn + HoFFiR+LgIBAGQM5IHRnz559zN/f/w/kMaNKG/X588zAmxrjZYGoxYLeB1wC5ODCPUYPHjx4FM1F5+fm + XgbVDFGEJzIy8q2QkJD9pBqdc648edaumD8K42i12nS9Xn/qoYceGhkbG1uFL8vMj0eg5MALAbAEGI3G + tYGBgahfUKQ6AbCskd+VTA+dTnc1JCTku4MHDzaj2Tb8eAQEBMoA6MEQFxdXo3nz5rOR8oXKZfRAoMzT + XR7/3ZAJwLow2AqDpHZ7ilarXXXq1ClYAZQGQvwc3YugzB8m+YsXL/avWLHiPr1eD+bvjBDnBT93xK8J + fAdK/BoMhiiz2TyD+IVFsOUdBicEOC5evNjFZrNtIwG+bi0BnrqCmLMAgaMXQ0JCph8/frwFbSDEj0dA + QOAOgtHG7F26dPnAYDCcI92/UEbXI+0PxB4QvFmQfY1/nX6Wdi9j3w/BgzRhydJqtakajSaBdD4Dk0JQ + mdIhjXZUY1vNMhH/nsQr4OA7/dZbb72Pxjf3w0FFmT9SxOLi4l6B5m+xWJzMH3Pmwbw5ia4Tpuws1tBV + h8Px/d9//w3BShReKiNghYCEhATfixcvdi1fvvxms9mMaplKBU88S+xLb4R77FnGEoR9m2k0GmOsVuvM + 06dPo4GQ0xIg1oKAwB0Gw/zVK1eu7BASEnIIdcotFgvbkcwrLZA9MLiSvM73uDIXU4YPZk6qCirNfCRJ + OqFSqbaHhIT8+uyzz05v27bt1EqVKi0xGAw71Wo1atPDv4yGMji48ozJUwEGpU19fX2XZmZmNr7Xq5qR + Z64F87958+bL9erV22kymVJpbQf6PPg5KoisVqvC/I1GYxYCzCRJWvXbb7+1FOl+ZQ+cJcB29OjRztWq + VdusUqkgBMCE77UQQPc28xoyAyAERAcGBk6LjIyEJcApCAohQEDgDoJuPmgBzZo1+5nUMnem+tHN7Ckz + 4Jm9O8L7iHbv1BaICRLNg2IsFsuB+vXrrx48ePDYtWvXdr169eqjsiyj0hh8yKC6V69efebDDz/8wN/f + f4PVakWHwUzaqpU9sDwVAEg74SPLli3rA9MoP1f3CujBj2eempraDXXt0TqW9f/yz5v/2xURiwF6P2Ae + k3U63c7Ro0d3IMxfHPRlDKzwT90BJ0+e7FyuXLkNJpMJGRtKwyNPnj0lFwIAiJZ9jkHZ4GPHjj1JLAG4 + rkgDFRC4U6AHwA8//NAd/jpsVpZheir5g2B+p5ufpNpRhqKYFKGdg8jrtCIcSpNG6/X6w82bN18+cODA + scuXL3/5woULiB5+AHXoie+QpozRQ4OmrAVGRka2evrpp2eRVrWZpDWrM14Bv7s4lFwRXB7XW7RoMQvd + 7+7FQ4nMIebSkpKS0r5JkyZ/abXam0T4UebBlenfQyZAnyvcCEf69+//itD8yz44QcAHZYMDAwPXabXa + JBoH5OHzVwjvdfF+nCsQ0C/7+PgsjIiIgFVIiQkQ60NA4A6AbnzUCm/QoMFyjUajdPCjGjTL/Pm2vPmQ + YgKG5sCbAsGcSYe0y1ar9d+GDRuuHjJkyIS1a9e+fPXq1eZorkJy8XEwKJH4zOGUHxnS09Nrv/TSS+Mg + BLDxC/Qg8sSFQSwSGOPuU6dOtbvXggGZw9aalZXV5sknn/xDo9HcoMyfxGF4KizxpDB/vV6PNXS2U6dO + /UkDHOUZ8WMRKFtg1gbSMx0REREdypcv/5dGo4FFkLY+5p+5S6ICgCshAHEhBoMhzmKxzEOjJDYoVKwT + AYFSBN30a9eufQ6NWbBJwSip9kdN9HRT8xvdBUHKZ/3w2OzJRqMxVpKk44888sifAwYMGLds2bIuFy5c + QLlQ9H73IYzW2UTEkwOBEwBA2sjIyHr169eHG+M2e2Ax6Un5ErlXCC6X3nnnnc9gfeCve7eCOeAt6enp + zzVt2vQPlIPV6/XOEr+u5ohdA/kQ1fwRs3G1U6dOr0KoFObduwucEOAbERHR1WazbbFYLIixUQR7F8/e + JVFXAHXxMWsL7sUsjUZzzeFwzCN1AkRmiIDAnQCKv/Ts2fNr6vtHVz8+iM9VYJ0rQilQckikaTSa6AYN + GmwZOnToZ+vXr3/2/PnzMKnTlqjIA3ep4fPjyw/8Z/HdP/74Yw+dTheGsrP0wGIzAwoiuCcMBkO6n5/f + ups3b0JI8XpcZQ30YL9x44Y9MTGxQ9OmTZXqjjTlC4e0O1ePBxYByvwztVrt5Ro1akyKj493+vzv9rm7 + 38C41yCQ+0RHR3eyWCybg4ODFUuAi+fvlnhLAONWUtaMVqu9Ub58+fkHDhyAEIAOioU+CwQEBAqB1NTU + CpIk7UVNcBr1Szcre/B7YEJXTPw+Pj7Rr7/++szDhw+jtj4CfRRmz25ofqMXZbMz30EPrkqVK1dejiA0 + BATSuAMX481DOKjIIYV7Obt48eJX74UCJmR+TNeuXXuuXr166xHzSQL1lPtm3Tu4f7bOgyurAEfUtZNQ + rVq1Ubdv3/ZjrnlXz9v9CmY/wRJgi46O7mwymbaSbBv++TupAEHRSUTYpIJjQnBw8AzSQEgRAvjxuIJY + XwICRQQ2+bJly14wGAxK8B+/UV0RF+Sn/I6UQZh/y5Urt2fNmjXP8k1AioPRFwTmGvqPP/54AGIBSACT + MkYPGJlCVACA2bNx48ZzUbaWv1ZZBjvXDFkQ2FWhQoW/zWYzrfjmMtivIELnR/J7js1mUwI5tVptbIUK + FaZeuXIlkB1H7pEJ3G0ga0exHF28ePH5wMDANQaDQbEEEGtfrkBbT4i6Bsh+VNJ9DQbDLZvNturff/9F + TADcgRA8IAzANQDCeYLXnG5CboxirQkIeAtsrC+++GKYJEloDZpns7oidrNj85O870x/f//te/fuRaU3 + 6vd1+n9Lc4PiWpcuXXpAo9FsB3NC9oGnmgmImixJcaFT+/btexrzxF+nLIKfc/K37cKFC6HVq1ffCObP + Rvt7KhRRYtwBmFPF7I8ukcHBwd+EhYXVuNdrJ9xvYNaQBpadY8eOdatRo8ZajUajuI9Yi6Gne4wKAMxr + CDqGQJFSoUKF3X/++edbf//99ysffPDBFz179vy+c+fOv7z++usT33nnnTHTpk17e+vWra1u3bqFNGA7 + X1KaJ/5+BAQEGMBn3r59e6TPQarPs1l5Yjcu1RyJlh09Y8aMl2nU/J3egDgcQkNDEdeAgypXWqMnxLgM + bg4bNuwjREXfyfvxFC6YP9o5v4gKbwXl+Xt6gJP5RFQ4ov1jAwMDZ/7999+N7hYhScBzcGsJ5B8REfFi + UFDQaqPRiLbOzjgbT8mFAKCsKRK0m2kwGFDPAwHJ8Xq9Hk2KknQ63W2UJsd6kyQpzGKxrO/QocPXf/zx + x/NoXkXcdGya8B09fwQE7gogyKdixYprYb7ny/C6Iqr94yeCBcnmT2nWrNnvpDjPHWf+AA6DdevWtZUk + KZwcUnnuxR2xFg69Xp9drly5TQkJCdBu7+g9eQJm/nEY+u/du7d7YGDgVp1Ol8xmRbgy/fMCgRuizB++ + 4Njg4OBFW7ZscaZy8eMRuPvBCQFYV75wJwUEBKzSarW3aJ0AF0zdLbGBgSwR9xLWaQ5TThptpGElUNYe + sTwh2+S6Wq0+1KhRo1k//fRTN1mWkUKMdSgEAAEBT5CcnBys0WjQ+U2poMdvSJ7opmWYJDbqpfHjx79H + THJ3fOPRMVy7di24WrVqi8uVK5ersmF+hEOMZYxEyImdO3duD/gk+WuVJTCHNHylwStWrOhjNBp3ksCt + XD5//vDl/3ZD1OyPao2n7Hb7ks2bNz93r9T3vxfuoaTACZZYX0EREREvly9ffj2KSJFgvgLPD0pUAHC1 + 7kgRr1zrlfm/8j8S3EsFgSshISFb27dvP+bcuXMQRtkyw0IYEBBwhxs3biDA7ZinpjxWOyb+YBTbOXPg + wAEwAmcaD3+d0gYZh+7LL7/sK0nSJRxQvMbriuiBBGGBcQOkP/roo3PQOpW/TlkBc+Dp09LSqs6ZM2eg + VqvdC2bNamZM8FWu1zyYG6wNyvzP+fr6Tly/fv1Td0uhH2Z+XBE1b+e6j7J+T3cCzHxBEAiIiorqarfb + 15pMJpjqPTpDKFFXAF2T7LrEekRmCt2DJNZI+ZtZz1RQwLqEe+tclSpV5sbHx6PplJK5wz5b/l4EBO57 + nD17thJ8ap5K8KwWzbgAwmNjY5uUpY1GD/OYmJhqGo1ml8lkQrBanvtxR2zhIIfDgXs8s2/fPtxjmbg/ + FsxBZ4iPj2/yySefjNbr9UcguOAgJc/JbT8EJrDPHdFDNtVoNEbabLbv//rrr8eYMq5lbk4Ajsk754hY + qoIhKGVkZCBVtZ4syw+mp6fXREosBD1yb9B0lXsrq/dY2uCYKuYnMDo6uqfZbN4QFBTkrCvhKfGWADB5 + /j1Ym3wVUqxp1gqJTALEpKhUKsQPLD5+/Hiu5lPi+QkIuEBkZGRFnU533FMBAMSW18VnjEZj2K1btxAE + VqY2GhmPsVu3bl/o9XqPgxxZZogDiWjHScOGDUOb4DIV6MYcyLC+NOvXr9+PkOtIal6e+wPxJZ557Ysj + qmXB1HparVbPWLduHTQsa1l61hQuGD40VQSmBsqy/FB6enqbEydOvLpgwYIRH3zwwYRXXnnlhx49esx7 + 6aWXfujdu/fUMWPGfLp48eIBx44dC01NTYU5uTwxKdMAszJ3z6UNbn4VIeDixYu97XY7GkopDYRcrCOF + ChA0FcJ+o+uTPWsQH8CkoDrfy/yutAxXqVRISf1+w4YNrek6Fc9OQMAFUlJSQiRJ+lej0XhsvmOZBVwA + arX6eExMzMM4EPjvv9PAmNauXdtSrVZH8wcTex/5FQoiJnLEEGxLTU2FxeSOgmNyIENSUlLL1q1bowTy + VW+DHnliKkFCuFP8rBqNJkqr1U7/+++/H0dOeFk8TDmmD8aEEtMNZFluvX379rcHDhw432g0boLAS1pI + I6IcnScRXR6vVqsxd+fVanUYrEbly5f/7e233x559OjRNrIs1xYa5f8HM9fKfKekpJS/ePFir/Lly2+A + sEybcbEM3wM3U3EQrgtr3/mAgIBfDh061Ja1VIlnJyDAIDk5OUilUh1Cv24Xm8klsYyTRJafCg8Pb17W + csDpZke/++rVq6/U6XTQYp1aPlvtLj/Ce0gw0o3Zs2cj1fGOHiAsE4KGExUV1b5atWro6JfACzneEjQs + cmizQVbRDofj+9WrVz9x7dq1Mqf5c8xIR3oQIGujy+rVq2c3atRonSRJJyRJuqXX69MRte4q4BVrmeS1 + Q4vMsNvt0GZhTVnTvn37KRs3buwANwGXe15m3F6lDW7etYmJiUpMQOXKlWEJSMU8U9O9K9N+SRHqfuD5 + mUymq1qtdvmRI0dgsaLxSfft8xIQyAME8pjN5r2kA16ezcQT77MjEveZHTt2wOem5b+/LADjGjVqVD+i + 6eU6+FkBwJ3JHO8hQkNmo0aNlkGj4K9RGmA1GBxksN6sXbu2V1BQ0Ha1Wp3qTbe2AghVEJWAP5VKFW21 + Wr//+++/y4zZn5sHeqhD4zfBQiPLcvt//vlndMeOHVHy+LJarU52OByKhQuCHA06Y+/ZhRtEiTRH0xq1 + Wq2kPEqStOGll14aExMT05ipd0EZ4B2fl9IGN//U8uJ/8uTJlypVqnSQ1p3Iz7pW3ETiAmjMSobFYrkm + SdJvpMKg6DUgIMACAU8hISGbsFn4Q9EVUZMefS9hOpGrV69+vqymyWGjx8bGVtZqtYcRLMSbImlwnKto + ZEr0dY1Gc3HXrl0N+WuUJNiDihxc0EDrT5gwYaTJZDpAIvPdCjBeErI6lIA/s9kcY7fbZ+3YsQMBf2Wi + H4IbpoODHYF7TXNycgZ/9tlnvzscjpPEH+10bbHPlRVkWaJlbVnTNdY4tFmNRpNsMBgifHx8ft68eXML + 3iVQFuantMExVMwFgiyrRUdHj6hcuXIEfPJ0v3nTkKuwRJ8bagiQUsUZNpst3t/fH/UqoKRgrdy3QpuA + QC4gjatevXorYep1xfh4ohuM/oRvXJKkqAULFiBP3sh/f1kAOZy0zz//PCoDpkCzY4OJ2Ajj/IQAQul9 + +/ZFZcBSc3dwh6zh9u3bzTp16vS9Wq2OQNfC4tT8idk/TafTxSDa//Dhw8h8UPKq+XHdCXDMRtH6UYDq + 6tWrnf7555+ZtWvXPmgwGODXz8BzZoU9vl49z/z5+YDmyrpEQCqVCpYyRLv//uuvvyL19b5ueezmeaDF + d782bdrA7ZKJZ8AH75UkMe4GxRJgMplQsfKaj4/P75s2bULqKnXh3LfPTUBAAQKlnn766bnQ+Fwdgjzx + AgDxmUZPnjy5HxgF//1lAXSTr1u37nGMFYcCNASqMdOf7szDlAijyPH39z9w8eJFdFAscXDM33LhwoW2 + jRo1+l2r1cax2m1QUFAurbUQpDA4ME4EUKGxDzGblpk+7cyhTYP8wHwfvn79+luffPLJ72q1OgbrGM+X + BKcq94bn6uqZumP+EAh5bRVrhAoCqEan1+shBKyZPn16e+IauS+ZCfdMsFYcaWlpz3bu3HmNn58f+osg + PS/P3JcU4Vo07RUCnMFgYNd1fLly5X4hrYfz9BDg701A4J4HBICePXtOg7+ON427Ivoe+hMNc9AM5pNP + PhkABsV/f1kAs8kdDRs2XEKYhFMAoIwCB4YrhgCir5P33poyZUqXkjw0uMNJacSyc+fObiEhIRs1Gk0C + mqfQZ+Dr66v85DVcL4j6TLMsFsv5atWqjTty5Ehdtq8DP77SBjMXVMsMlmW5zerVq6c0aNAA/ubr0M7J + elTui697wDN1V8S6UfCsWf81I2AhWBDCFxjc77///vuTrKBUFuarNMDcL9X+bWlpaU926dLld41GoxQG + YoP/7HZ7nvkuCWLbf9PSwmh9bbfbEdCKWI45hw4dQtAy1rfTHXC/PDcBAScgAPTv338c/KWe+JBZbZn8 + xIF7+f333x+GAiv895cFMAeVbsyYMQNsNhsqA+JQUO6BZZweMH9Q5qOPPjqzpAQejvlrU1NTK06ZMuU9 + SZKUwCrazY+aqPG7J8zNDVHmD9P2jdq1a399+fJlBNLhQC8TflJmLqBlQutvEhYW9ka3bt1WkCqPaSRd + MZfJnxLWLH3d1fPlCe+hsQDs+1n/Mq5lt9uhVV5xOByzz549mys7gL+HexEc87dkZWU91a1bt1+1Wu0N + 2oabWl+KIJx6RfR84iuWkt/RvTBdr9dfLFeu3A9IaeUDA/l7FBC4p4EDdcSIEZ9IkoRuW3k2lCtitH/8 + hF80/qWXXvoMwgT//WUFdINfu3atpkaj2UMPKBA95D1hDuS+0f/g+I4dO9D6uFgPDY75G65cuVK3T58+ + iF1AHj4YToH+fhx4rhgh+3/yO63tjziCS+3bt0dsA4Lp7vhhyM2DIghhfd26deup0aNHf+/j44PqlbeJ + JYT65/Pca3ET1SyJUKikm2m12tMNGzYcgvr4ZUVoKilwz4Sa/s1ZWVmtunfvvpx23+TnzVOiz5K0GHcS + Y8pXmDt3BuWpFOiOSBAwLAGXHA7HTwcPHkT9EhoYmGvN8fcuIHDPAZL7mDFjPpAkCTnkeTaMK+KsANiU + N0JDQychBYj//rIEsrHtL7/88ni+Na6nBwghfO7mwIEDBxVn6iNzqOKnaceOHW2rVq0KLfea2Wz2qFAT + GweA32EGZzVZWr7ZbreD8Suav16vD+/evfv7JH++VA4/eg32ei6YC2UwMPlXXLZsWZ/q1avvMJlMSOdU + mlexjKGIMRAeEZ1HEitCW9gm2Wy2dd99990zTA36Ep/DOwXm+eDZWJOSkp7q3bv3Uldptl4SGD9dlwpZ + LBYIval6vR4WKqUjIH0/9fXTveuhlUHJ6IDQa7VaLxoMhlkHDx6sTwRMdv/d089QQEABtMxJkyYNUKlU + Nz3VoKj0TYOiIDw888wzP8myXI7//rIEsql1mzdvbo3GITgI6D3npzHzRHzLmb6+vhvj4+NRSdErsAcL + x/RAOFSDx48f/7bBYEA9/zRv8qh506cLt46z2I3RaET64OkRI0b0pu6M0jj03B2wzAFMmQt8tCGHDh3q + 1bZt22WkUp/CCFwxGm+eYVGIxopgDEQAgHAWU6dOnc/grrmXrQDMGlXM/mlpaS1feumlxRBSDQZDUSpQ + Yh4VgbRKlSppJpMJWjro3LRp0+YFBwefIbUuskmch/L82TgPT88v4sJRhAAEjup0uimRkZHoB+F0e92r + z09AIBfAEOfMmdOdBFHl2SyuyIU/Nfnhhx9egcOa/34ed3pjYYOj4cuDDz74m1arRUqgU3P0UINAcyD8 + xAESM23atA74Tv46+cGNAICDxxgZGdkiNDQUB+p5wuycY/OUwblh/DRgUwn2MxgM6I1waOLEiS+VVCyD + O3ACD0tOfzIK+sTExLz49ttvL7ZYLNF6vR7PCj5caHCU8Sr3yvvqS5pYgQzjIG4UzOe6n3/+GaVn70kr + AMP8YTL3zcrKeu6VV175DcxfrVYXlfkra9NoNOJ7oPUn63S68NmzZ7978+bNyvHx8R3q1auHCoMJVqtV + sYaRao6KQOup9cdmsyk/8dxIcShULDwTGBj4VUREBBpDIY5DCAEC9wewoZcvX95OkiSkleXZMK6Ibjb6 + Ez616tWr/w0zLf/9rsAcJDjsFambf09JgVzbOnHixIGk7js1IztNigURo/0l1q1bdzriKPjruAPL8Ji/ + MQcVVq1a1a1GjRqb9Xo9Ctg4tRxcz5s8ajwXlklBcCCHJNLjECkPa8/GxYsXdyXFbJTnwY+1JMExfcr4 + MZZasbGxnUeNGjU7JCTkDGGsSoAfr/UTP3yu++TnoiSIZTYwSWMNmc1mMK3wVq1avYcKjfeaFYB5Vsh2 + QKxDtw4dOsDnH2cymTxyT7kh+lzxHRB4QbctFsvR2bNnv0k6N+KaIVgX9evX/0un08HVoFzTZrMpnycx + A/x35yE8O7pOyL5XridJ0uEGDRp8cPr06WpCCBC4b4CFjqpmiGbmN4s7oocu/YmUKH9//22yLCN6PM/G + YZgcNCOkb9VOTU1tgUYdBw4ceDYhIQGlVasQBlBsPnV3wDWuXbv2sE6nQwVEmBmdKYEFEWWshKniEDq4 + a9cupRUyfx1XYA5SygDNKSkpj/Tv3/9nk8kErd8Z6AdthWX8nlooWMI4URudfCe+O6Zy5coL/v77b2iq + lPmXKrPimD8OW1t6enqNpKSkrp999tlki8VyGKmWTIMqZT4CAgKU+XBhgVLIG1cJQ/T78wgYroi9JrG0 + KJ8hWQhxarX6u8jISKRQlvg6Lg0wz4q6ZLDH+77wwgtrSZld5Rmh6p6XcTQgOueK6Z9UI0Vg556ZM2e+ + ASsDaxWCEHD27NnOvr6+f5BrK+4gXJuNDSiIiAUPz09pI4wzwGAw4Pv+ateu3as3btygWTD03kttbwgI + lCqwwQ4fPtyApFN5tIn4gxeHoE6nO4ASoOSgoJsWBVLQTrX2uXPnWm7btu2NkSNHzn7ooYd2oiCP0Wi8 + rNfrkZcbUb9+/dWjR48efOHChaaki1uJMSWyqYN69+79ORF8PDYhsgIATYF89dVXEQHuUREkhvFhfsqv + WbOmW9WqVbfpdDoEYTq1GnY8/HznRy5SGpVDVqVSIejpdKNGjb48evQoWjcjsE7RvvkxliSY+4cZGc+5 + XkJCQtdJkyZ9HRgYqDB+h8NBhSBnqqarNEcIbWA6hRGMOKbPWhjy3QO8u4j6owkjgeVm1Zw5c1BytkxW + xfQWzFpFNciqsiy/9txzz603Go2ogZCFZ+DN+mSIzjvV/CGII4Ng2+LFi3snJCRQ5g+i1kJYAgLT09Nf + 8PX1Xerr63vZYDBgrSjPzxsLEH1vQEAAxoExpPj4+KDx08+9e/fuhiZpzFkmhACBexNY2GFhYTWgGXpa + Upbf8MQXFy7L8mPp6enVYcZFcNDWrVv7ffjhhzOaNWu22m63HyWtauHLRXlQNm0Ln0c61eWAgIB1CxYs + gPSP/u0ltvHAALdv395RpVIdNBqNiq/dUw2GcxWk2Wy2P+Li4tB9zi0z5bRev+vXrz8yePDgb4xG41mk + khFtRPlOvhiNNwyOfS8TIZ/k7+9/uFWrVh9du3atFmPiLDEhiwfH+JFqWDchIaHH999/P+OBBx74B2sD + nfpoGhjx8yv3AaGL1fpxj/ycuIt7cEEs00cQJNbkKfSzIIV9FIuQi88pRK9Lg8/oePF9Go0mxWAwbO3X + r19oacdVlATIMwPjhbCI9T2gc+fOf+v1eoX50zmh+8bT/eOC+eM5wAW5bvbs2QhIxd6n65MlpdogmPOF + CxdC69at+wsEcHwHyR5w+9woUQGeXSs0KJa4HsIlSfp29uzZT7O9Hvi5ERC4Z3Dp0iX47s/SAjP5EWV+ + 9EAmmhnMf9eWLFny7fDhw6e1bNlyodlsRpOaCyqVCul2iqmOFxxcEL4Hh8Hx7777rk9JaVHkYNOkp6fX + evDBB38kVcs8dgOAGGaNOTsxa9asTq7GyzB+ephW//PPPwdBKEJpUrainwfz43wfDV5kq56BGJcBPdRu + GQyGHe++++5AYr51mjb5sRYXuHumBKEDWt1DV69e7TVjxozJ1apV24UAMjBdEpmd5169JTYqHMyapj2C + yEGP+YbWCIazo2XLllPnz5//5g8//PBO06ZNURL7OAQm2i6YzjN+L8DFgPdDeNjftGlTtIxW3Cv83NwN + YIQ1anqvmZOTM7Bz585wmcH/XuA54Y5oBD7S+kh7bpwP0OT/mDFjRjd0J2W0bqf2zRAtOVzh/PnzPWrV + qoWy2LAiZtB4DFyHt0wEBgbmGQtH+BxSS3EWHLbb7Z/s27cPrhxnjQB+ngQE7glcvXoV6XunSTAPvzFy + EZgVNhZrkiUHY6bFYrlOtAOlHjvPVD01sxOf3LajR48+wo+1OMAcJj5ff/31G7BegFnyWqUrovdABSFy + f3ENGjT4EmmQ7EFBfycHCA7SRwYOHPhNUFAQitiksGVrvZgbt4wIPnIy5/Qwi7XZbKtmz579KmnQUtrM + n2r8YPwNbt682RsWoQceeGAPKcma6nA4nKmYfOnewhLmh2X8pJOfonHq9XownLAqVarM/vXXXztmZGTg + kIfGGZiamtq8b9++X8ElhfdSvzIV0Ap4RngvBItjVapUgQVLqanAz09ZBbNWWeZvTU9Pr52Zmfl29+7d + N0JgZTX/QpDC/FGy2Ww2g/kn6fX6KIvF8stXX30F5o/9AwbvXEOuxkneY0pLS0MTqJerVKmywmg0wpWH + 1s3KM8f1sDfxzKhQ7EGQr2IVIt+1oXHjxq+RgE7nmPjxCAjctaCLGv42ovl4LNnjsKbMnQ3MokS1L2+0 + aoawgRNbtGgxhTItfuxFBbl33cWLF5vbbDYU20GJXSdDdke8D5j8hNViPemclyt4CIz/9u3bNY8dO9Y1 + JCTkV7PZjP70zvQ+MKsCGItLwnWpIIB5JulNNBoajOhcpUqVvt29ezfaNONgdWpT/FwUFdz9UsI8lMvM + zGz+77//9nn33Xe/NxqNiqmfzJfHa81LogyA+uUV0mg0YDq49l/9+vUbfP78eTB+JeiUHPCwUPgfO3as + m0qlgmUig1gMXLocXBCd91MGg+GdslwV0xWY58Zr/m937NhxG9wjJOiVv29PSWH+0PwdDgeef7JKpTqv + 1+vnk1RaBAcXKKByY4RronJcXNwrFStWXIW1pdVqqbUxl/DmIaEbJu4RmSdRarX6x759+6JcsNINM79x + CQiUebAHNPe3v8lk+teTQ5nVPlkrAA5I+ADxf1dMH0zOUxM3vstisWAsJw8dOoT4hGIHc5CU79Wr1yiS + d1/g/bMEIYj46PG5M3379n2LBC/hu8FQgmJjY5977bXXUHkQTAWBfqjC5wxuY338nmjA7NxSDYcyPJvN + pmgw0HBbtmz55cWLFxuURKc6dh2x30n+xmGJiP5Wf/zxx7D27dv/qtPp0MMA2iO0PqWQC+ITXK2TopKP + j4/CaAjTx2EOSlCpVGfKly8/e8uWLajWB40fDIT6lfG7Hs8uPT29IwLRaDthfCdvTnZDuGa6VqtFPAEE + gDLZF8MdmOeJuUBWBmJFBvfs2XMzMfsXlvlTgUyxwJA1kGQwGM7p9foF33zzDZg/nke+mj8LZu8qmQmw + BMTFxfWuXbv2HxACIOxB+KPlhCEMeBGfgPUJlxTuGZaqAWFhYXCdCSuAwL0DspiR1uNz9erV5uXKlUPO + tUcM0IvNpBAOUG8Pe5K6lvTRRx8hFqBENh2ZA9PGjRs76HQ6ZCbgcMozFp6oxs5qFwaDIUGn0/2akpIC + KwCYYJ0pU6a8bTKZ/rRarRAu0sD0WG2fTfHzdH7YuSfXV0z+JOAPB+uu//3vf++lp6ejOQ31XxbZh8ke + zuxBSH5X/Pvp6ekPREdHd/7ss88m1axZcx2EIgRWqVQqZ7Q4L+Swc+iltuaKnIxGq9Wi0mEKLCEWi2Xp + iBEjht24cQNavzP7gRzqlHAPIdu3b38TPmAwEfJ9Lp+3C8J1UVTmmNlshgvAys9hWQaZD8wBBMZaOTk5 + b3Xs2HEHmL/FYlGyU1zcsydEBQB8BywkeCYo7DRv5syZsE6xwphHDJYRAJxCwK1bt6pcunSpT61atf70 + 8fFBfAeeX3a5cuWU67OCdn5EhD64ipS1Y7Vav33yySdbkXnxSEARELgjyG9hkoULhu8PDe3atWtPrF69 + useQIUOGPf/88wuRgmMymTza5CwTgvkZlgBsLhzw9JAHc8P/PNCcchF3yGb17NkTvnW30fVFBb4bfs5G + jRrNIlqqR3PAuQBAOHD+nThx4vunT5/u1KRJkwlqtfqIw+FQ0vvofVELCubFQ83SLcFHTczUoAQfH5/V + c+fO7ZGSkoLUS6qxFIn584ce8ze+Fyb06rdv3263dOnSt3v27Pm9zWbbTVIrlbKt9F7ZcWNdsG1iXb2n + EKTMAyrJWSwWCHKIRdnXunXr0Tt27HiMc4NQ5sEShKXa/fr1m4DgVRIQm8tKkY+QRhkc4gv2PfDAA6iu + aOLnsqyCYf5Iy4TP/70uXbpA879JrFuwLuUR3jwgnvkjNuiixWJZOHHixBcYzZ8+A4/WqYtnqMQEIA35 + 3LlzrwYHB681m814/ooQB0uApxlOFouFCpFwAV3XaDRQDEYuW7YMKc4FuigEBMoEyEJFtCxM0lWio6Mf + 3bBhQ49hw4a9//jjj8+yWCzrJUlCat45k8mE/FuPtH96UFNmz/6voLrcnh4glDnAhNuuXbuvS1gAwDz5 + Tpo0qb9KpUJwnkemTp6h46CxWCy3AwMDj6tUqgNarfYiTSmjAhP9DF/Vj86LJxoKKDAwkB6sOX5+fnhu + t2vVqvXzv//+i9QlBJ/likPg79lT8J/F39HR0RAiKyDlc//+/a8OGTJk0gMPPLBZq9WeJKZi5Z5psCgd + M+6Nfw1aWRHiRCg554KsYfhvT1SvXn3etGnTXomNjUWBKeyDXIyGE2TwP2tCQkLr8uXLr1Sr1agMpzAM + D58J3ksryv3dsWNHaLZ5MkLKGpj7B/PHuqkjy/L/OnToANP3DVKWVym04+KeCyKW+dNUvytqtfq3yZMn + w+yPaH+vNH8K7vlRcgoBiYmJb1oslm2+vr4JpPqlMhZXZ5ILoo2yEFAIgS5apVItDwoKguvIGQvgzXgF + BIoN+S086r9DQE1ycvJDf//9d5dhw4Z90LRp05l2ux1RvMf1en0MOahTscGJqV1hQgWYOBWihzUORvo7 + G8jGxghgw3nynSxRwYJEYGe++uqrH5bkhiPfrbt06VILk8mkBAPyY2KJjWVgGbndbsdP5cBjKtjl0XQp + s8d34DPsoeTJAUWsNAimApPFda706tVrMtoGEwsPPdQLnC8Xh6jLeSbaMbS1By9cuNDuiy++GFW9evXV + RGBCYB00OyUCm2WY7hg71ggvDGKdeLlWeMYPJhOr0WhWv/XWW0PCw8NR7AgaLWsJcc4Lc794TYto77Vr + 1w6GUKzX65VCRKzrih+vi3HgM9A6fx00aFAzts88P59lAWRsmBuME8z/AVmWP+jUqdM+CECs9YbuaXfZ + Jy6IPhPK/CEUIt1z+bfffosaCWD+Xmv+7sA8S3wnghfrhIWFDQ0MDIQ1Kgn3Qjo38uN0R3T8GPcNtVp9 + VKvVfjpx4kRYAbwWWAQEih3MgodvqkJcXFwDlHcdNmzY4Mcff3ymyWSCCe+kRqO5hE5/TOR1YaT5EiU+ + QJBEXWOcCTNnzgyl98vPQXEB333jxo2K/fr1+4T4J7PY8dAGIu4YWnETdanQvxlXgcJsiJky3Wg0Hp88 + efJbnMk/33liDku3DB8gWmG5pKSk+oiM/+STTz5v2LDhMjQQghmXCEpF8Q27JJbJsAIBeV25f6T0EQZF + D+qb6JzYsGHDr48fP94qLi4OVdxyFTtydZ/kdfwfglPj0NDQ72hlSH5cPFGBF0IPSTHE/kKsxzdbtmyB + 1aHMmouZswP3DWZcPycn56MuXbqgdgftvZDnnj0gWLuogIo202CgEA7j9Xr9munTp7cnRaA8WqvegFnP + mHdHZmZmw507dw739fU9qlar8WwUd5krIRNrixNulL4ZJA4E6/y8yWRaGhQU9CzWFXs9fhwCAiUGsugg + sdsvX75ce+PGjc+/9957w+vXr7/UaDTuValUp4xGIypjwe+sRFyzqW0emjNLnKhW4YqhMkFyOQEBAZHI + AiiNjQbzHoIBSQR4OhUAMB4vNJ8iE7EkKOTj4+P8nTB92sv8VpUqVdZs3769Dc0354m7tzyv8SCMENpT + 0OXLlxuvX7/+ZZj3a9asiQ5sCOa7ZjKZSoTpuyOsDxzasHaQdYwIbdy/ol2qVCowl6h69er99P3336MQ + ExgvmJpH8Q/kPXivz7Vr13r6+fkhUwPfmWcsLHFuDIwNcwLGud9oNPaLiorK9Uz4694JcOsDwhHmKTgz + M/ORrKysj7t3776flDIuNPNnBDKkXILppqIuiMVi+furr76C5k8tMvk+l8KCeeZw+UCweez777+fBsuQ + 3W53rlvsaawtV8IAs+/pc8V9wGL6j16v/+iHH37A9xa4tgQEig10wSUnJwdPnTr15eeee262yWSCJnZB + r9ff0Gg0OLRo1LKyyMHsWdM8u7jvJPFMH5sQPnLWBYFqYej9/fzzzy+gplR+ToobmF+kPtWrV28mTLm0 + CAxl/uw8ljQRxpfndZj8dTrdhd69e49FxD2ZG3qgOrWqguaLYQKwHgVkZGTU2bBhQ6fhw4d/3qpVq99C + QkKQEnqB1GbHAUgPT+f6KkmCFsmUMVYIGpler1eYP+kVHxccHLx+3Lhx/S5evIiMB/h/PWL8FOS90Bir + //jjj+gLAfdYgTEgdJ0SyxVMy0g7g/l/9dNPP92urOWNs+sC9xsbG4vxIe++WU5OzmcdO3bEWZJIAv7y + 3K8HRBk/2kxnOBwOnEcQFm/r9fo906dPf50IqsVi8s8P5B5pPEBwSkpKhzfffHMtxkP7NrBj5y2PzOu0 + zTPOVQh3KBX9c/369ZFaW+wWDAEBt8BBf+LEiUfq1KmDaH2YX5Gikku7B9FUFz66HL+XBeYPor5ePiAM + RCJ1ofFlBAcHb0ZPeHL/JRYESEE2tM/UqVP7qVSqY8S/7jzsXTHkkiJeSMK8aLXaNB8fn80zZ87EYQoT + NzVt5zFx8wcTeY/C8CFEnj59usHy5cu7jhw58ouWLVv+5XA4kLsep9FooAEqliM8B1gdSACYU3Pix1rc + RK5Br5ltsVhwACu+ZK1Wi34RN3x9fXcNHjx41Llz53AYU8bvNXMh84bPP/bEE0/8qlKplDoN/Jh4okIh + ERKxDyEknZMkafyiRYvKZLQ4wxjB/MunpqY+Ksvy1z179jxWVLM/KwCgrwXR/JO0Wu0RCGhMTX2vn1Fh + QAUdWszo+vXrb9WvXx/xKkq5YFrgCYT1Rtc1bxEgQgDuifYq2CtJ0rBjx47he8vU8xW4RwFz1pEjR56X + JAl1uJPpAuYlV1qUxsUGVRiKu//dScK42IqCOEi0Wm1SUFDQxqioKBQicWou/LwUN+gBGRsb2yQwMBDB + gBCynEIKz5RLkmjJUjwzu90OBnjzoYce+vPkyZOtyQGeh/lzr2ni4+Nt0dHRVXfs2NHy22+/7T9w4MDZ + bdu23R4UFHRWr9ej3jkONSVXmh7i8GWjkA57QNJnhDVWGmsI65tUY1O0ffxOzP5JJpPpWJ8+fT49fPgw + NH4a8JiL+OfKg3s/GKLv+fPn+5jN5iMkkC/PmHhiAgIVxqfT6RTzv7+/f59r164p+f+ejKW0QO6VMkS4 + SVrl5OSMe+GFF1ACO4UU3SpQ8HFDlPnTSH/sm0S9Xn9sxowZHTkrVWkxf/pslRiHrKysp9avXz+dFIRS + hFp+jfPKCL03xJqgMJBGo7mpUqmwRr4dNGgQsmA8Wm8CAoUCWWD66Ojo51Qq1Waj0Zjq6+ubS3J1xZTw + Og4omNVd/f9Ok4uNhsMDBy9Sds707Nlz5MWLF7HBcjE5fn5KAuR6QaGhoaNJd0QlGLA0GB9PTNDbldde + e23Vzp073zx27FjjkydP1t+2bdujW7dubbV8+fKXZ86c+cGUKVO+GTVq1PevvvrqqmeeeWb7Qw899K+v + ry8sRWD0YE7IyUevdUXL458BCWSjmpzyGv+eUiLKTKBVZ5JCPogeP9K9e/d3jx49ina0zuj6wqwP7rOK + +f+TTz75mvQm8EgLxnog2iLGm0FaWi986aWXHmaDxPhr3wkw9wl3T5Xs7Owu2dnZP7344otI20xh8vzh + dslzrwUQXTMQ2Gief5LZbN5N8vxhdaLPSDGb8+MrCTDXVLKiEMianZ3dt1u3bvtomippYe5c79TCx1lL + lfVIXDxwacDKsyE4OBiFgRQrD39tAYFiAVnA1UJDQ7/GAUM79bGmaBxC2LQ0oC4/ho9F7aqneimTsqFg + ztbpdPAvX4S5vWHDhku+/vrrvuHh4dDsEMCjbKzS3mDk4DCtXbv2OYfDsRUaTWkzf2pexrNkhAAwb9RO + B0NHfjb8zYhTSDAajTiYoHnhAMZBTLXnXMIi7xKiQVC8FQavsSme7Hv5sRYTUSaiMH4ctmq1Goz/kslk + 2tq7d+9hx48fR4tpZV24Iv455gfmc1RDfKJ69eprwLho3Ed+ROcBDIS44NJQA0Gv13+4ceNGZzMob8dV + EiBnCJgwTPAQnhAouahjx47wZycbjUblTPGgSY4ros+MpvlhDSZqNJp9U6ZM6cE8r1LR/Fkw18UzhsBY + Pi0trdWpU6cm+fn5QVhT1hwr8LC/M24BVsChqYwIFH1v2bJlSmVA/toCAsUCHE7nz5/voNFokMuKqlTO + Q5k/kHFIs4FJ9HXKREqbiRGiB4Si3RMNC+bnfQ8++OCiwYMHD1u/fv1T169fh7aPg1jx8xfmUC9OkOtX + rV69OioDgtE6mcKd0Irx7PDs6bX5MbACIa1LQK1Drkyb7GHPW5HcCZDurl1EcjJ9Zp2gkM4prVb750sv + vfRmWFgYMkCoFllops+C+Q4wCN/9+/e/odfrT6rVao/M/0w7bLgqMO5ElUq1w8fHpzPcM/z17gSY+6PM + H3EJXcH8Q0ND0eQGFiFlXeOZFiHPnzJ/aP6IlN8xY8YMtEJGXEWRn1VRQK4NAUApU41OnOht0Llz5wNG + o1FJC2RbULP3ToVeGpNEignhXuFCgBtgyquvvqq4AfjrCggUC+C7mjVr1vvE7JRdSCk9D7ky81EBwRMt + j2cS1BxKCgrhUIC/LF6r1aKl6iGVSrXxoYcemjxixIjXV65c2So1NbUi0hhpnXr+vssCYC6dNGlSHxRO + om4A3KurubsfibUo4CdrQWAFTl5gwDqh6Xyctg/N6pDZbF7wv//9r9vJkydpOh91A1GGViwHLvk+MIaa + /fv3h284Hg2a+Pt0RZRRkKZD0AxRCGnusGHDHoRZmH4/f83SAsP4lHRh3KMsy91zcnLmd+nSJYoGEPP3 + 5SHxef5KVz88P5Ln36U4auYX9nMsmDUDUz3iZiAEtTt+/Pg8PG8aQM2WNXejKNH1imeNe41Qq9WLfXx8 + 4O4pk+eXwD2AtLS0aqNGjZqEA4ZK6zzzLQrBHYCDGz/5g9oTguZJDnT6WprD4YDffG3jxo3Hffzxx123 + bt3aMD4+HkVqoIWUWYbPA+NMSkqqa7PZUPgmiXQVyzMH9yuxFif+df41hhRtCoGGqNVvsVhgFYJwu6la + tWqTv/7669ArV67ATE2b9dAD3CkE8M+psCDfiS5yrWrXrr3Fk9x/SkTgVe6FWObOqtXq4Rs2bECBm2Ib + Y2FB7g3md6Td1crIyOidmZn5a/fu3c8WkfmDnJo/yfNPMRgMl6xW65/jx4+HhQGadpFN/u4ECFev5QdO + GEL+fsPU1NQRL774opIRgBgAen65Yf70nul9457RJ+I3vV7f5dChQ0q8h4BAsQM56a+++uoMtVqNHtcK + A3J16HpL7oQIjpm7JToGThuGOfRKz549f0IJ4hs3bkDzcOZl8/dW1kEODp/+/fsPJ7nhMAHmmYv7nSAE + wjJFhUEaU8C4HpTDEwet0WiExghGi3Sqw5IkLWvWrNnH33//fZvLly+j3Sqbx+/U+It7/TBMwW/r1q0D + SH53rpTPgoikRmJNICtnb/369duC6fLXKk0wc6a0NUZTH1mWX/nvv/+Wh4aGoqYDAv6KIsgq90zy/Knm + f0Wv1y+fOnXqi6TJWLEyf3fEf8YdmDmhNS8qy7Lc5ffff18FwZ5ppJWf+4MVAODuQGVVKAZ9Jk6caOGv + KSBQLIAf+t13352g1WovQeMoKQZEK8/lswFyEWvqpa9hfEaj8eS0adPQBjVPFzRvN25ZAA6NI0eOtEJ7 + XZo/XICGe1+Qh4Ki0n2NZB3QQirnkM1itVqn9+3bt/fevXthQoVWRlsW08O6RBg/BcMQ6vbp02cuKXYE + AZa/h/wIlgxEhsN18fOYMWMQpOiMYeGvWdLgGB2q7dVLS0tDG+2lPXv2BPNXfN4u7sNTcmr+JCc+Sa/X + X9Bqtb+PHz8eZn9a27/Iz83FOnCuB359FHQt5jMYG6wiEFIeu3jx4gyHw4HGREqBK+rGdHHf7P2D4LLC + M0eZ9cFdunTB9+U7BgGBQgEaysqVK9Gc5DQ2H3xvxcGA6GLnC9uAsXtwsDuJHpgkQA2b48DUqVPRBS1X + 0BZ/X3cLyPgrNmzY8HutVqt0SyyO+b8XCM+eZ5hYB1ijxFqFgzXVbrcjFuQEmsA0bNhw9JgxY56Li4ur + cevWLTAplvHnIv5ZFCfINc2XL18OtVqth9VqNbS6PPfjjogAjAAyMEKY1Ufe6dK/DPOHqw0d/frn5OQs + 7dChA6xXcLc4Nd1CkJP5Ew0YwhwqkC4jPn80iSpUVz8KjlHju3Av8NvDKoTaBZhfWBXxO3u+5CsMcO+j + 84OmWUN79ux5kGRwuOwP4IKUda3VapGJg3TCUZUrV3YKfgICxQockPHx8U9bLBaUsYTvLlfeahHJGcyD + TW0wGGgFuAK/nxcSGFPvP5MmTWpJA6HuBeAAmjlzZk8EA5Io4ALn534iEkGuFFYhQVVKoJTdbj+t0+n+ + 1mg0P7Rt2/btjRs3PkaCP3Gos2b+UmP8ALkOGEy5BQsWfEy6Bzp94h4yArxPif6XJGnn448/jn4Mevr9 + /DVLGoS5OTv6ZWdnv5aVlfXHiy++iMZESLdV1iwaWhUiiJWeEWyef7TFYvll8uTJ3TGPRS3yQ54J1dBt + ycnJqHIJJt0qPT0dCkV3FGo6duwYsgvQTAhdHkNcFYJy891UAKBpn4hJar9gwYLfaWEg5rny98/PBTp9 + IlPlX7Va/Y1Op0PXx3vmvBMoQyALt/ywYcNG6PV6NGPJoH2tXSxOTwkaGhgZDi9oB4cNBsPqli1bLvT1 + 9Y2k5W/zI+rnZV8j49ozZcqUe2pD4OC4detW1ebNm09XqVTwXeMwLOozuKuJCI4KwcRPBCMciuc0Gg26 + yS1t1qzZ8G+//faFq1ev1ndh5nd5WJcGyLX1GRkZ9Z566qmVNPefWnZ4q5g7IgJAvCRJi+bPn4/AxTui + BTLMH9oxNP9XZVn+o2PHjpdIt0hlnRYyg4gyfzbP/xIi4KdMmYJ6AmDCzpLH3j5ThjFT/zzS6pqC4d+6 + deuzn3766ZfGjRtv1Ol0+1Uq1WGNRoNGS3+/+OKLPyxduvTt1NTU5sTd4XZduRAAlJTAzMzMxqdOnZpo + MBjQOE0RAF2da27mA/U4UDoblsF269atu6OxHwL3MLC5L1++/HD16tVnIxaASOKumI+r1+jr+AwYPjSC + w2azeUPt2rXnjBgx4n+bNm3qdOHChUcyMzMf7t2791+elkKlByXMpmTjKALAF198gVxbDX8fdyvI4WFY + v379E5IkrTAYDDD/3U9CgJPZ09eoXx918w0GA0zgiJFY0Lx5848+/fTT7livpD0xzLVU23dqiPwhXVpg + xmE5d+5cN+Jay+TLahdERGPMNJlM0Yj+R8ll/lqlAYb5gwmiMdRrsiyv7NSpE5g0ulkqz4xYaZSxe+jm + oM+bZf6wQKKOx5JZs2Z1IJp/ofsdkM9RjRwBixBeusmy/MUff/yxolq1ascRLGo2m+FuwJmE+cY4lMBD + rVa7/7XXXpsdFRUFiwAVAvJYIDgBAEQrIlZPT08fGhIScobEAdA0Zn4u+HnBnKQi8wOxH8gE+OGHH8pE + 7QeBexBk8ZrPnDnzpL+//yy1Wh0DLd3VgYXXqBmWlK1EX/MIrVa7s1GjRvM++uij91etWtUxNTUVWjoO + DPjuaOtU+wsvvLCKWAcK2gi5romfJC1qz6RJkyAA3EsWAHqAWBcuXIiiTEtIUSNWEMs1X+60SBoljzlz + 9fzgWslPAyHP1+Vn2dfo9/Pvw2f5Yifce5SDn7h4nEyfFrzRarVUkETU/C6TyfRLo0aNPv7444+7nDhx + oiExreJwdWvi5w/o0gTDdEJGjhz5jUqlukHqwjvnwN2zY4kIQGlGo3Fnly5dnqECb2ndG8PQqNkfVpYe + //333+9dunSBklCkgD8mzx8ljinzv6TX63+dNm0aWvrColNczB9nENZOv8zMzPnz589HS2IIGrgHtqIl + Zb6Iw8HrGFPMQw89tPjcuXNwwdBmQ/kJADS+ANeF9aJHaGjoP9T1SYJW88wHQ8oYUEQJbhCVSrVCo9H0 + GTFixB0RAAXuAzCL15KRkVG/devWHyDtiJgf0wwGQya6pZF2wAhUi9DpdLubNm26dNSoUZ9s2bKl+9Wr + Vx9NT09HMRBsXJfFVSAAPP/883+iMIuLhe+WOAFg19dffw0T3j0jAADMXNm2bt3avGbNmlMdDgfa5cLs + ncsiw8ZHgJlwjY48IjBptsYCfyi5+hvv499LAz1BfNwGIeVgJR3PFKKfJ70BcODSKo4w7+81Go1LO3fu + PBpNXs6dO4eDG2ZbMP1cpmD+IC4LIOPSZWZmPlq1atWdOPiplkwrLbqZp1xzRgpD4dkvXLVqldKtkn5/ + 7isWP5g9a7h9+zbqDjROT08flJWVtbxHjx6I9sfzKjTzZxgt8vxxpiDP/4rZbP79q6++osy/0NH+5HMK + 809KSgLzfyQ9Pf2t1NTUpUuXLkVjIlQTpPfgjlAULYsUITrXpUuXyUg9JgJRrnEx65EVABBrgPt4ZuDA + gX9oNBooS7nWvxtSrq3RaJRaAJIkoXz00MGDB4tMAIGSA7OItdg0mzZtemLUqFFDmjRp8p3D4fg9MDDw + 9yeeeGLuxx9//P6ff/75XGZmZqP09PTqZIPxudV5Ngf53d6mTRt0wPNIAKAbhWUYKAM6efJkpHbdMy4A + Cmb+9GhRvHDhwuefeeaZGX5+fjtJfAYYgmI9cRVoRTMv2AMGv7N589RCwH+Wvo8yc/7/nhC9Bq1fTw47 + llHQgx8CDcyuFzUazUGz2by2Xr163w4ePPitzZs3P5mYmAjLEYK03Abz8XNXFsAwAfOOHTvegDuMNkYC + UVcWP28uCPOE53wlODh4hKuU15ICcw80z79xTk7O0Ozs7PWhoaGXUcqY+vwLScoagFLB5PnH6/X6P4jm + D0bnjPbnx1cQmPEbKPPPyckZAuFl/vz5cMegrwW1QLLEjk8hCKfEWom1unvhwoV9CVN3eca5EAAgPDWd + MmXKD+hJQuJACpo7ZX5UKlWqRqNBo60NkiR9FBoaiv3g9XwICHgM7pDFIkbQDxYeIquhhQW7Kq9b0MKk + /4d227p16+WeCACspkR/ks2zbeLEiejPfkcCokoazFzhMIElJfjKlSv11qxZ0/aNN94YXaVKFRQHgWXg + ikajSYGWQgs48fPHHWy5iDJ6KhTwmj37PS5ehwACk72SjufiUGMPVqeGr1KpYkwm0yEfH5+/WrZsOWvo + 0KGDV61a9eTly5drp6SkwFyKteWyJj9/6JZFMPsmuEePHj/ZbDYIbMrcUKHKQ+EKDADM8fh7772H1syl + JuwyZn/4vJulp6e/J8vyuh49esSSTo/8WD0ldk3AuoEzAJo/Ujj/mjBhAgL+2Ap/Xu9vMv800h/MF0rK + OwhYXLJkCVxKrDWNEj9OhZhA6CwIK3AFtGjR4hvi1nRaN5nr8gIAdZ08uHz5criCrpJGa26vycyTEgNg + NBpRDGirWq3+uE2bNnB9len1L3APoCQPWxzwrVu3hgXAoyBAypR4AWDKlCkwxXl9QNwt4J8BOVjAGO3J + ycnB0dHRdebNm9ehX79+n1WsWBHVxk5rNJprPj4+iRaLBYwDBYVwaFH/pnLwYP7cWQA8IdZKQA9QUjyK + Hlq4JjQXmFhRwCXMz89vU506dRZ06tRp3Lhx43rs2LEDFRwhUOKARgCfou25und+Hso6yFh1MTExzyCC + OyAgwBnrQl00TPVCd6QwHVT/QyW4Y8eOOTv/lTQY5g/GhT32lizLazt37gx/eQZa+boYr6fkZKjEHw66 + hTTO6dOng/lD+APzpAKAV/dM5p4VXlChsB80/zlz5iCYLtFsNrPMnx9fLqICAFNkCs2YVsbFxT3myhXF + XB/3AKJZE7V27NgxVpKky6w1KB/KJQBoNJodarV6ZMOGDUVTIIG7GzhYnnnmGQgASlGUgsiNALBr+vTp + CEi6ZwUAwNVmp6+RwwaHEFwvDvRB2LZtW9Nx48b169Sp0zdNmjT5w2637zWZTIg+joapHWZWlUp1HVH1 + MLvCxwhzLtHEcDBCKwPjQQ5ylk6ng/8T0etIC8V7ILTRYK1EZCpotVrEiKBi2UWDwXC0bt26f/To0WP2 + 8OHD3/3zzz/b7Nu3r25cXBwsSAiegjkfQozzcGcOzVwa1d0IMn4c/NY5c+aMoJX/QB5GxVPCZzDXsY0b + N4b2XSq5/+QZQHMG82yUmZk5OCsra223bt0QDZ9JgxitVqunVgz+nqjrx7mOzGbznokTJ6LIDwRBp+bv + 7b0y6wjrC8ILmP+r8PkvXrwYzD9Zq9UqQjA688F65WKMuYjEG2XrdDo6bgjWWzdt2vQCGS/P/Nm1TAUA + xK3U2Ldv3xektK+SCVBADAidKxQPQvog2oV/Ur16dZQX9mpeBATKFHC4tGrV6k9PXAAgan5mBQCVSrV/ + 5syZ0E5KzSx6N4A5gKgJUhcbG2s+dOhQwB9//FFj6tSpLT744IMXevXq1fuFF14Ygsj6unXrTqxZs+bs + ChUqzAsKClrm5+e30m63/2m329daLJa/AgICllSrVm1Ww4YNv2jZsuVnnTp1+vC11157e8iQIQOhzS9c + uLDFP//8UxUpaoR54LpUi8uXoRf0/7sN5H70iItp1arVGovFogSZgdlQN0sBmj8lRftDFbhvvvmmEfv9 + ua9YfGCYJ5g/3GtvyrK8OjQ0NA4CIu1kx3a084JYzZ8y/1S1Wn1y6tSpaG2MdUPXrtf3yHzWWaRIluXe + OTk5CxYtWqR0JTQajYrm7Y0gRhsxQSA2mUwZJpMJz2T7qlWrILBAs+eZvysBAIJC9QMHDkAAgAXAYwGA + uIAgACgxANWqVUPnSq/nR0CgzAAHTMuWLVEHoFACAHxoKAJDBQCxITwDO0+lyXhL6zp3Gszhb0LpX1IL + Q2Eg1N1isViUnwUUy6GM8rbJZFoUHh5u5a9V3GCYJ4Q4tBoG8/+zW7dul7VabS6fP2Wg6OzpYuzuiN4T + Nfsj6C8SGR6sRagwa4WZd1p+V2lJLMvyT3PnzkXQbArR/HONv4Bn4By3xWKh7rNMrVaLcW86ceJEO1fV + ATkhgLUA1Ny3b983JO1QEQDyIVZYgsCBUsg4L4fVr18fjay8niMBgTIDCAANGzZcT3K9+cWfh9hCQOQ1 + ROUenDdvHkp4FkpjEBAobjBMKGj48OE/qNXqAnPk2bRN5neYnJF2e6J79+4ouFNiqa6EWYFRsUVy+v33 + 33+rwfw9ddO5IcXUTgQgBKlC88ecJOj1+sOkq58z2JMfmydwwfyhIb+Ynp4+hzB/RO4rZn8X4yuQaFwL + KeCDWgWI4v8lJSWlCZul4IKoAADLBiwFdVevXj0d7dZJnYv8xkPN/7hmikajgfsOAsDbjzzyCAKwCzVX + AgJ3FHThQgBo0KDBJk9KAZNNqPzEAQlhAKY8vV6///vvv4cA4EwP465FDwWY35BShOAZHA5VEEB38+ZN + mAkVsyP7OQGBwoKsQ2Nqauqj9evXR4ZGgcFerBmYBAbSwx8xFht//fVXmOLzrO/iAtX8ExMTsUcapKWl + 9cvOzkYMh1Let7CMk5BTkzWbzUp5X71ef91kMm398ssvezJm/0LfH/ks3eeV0tPTn0tLS/tu6dKlKJ9b + JOaPz8F1Q4L2EA+Dezj14osvjiJnSS7mz4yHFwDgUmm6fPnyOSQGBwJFfmNiBQDE6SB+AS7TQY899lip + BYMKCBQrmE0CAQBpLQUKAG4CjbA59v7www9wAVDzIasFhGRkZNS5fv36M8uXL39r+PDhsx555JENNpvt + oFar3VezZs2lgwcP/uj3339H8w9sZCXASkCgsGAOff/t27d/QorM8Os2D7HplSS7gpp+r/v5+U25ceOG + nX4/f82igjJ/kuePQktv/ffffyjvewG+52JoBqb0AiF5/ikqlQqpfusmTpyIADoEgxba7A+Qz2qvXr0K + 5l8+KyurXWZm5sx58+adRIAq8fkX5R6cjNhms6EcNdIH/zh06NDTTMBinvEzQgAVAMolJye3/e6779AP + gqaE5jcuVgBI1Gq1uJ8VOp3uddESWOCuBwSA+vXr7/AkHYYWuqEHJTGTolPhv+vXr382MTERBTmg3deJ + i4trs3z58kFvvvnmtLp16641m83YONeJvzHDYDAo0e3EDAlJ/Ejjxo2nHT58+FFhDRAoCpgD/4HevXtD + W/PIdA4LAOsGwJ7QarVYnwffeecdFMQpdBnc/ECYF63xUSczM/MNWZZX9erV67wnrosCiDI47G+Y/ZHn + H6fVav8kFf5gfXPJPD0FZf4kAyYkLS3t6ZycnIm//vprGEnVK/BsKYCc94BMGJJBcPTNN998l5T2dQa5 + uhkbXQ8YX+Xs7OyeQ4YMQSS/0mkV5CYYlJ07xEjd1mq1x9AXQa/Xv9y7d28l8JC/poDAXQP4GuvUqbPb + ExMpDZ5i86dJJa2rX3zxxcQVK1YMeP/997+qX7/+Sp1Od0Kr1aKUaBJh9HkOMZrDTjYf3oM0rd/DwsKQ + 16vjxyog4AnIgW+8fv16J4fDcYoNOiuImLWtaP9qtRpa3+/79+9HJDtlJsV26DPMU2lUI8vyy//999+y + 0NBQpba/1WrNs2+8JNw7ZWAQJpBCSCv85eqox4/NEzDjhxUBJvGnMjIyvvnpp59OgGF6k+fvhpxM2G63 + 4x6gQBxv06bN5yS1MFcaKw8yPipgwVKA5zjkySefRNMhBFQq3++mDkcu4QnpuuhMKEnSDxqNpsN7771X + atUgBQRKBCj+Urt2bfQY8OiQhJbkoolKpr+/Pw4s+MdgbnX6K/F+vIeWXKW11+nnaf17/I6iJhaLBRv8 + 12PHjtXmxyogUBAYJu2zYMGCsaizwK/h/IjGAZC8dDCc2IcffviLW7dugVkWqwDAME8wporZ2dmdMjMz + F3bt2hWafzrtUmez2ZzWNy9JEWIo81epVBDIV44fPx5R+bDWFQfzh2YN5o+AuMfT0tLGLl68+Ch8/jTP + 32KxuCyT7QFRBkzvA2dDWPfu3T9FW2cmaNETAYDWI0APhUkhISFKh1VaXMhNGiB7bfSPuKlSqbZLkjRJ + kqTHly1bJtyVAncnmMPMv2bNmuiM5ZEAAGJLqDocDuehiXrklNG7ManlIjadkBIOPZPJFP/8889/KOoK + CHgL5sCvgAqXqN+OdeVGw3NJxBWA4DBozIcnTZqECHlnkBx/zcKA0UphlobbrK0sy9+FhoZGwOdPa/sX + Q54/1fzRM+A3ci8oBOUyYNdTMMyfjv+JnJycLxcsWHAEZn+TyaScJ97k+bsYP9W+cR+pVqs17Omnn/48 + KSkJzJ8NWixIAHD6/2VZfmHv3r1rdDrdLeKacFU2mx0DvT4EKBTZWq9Wq7+UJOnhbdu2lVhGiIBAsYPZ + MCwF1qhRgwoArjaCk/iWsvR3vpQqz9ipqZ/9Llrrnv4NDYE57LDh9h47dqwifw8CAvmBHvgZGRl1zWbz + ATBAD3PMnWuUVpzT6/VJGo1mzYULF5Qql0VhmCwYjRTME5ozmP+MLl26nNRqtQjQc+5DL/PkQSzTokV+ + 0B582YwZM8D8wQSLk/lj/M/KsvzlTz/9dAilhKnLBfueav5eWgDoPTiZL7qdPv300+NIC2Rc1/k83N0H + M04lIDk9PR3m/8Hfffcdxun0/7NxH9wY6DiUHglIG5QkaaVerx8jSRLqM9zTlU8F7kEwm0bZwJmZmQ0r + VaqEYJ18mX9pELUsEP/r9U8//bQjP34BgfxA1rY2JiamhSRJyD3PpgV/PCGmpwJKLkc/++yzYDp5us0V + FuR7aKocNPGncnJyZnXp0gWpckp7Wn5MnhKJF1C65Wm1WqW6H1wYWq12+ZQpU3qQgLkiBTK6YP7w+Y+f + P38+fOOI4fHYksgTEXJybDYbZfyU+Ue2b98eTX+QhglNHszfrdZPQcaK4j8YK+a6ZVZW1tRnnnkmxmAw + OFsPc8IJZfysIIW5RBrjBYvFskiSpA9q1KghigAJ3D1gAo2wEepfunTpmSVLlvT86KOPvlapVNd4Df1O + ESqaEQ0orWfPnu+LTSbgDSiDio6OfhSMg5ac5V1Nroho2zkOh4Mynm0rV67sQKvM8dfyFgzzVALmUKMA + DKl79+6U+ReaeRJCudpMi8Wi1PXX6/WXTCbTbyTPH53ripX5I9o/NTV1/NKlS/eR2B/MGz8mr4haXxA4 + jJ4XBoMhqn379l8nJycXhvlT0z/SkaslJyf3jouLW+fv73+LWjxJi2x6fZb5UwEAggIEKaQMRlgslimS + JPXt3LmzD39NAYFSAd3E+W0CZqMGpKen146Pj3/q559/7jVs2LARtWrVmitJ0mZJko5qtVo0pfGoDHBJ + EyOEKBpYu3btPhVmNgFvQPaF+vz583XVanUYWjN7oVUr/eaJ9n8rODh4PjEbF8hwPAHZkxAmIIQ3ysnJ + GRsaGhoO5l/EPH+FYaGap8PhUCr8ITNHp9MtmzRpEmr7Q/PPN1q+IDAMlY7/yYyMjM/nzZuHAOIbRqPR + 2WWxsESYcTZ5ZriPy23btp2anJyMGiO4rjfMn7pZaHZCM1mWP5k7dy7mGwxdGStn/ueZPxUEof1DwDmi + 1+snSJLUedmyZSIDQKDsgCx4LHYUp6h++fLlx1esWNGlf//+/3vwwQfnouIX0md0Ol2MRqO5CRMh6arF + m8DuGPn4+NDfEQiY1KVLl8EFbXYBARaMcFwRbY/NZjMOe/Sr8IQ5oVwu1fpOv/322/8j+ylfYbsgMAwJ + 5mj/lJSUxrIsj+7ZsycC5opD82cZVrrBYLgGs/+XX36JJjmBrOZf2PtgmD8sF0jT/WjJkiXbUMODXNeT + +c2PlHsgef5K58X27dvPTkpKgs/fW82fzjct/Vs1IyOjmyzLy5o0aRJPqp7mGi9RPngBQGmljbgGjEel + Uu2SJGmqJEnPHDp0SKQpC9w5kEWu9LdOS0urmpaW9uTy5ctffv/99z+sV6/eQp1Otwu93y0Wy3mNRoMF + jDQWheEzC14xexYyUrfYCUFDRBOC3zZu9OjRrfn7FhDIDwwDsI4ZM+ZTwqCyCWPPl0mRtZfl5+eXiI5v + Bw4cQHBbkaP/yefBhJFKWCcnJ+fDDh06oDxxMmluk2csHhJlVmBotD30Da1Wu2HatGldSeyCs0Y+Py5P + wQgvfrIsN8/Kyho5d+7cTZIkxZnN5iJr/pThojgYuY8LnTp1mpGYmIheCGx10QLvgWH+NM4iOCsr67Gc + nJyPNm/efARZIXjObFVTuACIG4AVAFjfP1JJIzUaDdqmowsg6g8Iy6RA6YIsbhxI/rdu3Wq4evXqrv37 + 9x9evXr15ZIkIbIVefiI+MWixUZSNB8weATYsJH6vE+0kOlGxU4kkAmb78ihQ4dC6H3zcyEg4AqMAKCJ + jY1tGhgYuJOYxMFo3QkByqFPLGLYN1Evv/zyxyS9rTiYPxgS4m8eysrK+t+LL76oRKGT6xVHnj8YPwiF + dzaOHz8ezB/MGlq7x8yTBzN2yvybpqWljVy8ePEWRMQj2BBjQJOhIoxfYf6U4arV6kuhoaFTk5KSEGVP + hRcla4EfHw9mvNRa4ZORkYHveUWW5cVPP/10rNVqVbR/KgBg3C6YP6v9w/eP6P/DWq0W/v+Ob731li9/ + bQGBEgNZ2I4jR440HD169OAqVar8IUkSKm1dMJvN14xGIxYq0p0KzMOnCx8Mn0/FKyMEM+D1li1bjsUB + QO+fnxMBAXegTDs2Nta8ePHizv7+/ocJg2QPefawd5LRaLz+4IMPLjhz5swjhPEVeu0xDAlCO6LGB3bs + 2BGpick0z9+L9D6eeOYPV8L+yZMnI+CvuMr7sswfHfc+XLhwIVyJcdTnXwTrIc/8cQ+XOnXq9E18fDyt + 8AdGTqnA+yBjpoF/MP2XR0MiWZbHbt++HZX/UEtAmXe2lgk5K/k1QecU2j9aSe9Qq9VjdDpd43Xr1hn4 + awsIlAiwEcLCwmr07t37f8QHFUckZUT8KosZxEbx83n4IPo3q+nTzVtI6b3YiVQ+S/H391+De+bnQkDA + E1DGR8hn7Nixb2q1WgR/0WBXXgigh35CQEDAqpMnT7Ym8TSFZqAA+TwYGYLQeoeGhu5Sq9VJdN9in9I9 + 6CUjpeOlZn/kqB8lZn9YGgqt9QMM86fV8xrJsjx83rx58PkjvsBp9i9EnQI6fp75X3z66adnkaBL1uzv + 0X1wwhbGDOsNhLj/JSYmbmvZsuUNEuCpBP6xZx6jLLFjor5/VAxEmvQSRP/7+flVxHX46wsIFDuwEaCJ + +Pr6LjKZTGD8xeFvKxLxRX8o8QII+z8IH0yRlVyRtzg4aFMhbDo/P7/d8+fP74h7J3NQ4OYXEHAFysBh + Cfj333+faNSo0UqHwwGNDgV+MvV6PQ56ULLJZDr95ptvfn3q1ClEnCuaf1HWHqONOlJSUp7v2rXrOmJO + VphQISiHaK9KtD9hwkqKmk6nC5s0aRKC3JR0xaKMnfk8mDC06HqZmZlD58+fjxK4iIR350YpkLg8fyrA + IMo+5vnnn58gy3JN3ufv6X2Q99KyyuUzMzMRaDk0Kytr3dKlSy8zFqA846LEtH/GexPNZjPcqac0Gg0y + pj4ym81N+vXrZ+OvLSBQ7MAGuHLlSt3mzZv/iL7dRdl4JUG0uh9fEZD+DtMa3z6YFPihmgPMh/hdkbYt + FssFBC9u3br1cdoS2NPNLyDgCiwzJAzFvnnz5hZDhw4d0bp16x9btWq1+OWXX548Y8aMgfv27UOeuZH/ + jsKAuR4KbTUdMWLEHLVafa0Y9jDK1maRPP80vV6fYjQaT4wbN+4lRmjxSGN2B8bs75uZmdkoNTX1f0uX + LkWzMFrkpyjj5/P800ie//j09HQw/1wxC57eB3PfxqSkJGQ94Fm+mZOT8/2tW7fC7Xa7s69CfkRTQC0W + S4parYawc95oNO7X6XS/aTSaVyVJqiai/wVKHGRB+w8fPvwtSZLCSTe9PAu2tInV8vlSv9TtwAgBCrNn + 3BFg+FTqh8kS0dnnVCrVlnbt2k2YNWtWm/Pnz6MXulebX0AgP3BCACUwGmiLlJxrrTjWHsOQKqxYsWK0 + 1WqNKoZUOZrnr1T4U6lUaIl7bOLEiUj1o01xijR28nlq9ofm/978+fNRJvwWKahUpPGTPP8sEj+AMyCi + TZs2X9y+fbsWE/DnlQDDzLWSESXLcq3s7OweaWlpqOC4s3nz5rdIBgg/Hlfk1P4R+KdWq0/r9fqNkiRN + NBqNrVu0aIFYCI/HJiBQKGAz3Lhxo4VWq13hcDgQ0V+UYJtiI8r0eTcA/Gnc+HBYIUaB+vcSVCpVrCRJ + J+12+6bHHntsxscff9x79+7dCPZBlS6PgnwEBAqLghhkfv/zBsx1dJmZmY8+/vjjSB277ePjU2QGyuT5 + 39bpdAfHjRv3GpOm6BXj5MEwfzv6KMiyPGjJkiUo8pNQBLcFP36a548zLax9+/Zj0tPTi4P5Y9zW1NRU + +P1byrKMAmKbRowYoZj+of17UOlUmV/SPAra/zmHw4GAzd8lSRoiSVKD+fPnF4uFSEAgX4Ap/v777zA5 + /UvzbPmgvjtFvOkfv5PNlW0ymRSfnlarvWa1Ws+q1WpUGvy7RYsW33z66ad9d+7c2TgmJgZVyRBglavT + X3EdwAIC+aGk1xjDlHyio6NfU6vVx2D1Iu6vPPvJA6JuMxqclqjVandNmTKlLwn4y1ew8QTk87RUeN3M + zMx35s6dC+aPtEJquSjs+Ok9IM8f5wMi6w917NhxFNPVr8jMH9UOU1NTm8uy/H52dvaGZcuWXTQajUpb + cg/PTqWMMubXYrGgcyKyBraYTKZZJpOpa4MGDZzBf96MU0DAa8B0OHLkyDFqtRrpJ9g4/GK9Y8RuJqZx + SrJer4eZc6fZbF7epEmTT959993u69atezg+Ph41yFGSWGj5Avc8GMZUee7cuZ/RPVxIBkoZP2X+CSaT + advXX3/dBz76wjBOHuTzYP6wxD2Qmpo6dPHixTD7Q9BQNP9iyvNXmL9arf43NDT0I+Lzh9ne63tg5hjj + hjKBpkRIUxz633///bl169YYHx8fpdyvFyWWMUYoL9e1Wi2aSCHjapnJZBouSVKzZcuWWZlrezxWAQGv + gWjYwYMHTyY9vLOtViu/WO8IQetnA/uIvz+tWrVqB99///33N23a9FBiYiJKp0KqFwxf4L4Co42DOdX6 + 8MMPp+p0OhSRyaF5/15SLs0fGumkSZOg+aMWP2WcXjFPCk6DVnz+siy/vXDhQkXzp02UPAmec0Os8EI1 + /2OdO3f+5Pr166jwVxTNH2cLW+cfzH/gjRs3lp44cSLCbrcnkQqLivaPBmMuxsePVXFNaDQapP3B9L/a + YDBMkiSpS/369VHDoUiNlAQEPIYsy1WGDh36JYlCLaz2UCLEldDEBot/4403ZqP/gGD6AvczGKYKemD8 + +PFTVCrVFZJe5s0eZjVnMCbko++cOnVqP9LVT9lnhWVILph/Q5jO582bB80ffUKcPv8i5vk70yzhznz2 + 2Wc/zcjIgKCRS/P39B4Y5o/PI90PEf+oUTAAdf7Pnj0b4evrC+FFcVug5gm1WObjBqDzjEwBZDqc0el0 + m3Q63QJJkgZLktR03bp1CC6kc+bRWAUECg1kAMyfP38QKUCRZTKZlMODz6+nC5t/3dVrID7/ng3cc/V+ + nijzp5uJpPRcGD58+LsIHiJj93hDCwjcS+AEgJD58+cPNxgMKM+NCoMIjM2VSUP3EseclGh5pKSR2vjx + BoNh3fjx48HkoInSVLlC7TGOicKN0Bi1/UlXP2ebXH7ve0Jcnj/GTjX/f59//vlRsiyjLK+zt4I398DM + rT4+Ph7uClhBkO7XLzU19ZczZ86csdlsiWD+bKEld2chQxgrjfxH0CAaNP0pSdKXBoPhudDQUKWNMh0D + Py4BgWIHNsnRo0efMhgMq0m6TI6/v79ygNCFi99ZbRwHC2qKc+0tnUR9eEwuvmKeg48MgkA+EnKua+In + kw2A7zmLAD9aOY2/FwGB+wUsY8N+uHDhQidJkvb4+/srwWgg7FO49LAfafosZVDYTyRlzan5q1Sq1fPm + zXuZMH+a7leoSnQM81f6iaBGQVpa2igS7U/z/PPse2+IyfNHS+Vkg8FwuH379qMTExOR8VOoWgXMZ3SE + +SuFfjIzM/vl5OT8cvr06dOBgYGK5u9KwMpHAMBYIaQgXuC6xWKJIHFM8yVJesNqtdY9duwYLA1eCSsC + AkUCWXAVu3Tp8iEqlLFVrFwxfj4/H//HT7xOal07mT76hRNT1ymdTocIZY/TfHhzGgmwOT116lT0HBf1 + sQXua3ACAHzGD/Xs2fMn0jUvi2jGdC/mik4ne0nZo6hQqFarwfw3TZ8+vU9KSgq00FwV8vhrFwSe+ZOu + fh/Mnz9/B5gfNZvze94bIi5BWDsoUz3VunXrj0ljn6L4/Km7Qunud+3atYdlWX5DluWfjx49erp8+fKo + sOjU/LkxuRMAqBIE4Qyfh+//X5vNtkaSpDGSJD31v//9D90Uc2UrCQiUCrBhrly50kySpLn+/v5X0cOa + PTB4cyJfdY8seixylNq8ptPpzmi12oOSJP3dsGHDH7766quBu3fvfqNhw4ZHmRrp+RLdSKzGgkJFCxcu + fJ5W7xMQuF/BCQBgtr6RkZE9zGbzbpJfTgPTwCSVTp1UGECRLJPJhFQ0CAAQyrfNmjWLmv2dAWjeME8K + nvmnpaU9Icvyl0uWLEFXP1QoLDLzpwxVp9PhLAFTPfP8889/mZGRgYA/aP5euy445g8LY2BGRgbM/n1z + cnJ+Pnv27GmHw3EbxYUMBkOe8bPWFRdETf9wUaAoWaQkSXstFss8SZJerV+/fg22tDI/NgGBEgVZeNat + W7e202g0v5JCOpBy85jrqYZPzIdoFHTDZDIhLW+/RqP587HHHpv2xRdfvL1r164ON27ceEyWZZjjfBMS + EqpVqFABDUo86jHACwDkuv+uXr36GWxS/h4EBO5HMIwLjLv8okWL3jMajYjnSYXQzFrkDAYDmCa1DEAo + gC9625w5cwampaVVZTT/QjEinvnLsvxoRkbGl3PnzkWkezytM+LJ/ndD7L1Q5n82NDT0MxeNfTwePzeH + 0PzLZWZmNszOzkbxo4Xh4eGnLRZLIomTyDN23r3iYrz4HIQyWEMvwPev1+vXaLXaz2w22+NRUVFKR0V+ + XAICpQJmA9j27NnTskKFCmM1Gg02LRYsNhmkV6XwDipXqVQq+K92m83mVc2aNZs5YsSId7Zt2/ZcSkoK + mmJUI5sfEq0zUh+BSna7fR+sC64kaHfEbCp85sjOnTtRv18JlBEQEMjDwKpPmzZtpM1mow110Lqbmspp + LA7q4l9B6dnVq1dTs3+hKuRRcMwf6XKPw+e/ePFimP1v0K5+RczzZwP+oHycCw0NHZ2WloYzB9f2SvOn + gg7H/BHwhyZNb8qy/MuJEydO+fj4JOLcYvP8KcOngZUumD8dM8aLcxOWFihWpyRJwrOZJUlSp2XLlqGu + gDD9C9xZMJsBjLvilClT2j755JOfaDSaeRqNZqnBYPjdbDajqcnnEyZM6LVnz54WSUlJKONZmfTwpn43 + +j10Yym/37x5szKJenUpRRdERJM5dPz4ceThCmlZQIABs9+gBVc+d+5cm8GDB4+zWCxgNicNBsNplUqF + LIFTVqt1S9++fb+KiYmBNQ1715nqx39vQWD2Or4DZwfS5Vrm5OR8uWDBgp0w+xPhgzbkyrO3PSDK/EFU + 8z+HPP8bN27QbAV6/x4JAC6YPwqIgRnXl2X59czMzN/2798fCZ8/KSmsjB2MngYo56P5s2OG8oRyxKjR + ANM/XKOLdDrda2+//TYKFCmZCvz4BARKHRzzhi/NPzU1teK5c+eqXLlyBSZC1L/GBlfK67ILl/0s/zfo + 2rVrNUmfdGqC5DdMvkTSlQ5GRUVBOhcbRkCAA7PfKDMOSU5ObrR3797nFixYMHjevHlvHThw4Dm8RnL8 + C5UmR8FdjzLQp2VZ/nru3Ln7EfBHNX8iACh7uRB5/qzmD236/DPPPDMxLS2tCsP0PWb+ABk33o9zDucZ + rJaoUdBLluUlx48fjwwJCQHjdjJ/d1lPPBG3KdX+kVkFS0yMJEko+fuXJEnvt2nTBs9AKa/Mj01A4K4H + e6hgo504caIhOnKxhT8KIi7YEP7MfSTKV2wagTuGwq6/wjJab8AydIYpgtHDz4wiM7QwTi4Bnf+egsB8 + lmrP6LvROjMzc/L8+fMPEfchGGCefe0JWSwW5SeCFcn3QJMG849s167d58TVSE3+zvvhx+kKzNzQPH+4 + LGDNHJCWlvbj6dOnkeefXIg8f0pwcyimf6PRqDB/vV5/UpIkuEPGt2jRArFRPt4ILAICdx3o4sYhsXfv + 3laSJEWTPtj8hnFJrKkNWoDVat2Ojl7sdwsIlAZ4hkkOb6ppg4mAwUKLhIUMhzu0OzBGheG6+y729eIG + ew32Wsz4C3V9Zvxg/rj/cmlpaU+npqZ+s3Tp0sPE311o5k8ItfUV5m8wGGDyRwT9qfbt23/EFCny+j6Y + z1DmH5yRkfFQZmbmYFmWF0VERIQFBQUlMZkTzjF5IwCQDAWM+YpOp4Ppf7/BYPihdu3az7GtyPnxCQjc + c4AGsnr16g6SJF2EKd/FhnFJNPWQbLysypUrb0hPT69OvlNsHoESBcfowezgXwfDg9+8RlJS0lPh4eG9 + V65c+f6UKVPGDR8+/Nt33nln4TvvvPPDp59+OmXy5MmfrVixYkB4ePizqampYFq5XGcMIy01YaA4rkO+ + h/X5t8rIyJg4f/581Pqgtf093ueuiFQkpZo/MhrCQ0NDR5CAxULFLDDjpuV9g+Pj4xG4/I4syyv//fff + iEqVKsHsjxTJPGPyUACgLotUvV5/neT8Hzcajb8FBAS8dOnSJQiJgvkL3D+AJjRnzpyXEAXrwQZyEhUA + SKBNRpMmTdYgypl8p9hAAiUGwiwo04cmD8bTNDIy8pX58+fPbtGixb6qVate0+v1MEtD2wOzolH2yk/4 + v00mE5hXgtVqjWrVqtUfP/3004BLly4hZQ0WAmfL18IwtDsBMk4wMEXzT01NRVbO+CVLliD1UGGe/D4u + BCmav06nU5g/8vzbt28/hvP5ezVXzLgp8y9HegUMyMnJmR8RERHhcDjSSN2EPMJLPsF+LCmxDqQlMwr+ + oO7BWWRbBAUFvREdHY0YCa/HLiBwVwO+x/Hjx7+jUqmuebCJnMQKADhcnnvuuZ/RvKigw7Kg/xX0eYH7 + F2RtUC0RPnP4mjutWrVqdrt27Y7q9Xr4dNHMJRejQ4AbiK5vtvcF+RtmYQgJyL0/27Zt2+U///wzylrj + +8FMvfZl3wmQMSKmAJr/kxkZGePnzZt3AuZuUhskD/P0khTNX6vVwuyfpFKpjnXq1OkDYkHJ5fPnx+YO + HPNXavvD7E/y/OeGh4dHWK1WpEa6FF4KiPanY6aaP4TBFKL9n9fpdNsqVKjwFmH+Ho9ZQOCeAXyjw4YN + +1KlUt3MZxPlIaYIETbX9T59+kwlmpiTibti6ORvWs6T+mZBONCV+gS5RyggkIv5Y93UyMjI6LlmzZrp + 7dq1g18bjDsTeeyIYsc6xvqk5bJdrWu8xpfPBsFErtVq4R++8Nhjjy1fuXLliySdllaDK5OCALOvsJce + T01NnbB48WIEtyWTSp1KO9xiyPNXuuWpVKpDzz333PtMql9RmD/GDeYPBQLR/oPg8z958uRJf39/MGwU + F3IKL5ThF5Dnz48dzB8WC1hCYk0m0+7AwMAh4eHhTs3fm7ELCNwTgLmtd+/eP5KNwW8et0Q3HYnEjR02 + bNjHsiyjZjbP/KlWAmaPzVYLedDLli17d+jQodM6dOiwtH379osHDx48dsWKFb2uXr1a/8aNGxAGvDpM + BO5dMOvIjjS5Cxcu/K9v3767IHgSxp+HsVEGwb4G4QANeNjXIADgs0xWi8JoSDxMGoLEevbsufzw4cMQ + BLB+aTneMsM0yDjAhLFvHsvJyfl80aJFSGtDtLyiOfNWDy+IZaDQ/GFl2dO5c+chaWlpEIzYIkUe1wBh + xkzN/hVlWX5WluWBWVlZv+/fv/9chQoVksH86VlDhTr87oHmz48d7iDF9O9wOP6x2+3vXbhwAQpLmXmO + AgKljpSUlJDQ0NCVRDrOc2i6I2ZTIgXwwujRo98jAoCzXjdiAmRZbhIVFfXi4sWLR/Xq1WtOnTp1Nun1 + +nMkGjnVaDRmaDQaHCz4OzooKGjlzJkzX09ISMBnlcOWH7PA/QOG2dpu3rz5xJEjR8aXK1cu3GAwpCIS + nE1HxZqkjA6MnV3LrCUgP6aBz5H/o7YFSHEN+Pj4HPvkk08+vX37djMaI8ALu/zYSwPM9WGhqCXL8og5 + c+agr4dT8wcVMs8fxDJQtAne2aZNm0HE55+rQqGnc8A8U2r2h2DVXJZlpBD+ERYWdjY4OBhWGKfZn3M5 + uiXOMqm4LBjNH37/MJvNNhLFz6jA4um4BQTuGdBFD8m7du3aG4l0n6szWX4ErQs/ySFzdcGCBV9D+8BG + joyM7P7bb7999tprry2pUaPGPxqN5jxh8OkFpBriuzCOiNatW0+9ffs2DjSPtQqBewsMo0CgX8upU6f+ + oNPpULWNFrDh10+xEqxbxBIAyrBYLHHBwcFr165d2+v27duoFIdx5RIE+HsoaZDrQpP2TU9Pb7tjx451 + hFEXen7I3s6xWCws84fmv7djx45DXaX6eXrvzGd0xNIHzb9ZTk7Oe0lJSRtOnjwZQ/L8ofkr90CtOQUx + f4YguOHzytgNBgPOHlQ9/KdChQqfxMbGQngpVLaCgMA9AebQqhISEoKyoMqh6okAwJoToVGYzeakvn37 + 7u/Tp8/yBx54YCsYONOrQAk+ol0LPfl+jUYDs+7lrl27fgpLAj92gfsDVEtMTU1tNnLkyEWkZGuhylUX + hhg3giIEoEOfyWRC9biTXbt2/RZV/EgFTli8nEJAaTEVlpliHPHx8Z/Uq1cPVe2KOkc0zz9Tr9djD19X + qVS7OnTo8C6JhygU82THe+3aNVhRKmZlZbUgef5/njlz5kJgYKDC/IuQ56+0VKbMX6/Xw+yPdXOkSpUq + /zty5Ahl/orgwo9RQOCeB3tQwdQuSdI/ODSQ3+vpJqNEfHJIz0k1mUww22UgVQeCAcjTEp0sEX8uDrGT + P/74YwexUe8vMOsTsSP1v/zyyzmklXVxRLJ7TC7iCFiz8g0fH58t77777qi4uLg2xIwNRlxqggDDUGH+ + r//LL7+sJQVuijRHFosF90d9/jd1Ot3WF198EV0JkRVBzf5e3xv5HD4PgSn4+vXrcKe8JcvysrCwsHOV + K1dWzP6uziAvBADcO7VaIDj0qtls/icgIODT8PDwQgsvAgL3BJhDQ/l5/fr1OqiERZi4RwcHjb6l6VXs + //LbpPgfH3Xtiuj7NBpNWrVq1X4EI+DvQ6B4wTOuO3lAkuvjoK4+a9asCZIkXaadKvNbXyVBLszP0I6p + awC+5ei6deuu+vnnn4eRCHYEu9JAwRKbR+b7MU+2pKSkp/v06XPMarUiP9+jfeyGFHcHuhISK96OF154 + YQBJ9St0V0IyVlqaGC190ThsYHZ29m9nz56N9PX1TYbZ3tUZhLn34Lnjc4rVQq1W47mgSyBqQewrV67c + iIsXL8JlU+zMn3kOdF5AuA5PuVxFxT0OAQGPwC1A3b59+5qo1epDMG8ijcrFxspDVCuim5LrC6D8Hwyc + pmHhpwcbOBcRKwDGE3H8+HGlwJBA8YM/iNi/+cOKf29JgFwDB2aFjRs3DkGJWbVanelNm+qiEq9tUoGU + tQZgPCC1Wg1tGT7mY6GhobMOHTrUXZZlFBNCZDt76HvNNPMD852K/1+W5c5Nmza9WATzP2WgWRC8EUeg + 1Wq3de3a9c3U1FS4OQrF/Jn7p8w/IDMz8+GcnJwBsiwvDQ8PjzKbzUq0v4sxOZm/m/ODWmTo2JXiRGq1 + Gpp/vFqtPhoSEvJRZGRkDdY6w4/RG3DzTotRIZgRVhg8c5SaDkxOTg5KTk4OBpE2xgiQxnOifR/gAsH7 + 8TlYuvA9+D63wkJRxy5wnyC/xUL+hwWHxVh7zZo1b5pMJvjslQ3oiYZOiX8vGD0ahYB5u9qweD8vLBRA + 0PhuTZgwoZ27+xEoGsh60CcmJiJ/HF0lH8zIyEBTJxxcMNXm0mZL8jmQ78cBWG7Xrl39dDrdPqPRCDO0 + sm7AgAvjUvKWeGbPE5tySIJgQemIW9HpdFsGDRr0RXp6emvShAfMgTKNYps/5jupANDV398/jsbc8GMu + gJzaM9H+b2s0mj0dOnR4nZT3LZRFgxmjk/mTlr79ZVn+BY19AgICkrRaLYQO53gow6eWRldniRvmj/gM + +PxjzWbzQavVOjYyMhKNhJxNlvgxugK/3rm5ptUnwchRdhrzA4EPZYufycjIQLroq7Is9yP3+Qb5icJS + L+E5QViTZfkFWZbbolSzLMuPks9jrNXJnGM/QkDA9XKtHW+fg8B9CG7hUoYPH94j0dHRnRYuXPj266+/ + Pr1KlSroSX4b2gzM+Xw+tStic3ERMYzD2V16EWX6vLCQH9ENjwptKpUq+d133+0pFnzxgVkbOBir3rhx + o93KlSuHvvvuu5M6der0Y//+/WdMnTr1g3379nVKSEiAqRaHkdN8WhLPglmrfqdPn+5eo0aNLQaDIZm0 + mlbWQ2BgYJ61UlJUkBDAks1mczIiUkQoonr16r//8ssv0HLB8JDq5tSei2P+mPkCc3Wkp6d3rFSp0nkf + Hx9vLQB07EqRHxJDcKxLly6DiPbq9Pl7M25mfFg3ECRpV7++2dnZvx86dCiicuXKiajwR/c7fnqR588z + f4wblpgrISEhu41G4yjSntzrtsrM+3mmT7sTokzxM9nZ2WDmyIr4Ii0t7ftjx44t/f3339d/9NFH299/ + //3d77zzzu633npr16BBg/YMHDhwZ//+/Te/8cYbGwcNGrRuwIABfw4YMGB5//79fxkwYMDcQYMGzX77 + 7bcnDh48ePT06dOHrFixos/x48fbkzgJuC+crd7pGPlxC9xH4Bc1t2hxsEM6rZqZmdnswoULnZYsWTIY + 1frq1Knzp0qlOoBDymAwIC82FczfGwbNvpeNAWArr7nbuO5e54lcA8GEt0eOHIloa7HgiwHMGjEjun7M + mDHjKlSooGRuqNVqREvf0Ol00CTPouDLE088sejXX3/tn5GRgcMbGkmxPwdmTNaUlJSODRs2RF92HObZ + tPWsJ4JpcRK1NtD1SrVR+n8So8J+RmFIJHUt02g0wn9+4Nlnn50dHh7ejVS5o9YArxiSK3AMCoypRa9e + vdDSFuZ7yhzz3Bc7VoaB0oA/5MqHv/DCCx+gPkhhhT7mM/g8GCcECWi4b6Kxz5kzZ2JQ5IfN8+djidwR + 8wxYoQXjRpriZUmSdlsslg9jYmJgxSos86eCFZ4XmC4sF2DCj8iy3FuWZaQ8z4+MjPx7+vTpx1u2bHnO + arViz+CZJxqNRgiusEaAcJ/KT5VKBddEokqlgpUC6xvvj5ckKU6lUsVqNJoLpDshejfs12g0G8uVK7e4 + Xbt242bMmPFaRERES6LE4XnnEgQ8vT+BewxksUJCxSLF4ng0MjKyx9KlS4f37dt3ZvXq1dfBFyZJUhQW + m0qlwmL0VksoMcKGduUWIAcvDoj4RYsW1efvW6BwIAecCd3ynnnmmcUoeUuYBlLcnGsCpm2TyQTNCofU + 0a5du87ct29fe5L2pue/tzBgD2f4QpOTk1u3bt16BblmvuuTxpnwr1NiGQr/Pl4IZRk7/Z0KAPgs//4C + CCmvCmPVarVpWq32qtFo3PHRRx+hWx4YCHy/RRYCGEalCHMozPPHH39MI4yQls5VCCl1eLaMuyLbbrcr + /n5oz1arFUFzCSqV6njnzp1HENeF02LBXzs/MOPSXLx4EcwfmiuY/6DU1NQVSPWz2WwoAJZL88/H1O+K + lAJNpIAY2gNjvcSYzeaN5cuXH0oaOoH5e3wPzPOA0GIgaYrQ9mtmZWU9Kcvy+7Isz0hJSdm4aNGisx06 + dLhCGHoGXBhoVISxeWA1YoUvVgijzyPLaDRSgSxZp9PheSK1c19AQMBvjz/++Cfo3koEEkUQKMo6ErgL + QR44FnhQZmZm43PnznVftGjRR927d59TuXLlLZIkoQEIAoKweJTDnVQ182aTlRhhDHa7PU9ZVioI4H+k + yhs2wgEUDOHnQMB7kHUDzaZJz549fyL50dnsoQWmx7pz4Iax2+0QBOICAwO3DRs2bExqaip8lnkYmbeH + EMMsoGk92q5du4VarRZWKZcBYZR4hk1L+dK1zYyfHrDO3ykThGvBarUqzBH/x+f59chSflYtnvCd+G56 + uBsMBgjdZ5o1a/brvn37YA2AS4Vl4F7NG8DMOT6Ps8AP50D9+vX/8fHxAUNHUC8sKDQmQCGkUpLqhujo + R/P8oZUe69279zCi+Stj8nZczHi0hPn7Z2RkNMjMzOyfk5Oz5PTp01GBgYEK8+eFMi8EAFrkRzH7k85+ + YMZba9SoMSQsLAwBf9Tn79HcsuMmFgsILRAiWqanp7+TmZk5T5blAz///HNUw4YNb5lMJsyZokRhv2CP + 0PllCkfRdecJsZ+hViTlJymcRqsZ3nA4HGdUKtXGJ5544rO1a9fCIoAAw0I9L4G7DOQhW69fv/7gypUr + O73yyitTKlWqtFOj0USp1eo4RL+qVKp0bDBI/DgIXWnXZY2grbkI7sI9XO3Tpw/SqzzayAL5g6yf8rNn + z/4ANRaI6Vc5eFnfK/2J9cOaXIlGe7lmzZprfvnlF5hCFWsAw4w8PoTYQzczM7PpyJEjZ1osFlSMxGHH + r4VcxK5pqqnz7yGHaLbVas3S6/VgFjcQpKdSqdA/INlgMOA1hTky2rIiTLjS4rwRAEA2mw0/le8llhXc + 1y0/P78DU6ZMQUEd2jej0Ic3M+dgXHDPVFuxYsUoSZIiUSqZ3h+tn0DHodfr8dwzwURJ7Y6wbt26fXT9 + +nU8z0KNh32ehIn6x8fHg4misc/Ko0ePnitfvrxSo8DVPHooACjPlIwdQhWt8HcoMDDwo5MnT6JyaK71 + yI+TBzdumPvBUBvevn37ZVmWJ8uyvCk6OhoafwKyI4imrzBnyqjp2sH4ecGmsITvhrBKr0Guq7g8EKQJ + F51Go1k2aNCggXFxcdUjIyNzuTs8uXeBuwTMJq/y6aefvguTolqtxmGJhYDNoGj3BWn47EF/J8lkMjl/ + 5wUUBFQhz9rPzw8H2Opjx45Vo3PAz4uAd8DhGB8f/5S/v/8amE6hpbLrgR5e9CeNvMfvWDsMU0PcyJk2 + bdp8d+TIETRwQVoTPXg8YiDMe2t+/vnnX5AYBJhT86wXV+SO8ePQhACMA9Nutytd/YxG496XX375myFD + hvxvyJAhw9u1a/eTj48Pal+guJBTEMC6I4JOLkGI3VP57S9KdE3jJ4lhUDRDUmAnzW63R4wcOfJLYmJ2 + aqoFzZkrMPMIBgCrzANfffXVKLvdfgRM0m63g9nDHUGL++B+Mc+ZGo0G8xPeu3fvEaQ2fqHNycwZpTD/ + 9PR0MP8uOTk5P0dGRkY5HI4UzIGrWA5+jl0QZbIK8yf+9QStVnsFKcz+/v5jY2Nj63ib6sfMHe1OCutH + k+zsbETt/5qcnBy2YcOGuJCQEKcwRctDE03fOUYoMa4Ex8ISvot8n3LvJEhbcRWoVCq4CTKIMBteqVKl + r44ePdqIzL3He1DgLgDdWHFxcQ2efPLJGWaz+ZxarVZ6nmMz8RIn3Uz0gCxsHn5pE7OBsOCRivTPsmXL + nmHTYPi5EfAOOJjXrFkzVJKk02azWdG0+XXBWwJAhPE7nxM5xHEYoc/8iU8//fTDa9euQftiK+G5PISY + /4FCZs+eDYEWQU9gTHnWszvCWuH9/KRAD9WU4mrVqrV2zZo1XZiURhyQNJq7wpw5c5BtsAFxJjqdjvap + cGp1VGBm58KT8bFMjn0/NHG73a4wYr1ef2XUqFHfJCQkIDvH7XwVBGa+2Wj16nPmzOkTEBCAvgCXCMPE + mZFiNBpRIAeuQSgQG8aOHYtKfND8c+Wf89fJD8z1lSI/SCXNzs5G+tuUEydORFksFiXQmJ8nED2v+HXI + EH0eSrwCCahDr4NrWq12f/ny5YdHREQ4G4d5M3byfmo9wbgfSU1NfUeW5d9zcnLOfPPNN7AwgNFmY20x + MRTOsRcn06fkRpGja5L+VFw5arU6jQQgLps8efLTjBCQi/h7F7hLQDblg23atJlOolydJlK6AKn5jP6O + g9HFAqKHZJ7XS5uIZqkcsIzpj27ym8HBwRt+/fVXlFdVKgCKBVw8SE9PrzF8+PBJZrM5lvrZqb+cMip6 + oDEaiMIEqZ+dCgj0/eRQvF2zZs0tS5cufYkyNFzP3QFEXgucP3/+m1ar9ZBGo1Gq1+Xng8+PMBbih1U0 + bJhHR4wYMZzkUzs7vrEMjjn8Q8aNG/eqyWTaDK2SFPZRNC3mwHVey5XVwRXhfXT+MD7cG7POqVk+btKk + Sf9j89RdzVdBYD6H7wAjVpgx7v+7775rV6dOnRn+/v7bDQYDgoE3NmzYcPx7773X6fLly6jux17bK0Gb + uS6uh4I2MJ83JeV9l4SHh5/28fFBt888XRv5s4ufP0KU4WKulCI/JKr+msViOWq32z+LiopSuvp5O2/M + 81d8/ohVIO6KP1JTU6PefPNNZBbAXaKMgcSKQAuHJUfZD+wzplQc5ys7H/w1MA7sOYvFQudFsYqQssfb + P//8807kWbBrwuN5EShDwINDRamvv/4aWhu0pMyAgABlM/GbhmOmztdYKwC/0EqR6EZmD1PlwEbMApHo + I+rXr7920KBBr8XHxztTkPg5ESgcMJeZmZkNX3755bkajQapR9kQFKk7BmuEMnUfHx/ns2PdNfQgopo3 + XW/kc9CS4rp06TLv9OnTYAJ5GuQwB5J93759XX18fHZptdp0ak719PDkmQllEqgZYbPZDo4YMeLtc+fO + 0eAoatbmmT9LutOnT1d74403PtBqtYetVitiaaggwPp68xz4roidH3b+MFb8jzITYoWJXb9+PYrH0Kh1 + rxgZBTe/lKhVwECC8sAYwPAVqxrzuUIxCfJZqvkjpgHPfXRGRsbG/fv3Xyxfvnwacas475+1MFHi548Q + y/zB4MD4Ybm4EBwcvMVisQyPiYkpSsCiEu2P4EkUvkpNTe0hy/JP169fh0vkFgQXOgb6/IkwkGuc9Jl6 + msboLWG+WCsUY1FSxoS9Q4TJ9ICAAOzrjV9//XUbksVQqLkRKCOAhJqVlfW4zWb7Q6PRJLHBSvkRDh4s + FP6wYg7rkiQ6RjpOdhNDgkfKDiwZJ8uVK/d3u3btpk2YMKHXwYMHa1+9ehWmOFHoooSAAiavvPLK99Cg + UICFPjPa2pk1XbNMFmuG993yf+OQIowt02Qynf/ss89GJSQksBHZlNHYwsPDu/v6+u6Dtk6ZP12rdCz5 + ETs2sieUKGl/f//DrVq1GnLjxg20mM2l1bo6CNnXse5u3brls3nz5qcrV678k9lsRj42zM0wtTpb03pK + 7BhdMQhocVqtVtHgtFrtrvj4eBRcchbdYcfpKbj7yUNu3uc1k2DnjDB/JXBOluUPZFnecvz48cshISG0 + HgG93zxz5IrIOqDnBzX7g/nj3IDb4h+r1Trg7NmzNH7Cq7FTkLlG7EqN7OzsUFmWp6WkpByaOHHiDbhY + 6RiosIY9wN4DZczsuFlGXRRydXazxK4lOl/EfYX1CiHg14ULF7Zg3QH8/QvcBUCFryVLlryh1WrDDAYD + NoNSrY9fEHeC6AIlmQZOpg/flNFoxFgVc6zRaETtgXPoJR4YGLiwbdu2I7/55puue/bsqU/MxU5thNyz + WKwlBHRzGz9+/FfQogjzUZ6hp5q3p0Sq992uXr36jiVLlqDkKUzN0D5tly5deiEwMHCv2Wx2MgiqGeZ3 + 6PFE9oHCJIxGY4pOpwtv0KDB8LS0NJiEvfIHcwxRh5z6zz//vG+5cuXgQ79C8s0VawB1XbGCNIQWygxY + jb8gAnPBfkH1wCZNmvxMSjE7ffH8OL0FOwf89/F/ewMyPmo+B/NHtbq309LS1kdERMTabDZkIjmj/fGT + t04WQNQ6gnlPMZlMYP4XHQ7HpnLlyg2MjY2FtaEozB+fxdhDsrKynpBl+WNZlrf//PPPKMjjZP4M8eMr + kHgBAcSvGxD+Zl8raA/k838qMCHW45IkSbO2bdsGi4wzO4CfB4EyDhwII0eORDe0i6QXeaEWY3ETDl/m + wMaYaOEKpRQnGrigkpWPj8/qJ5988tPPP/+8y65dux6AhkU1Qv5eBUoW5BCw7d27t5fdbkclSARa4qDN + 9Wx5zb6IlGW1Ws+2b9/+p5MnT7a/fPnyS7Vr116r1+thYne+jx6M+RxuuYgcmLQRT6pKpTpduXLlT69e + vUrb1RbpwKOWilOnTrV48cUXx0J4RcS1zWbDOsd6p3sx135kgyXzI2qhYxgM3DHnv/3228GkxnyxCwH8 + nBT2u8n3aGNjY2nKXIusrCwUD/orIiLiAjR/MH+e0XkhACDiXfH5w+pJiu3EWq3Wf8qVK/fWsWPHiqT5 + A2SNYJ5ry7L8Slpa2q8xMTHRFStWTOECQfmxeUzUvUEtA6wwAKWJnx/2c+znPZwzkLKOsOfUajXiF8Ia + Nmw48tq1ayXSBVGghEEeWJ3+/ft/i4It0DxIwBX/4O8YaTSaTJ1OF0+iuDcHBAT80LZt24/Hjh3bedeu + XTAJ4oCApK0cyvw9CpQeyHrCQdDgkUcemSdJElKI6GH3X0BAgNtDyVtiLQomkwlMOslkMp1q0KDBGdT3 + 5w9XelDy31MAIdUPVgSUYZ0aHh6ONKhi0XYYhqkU2/rrr79eeOSRR35AgS0wJYvFoggCpD2xkjZIgyk9 + taawghaEe5i5a9WqtfzWrVu4D6/S2UoLlPmTqPny169fby7LMoIYNxw6dOh8+fLlYYJ2av4seSgAUCaG + FEW4CxEbdN1sNu/39/f/MDIyknXtFGpuyGdhjYL2j0I6X6alpR3s27cvrAyKlZVfn4Uk+j3KuU2zCGgQ + H/t/9pos48eceThv7DWp8ISCWuuGDRuGegYQdopFoBQoRaSnp9ceOHDgLLVafYVIxWXGBWAymTCeq82b + N/911KhRr+zfv79hUlISpHPawUostjIGcvg5Nm3a1MvPzw9145MCAgKcQkBxkr+/v/N3xlyf6zqFOOCU + 7yGpfrA4Icd/ztatWx9ngw75+/YWjABAyZKYmFhn7NixA20225+SJEXTCptIx6UuME+ZP4jdxwguI8V5 + oogVAJYy5/X58ZU2yDjAQCBAYp6DMzMzUQ1y6H///bfm9OnT561WawoEGVcWJA80Wbo2FOaPudXr9UqF + P2QuoKVvYaP9eZB7sOFsTUtLewUpfxs2bEDVVMSQFGUvsAwfwikCnEGKVk7uDbEkyk/2b6xnvqgQJS8t + AfTzuF6i2WxGP4/Z27ZtQ0MqpUASPx8CZRiyLFf85JNPPjUajedI3mdhF2dJEDbqviNHjqAjFg4sJXiP + h1h0ZQfMQV5x7Nix7xkMhsPQPCHM0WC84rAC8P5xenjBPw7GR03grsz+Hhx0YDIIDEMRmN9+/fVXNIpy + FiLi77kwcCEAgKD5+sTFxbV47bXXvtBoNOg4d520K1YOc2h23gjojFlYKV6EdMo6der8kpycDOtZmTDb + MmuGVspDTQUwf2j+f546deqcw+FIRslh/lmCPGRglPnjuaLapJLqZ7Va9wYFBX0cHh5eLMwfoH1TUlNT + H5Nl+VNZlg8/+uijcF06U/5cjC8/YoUXMF5abAkCIlwKqcSaAcJr6YgzQPYLKlRqtVq8F59R4qaIgJBr + HB7MX66xEMEDzYdQH2Bz165dkeGgCJX8fAiUYaCy1549e7qhwxUWjqdZAKVBaBSj1WqX37x5E/mz/GHp + JP6eBO4syHMBc6n65ZdfDrPZbNtIhLVy8BSHm4n6wsEQqFYMZo8eD/x7eXLFRBjC2HBYXtdoNOtmzpyJ + NtG0pG6JrDV+PcOllZaWVnXTpk09HnzwwYVwCwQGBt4mrg6PNEgqJHC+YQgPYAbHNm7ciPtSOi+W1H15 + AnJ9MF4wTaSVoa4CGOeI//77b31YWNh5Pz8/lFVGTITz/rw0YVPmSbOE4L++ajKZ9vn6+n4UGRmJTJLi + Yv74Dpj/EZTaUZblOX/99Re0/3Sz2UyZZ4HPz8XYabaCMn6NRgPXBfpsIGsB1qIojUaD0r34Hc23EKSH + TCjESyFqH/vvNio3IuCUTUGl5ME80vEoe8Rmsylpk3q9/oRerx979OhRFOrS8nMiUIZBDurazZo1m0KL + AJUFIcDhcOD6t9Vq9XdIoxEM/+4CIwSE7N69+8VWrVrNR7MajUYDM26xrS8wfVowhb6WX7GfAjQdetii + a92mMWPGvIYaGcXFHAoCJwRg7mB1eGTChAkjdDodigjdMJlMNEgw3/ljLSRs4yIiRFzs27cvotJxb3d0 + X5FrQ/MH84cWDp/5yMzMzL//+ecf5OODYWHMyj2wz89DzR9EmT+0YwT8xQcEBOwqV67ciPDwcASwFTmo + k4Ka/zMyMuohayE1NXVrx44dwawVC5i7aoVuiK5HGgANwQV+d5jd9+n1+j/MZvNParV6liRJ09Rq9XS1 + Wj1bkqQfNBrNHJ1Ot0Cj0SxRqVQr9Xr9X0ajcZtWqz2EeihGo/EaKdPsjEnwVgBAS2JSNwFCx5JBgwah + qqqFnxOBMg48tN27dz+v1Wrhe7xVQJSqq9fo61hMCNKBZAphAgsW38W/1xOCtnKxWbNmn0Er4McsUPZB + DlUl2j0lJeXhuXPnDgkODl5N1gc9eOja4Z9/vkS1P/bAclG8J9d7PdD8sVbBJP4ZOHDgq/Hx8dBGS91M + zjBlzB2CBCufPHmyZ/v27ZchWp30FnC3P51EfeX0vmkLYQg4FSpUWIQA4DspADCCDsz+KBWMMrNj0Bzn + zJkzlxExz54f9H4KYlLMc6ZzpKSuMQz0HxT5iYqKUjTW4gxeI35wpB4/npaWNu7atWsnrVarko7K1/Yv + gOizolYLCBFg/OjEOrNy5cpDO3bs2Onjjz9+Yvz48Y+MGzeu8fjx45tMmjTpka+//vrRb7755vFvvvmm + FQr2TJgwoSPSoseNG9fvvffe+1+fPn2+ttvtSw0GA3o5IFBXKUVM009djIUnBBoqhZPsdjs+DyvEJh8f + n75Xr15FjFaxzKVAKYFsgMBx48b1UqlUqFsOqU45oEm+tXPhQntDCg45TLAIErVaLcxNiNLfERwcvPSF + F174YsKECWNbtGiBZihY/LQ0r/IdHvqA4e881adPHwQs+fNjFrg7wDAYmHj9IyIiWr777rsTSMlYxS9K + opZzMWj6O7RXquWxLYSLk0jJU1CGxWKJePLJJ1GrHdpxsWmGhQEjBGAcfrIsPw8hQKfTXVWpVJnEpKzc + A50vDzRifAb1+qFhI7BRT6/FX78kQe6NpvpB0ILm/2laWtr2M2fOXLLZbEpLX1bb5wW+AoiWslWYP8kM + uWKz2XYGBAS8d+nSJTQScnb148dXGJBnhYwkxDCg8M+cH3744TK12uDs9CKIEz0dFOZvsVhgwj8mSdKP + zZo1e2PFihWPIMaGRN7jehAScS8g/A4XBAj/g5sH78P6QVVDWFORu99l5cqV4+vUqbNDo9HATeCsQ8HX + FnBBytlPujxeV6lU5/V6/R5Jkj5ctmyZkibLz41AGQaVxBFhP2PGjG7+/v4LYK5Vq9Xoha0EjmBxEMsA + GDoCP8I1Gg3MaAtbt249ZuLEia8cPXr0qeTkZPjrK2RmZjZ68sknf9XpdPBX5VpAnhzkJP86bNSoUf1g + CuXHLHD3gD1kcUihCM6WLVtefu655xahaRAClmg1tPwYGPUB8+upMERjCHx9fel1s0wm05WGDRtOSU1N + hf/WqfkXF4PwFsz1aXS8X2pqavemTZtuJD0FlAObnS8P5gb3i8P+n8WLF6OAkmKyLc17JPekI1U5wSwf + SU9P/19WVtbWEydOXPL19YWAgvMm19i9EQBo9UZ0fyRtfa/ZbLYdISEhw4jZv9gj1omQiyZQsCy8m5WV + 9Tda/FLzPx0bf18uCIKCYk01GAzQ/E/a7fbZ/fr1e5pUoARjz7U+PSAqSEIwgIWiekJCQltZlj/p2bPn + ZrR6R8yVn58fFYb5MeUaH3EV06ZJqCGDuh/jBg4cWJcKlQJ3EZhF4oO2j3379n29XLlyP0qStF6n0201 + mUwI5NoSEBDw/9j7DvCoiu/te+/2lkYKIE1ApQhSpEknFMEC+lNQBKToohRBlCaCKL0IiAqCqCBCEERE + EKSJCCpKr6EX6QRCSN2Uzf2ed/4z+00mm2QTEkjCPc9zniSb3b1z586c886py1988cUxsBb8/fffLdAa + lCJLLHzWVQ/8qMlkWsUsAGAWmORLFDNaiUqStHvJkiUvYsGL49Wo6JEgjBzx8fE1Fi1a1DcoKAhmzejQ + 0FD0jvcIIJyWgoKCclX5Lg/s9vf3hyJNrlChwq+XL19m5XLZOPNVSeSGvAhw7K8H165dO0qv1x+nuewZ + CuL4cMIkpzeA62HDhnWnyoBcQ7x+fhN3LyzPv2RUVBROo/2Q53/gwIFLDz74IDH7e1P0uQAAREHR6oow + n0fRIj/DTp8+7Tn5i+O7E6L3BeWKgFGUyJ2bkJBwJCAggJysaRdJz314GTM/dmL69/f3R5rihZCQkIie + PXu2iI6Oxkne07mUZ3E8InFriGValKBA5cnk5OTxnTt3/osF6sLC62VcIpMugbRdPNy9uxVFmVmmTBnU + bTCL19eoiBC3Qf1v3bpV4dChQzWXL1/e6Mcff2x08uTJ2i6XqzLNxUfQjicXX1iQ+rNnzzZH5ygocua7 + 8+Xkz5h2b/tt7969rXEdcZwaFV0ShFFgbGxs47fffnuqJEkHaU12ku4mrgkARyg7H5VAtozvCAwMxO9E + 4Fqt1sRevXotRPS9eLoSx3+3SNhTxApw+vRpKIE2jRo1+gnuN+qi89yXj+ZbCO8THTt2hOKFIijw++Tu + A3NLuuOpqoqCRH3cbvdSmucPZc1S5TI9Lx+fO1OgKBVMgtQsFsufJUuWfOfYsWOoyufpGyGO8U6IfidA + DU7onVJTU388fPjwZbhq2Onfxzr+5Plg/Dqd7qpOp/ujUqVKr9KS5hkUvzgGX4jOP9wEOLCVio+Pr5WW + ltbD7XZ/ExQUhCJaSb6kgtNUQlhXSBVFnU63S6/Xz5IkqSksO+J1NSqCJAjqLINlBEEFtmzYsKGT0WjE + osgQBOiD+YtxkizLK6OiourguuI1NSraxK0tMIRy6V27dnVs3br1d4qiINgJz58ITdYalRM+4lq5I6YK + B6fik+XLl5+6bds2nIwgID1r/U6E7p0Qt6cIAKCnzMfGjh07V6/XwxWXITc+h9MlmCgYg8Fwpl69emis + A99wgd6bMH4oHygzBCC+qqrqN0ePHj1us9nQa8FrwDBT/j48d4/yRCloevL/Cz7/Q4cOsaZRBXKvVD4i + Dx73NSAlJWXrlClTiPmfKVQ8Gx8sNESx0mwF9DeZv2rVKoydgVKvMthXysIK0F5V1YkLFy78m8bl5AgA + WAyYXq9HYOVlvV6PeK+PAQB27txJamaI19boPiFs8BkzZvSjZkoP+sVPbGIfLQGIVJ7ncrlgstMWUzEk + TrlBuEEwWWBhmjdv3qtBQUG/KIpCSqdizfCKDYDAy3rJFcOa4O/vT35naYn+/v7JZrMZAVE/v/DCC++c + OXMGxXIytRwW76Ogibs25ggKtMaaNWs+oQ1ZSIU3phx9VZKKolx4+OGHEXFfoABAeMYAL7BgVITyT0tL + W3L48OHIEiVKoAuppw8JOymz5+6D6Z88P6r8oTyJz99sNu/29/cfceLECVzPYzoXx3inRO8PzwWWURQw + mqmq6oHw8HAS/e+Ly5N/Nhi/oijIlPm7TJkyXfHd3HXuePzsWcCqQC1ezV0u19CoqKh1FouFgEovY8vA + tDIlAADJ+pJlGemF0y0WS+Ply5fjGd/xODUqooQiGIMGDZpkNBovQThBYDPzrbiQsmAsrnONGjVCFS2Y + 1LTFVADki0DJ6f93SoJyYz+tV69ebTBy5Mivab1xZJ6Q05MPJu48MS2VC8GHzn8Q3Lju5g8//BB+csS4 + ZAAC4n0UBPHX4+YGiuaxrVu3IvcbvtcM1Tt92GNEcMuy/F/lypUBADymZfH6d0rcmPmTPwLwXlBVden+ + /ftPPPjgg7G05Lc4Tl9P/rzyZz7/6MDAwD1BQUGjuTz/ArlHEP1uuEShTFH8Z2VcXNyF0NBQkkklli7O + 4n5wDyztD6fwowaDYdb//vc/WBSIBTS/1h63jvxowCuyQQarqvpz27ZtAYAxbnF8GZi6NQAkMd/YK3sB + APR6fZN58+ZpAOB+JbpIH27dujUCCG9h8TOzl9gVLhtGKsrRp556CosSUcLaYspn4ueUCmj4L3EahJCG + +RsC4q61UOaUBVMY5WfPnj0hMDAQVc1gsvasjywEaK6YfR9fRZD+jygUmKMNBgOAwKkqVap8sWbNGkRM + Q8gX6DyIxK5H54f4z1NSUuqtX78emTrX4WJj8RKYFx9Om3gvGrmcqVat2gi+J4B47Tsh7nmyyHOsLZiy + UYFw7oEDB06gyA9/2mTPICczueDmYIqTnfyhPI/4+fmNOXPmTHlmOhfHl19E7xOuBZjTUQ8fact/bNq0 + ydMIS0x/zuL+GIjBmrssSdIfBoPhze+++45kQOXnM6LPBWPGPkfGFtIK+wK4tG/f/jJttS6OLxNz/TKQ + prjPYrFMkyTpCQ0A3MdEF9djJUqU+MFisQAdehZMLgK4sLB2ffTRR2ikQaKUxetolDdigoSy365du0gA + XqlSpfYjYMpkMl0vUaLE4UaNGi2YP3/+KzExMTCf5nvUtEiCwgj+6quv+vj7+8Os6GKV/XxcO/nCLC2R + nk4RTLa3e/fuI44cOYIKb1Bo+SaQsyPheZHgXFVVW48aNWqN2Wwm/tocFAvPTFlCaEe2a9fujfzucQCi + 30dO/devXwdogmkc6WHd4uPjZx4/fvywv78/WvpmiPb30dzvuRcarc4C/jAX1xwOxy5E+589exYHB2ZV + yrd7E4lZrKBIU1NTkRU10+12RzqdzkQa05Ap99+LlYY//cOnjhiYtZIkPc0CoPPzPri1BNCPehcIxnwt + PT39B6fTSarBeplvb0zmXlEUAID9iqJMBwCYPHmyBgDuV8LGv3nzZiOTybRBURQsaLJYsKlhvvWy+L0x + /L5blixZ0o6ZXsXraJQ3Yua/6OjoR994440pqCFO841x4mXz77ZarcQMXqFChQ0REREw2aJSW6YUJPH7 + 80r0+/DdoV999dUbDocDgASnOs+Jj/0UTaoFxVQRkQIuNpsNY7kRFhb2y6efformVIhi92QLiPeTX8S+ + m17HkJCQgKI5fRs0aIDCMKR+AoupYfOTjZuEnTITZVne+8wzz6CNa74CAO45mmjketmUlJTaKSkpfVRV + nXfy5Ek038F6IwWg+LnOjfK3Wq3EXYNUP+qHvmKz2XaGhYUNOnbsGObobih/BnQwh7BuoCHOOlVVr9ar + V4+VbPY8DxEI8PfDnf5hOfhTr9ePq1u3bgbzv3j9OyE6bshWgDPEuvRJT09f6XQ6YX3wyO0cWAQAMyVJ + ajJz5kytKdD9SjBR7t69+ylJkrbzSBKbOxcWAJfBYPgeKYgFbcK7n4gKLOO1a9caN2nSZK3dbic1ypnw + ZfPP8u6pYsEzvPD0009/tWvXLkQLQ2CwoL07FrCcwjAmJiaWWbx48QC9Xo+qkjBTIzCPjAVjzIUL6Y4Z + QpsHGogRoMGCSJP6a/jw4cOSkpJQ9YzMg3hf+UFsfrk5guWh2q5du2ZTv6sb1hHRjZFNJgBTNAi62z5w + 4EC4NazsWuL1c0vcOAEUiVK8du0aGvvA0vDt4cOHj5QvX55ExjPlyJjJBy9jFplYZughAZYMUo3OarWi + sc/w48ePA6jmy9rMidh+ouZ/1I8Yoqrq3qNHj8ay1ur8s8gi+Jl3YSDy/5wkScskSeo8ePDgAlOk3HpC + 3QK4Lnqnp6f/mEsAgLEzAHBAURSkAWoA4H4m+BSXLFnSE4iQKRcflT7PMX5+fp/RCFVtIeUDccK5/Guv + vfYlLfdMoseZ6RWKXzxdQ7nQNDmUJD06cuTIKbdu3apNzYekPXNehS2n3GCOLLt06dKBtBYAytxm8GdD + OTBgks1JKt+YXRvXZS4IBD4FBQVBWENQ/zt//vzXCzKKnntm+GmIjY2FounYrVs3FOWCe81z+geLz84L + 4zlCuEfr9fqfVq5ciRTbfCkFzI2VdfUrm5qa2hxFftLS0r46efLkwcDAwNto7OOt0Axbg+LrXsbPTOVo + gQvlH2U2m2FVGHQ3lT+IXov1MXgyLS3tC1VVz73//vusV0MGawxbt8J9eqwy1JcOuTkH6XTr1q0j0f8F + QXSOEOeD9Qu3FiwAdwIADiqKAmDaVAMA9ynRRVVq+PDhI2RZPo0gkVyY9fhFdeGhhx5CtzKtsUQ+Edvw + 27Ztex4BljSAx6tVBookICDA8zonsPCZ26GhoZsWLVrUxeVyIYcYpwjPKdjX58WENFX+5aD8FUVBfwAX + SwdjLI7vbgAAxqJ1BOvTZrOhWM0tf3//FefPn/dUDhTv8U6JmyNiUne5XJUuXrz4vtVqvYDgP8wDPzc5 + BADyyvO6oihfnzt3jlgw2LXE6/tK3BhxGiYtfRMTE59ITU0dqqrq94cPHz5qsVhiaXlb8mzFZ+oDs/ET + ZUlL5F5Hnn/JkiXfPHr0KDI17qbyZ2sX/m7sgzfS09O3qKp6s3r16qT0L/YWWzv878L6ZaCMnf5/Q019 + Pz8/ZC8UWP0TOn48LwAAWACc6enpq+8QACAzpZkGAO5ToouqUrt27WbJsnydz09mjL9zMPVhUUU+//zz + iErVFlI+EKdIQp599ln0l0/gGuAQgYSTJFj0H/N/43cqvBDAdaht27Zzjhw58iSsChcuXEB1N3adHJ8Z + fZ8uKSmp3Lx584bSkw+pmsbWCAQmTt+86T8Pyj/TadNXppUCCcP6QN0RRBHRRi2Rn3/+OawAGYoG5Sex + eaKKtdmoUaNQARA+7wxKlAcpWQABdtKE2fxU5cqV3+OrAOZ1/PSz/MkfwXf1VVV9C1Hlx44dOxocHHwL + PUXEdMWsDgdeXuOVP8ZPqs8hzz8gIGDwyZMnEY9x15Q/iF4L4LdkSkoKcv8nqKp6+OjRowmwmPH3hp/8 + M+GeFbsv3BN8/4jrWCBJUtvWrVsXaCAdHT/rXFiDApg1TqcTaYC5AQDJiqJg7IdoK+LmGgC4TwkPPTk5 + uUbp0qWXUt9chgXDm5vF/3GMDbF70qRJ6AFA0q74xcQLLG2R+UZsrmJjYx/W6/X7TSZTpgAl9nyYGRkK + D38z4SW8jwkuFOr546233hofHx+Pks3wJ+Z4Gqbj0SEH+csvv3wHaVto2sJ3t/PGUBpZ+FFFZuNjvuZs + vzcnxjV50MpyoP39/a83adLkE0RSi/eYX0TnCsq1ZHR0dL8HH3zwGMzo/Ph4K44XiwVjjJlFmf8xfPhw + BNh6shlyembeiH4OipdFlEP5I6Lc6Xa7l+3evTuyXLly0WazGXUHPOPjC/14UfbeXuPBC+TK1aCgoD8C + AwNH7N+//66a/RlRUBZAC5W9AkuHqqoX3nvvPYwxw3rj70e4N3ZfuKcLkiTBtfOeJElVli9fXqANdbh1 + BQCAWKv+6enp65xOJ2vVLT4Db6wBAI3+P2FBxcXFtUQBFRFFZoX2vTA+t3HFihVIqclwqsyCWQ47TgEQ + BmAswAJPXSsqxAT1gQMHGlAzIwp4ECGVnVIVnxdO3yIQMJvN8F2er1ChwupFixahtjwiihEA5hHK7Dlw + f+N/D0+ePHmYoihHIERQWYxdj12DvxZ/gsrG182UPaKpUT/gKJQFVRy5AgFM4YtzQJUr64eeZDQa18CF + URBrjZsr+Jlrrly58hvafCVD+2R+jFlY1xggwjyg0ttXf/31l8fEnJexc2OD8sc+hbsOyh+pu9+cOHHi + cNmyZQEQPWDT23PLDghwY+eVP4Ift/v5+b19+vRpzPu9UP64HilfnZqa2kRV1fHp6el7XC5XzEMPPeRx + c2TlXhPuDfODwMgTkiT9IElSN0mSiDtDvG5+Er0HHgC8lZ6e/qvT6cT6uBMA0EIDAPcpwRS6YcOGV5Bi + RAWOuGA8jI2BzcBvEOrThEKJiIyMhFmKFKOhDEXPaljjpAm/W+2kpKRWp06d6vHDDz8MnTp16ofTpk0b + C0X033//4YSD1ByAg/t+MWIOt2zZ0gyK0Wq1EiHFTmKY+1xWaiTvpUoZihv+aJhl4RaYf+DAAaQNoggL + np8I2CB0aqH2gL+/P0pFJ9MIe/K9ogsiO4ZrgAUGsnK+sixD+R/u2LHj1MOHD79WqVKlT9CoxGg0kuhz + vskQKlSy6/L3zgCRqFg5fy6qu2EOIby30gpw+b7G6Hzp4+LiAG5fatCgwX4KPDLNhciC8gFgwXjRPOhg + vXr14LbIc30NTvkbL1++zGrKw4/8SkJCwpzIyMi9DofjptlsRrMYMt8YSy4OAWTMtAYDxo0SzSTgz9/f + /++QkJABly9f9hT5yet95JXovUOuPJKWltYtLS3tu5SUlHN//PFHotj7JBsmxaZoVglADWpezNTr9S3q + 1q3rL14zv0kAAADtg9PT0zfdIQBA8GKLSZMm5XltaVREiS6oUrNnzx6uKApyy3M8cTHkD2HFCf44q9X6 + DW0zDAXCUlUQqdoyKSmp64kTJ9768ssvZ/bu3XtphQoVEDRzGKdQWhr1Ijqd2Wy2rU2aNJl+4sQJ9DxH + sQsSsX4/EhPYR48ebShJ0lm6wbN8Pt5Oat6YV5o0pgDRz1HBwcFbnU7nB0lJSYgCh3Jggho/q/ft23de + QEAAnhdqiXui7MFZ+K8zMa/c0PudlvHFKfHI888/PzI5ORmFZ2CJqPbdd9+9brPZkFqFdZlE65h7vosp + S17Jg/E7AIYXkzo5UVut1gSLxbIaEe8FIfCoosH6f+T333//xGazRfvSqY1nGlBJ5sbhcMC/u3zRokU4 + 8eWpMQ6n/A03b97E/OLk/3BycvILbrd7zvHjx/8JCwtDZD5J4+THkgsA4FH+6AqqKAqU/zXk+ZcsWXLo + gQMHELyYo6upIIhTnMGxsbFNVVX9MDU1dZuqqtd79erlsXbkxBQYocIl7u0/WZY3SZI0COb/sWPHFng7 + XS8AYAiCGJ1OJ8DInQCAlhoAuM+ICRLU+X755ZdnKYoCFJntRhB8qh7BYLVa42vWrLkiLi4OLoDqqamp + rY4fP/76V199Nbtr167rKlWqtJc2GYIww6mTCBoOQCAAB39DGSGidd0nn3zyGu0pcF+CAPZ8Ll++XCU0 + NHSPwWBIpkqTpfnl6uTNWOzQxywCNEr7TEBAwI8rVqxAMCdMw/7JyclV+vfv/7G/vz+a2BAhg+vzpmxf + wQcFDewURRScxWI5/uKLL46i+fmsaBHcUiHXr19v+s4774yRJGmbTqdDi1iPkMMY+Os6HA6vwYZ4DVYD + AAicxPV6/aXmzZtPpAA13wUe1ivtAd+mR48ef2Kt5/Y50bgK4mc2Go0nw8LC3r99+zYiv3NtOueUP5Qv + 4nMeQEEpVVWfVVV11u7du3eXKlWKuFzYyZ9nHwEAPkfGrNfrAehIYx+r1bo9NDT03VOnTsF14WlDfreJ + O/1XuHnzJuKUFqqqGnnjxo04f39/EnPiwz2CyZo1m81Ix8UB5ltJkv5ns9nuymFFAADYn0PT09MB3BHR + n1cAMFcDAPchcYKhdtWqVb/3FgAoclbmZj8/v+S6devu//rrrz91Op2fPfjgg+uxuKDMFUWBMMhgvmYn + N37TMYVClQNAwu9z587tTvOo77uFyQQ9FGGPHj2A0okfWZx7KDhvii87xtzzzxLPhSqpNLPZjLnfV79+ + /S+PHj3af8CAAagVTiwQMN/zz4yPL/By4vbGRFEgtcxoNOLkdbZ9+/ajVVVlp0PmNmIuJHNSUlL5o0eP + dqpVqxbq6J/Q6XSkCx37Pt4CwMdFiEGAeC/6pkuS9NcXX3zxPItVEec9r8QBaljAyl28ePG94OBgKNYM + pXOzY268uL8Uo9EIIb112LBhbfJy+heUP8z+YSkpKVAcXVJTU2fg5O/n5xeF4jzcnHqY7VXxdY6Z4meA + BcXAyMkfRYtKlSqFaH+49Ijyz83Y84s4pQkAVcftdg9XVRWpf1c+/vhjgBVPR0MfGHE4CMhESieC/z6Q + JKlB48aNCyyjhCcBAKCux/D09PRt+QAAWmkA4D4iXljdvn27nb+//zZfFxCELVMgnNBHmU/SY5oG/CTS + egKejSUqCPzN0th4QU2/G5+D/3f5f//9B5NdgRXXKOwEJbh58+ZOiqIg3YgUKxFN7lkFBIosWnDE/4Np + 216mfFDfnOQYixX9oPiZLx/sgxWAWHkoyEiSZflKy5YtkYYFXzxzNzDFz9Yne82OTJX58+f3K1++PIKu + Ltntdo9fnU+PBOM+BUsHzNNY31cqV6788YULFxCLkq/VKulYSZQ5OrWNHTv2V2+ui5yYKlx0C8Qe+i8g + IOCzCxcuIEjWMyfitbMibkwk2h/KPy0tDaWEv4iMjETb3SiUS2Y9FMRx5AIAADzA0gGwj+/cGRwc/M6h + Q4fuqfIH0fUD8FMuLS0NXf8W4PQfGxsb++ijj6IyIfaTL8+IKE56+kcQ7DKj0Yjgvwpjx44t0Oh/RgIA + QEGokenp6X84nU7sVZ/ktwAADiuKMk+SpHANANxHxAkTx549e15BmllOAYCMvUSVe36nubQZlD6EMctZ + x+eYCVv8XrzOB3LRojdnH3nkEZwQiQAU7+N+ICrASo0ePXqMLMvwwSP6PsOpJbcmZp6ZiZyzAnieD1Ve + pDU0ez9vufFmwcmCiZLAuGVZxvjPNW3aFGb4bIPCeKVH3xd06dKlOoMHDx6r1+v/hdWKBRLCPcL99FyX + BhBCON6yWq0/Ll26FKfpfA8yZcKZtmodULly5XOscJMP8yPOVarJZAIAPtCjRw904stTIyMuHoE1j+nl + dru/Onz48IGgoCA0kUqm64jMGVP4GKsPpn9e+QOMQfmjvO+/SPU7ffo0QNa9Vv5MYeL0X9vtdr+dlpa2 + Caf/X3/9FYF8xPwvgp8sGO9FP4aLZrP5D7TRNZvNLf39/aE4CzT6nxF3PwwAvJeenr4jPwDAjBkzSHVM + 8ZoaFTMShGrovHnz3qbpLL5sgkzKmykO/nUIDqb4s3IbgHFKwykyi/e4AwIC4k0m0/pTp06hNrlevJf7 + gehz0sMX/9RTT03z8/NDLAWEred5YZ5zENYexlxDoYtWBMZ+fn4ZAAWqC+InFAKeV1bPX/wejpmSgICC + Cf5cp06dRiIdy1efNn0Pey/M2WGbN29u06xZMxRIgjkWWShE2TLQArbZbEw5XUXq3/jx46FMPYV0xOvc + CXEnzeoRERGoqRHHQJqYOZMNE8Aiy3KKTqe7odPpIjZv3ozOjj7NE0+C8kMAYd/U1NSVO3fuPBoWFoYi + P16D33w8+ZOxcsofz/VmcHDwrpCQkJHHjh17JC8ui/wm7pkglqiDqqqfp6enH0xJSbndpUsXcvpnayUL + GcTfK+4TlQyP6vX6FZIkvYngvxdffDFfXUnZEfdMAQBQzXJUenr6n3cIANACvrUGAO4zokqlxtChQ7+A + z44/uWfH/EmG+fT5/3vbSFA2EIKC28ArM8VEBTlM3geWLVuGwB3SAOV+JCrIIFAffvvttwfZ7fYNEEZI + 5cOG9ha85Y1FMz3/LMQ0OjGHXzztZxFpLzITsMREbDQaT3Tu3Pndy5cvkwA8ZvIX7zc7YkoFbiFUJJw2 + bVrX0qVLL5Ek6QwUEarXsWAto9GIuImjNWvWnPvtt99CAeC6ubqeL0THwxrMdGvVqhVAmkcgi/OeDcOV + hs8B0Fxq0KBBr7wU/uHmlgS+0b7x3588efJEuXLlEOPhGVtWQFBk4VnjmRKfP1X+sFbss1qtY06cOFGV + zgUBLeLY7hZxyhIuGaQnD0DOvKqqF48dO4aeBGTv8Cmm2TDeC3cOYjpw+p9ps9naSZIUvHXr1rt2MPEC + AN7PAwAge4MDAOgx0kYDAMWcOCEViIjr8+fPt5k1a9bkGjVqoPAKNrK4UO4Jc4qIAABZlo+OHTu2N9LD + xHu6n4g+P5jB/bZv397g6aefRmAgIvOh6IgQgy8Xv7MYDTanzKwrznV+MwOE1AfPFD8ayQDInXv11VeZ + 8s/1iZYRrwyZiTsqKqr0d999F96hQ4ePS5Ys+ZvD4fizQoUKv7Zo0WLu/PnzO9+6dQuuhgI5qXHPBRkT + NQ8fPvy5xWJBPAyUuWduvAFjL0xO/wj41Ol0O5YsWQIzeq6UP4jOCywlQWlpaWh3u2b//v1n7HZ7gtls + hhuGrBe2LkQQnw1jbYGJEqEBozdh9keq33///XfPff4g7pngmbPT/6eqqh6Mi4u73a9fP2b9QFEsBKWK + 95nhnrlqjGdMJtMqSZLeNhgMj5UuXfqutj2n98UDgNG5BABsT4oAoO3EiRPvy2DrIke+PiReQMbHx4ed + PHmy0fz58wd169Zt3gMPPICiP0j7IxH6EABikNe9YHYaoQIJbWVxujgyZswYnIQc4j3eb8SePRVupZYs + WdL90Ucf/Q7KlfM3Z7AIwKSfixNovjAFG26Hw4GAP4DLC7179x5KMzryrPx54r+DE/g4LUMog/E7AG+W + MQb5QUwoJyQkwKXxXOfOnfdTJU6eQS7cM+RUbTQaE3Q63cUHHnjgYxTsYdcQr5sVcXNhpXUVhtMKf4lm + szlDbX/2rHwdHz5LrU5IpyQ+fwSnVqxYccShQ4cQ+5CvgZV5JbrGoChR84Cc/lVV/SUxMfHS7du3ScYD + a/zDnlM2AJmc/nGver0egbhfoe2vJEkPzJs3zyBeuyDJCwDIrQWABwDIHAAAQB+DdhoAKELk7UHRxQHU + T5pdnDp1qtXcuXP7PvPMMwtLlSp1Rq/XIz0HJzFSUpYF+mSz8O8JMyBCTXOJBoNhz/z581G3+74HAIzo + s4aQ0926dStgzJgxfVCVDM/YbrdDEBDTpt1uJ6cccY4LitlawvqC8lcUBYLzVM+ePUfHxsYys3++KmMe + BIj/Y5Td/+6EOGULU3v1W7duQZjGQlGyU2Uu6jUgSBL7E26L7aNHj0b2S67BEqf8oCSaqaq6qlGjRvBd + M593pmfmAwDwWHOQMkhThhFEeCQkJGRCZGQk3Ay5HmtBEPdMWPBjm5SUlFk4/auqenvo0KFkf3As3ivP + LMYBlo7zOp0OhX8+lCSpcXBw8F1J/eOJ3psIAHITBKgBgOJAwiKHj6vSiRMn2ixcuPCdXr16LSxTpgzS + VFDTG74ugvqZuU8USL4E691N5rIBIERxD5tOnjyJAkN3zddWFIhXpjjpnjlz5pG2bduOhc9bp9NB8RIf + J047MMfzKXsFybgWzSmHkjg6cOBA5F2jTjrW613zC/PzI/4vv4jNPVU0XSZOnLgLCoOl/jHF6gPQJqd/ + Wqfgql6v/xgV+8Tr+UJ0jjGmkjExMS+sW7cOBWtcFAxmuG4ugv2I4kDzJ1gN9Xr9TZz8g4ODx1y+fPme + 1PbPiug6w/2jGFMVZD7ExcX9pKrqpStXrpB9UapUKQ8AYBlKWdw3i8cgOfOSJC02GAw9JUmq1L59e1Iy + W7x+QZIXAIAgwPwAAE9qAKCQE334xKQPgXrx4sWWc+bMGfLyyy8vrFKlCkxTyE/FAicIFwIHpl9e8OQg + hO45CwFoEIj7mzdvjojxcuJ8aJQJBJCgrxUrVoSXK1cOJXT/s9vtDAhgPjMpgPxm5roxGo2pNpvt4ptv + vvkZuhlSocz4roGAgiQ65+z0/8jt27fHlS9f/gotb0zmGkCb7bkcXGxM2eCk+e///vc/5KvnyXVB5xfK + CS6J7m3btr0QFBTETr0ZnpUPAIApDHyeKH8En+r1+r2lS5ceeurUKZj9C5PyZ88Evv9SqampbVNSUmao + qnpAVdXYgQMHosOhR/nDSsYOPl6sNLhv3DOeCZpU/S5J0iSz2dxakqSgsWPH5nswaU4kAACWBrg9PwDA + 9OnTC6Qypkb5RBTVlt28efPTLVq0WCDL8mlq1if+RpbPzaLtxY3NK38gXggk/tR/t06I2TEXkYyFGo1O + VZs3b653P2cA5EQ8CKB/6xISEkq99957PQ0Gww7MI3y/uS1IkxcWgv+ujBgx4svExET0XYcvllX6K/IA + gJtzdvp/fvny5dtkWYaCzKBYWQ2FbALN2HwhNQtFtJb9/fffFdh1xGtnR3RM5JAQHR2Nk3n/gIAAHAxQ + WIhYAZkl0AfTP1OUTPnjJHzLZrMd8fPzG32vuvplR5z1g0T+u93uN9LT09H58dLx48eTHA5HKm8J4UGZ + YAVg981O/5GSJK2UJGmAJEk16tat6wn+u5v3LgAAVAIcQQsB+VoJkK21JA0AFBGiD11/5cqV6m+88caU + sLAwFECJ4/15qIPu5WET5s2PoplfjBa/10wBQJrRaIwPCAjYNGzYsE7UlKctzByIBwKU7X///XeDTp06 + fWq1Wk9SYVbgIIAGHAKQApheKVmy5Io5c+YgiBPmWJzMigsAYKf/Kjdu3BjZrl27UzQFkVjf2L7KwrzM + MxPKiHeJrFu37ggGePMyT5wSLH327NlBBoMB0etpwcHB5Nn7ePJn48L9wOePtRNTsmTJ3Xa7/cNCqvyJ + nORSHzu63e7P4fuPj4+PHTBgANYjsYaxww4DZZgLTg56ABk9/V9A+WhJkj6VJKkj2v6y4L+7ff9eAABK + Af+ei2ZAPADAZxgAaK8BgEJK2GhIcxozZswHOPXThenx3bOHy0xY4ukfr/NK3tv/szmd3E3GwkwwmUyo + O79+yJAhaH+KrmV33dRWFMkLAGBKqvS33377YbVq1VDsyRchkWcWzN0exYb0qaZNmy4+evQoujwitY2k + 5PEs3k9hJW7MULJYn8+eOHFiDVUW7sDAwEwgi6+k6IUxRyT1T5Kkn5YsWYLAvTyZ/0FUMUMRBl++fPl1 + HBYcDgc7zYvX9rDgHuSVIJ4fYnEiHQ7HiIsXLyKtrlApfxDn+ghJTU1t5Ha74TrcjKp/R48eRX0I4prh + ARmTg5z8Y/PEn/6RJv2TJEnvSpL0OB/8d7fvn845AwCo7DiMNgPKDQDA+xgAQC8ADQAUVqIP3Lx27drn + JUna4+NDLjBmQoKBDWwgtqHY/8TTBTsN8e/FQkRwIo16Jj42o9GIOIafnnvuueGbNm1C0B9Mq0VO+TMT + LC0KU5L+xKmE5EeL788vEhQqM7WTQNHTp0/3btiwIco934v1w4ROvKIou3v16jXv3LlzAAJQJKQ9bEHO + S34THS/m1ZGcnFw1ISHhvYEDB8JETPo0eLl/D/N+Zqp0PKdsRVEulilT5oOrV68CVOQZGNHPYV790tLS + njMajcQFgGtxSp4pOn68JM2PvheZQuj/AJdGtMPh+CcoKOiDQqz8mWKEcn44LS0NWUOLUPM/Pj7+9jPP + POO16iF/74xp9UZUYozDM9HpdOjo+KlOp3tBkqQyqPt/r+6du0+4ONAO+N309PTfNABQTAkPJDExsUzD + hg0X06jq7BbxXWNvJxqYfvlCMBBwgsAhJ3wUoDCbzYhM3i5J0hp/f/8FHTt2HD59+vSXIyMj6165ciWE + VRIT56OwEqd0/ePj42sdOnTouW+//fatiRMnvvfZZ58N3rlz50txcXE42aGnAYkevhMhL5L4fZzy99u3 + b1+bsmXLojGN126Cd5FJkRtZlqPDwsJ2fPLJJ2Npjjbmo0i4Bbj5NVy7dg0AtVVKSsq3BoMhyseGMhkY + bjyU5LVYLADBW4cOHfp0Xir/8UQ/RwLhUlJS6j/66KNH7HY7AIZHySEexM/Pjyk7wigQhD2KJktoEMTK + +1oslt3ly5cfevDgwTyVJL4bRMcFqxIAd4ukpKRxqqpuc7vdV1evXp3EWv6K8y8ya1aFe6dNf+A6W2s0 + GodLklSfnv6JXLoXc8DWHgcA3klPT9+iAYBiStjIBw8ebIYHxUcX32vmXQq8+YzrKoZIcPjyIUSQg3zS + aDT+LUnS9yVKlJjVrl27XrNmzWp38ODBurQPPDslE9OnOA+FnbApb9++/dCiRYt6h4eHR1BrzWmz2Yzo + Ybht9vn7+/8ycODA9y5fvtyEFo3JFzM493l26mfKP3DVqlUvWyyWLX5+fhl6B9xDJkrHz88P6+K/li1b + ztm3b98TSUlJJI9cvLfCRtw8W10uF1wZfT/99NN/qP9evFevjDgXbp+k6fV6+Nivmkym+cePH0ecRJ7N + /yBujABWpaZOnTrDYrEQBYGod1S+o/FDROHzv9MWzaS8ryzLsVardX+pUqXeO3fuHPZoYVb+pMKpqqrV + EhIS+qiquiIqKupUampqbM2aNVnkf6ZnITIFREibjtPr9eiCiX280Gw2o+vfg/zp/17MA51/BgDQ3+Ht + 9PT0TU6nE0Xd8Owy3ZPADACg0yQ+AwCAwkYdNABQCAmbeO7cufDjXeUQvPhQ7zrzJn6AAZx+aIUwRDLH + GAwGKD5UG/wlNDR03nPPPff2lClTnj958mRtWpYVgX046eiE+y1yCxACCAGa3bt3nyJJ0kFaMpSANVoQ + Bqc8T1GcsLCwZXPmzBmelJTUnG5kj2DNi4AVP0vNv5UXLlyI4kD/6HQ6CHTe/HvPGJYjCh5RKwCC6LLZ + bF46e/bsobRWQKEGAZwARt30JxITEz8JCws7b7PZoGQy3a83ZjUumDDW6XQAZ4eef/75flSJ3bE1hFsH + 2GONQkJCEMEOPz4LhEOFRqTZ4hngNc+p32w2o+Md1vCxkJCQcagvUVhdNXRMLBgTKYltUlNTp6enp+9W + VfXm1KlTsfYJyPHh+ZB9SrttYq7QCnuT2WyeJElSizJlyuCZ39P1ya0/1t9gUHp6+kan04keBTkBAM+a + EwAALAAdJk6cCMtroXq+9z3hpNGvX7+xdrsdp+h7rvxxeuHiALCxWPASTGUw6a8uXbr0l+3btx8zefLk + rv/8809Tl8sFAQK/ZpE94XsjuhkhrMu9/PLL49G6mPoOMyhbCHxO+GDzoXHKsZo1ay7bsWMHfJU4XXmK + ivDKXLymN+Lfz7rRjR49GtXK9gYHBwN0kHVTmLI9WKaAoiiYj1sWi+XvyZMn96AK0Kf7vhfETv80yrzr + Tz/95HGteMkj98oMADFlo9fro2RZ/uH3339vlJ9NdOj3GKKjo/1Pnz7dweFwrLRarVcpIGSKP5n+TU79 + ZrMZJ19iGi5TpsyUyMhIKJl8G1N+E2fpwOm1VkpKCkDUOrfbfSkyMjIhMDAQ9+nr+meWkARZlqFQD+h0 + uiUGg+ENSZIeGTt2LHHNiGO4myQAgEdVVR2IBkd3AAAOagCgkBJ92JbBgwdDucSINbzvFdONhMV2TpKk + jQ6H44v//e9/g+bMmfPUgQMHGty4cQNmTPi64S8jJwd2P+I9FlXiFe6ECRN6G41GVAlLttlsnmfEYiLY + 36ytLnyv8PvKsoxufn+/9NJLH128eLEVq5bHf794XZEE5e+IiYkJf+WVV2ajvXNAQAA5/eCaXHXFe86B + gYGe361WKxO6ALgrt2/f3gSnVvE+CwvR9RyQkpKCKmxjmzVrdoSa8H1Jq+PjYkgQLI00P9KgQYMM7ZHF + 6+aF6JoA4CZjXrVqVfuAgIAFer0eAYuQJwlGoxGxB5h7MCLej6Ntcp06dUYdPnwYPmZPPIL4/fea6Lhw + b5AzANEdVVWd43a7j6Lkb7t27UhQJk7/Plq/sBZTYMEEmNfpdNv0ev1UtMp9+OGHATDu+eGF3jMDANVR + 5yE9PX290+m8cqcAQHMBFEIC+p43b56TmkrveQwAVywo+n//+9+ne/bsaeVyuSoj9Yb6tD2mQp7F+yoO + RO+tWnBw8CpZlj0BmmLaJW81YUyVBQSTy2AwnCtVqtS6KVOmjIyKioJiIUVGRPZybcZQGkGnT59+qk2b + Nog/QIdAEvVcAEr/jtYfHzxKwRFxk5hMJpTPPdOlS5cxiYmJAI+Fbs3QuSYV9tLS0p6JjIzEXEOIpmVX + h4NnujYY6CHWM51O9+vnn3+Oyn+wkOXrfXPrA/vS/+zZsw27du2KdLZFMG9bLJbNkiTBirEmICDguzJl + ynw4cuTI52/fvo09XdiVP6v4B9lTHylxCPxLSUm5tmDBAtYWGmvLVwsAiiV58uN1Ot2PkiT1kySpCjv9 + 3+u5oGMAAIALFY2e+qWnp//idDoRr5AbAIBgbGLloN0AtSDAwkjYuOvWrWtuNptxwrznAIAyhPbZwYMH + t8+vQLaiSBCQX3zxRS/4Cmn8A3k2YhokBA+YFWRiYIAr0wxXSrxOpztdu3btZZs2bUKKnMcfLs6vwBCC + oX/88cdLVapU+VmSpCjaqjXDMysAIJBn5vvPMyBE1zb8zqsvXLgAYX5HgXAFQXRMdqT+qar6Vp8+fVAc + hgA/X07/jBHLYzAYcL8uq9V6PjQ0dAa1mhXICZPOI0AAmETKnzlzpub8+fPb9evXr8ubb7754uTJk9st + WrSovsvlQqQ/TpcFmrJ6p8TcG7TCJIIxX6Rpf2eioqLiSpcujW6FpDU2m/ccXDTk9E/dObBsImD5C51O + 16Fy5coAGBlile4V0WfJAADWISodrtUAQDElutAfePjhh2G6i6dNVsiihvLg/cvsJ1M4XhZABsbnaUQy + +TuHDeJharrctXXrVvhB7zvFzwin7i5dukwxm80oqZkfwAzP9rbBYPj3tddem3nhwoUGUDhelD6v/Mv+ + /PPPfWw22xYaW5BJ+fOcXVtgtn6oWZ4pZTQSgrsC5mE0qWE+VZbxQT7DWt6CsY7EtUQDRT3vZa9xaWi4 + FuIVdnz//ffo3V4oTlyMOMEb4nK52kRFRX3h7+9/nqVeZTevInOlkpMMBsPfKNlMgwoL/F6FtYM5hvkc + awzAAPeXby6IgiLuWWDcqEsQnpCQMCEtLe1vBP516tQJKY+efcADzizY8zxMJhMpjyvLMsD0CEmSqq5b + t+6uN/3Jiui9kxoPtLJm3/T09J+dTuelPAKA/YqizNdKARdiwkZduHDhs0BrtBlHhiYWYJjmBTMzzMtE + SON9EMhAw0gBwv/RI97LAvGVky0Wy9q8disrLgRTcJs2bRayCnC+poFlx8gYoCV0b9rt9h2zZ89GYJyn + zzrHBpfL9fCsWbPeQ7Af0pZyC0KYomaAkRs/Ce4MDAxkzV9Ode/e/cMJEyY4LRbLv3q9/jZNF0MKm9vf + 358JlgzfTxV8piqTQlMc8llEpOv1evjD/5o5c+bzVMAVJgAAxQiFCV9zz48//ngD9Zsju8Mn/z+YzkUa + sgYA2BRF+R5meRpoVyjutTATXRPEkoF+F2iIEx8fP0hV1V9UVT0/c+bM+AceeMAT+MfNeXbM3DGw5qDs + 73a73f6JJEltW7dujZM2AUWF4fkIAADB1a+np6evziMAQNwAAMA8DQAUYqILMKR///5v6XS6f+x2u6eg + C4LOeCAgnLzYJsACJ2UtAwMD8dAR+evZIEDIEMq+CDEKMuJr1ao1DUJLHOv9RKhU+Pjjj6NAE1G+vsxf + TkyfJdmoJUuWRHDZ+UceeWT5+vXrw6nZD5sfp59qPXr0mAzlTIPQMingrJid0sW4BDBO/waDAT3fkc0A + gXhg9OjRI1CKGj5qmI579OiBmuiHDQZDIjWxuq1WK7FMwcfPvlecD75QFPc6+TyNiE9C4NX06dPhWnLQ + OS4UAokCMJyW68fExEypVq3acVaSm50wfbG6MQBAP3uyY8eO79FTbKE/eRcGYuCXKsDKiYmJMP3PVVV1 + 36FDh26VLVs2UzVGBgDE9UiZKURYn2BBw3NdqSjKWyaT6aHdu3cTV0ghBQDostknPT39J6fTyeJ+xPsT + 75XdL6pywm2wV1GULyRJaqcBgEJK9KGTDm9dunTpFRAQgLrU7MRHTvm82Van06WYTCYgPJizzoWFhf34 + wgsvjJsxY8ZLCxcufNNms53F+7PYENkyBRhXqf//vl4s2ISdOnWaqdPpUDEsT/MpMpQJTs3MN44TNhSt + Xq8/2qdPn3HR0dFNr169+kz9+vW/w3OAssb7fDjlEM5K+bPrQTjgNE4F4r6vv/662+3bt4l5mq1DAJGN + Gzc2rlWr1gqaW06Uf3BwsMc95Y1xXX6cMIUzAEG/A9aG9T/99NMTLBOgMKwxqpw9df9XrFiBnPobMDNj + 3thc+mBqBpMCWfReN2/btg3uDgR9agAgB+LWny0mJgaxCpBB45OTk/+Mj4+/8swzz+CQQ9Yg9hA7DOXg + 4mRgDM/juqIoe00m01yc/ocNG0Zq/hcW5Q/iAAApeayqaq/09PQfcwkAiLWDAwDkfidOnIhibIXiPjXi + iF+EQL/Lly+vXKtWrWGSJO2kqRxArrdQjhRNV4KDg39u167dmBkzZjQ/cuQIhDcWDMmXXbFixdMGgwG+ + S7IoWFQ/NocvbgFajOjk2rVrK4rjvN8ISmHRokWvKoqCGgipFIRlmrPcMtc+1vN9NAMk0c/PL6pkyZLR + tMIi2dBZCLYsWQQq1EUElxGugf4MqGr325o1a5hywrpjkeTMFUEA6ZgxY/oGBwfvMJvNWIMpUG74Lv5a + Xk795G/e2gGLg9VqjUbe9cmTJxHdXJjMrhgL5qGy2+1+q02bNujGiTSqvDxvAIBko9F4rkaNGh/HxsYW + WPBfcSO6HuCPL5GSklIvJSVlQEpKyjY0+3n//feh/EnmC+bZR0BMAC8Fu7Cq/ifLMjIi3ipXrhwAxj3p + +JcdCQAAwY8909PTf3A6nXBd5BYAwG2wR1GUORoAKAIkAAH9wYMHAz/55JNH33333dYff/xxywULFtTe + u3dv6QsXLiCgJ4NQoZ9xwJdLfdZECOcmeIlymsFg+P369ev2jKO7/whzevXq1UdDQkIgNHBK9wQe5ZWZ + 4GK+cyhJGrdB4jcCAgJwDaJkEUDH3u8LeBMZ382d/Jnyv16+fPk5u3fvrsP1LMBaYgoZPxkTgXz27Nkq + L7/88ii73b6b+lGZJSCDgmQnZYyZAy3E/09dVKeefPLJ9yHg2fyKc34viApcFChqvm/fvi/1ev0lannx + zKOPp38CoGVZhsvmr8WLFyO+gwjdwnKvhZXoHMEcD8VXSVXV3qqqrkbU/7p16+JpXY0M7lC25kTwyTFT + hjj9w4qHbplLYQ5fvnx5huBbcTz3ipjsp/OAVM1X09PTVzidTlReJS6pbNgbANitKMrnkiS10QBAEaWc + Hhq3kMMqVqy4WafTIQbAszCYAPMxVSy5Vq1an2ERite534jOqWX06NE9/Pz8jvEnkDthbznlomBjCpSP + qBc/442ZMMRPamFgpyCXw+G4BOUPP79Yz8HLffMMMBCwevXqNpUrV15ktVpREREuKGQQeIAAAwDcWEkD + GpPJBIV4KTQ09Ntff/0VKYAkIE687r0gOg4AobLJycmv9OvXbz1Oi9Qi43Fr+GqFoSmaNwMDA79NSEhA + zQdmnbunJWYLM9FnQEz/tFhS67S0tHmpqam7rl69et1utyfTdscZlD2zPIG9ADQGerH2cCCCMkRaZ/8O + HTqgoZDHAlUY1iEjOh4GAACEuqenpy/PAwBAp0Pc8y5FUT5DsSMNABRTYkL65MmT1VGCVixVmw1C9sZx + ffr06aotlP8jOrelmjdvjqhhPhI3T0CAgTAIL67oErHUQNHwrzGlw07/vigh7lkzXzSJCC5RosTxOnXq + TIuLi0N5UU/gk3i/PAkAAD+NMTExlUaPHu0MDAyEVeSaoijoDcFbBAhTawlazkJo3fTz81s3ZswYBHR5 + 4g3E690LovdmS0lJqZWYmDjZYrGckWUZGQtkHn00NXvmnArpIyNGjBiKLp+8NUW8tkb/X3bRDAx0X3w8 + MTHxXVVVN8fHx59r1KgR6md4UlPZXANkCvEm3p4Fszzh9E+C/8xmc7OTJ0/me7fO/CI6Hh4AdHO73d87 + nU64dX0BANh3DAAgbuBfRVFQOTRcAwDFmCDU586d2xOFYrJTTvRkmOFv/KSmNHzu0rfffvuo+P33KzEB + deHChYdatmyJZkBI1STNgHDCZlXIMH+iQALnEnzlFzNhCQUcL8vy7u7duw+j1d/YidRnQSAIS2IuP3Dg + QKvnnnvuY8SpYM3RUz7KrELoQgAlm0wmnLzOWK3WFVT5o+BKrq5dkMTfDwLOPvroIwT/kYBPL3PqC+Nz + cbIsr7l48SKyOlitg0Jzz4WFuPWEuWGd/pD29oKqql+7XK6jr732GtIwEfBM1rOvHf+YIpRlGQoz1mQy + 4fT8O6r+0Uh43t1VqJ4LtybhokCcQle32x3hAwBge14EAP8oioLDS/iMGTPuSi0Kje4y0UVjeeGFF2ZS + f5e4OLwyULRYW8BsNu+OjIwkPlqNMiq/uLi40ClTpjwbGhoKPyKCckh6HhfpTtLk+JM6TJMMBAj58QXC + GAstJgXlj+I+mz788MM3aev9YGgAAOQ4SURBVCraHVXfE4Q2lFtp1J+vX78+Thi/6fX6/ZIkHTWbzeiY + iEprK5988smh27dvR815mHcLlcCl44E1pFxiYuLgmjVrAtyRuv95ZMz7+VdeeWUiWkdziqbQ3HNhIGEd + Mb9/hdTU1LYul+tjVVX/nDVr1jW4MrGnaNCpB2znwMz6hDTXJKPRiD2wT5KkmS1atKjFuZ8K1VpkRMfG + AABqUrx8BwAAMgqB5LMkSWqlAYBiSnTRlChRogR8XJ7gpewYSoo3m1FfWkrFihUXsOhYjf6POIFFgNZ/ + //1X6fnnn0eBnt9lWY5GJb3AwEDWd50wX7hJtA4UMMMyQXzukiR9h6wQ6le9I+XPkzAfMKeWOXjwYKNP + P/30xTFjxrw6atSoV+bPn986MjISaUw42XniDcTvupfEAZnHly1bhnKppO6/lzn1hfHcMe9/b926FR0g + SWtZDQRkJjofmBesC2RfAJy2SEpKQoDo5jVr1py3Wq04yBArG+aWFqMS59wbszLMybR/x0U/Pz/0Q+i5 + b98+lEDmwUeheyZ0bDwAeMntdi91Op0oX5xbAADLx9+KouBg2FIDAMWU8FAjIyPr0iYx2W4UppT4Uyp+ + pyj7Zo8ePTT/vxcSlB6ER+D27dtbV6lS5WtJktB9jeTL02AlzzPgXQB3wR3gttvt8HmeLFeu3Lxdu3Y1 + pgVFMlQZFO8ttyTMBWMILWSnQHBBqAMYZOp1IH7XvSI6HswL/KIvt2zZcruiKD5bz7wwnnlM7dq1lycm + JmLeASwYANBAAEfcerFev34dAXmNXC7XYFVVf9yxY8fJEiVKkJRTnPgBqu12O9lPPu4f1oWRpP7p9foj + kiR9OmXKFLgX8nUfFARxcwOLGUqxd3G73UtyCQCI60NRFFgN/lIUZYYkSS00AFBMCQt76tSpg2iuq7gw + MjDbRPyJlAaeYeFErlq1qpL4/Rr9H9HNyYQ5flri4+NrzJ49+60SJUosgb8bQUeIIGdRybyL5S64ACD4 + LtatW3fu7t270XYXipil+OVrFHpOgpS9zs+Z+J57SXRcpNzy3r17J1E/sU/WsywY++fSlClTZtI+7gBA + nrnPab7uF6JzgHkxX716FYWX4B7qc+vWrW9Pnz598KGHHkIMBjH9MwDAALWXQL9MTHtPpBqNxkSTyYSu + f7+2aNECcQUZmpqJ4yosRMfHAEB5VVU7u93u75xOJzJv8gIA/lQUBbE6GgAoroTF0rx5c7Ss9dl/yafN + 0N9RqGUNagyI36/R/ydOoTGhjs0afPHixUa9evUa43A4tqOCH8zBfn5+HktAQEBApmeQz4xrpTz88MNH + b9y40Z92G/SkoN0NJcwLWJHF995L4p4hAFLLN998cw3r9+BlXn1lCN4LBw8e/Co5ORlWNDR6Qjc3PAf4 + uOF7xvMA35fAgJt3zAWUEebneZfL9WliYuKuGjVqQGFDhqUFBAR4FD8Dzj4AaGb+J3nwONA88MADE44d + OwZTepGwwtAxspRIAIAX3W734jwAgNuKosBqsENRlGmSJDWfNGkS3HGF+v41yiXhgZ49e7aCw+FAmovP + /ktmAeBOqDGtWrUant8nxeJInNDmlStOfA9u3rz5pdq1a38rSdJpk8kEczwRYlz534JicvIB+Chbtuw3 + 69evf44WEoHyua8UTU7EPbvAq1ev9vH39z9KMxjEOc0NY/6hdE5ZrdbtDRs2/P69996b9ffff78dHR3d + 1eVyoepiY1iMqGkXGRHwSeP5MJcJAuIYQPAKEorqM+Tm3FPn3+VyPZ2amoouf7+XLVv2EoL2HA4HrGee + Ez97Jna7XZxvb0wUYKlSpQAibhiNxh9WrlzZknPHFPp5pOPCs8eaKIesCLfb/S0HALyBVKb8vQEAuLam + SpLUTAMAxYzYpvrll1/+RzuXeVscGVgs1kL/Rq+BU6NGjWomXkOjrIkTakxY42fI7du3uw4YMADd5KIR + kcxMl3yOfwEx6zQIC8Tm3r17Tz579mxHtJvmi+/c70KACdmkpKTyX3/9NfyjN8TaGXfA6NXhQkdFSZLQ + mOu4w+HY1axZs80jR45cumHDhplnzpwZ7Xa7+yHAS1XVJwEMVFWt5XK5kPcNiwHiEiCs0RwKypK18wVI + wHPkgUImxSbe770iYVwYK8aNk22ZpKSkVqqqjoyOjv6ladOm5w0GQwItokRkGO+i9LUIFgeCY2VZPvLG + G28MoLUFcgRU/LyJf99N4uaKAYD/ud3uRXkEAPjMH4qiIH252cyZM0kQpHhNjYoo0cVi6Nat2wxFUdAj + 29viyJZxKqWdA//866+/HhCvUVjoXm7KrIiOSbQCPDxhwoShJUqU2IUTIYIrC/jkn4Hps0T0NALa/gsI + CNg4bdq0IfHx8UiBItYAbuyZhN/9QPRZQYHWe+yxxzbKsoyAMZ8KLeWCeaHMytEiUPSSLMtnSpUqdaht + 27Z/jBw5csX333//5YkTJ2ampqZ+oKoqgEE3+H7RmEhV1XYoUYy2uC6XC4FsyA1H+2j4z2FGB0jgAQKU + rAgQslR6uWFu/jIpyyyYgWKMBWPD+iuVmJiI9siD0tLSlrVv3x4VNuO4Yj/iPOaGyVwHBARcrl69+jJV + VdF0CvPC5sQrYOLvT3wtK2b3n99Ev58BADzn59xu9zdOpxPxRbkBAGhFjc9sUxQFXUWbagCgmBEeZmxs + bImqVasi/Q8nD2+LI0um0f/4PaVcuXJfYtGJ17hXlNWGFF8TP1fQ5GUcTMDarl271ig8PHx6SEgI8o5x + AiQV5e4mAIAQQAtpdhqyWCwoWnSkYcOGCzdu3NidugX4AjUeBSHea3Ekbu2Yrl+/3l6v10MBpflYJvuO + mfZ9YH5quIhguUP64SWTyXS6ZcuW+/r06bNtzpw5v27dunXV8ePHv79x48bC1NTUWaqqjlFV9R0KEpBq + 2IlaEJqkpKTUTU5OhnsBjZYQhIgmRPB9IwUU7gbeqgCGMsZpnDEDEIx5IJEVs/cwhnWCfR7fh+/FdXC9 + UGrhaBYXF4eT+ZJWrVodoo3O0KEyV7IrC8Z3uCwWS+Tx48cn3L59G2Wn4W6peOPGDcwH0lLhV4dihVWs + JGp7QIZSSwv2BZSvuMezZPYecZ3llej3MgCA9MiObrf7a6fTeToXAAAuEAYAflcUZZIkSU00AFDMCIJ7 + 3759jdG8BA/fVwDATGrc6f/6Cy+8gMYlOvEa94Ky2HxQUtbExERsXAi6OsnJyRB02MwQMhBIXk8p+Uni + xqdCrwzcMOXKlUMbZzwLUh4Xvsx8PlX6xEI5YNKdjla424NiUWfOnGlDT5Bkzu5TAGD/559/uqJwD5sn + cR4LmlmfAUS6g2kDIgjvBFmWEZQI5Rjt7+9//bHHHvvvySefjHz33Xf3fPLJJ39u2rRpw/nz59e4XK5V + qqouVVUV9TtgRQBIQCzPIFVVEQw6wO12901JSXk9JSWlj6qq2OdwPQA8hKempgI8NEAp5OTkZATlMUUJ + 8AATNFOWjAEo4KYA43e8hvfgvVCuUPJVAEZSUlKggJtRRmvfN1RVHZeWlvb9E088cZgpf0Tu5xcAMBgM + SdWqVTs9bNiwZU6nc4bT6ZzStWvXycOGDZvat2/fma+//vqU/v37Txg2bNgHH3744fAZM2YM+uabb15f + t27dK3/99dfTSOGklhbsDwAYDyAQZJH4Wr7sH/pdDABgbp9xu90L8gAAbimKgs9sVRRlogYAihkx5fPR + Rx8NURQFzUu8LQyvzFeno4tmN8r/FqbFwW00crrGplyzZs0Lffr0mVGxYsV1ZcuW3VS/fv2fO3ToMHfe + vHnOxMRECBtSfIV9XvzO/CBh80P5o1vjVL1ejxayKANLOvmJYAzC3kvDknxndg1ETHOR1G4/Pz9iGlQU + BUGC22fMmDGCtqotNI157gZxz86xcePGbhaLhQAAzFkufM15Zt4ilJNlCDEJcOvRDoPEaoAiT3q9HpYD + BBzCdB4bGhp6q3bt2tfbtGlzYeDAgSdGjx59eM6cOftXrVq196+//tp36tSpPTdv3tyVkpLyj6qqO1RV + /U1V1XWqqi5XVXWhqqpfqKo6Q1XVCW63GzxOVdVRqqqOUFUVdfkBJnBqh+UBSvx1VVVfo+ykr+F/b1Hw + ARAyRVXVT1RVnR8bGzv/9OnTi/fu3btx06ZNO+vVq3fWZrPFUsCD+CMy//m0P9JoLYybOp0OWQWIh7lq + MpkQj4Ey6Vd1Ot0VvV5/kRbKgZ/8pKIoR4xG4x6z2bylRo0ai3v27Dli5cqVL8CyQq0nDCx7BQLiOssr + 0e8DAIAFBQDgKbfbPd/pdJ66AwAwQQMAxYi4BehXq1atNXq9PpnvLe8LU+GC34HAV92+fTtIvM69JM5/ + aN2wYcMzNWrUWEfz7GNMJhN8ti74bv39/XGKOFu6dOlfP/nkk4E0tShD1K/43bklL5se4zJdunSpNuYf + JlyLxYLKY7l6BgXBKEXM/w3TNo0NIadcmibl0ul0l6pXr/7tkSNHmgIEsPsU7724EfccrUePHn1Op9Od + oso1vxRQrpiBAOxF1iAqD0AE4wezPgwpaJ9LS+mCoRDAiLJPDA4Ojq9YseLtOnXqRIWHh1/u1KkTyhef + 7NmzZ+Sbb755tF+/focHDBiw7+23394zdOjQ3SNHjvz3/fff3zlmzJidAwYMAP/95ptv7uzTp8/Onj17 + /tutW7c9L7/88v4uXbocCg8PP1a3bt0zZcqUuWS1Wq/LsgzLU7QsyzGozOfn54cukhgTCfijqbKwAIj3 + lCemc0e+E8/Vz88PJbHZ/GTFnv4ViqIkKooSY7FY/lMUZU9ISMiPI0eOfPfkyZMt+F4WIovrLK9Ev48B + AFhZ2rvd7rlOp/MkKz0u3nM2AACg4TdFUcZLktRYAwDFiPAgo6Oja5rNZiwM8vB9iWJm74HgoUUzblep + UgWIvVD5/yniDli2bJlTluVTQUFBUPoZfLVcYRBE2kO4nXv88ce/PXToEEzcME/CL3lHG5X/HLc5wxYv + XtwmKCgIte9Jqh+LWoYQxxxDELEOf+IzKGhGyhTLOIBS49vz8oLCYrHgFLljw4YNmC8yV+L9Fzfi1gLu + t7HRaETPgrsG3rDv2PrAWslK2eN97P94P/scnifWFHudsS/WBGZ9YJYFRN1DOaL7IQMOHBPwAGWt1+td + sDyAjUYjYbyGwGP2PvY5fBcUL74XGTA4mGR1j6zFL9aqDzn+PjEsb1arlYALMLXEoTQ3+Un7BHj2AeYB + Y4TVjgFl+nqqyWTCfcEVczYoKGjba6+99s6VK1fq3bp1K1NJ4fzaO5yMYQCgrdvt/tzpdJ7gAAC/Vvk9 + DWZuJAYAtmgAoBgSFsk333zzkk6nY93/cMLLtCFE5k2Q9DR4dPjw4c9AIIrXuFdEN5UlMjLyaeTTm81m + YirklSwvMGjnPcwBhA6irfcPGjRoEgASrAH0O3O9Sb1scsPNmzfL9OvXbxHMhthsUBzMz5/dKYYJYPH1 + HJjf6D5xVoIUz5wBJriLIBipuyLZbDZv3b9/P/y+uZqfokjsHukzfbBnz56f63S6aD4F7V4zFKY3peml + eZeH87i+yLrgmQcc4nu9MQ9ovI1ZfC8PbPAaL7NKlCiR6TN3wJ4mQrSUMHm2Wc0fY+qOIExBIbEQGI1G + yJVrdrt9+9SpU7sggJCTC/kGAjgAACsmrtHa7XbPzgMAiFYUBTJqs6Io4yRJemLy5MkIxrzjMWpUCAh+ + 8VatWs2hCo+gWHExZ8VUEZDFotPpNu7ZsweR4fmygPOD6FhCqlev/hOCesTTGS+ceEBDhQmAEDZBTJky + ZX5buHDhswkJCbAGsHiCHO+RU/yMdXFxcSF79uxpV7ly5V20ZjxJ72PXZkITgk04dWd70suG+U0t/i9H + ZqdE/I7rM+UgWCSIgEPKYO3atZE2VWisQAVN9Llajxw50tFoNP4DoUkVRqa5zE/OSrnya0l8XfwMU/Z4 + vuJn2Ht5xZyT0hOvx3+eMVPw/PeLn2WfZ5/h38P2hrd9gP+Jrqu8Mlvn2IN86WDxuvibn0M2bv49dMxs + DxKrBu0xcKZ9+/azdu7cifiADC2ffZEv2ZEAAFDDoKXb7Z7ldDqRrZJXAPCRJEmNNABQTIgutspWqxXm + ywyBNDkxW+TU3HU7NDR0OoLnxGvcS4JPesWKFa8YDIbTrNWuuIGzY2xcahGACe9Uhw4dfti6dSvy4BFU + kyGqV7iuqPgxz6aoqKhH3nnnnc9NJhMqa8HUmemauWEm7JjgYbn7uE+cyGkLU7TyjKKd/cj/2EkG98ae + I74rNwWG2OcABKjCI35Qo9F4ds2aNeH8fBRn4gQtrABIk0L2Riq/j3il5HA4Ms2lxvcds/0CuRJVtmzZ + Hzdt2oQ6DZ5W11nJFl9JAADIRGjudrs/djqdaDiWWwAAq8EmRVE+lCSpoQYAiglBQS5cuPAVFHqhZnxi + hvZFSXLIPNVgMOzt1auXp1GGeJ17QXQDOPr374/iFay6oU/xDWAB+XuC3kJCQnb17NlzQXx8PJqPIMWG + T4HDhgPzm1ifkJBQ6q+//mpXt25dpPch2FDcfHlm5pO0WCzExGixWLBx4ZM/1KFDhynbtm3r7HQ6Scth + q9V6VVEUEgNB7ynTGHxVULwFgK4DzC2+9+bgwYMRRFko1kFBE/ecbadPn35aluVNfn5+qJmAKHKv6Zu+ + NKPRuNgziZ2wWCw4CNwyGo2//vbbbyjYhDoCzMrok6XRGwkAAEGHTd1u9zSn04ly1XkBABsVRRmrAYBi + RCjo0b59+9lYgPSkSxaDN6HljalJPVGW5ZXbtm1DTj05FYvXuRdEN0CJKlWq/EzNbT4rfzAPggSBDV93 + vMVi2fLDDz90Sk5Ork6BAKsQxgAAgIHt1q1bj40bN26U3W7fTRVzflT0c7PUPFohEL/DBI8TxXW73f7r + pEmTkFqF4iUYV4k//vijec2aNScajcadUNKBgYEkgpoFLtGf5Pt9MaOKa4TGMBCQVKdOnW8xB+IzKY7E + AQA89/LDhg0bTfs3QLCTPSWuO/Fvje9PZvFGsAba7XZY637auHEjQAAUbAZLgLjufCH6HQwANHa73VPy + CADQHwYA4ANJkhpoAKCIE11UCsq6li9ffiu3ILL0yXljnPgMBsPVoKAg5PuGsu8Wr3cviN5jSEBAwB8w + h9M8aDbuTPeSFfMnXQCBoKAgtkHg6z3asmXLZX/++ef/4uLiUP8AJjwofguqlR06dOi5pk2bLlUU5TLN + vSYBlrmZ42yYuWvIyR8gR1GUSyVLlvz6999/byS2LYW1JzExscysWbP+53A4FqO2vF6vx0mVpDeZTCZi + Fcjt6ZSbHwZCUh588MHN9wsAALE5vnr1qi0mJqYNUr7MZjPK9cLf65lTzNW9yObQuPAxs5oBOAcEBBBl + 63A4LhuNxoidO3e2pWWZ7wgEcAAgWFXVRm63e5LT6TzCDkS5BAAbFEUZI0lSfQ0AFAOCT3rZsmW9jEYj + Ujwg/Mmp11cFQF0AyBH+t0uXLqgIZqffWygWBt00gWXKlNmAAEAarU7G7ouLA8zPBe8fx/fQ1CNEv8fB + BTJixIjP09LSnkYJ1aSkpJZz584dHxQUhNLKxP2QG/+6jwwAgOwBbFQUcNrZunXrmTdv3oRFgk9b5IUI + frefPXu21iuvvDJYluVfjEYjuqeR+ABYAgAqcgNQOEsAERoGgyGxWrVq391PAADEzW+pr7/+eoAkSfss + Fgtr5UwELYtUF60nGt+fjH1G3XAMyCNu53zp0qU/O378OAqSscDAOwEAKKeMAkQNUJzJ6XSicmJuAQAC + B39VFAXWrfqzZ8+GmyLX49GoEBFO7F26dPmcNhYh5l9vEaxZMQ38QhT78vXr19dj6X+FZWHQTWN9+umn + Z8HvjlS13Cg2ngEEeAXOWorSOYMvD+b0aw888MCWyZMnL2jTps1a5PxaLBZPG1/erJ5Vip2PTDYozVCA + mTnaZrN9P3bsWMRgoMFLpiAiL2xA3fL169e3qFq1Klp87goODr4FQIfvFqsPemNhnTDzPz5/44UXXkA1 + t0KxDu4m0bmFwK3TrFmzuZIkwfIDCwvLDSfz5YuLRePizTR2B7/zPTcQRAs3IQoivYMuk3zlQHG95UQC + AKiPyoxOpxN9E/IKAN6XJKmeBgCKKHEKQHfjxo16FSpU+A0PGcI8u1SXLBgC/0qpUqXG37x5EzW887RI + C4roePSLFy/uJEnSCb1ejwVNLB2+MJsPPvUNzJQ/rwDxO4IEUf3Lz88PgCoONQdoZL5H4PsaYJcNewQF + Yi8sFgvmf+m2bdtqe4sgFucEJAABlO8tN2PGjF5ms3kZ0pKMRmMicwd4ub6HWeYBG5fRaATASjKZTPuX + LVv2mHjd+4G4eQ3Yvn37i6GhoZtQAAa96XkAkFcgqnHxYnqoEBVvssPhQFOnHxYsWPAUjQfIcj9nR1Qe + YI+jtHk9t9v9kdPpPJgFABDHIgKA9YqijJIk6XENABRR4gSU5eeff+4JP7A3peijnxKVvfa0b98e3cT8 + xGvda2L3ioI7/v7+X9lsNpjiSQ1sX02woguAL9DDrCVQ8Ox1Bgp4Ac9+Z9+VVQ6zD8wr/xiz2fxP48aN + Pzt9+jSsL3p2z+I8ZEXcWoCQCLhw4UKDbt26IVsAoBBzRdJCvQgJD3NWIyg4zO2V0NBQ1IP3Z9cQr1uc + iZtTkhbodDpH+Pv748RFYmzoSS/TPN4Bi8ojKxY/p7F3Fuctq7kT35MVi5/LxNSVSFxv1KqKfQfLYWRo + aOhHcXFxKEmepz4bAgB43O12f5gHAHCTAoB1iqKMlCSprgYAiihxAqp0p06dZplMJlL9L4uyuFkyjTqP + l2X5p0WLFjVhNeALG9F7Nfz666+tafQ7Gnmw6OwMfnncN1PgvgKEO2HeDcAAgQgM6HiISZ6a5RHMeN1k + Mq3Aqf3GjRsQDndUepdbE/iekuvXr+9QvXr1+ZIkHTObzaTLGsaAOgo0atnDtJ5AmtVqJS4QRDGvWrUK + AUyFJhvkXhCdT/hvH69ZsyZxBbAqlOI6yCvrdDqsY9KMhq7rWKR40rKzzNoFqwz5SZk8N9Y1kJbxZe4J + z/8ZC//PwDSmhv3Nj4u4B9maFYpveT6fkxWEfZ42MOKv5QuL9+2ZDy//yzQvlDPNB88sbVr4Hvb9nvHi + J4v9wD0zC2IWzL4PJaWRFfDzyJEj0W3RUzJYXGvZEQcA0L65rtvtHptHAIDaAb8oijJCkqQ6U6ZMQdfU + XI1Fo0JATNBfvny5aVhY2Ga6EDKcbH0pA4xFiiYwJpNp+qlTp1D9j5iexevda+KUW0CfPn36KoryldFo + vOJwOPjTbQaLQE6CKT8Z1xXnG9dnr0HBUkGCEqJoLnKsZs2aXwLQxMbGIrLXU4xIvPfcEDdPYAsCCT/+ + +OO3QkNDV8BKZLPZ4JckQhRCmRVVwt+0jjuK36wYPHjwy3disiwuRO8fe8Kxe/futpIkrURjGLbefAHZ + OTC+J6lLly5/vvTSS181adLkk6CgoKWyLG9ETwb4kI1G4xHaxQ3gABYdPEOcLPG8AB7wPEkQKcAEXGTI + S/eiHL0yYj649/OKI9N7KROlis9wyjO7zzClTcYJRl19OtYU/C4yjfPBmvR8RqfTITCV3B/fzAevg9nn + xGtz3+lhfiz0PeR78Bl8h81mQ91/z/2yfYJAPz7NNrtS33Q+8HxiLRbL/pIlSw6LiYlBS+Vcg2oOAABA + 1MklAMA9iABguCRJtTUAUESJCib/L7/8sj81/2PBZlBC4imU+XoFxYhmHbtat27dm5qXCqXA5wQxAmlC + Z82a1USSJAQFXoG/ngoLYnpjm5NXwAXNvAUC1+TjCjglm2I2m6OMRuOurl27jkXsBp8iJN5zXkkAAfq4 + uLjQ8+fPN3nzzTcH42SPngV+fn5QJBAe4ASz2YwWqTvDwsI+/eKLLzrQimMY132VAeCNuLVX4tNPP+0q + SRLKBKPrJARrprWQW4bVpUyZMoeOHDnyoaqqNW7dulULwH7btm3PTpw4sXuPHj0GtGnTZlilSpXGWa3W + OQBoEOKSJG1D0KfBYDggyzJywpEFhHa2V2VZRte9KFmWo00mU4xer7+NeBaAB5StpnuGPX8wFAS6aaIr + JGnsw9hsNrtMJhNp/IMgWVmW+W6CpAEQWKfTIUMnCa2JUY5cr9fHI7NGp9OBcV20xiYti2lDHQApnrEm + wfgd442VZfm2Tqe7Bca9QInRYGfwdWo1ATiCDERa3AFJkvainbksy//IsozKqH8KjIweWBHRrhvvgyLF + /B2jzXJQ3RP74TayjmiQLoL6PCBAdBVmwXg/PhtvMBjQYvrLTz755AlaayRX+52uP1j2AMoRJ/SB0+nE + veYFAKxVFGWYJEm1NABQRImiyEdatWr1Da0+leH0y+pZs7955c+9jsWBk8SPy5cvh/kfUaaFdjFwghhs + O3/+fPUnn3xyosFggAUEZjaWny9uhgJl6jsnv/Ppl2yeqT8QQOtsqVKlFn355Zd9VFVFox3Md65PA74S + BwJYBHHYwYMHG3Xt2tUZEBDwidFo/AGmSWQelClT5hMom6tXrz568+ZNVsGsUILBu008mEKgZcuWLUfb + 7XYonfzqGEhSUG022z+7d+9+kQp5nPYADgHKAcbQBKaMy+V66OLFi7W2bdv2xLx589qOHTv2+a5du/YI + Dw/v++CDD75jNBqR3oWKmZ9IkjRHp9PBBYRGVRGwXkD4oxCMTqf7XafT/Q3wryjKbkVR9iqKclBRlMOK + ohwBoJBlORJMlSN+oooc2m+fZSzLMv4GQ3GizjzeAz8zUtSYMgZg+lOW5a2yLP+GCouyLG/Q6XS/6HS6 + n2VZXq3X61cajcbvdTrd93SsCGRdLkkS/sbvAD34O0JRlMUmk2lBiRIlPi9VqtSMOnXqjG/YsOH7rVq1 + Gt6xY8e3X3nllf5vvPHG60OGDOkxfPjwrmPGjOnywQcfdP7www9fHD9+/IuTJk3qMmnSpJcnTZr0ysSJ + E18dMWKE8913333rnXfeeXvIkCHDe/bsObp+/fqzAwIC0NYb9x3jcDhIsa2AgABiEQAHBgbm9OwJADCb + zZCx10wm0y9Vq1ZF0yBE8udqXwkAACXMx+QAANj1vQGANYqiDJUk6bGxY8dijeVqLBoVAoJf8syZM8+Y + zWYgWviTPQ+eBbThdxbc5Y3pwkCP7vG3bt1Cpbl8PYnmJ3FCmLcEQEiW//777ztUq1btCwgd5K4zs11A + QIC4IQqEs7I4AAjQlDqceA43b958amRkJAr7QAB48vvFe81P8jJvmDMIkbLoZ3Du3Lmq169ffwh/09fz + nKpUnImbQ8OtW7dq22y2pRaL5RbXSjbTuvCVWeqY3W5PLFu27I6NGzd2o4ofz4JVo+QZr2H9ANThNAnA + BtMwXElhiYmJDxw7duzBzZs3P7x06dLqM2fOrPXRRx/V69ev3xMvvPBCi+bNm7epUqXK0yVKlHjeYrF0 + 1ul0XSRJelmSpG6SJCGguJckSa9JkvQ6fhoMBrDTYDD0UxTlLUVR3qH8LliSpHckSXpbkqRBiqIMVBSl + n8Fg6GswGF43GAy9JUl6lX43rCcoV47rvSBJUkdJkp6RJOkpm83Wtly5cuENGjRo+cwzzzR/7bXXmo4a + NeqJiRMnNvjmm2/q/fDDD4//+eeftY4cOVL94sWLD1NTejm6btEiF01yAJQwB9hf8JVjPWNucMplDIXH + fsf/8B68F5/BZwnQwuHq3LlzLb/77rth5cqV2+jn53cJVhPIFnTOZMo1hzRQonypa+2Gw+GAxWHo3r17 + kRKoE9dYdsQBAIwZpctHO51OtB7PLQAAmPuZPreaGgAogkQFkf+cOXOY+d9jioQS4k3/rFodbw1g70O0 + N04BHTt27FqU/L2cMmPleu0ul6vyuHHjehkMhi3YbOhPjsUvukEKghkAQMYFm2d6XZj/rgUFBa398MMP + +ycnJ1ejAWV3HWix6/E/s2Lxsxr9H3FzZN2xY0cbWZbho/fUh8grswBRyomhoaH/bNy4ETEYrL1sltaY + HJ4n2yMAElAeAH8ADViDqC4J8ICUU9v169ftUVFRiHPw37p1awB47dq1gUuWLAlcsGBB0KJFi0rMmzcv + eO7cuaFTp04tOXPmzFITJkwoNXbs2NJTpkwpjb/x+ueff15y1qxZYXgfePbs2SFLly4N/vHHH0vg+7Zv + 3x54+vRpf1wL1RbBdBwYD8bFGOPEeDFuMA+GMs2DSNm9x8s88czPl/327duVjx079mbt2rV/ttvt55lc + oRbXrBQvz5DNiAOAKwMWksmfffYZCnzlKtiajg3jAnBBS/M7BQAAbTU0AFAECZsACq9p06aISoZPjJTG + hbLnlRBj8W8w9ZfHwez2448/4lRK0lPEaxUWEscmCDkm6PxPnjzZvGvXrp9Rf2C8L4Vw7pQZAOCBAHVD + 3Khbt+73W7ZsQTQ9ThjYwFkK83tJhW08hZW4NeeYPXt2T51OB1eAJxtFXBu+MnUbwbcMHzOE+u758+cP + oT0gPOtGHA9PvCIT/+cr8d/hA4uWiQxgJTsWr1tQ5Mu1xLFx9waZAjBSMS0t7cWHHnroB5vNdt1gMCCQ + l1h+fGgXDdmM9YEqo4gt+KxLly4Nc9tmm44J6wAKG6XK388jAIBcXK0oyhBJkh7VAEARJKDjGzdutIYv + j0X/iwwwwMzR3gJVaO3/c2azeQzqyt/tjZkfxG1WZgkAAyHXWrx48egaNWrAD4mFn+n+85OZlUGoCgh/ + 4dmtW7d+QIV4vkT5a3RvSVAOIV27dh1H0yb5bJRMayQn5gNHaUlZ7OsTb7311kQq8El8jraG7h5xsgVK + 8qErV670QzyDyWRC1VQ3Xxo6G0Z2AeIH4hRFAQD4JiwsrDUrt+4rCQAAFoRRdwAAftIAQBEm+IEWLFgA + v9p+oFEvDz4D82ZwnE7paQMLYusbb7zxXGEs/uMrCScPbFa/xMTE+uPHj58ZGhqKyFtsvkxzcpcYc3z0 + 7bfffj8mJgalfT31wMX70KhoEQcESjdp0mQ8TQ1MCwoKYkAg/Q5jUPAdODleat++/dc3b96ElS5DhUhv + YxJf0+jOiM43rKOhLpfryffff3+xLMsAfMQC4EMQKAI88RyR/XCBZuE8h0Bb8VrZkQAA4Ep8L5cAAO+7 + gSBPSZJWKYqCmA0NABRFQpDKkCFD0M4RCs7j/8+OcbrgTxhIr0Ek7YYNG3C6ILX/CzOxRcqfgujmxKZg + G+OhtWvXOitXrow4gGtIYbobLoAcGHnHUeXLl1/z008/vRAXF4d2noWq14JGuSdu/SkXL14s88gjjyAl + FalteN4egezN+pYLxncg9/169erVl1y4cKGFt/ay/N4Qx6nRnRGdX8QDIMjy8d27d082Go3naDlyXzKO + IGsJAFAU5SIyHiRJevH8+fMIPPT5edFx4IADEIiiYSOcTuc+HwEAxsoDgB8VRUFKcPVp06bh+3weh0b3 + mOhCqPjiiy9O1ev1KNriEwCAFYDrYIYFcapSpUrD4uPjET1bqBcAJ2zZTxYMhJ8IHiq/Z8+ezk8++SQ2 + 11XkK9P2ul7jH+4202YhsAacaNu27byTJ0+2o5HHGQS5eN8aFW7i1+PRo0cfqlix4gKaw+7xEYtrIQ+M + QFbs1xiLxbItIiLidRr5DpeAVyCgUf4RnVccMBB9j8PSqJIlS56kzyQrxZvh+cGSoygKaiIwAPDSH3/8 + gYOAz8+LAwAImKyiquowp9OJFEsWhOptHN4AAMpZo5jVIEmSqmkAoAgStQCgmcNpi8XiEwAA0yA1oFYs + ht/69++Plrc28fsLG2Wh+ElVrKioqBYjR46cU7p0aeS3xvMpOoGBgZnm4F4xCoeguhjGaDQaD/Tr1+/d + 5ORk+PJguSDxAeJ9a1T4iVMQuj179tQMCQlBzjqargAEZCWYc8sIDsTaSTQajce6du067caNG2gxC6WU + IbBUW0f5S5ziRaYR0mXfbdCgAWQNqTniw/MlAADFkGABQA6+Tqfrtnr1ahy8clVkiz5nAADUEHnX6XTu + yQMAQNGjH5DOqQGAIkowA65du/YlVLMyGo2kKY6Xh++VUb4TAspkMs3fvXs3kGSu8lHvJnGKn09hwgYo + jZaY33zzzRuVKlXaTauGeaJyoWwLw8mfsVgulJZBvV6xYsVVS5YsQQMmlGD2BHmJ86BR4SZO+Rq3b9/e + xG63r0LAlclkQtlan/dmdkxdWVjjySaT6VLlypXn79+/v4vL5arkzRogjlGjvBEHACxJSUnl3G73kGee + eQapdClcP41Mz4tjAgBgAaAxAKsNBkP35cuXkxRP8XrZEX3GsHhCXgxxOp2QfbkBAFGKoqB40ArUa5Ak + qaoGAIogQdBcunSpdokSJb6jJkdvD9/DXGc7vA+A4UjdunXfZJ3eChtxip+d9HFKhskcyPfJFStWTKxX + rx5ysFEbHSctr+mPuG++RO+9ZN4aQSO+8SySLBbLsebNm3+FCn0U2ORKKGhUOIhbs9ZffvmlTUBAwI9C + dkCmNZEbFup7pPr7+0fZbLadH3/88Qe3b99GWhl81MxCpoGAfCLuuQJkQWn3e/rpp1ExkQQX+xIDQONC + kDkAl+3POp3u1ZUrV6J4Ua72Oh0HSUtUVXWw0+nclQsAgPcxALBcAwBFmOhCKDFs2LA3kAlA/cveFgBh + 2hKY+RKjg4KCvl+wYAFMiIUm+E9Q+jBrYsNB8ZdOSEh4XFXVjrt27ZraqVOn7TBloZFIQEAAuWc+yyEf + mrMUCLOKYXgWDJDR8UM4xNnt9h8+//zz8bSamSbAixhx6xfsWLt2bTs/P78Is9l8mUbz31FMANY4GGuH + mp5JZLfRaDzTunXr7//999/ONN3Uk2miraP8IfpMcRCB2b5vhw4d9tPUPtIXQHxWApNnBQCgKAr6C2xC + hcXVq1fnGuxzAABVEN9yOp2oLJhbAAB9AQAwQJKkKhoAKIJEN7b+0qVLjzzyyCNTaDMMBgKyWghIR4nV + 6XR/hoeHoxZ9rqJQC4rovTClj00GEz/GhtoEdVVV7XXhwoVPu3fv/qskSfChJfK92Cm4yZCDD5M7AwJ3 + oxJgTswUPj9GwVqB+4kPCgo6PW7cuIEU+GjCu4gRp3QhqP1Xr17dxmg0og4/Tn7MVZfVHs2W2ToHs1ge + ug8ALmJsNtvv48eP/zA1NbUxzRTwWAPEcWqUO6LzCDckAvde69Sp0140TMIzEK2OXpgBAMRvwGIJOdZn + zZo1D9wBAADQG/D666+jxwKpSZDFmhIBwHUKAL5XFAVVZKuMHTs2142JNCoERAWNGY1BSpYsOcVgMBzS + 6XSxXK9yvjc4hES0xWLZ3KpVqwFXrlwhhWnE77xbJAhKpvQR0ITT7yNJSUmtVFV99cKFC1NHjBixlfrO + 4EPzOeBRZAACBgZ4UOBwODwKGq8z4Yrugna7HZscqYRkToH22XvpSSzTdRjjf3xzpuyYAgOWLnTkt99+ + C7+Xz0ejvBO/tm/duhWwa9euNn5+fosURcEaJg1laJwKEdh8HwmsKR8UCs/8PociONOkSZPvt2/fjjLC + MBPDX6xZA+6QeACQlpbWu127drtZSWAf6gAwGQwFjC6N681m82vfffcdDjh5BQDoJdDf6XSio2FuAQBS + B5dRAPCIBgCKMNFNbURDl65duyKqE52z9lsslks6nS4KgUh6vf6CzWZDsMjiwYMHv5CQkADTk178rrtF + dMzMt89O+0hreszlcrVHcEtCQsLXo0eP3mIymVA7m+RWe1ncPrO/v7/nd755BydsyUahAVtss6Jq1x8O + h2OroijHTSYTGQeCsfigPmaaZSxe21cQEBQUxMbhatKkyXy08BXnTqOiQZzC1QEE7Ny5s23ZsmW/0ul0 + 6JjnaVZlt9u9Ce3cMhPybofDQawBkiT9PWjQoEkxMTGtaJqvp/GUBgRyT3TOYKFEOe8eHTp0+JeWa/YF + AIBZIR60Z/4NzZIWLVqERkZ3AgD69e3bF62OcwsAkDoIAICqhhoAKOrEQAD8U/v27as3fPjwHrVq1fog + ODj44woVKsyqV6/eR0OGDOkWExMDczozDd71B04XL64NYWS7ffs2up09kJCQgN7WnVNTU9+/efPmV7Nn + z/4rJCQEpv5YPz8/VmNdXNi5ZlgA+PgA+jc5PeG0jxQ9xBVgk0qStOWJJ54Y9/PPP3f8999/n2zQoAE6 + Z62DCwL9ztkpTrwGGKc4Hgj4CgC4z+B7Izdv3twytwJCo8JDnLLFug/YsWNHy0cffRTFglCKNdFkMhGr + El1/mdaDt9eyYwomCPv7+2ONXvTz8/vps88+G4wCNlR5kX4fIotj1ygjcQAAh5WXnnnmmb+pHGDWl0zP + g2fIFwB7WZajJUlC8PLgiIiIXFthOQAA8PBmHgDANQoA0FJZAwDFhbjNzLpFIVoViwSLDKame9bmlROC + UPwwSTL//uMul+tZVVXfVlU1YuzYsbtLlSp1XpZlnLTzTfEz5k/tzMwPRW6326H4SX4++piHhoYunDZt + 2nNJSUkItMHmMEZFRZX+5ptvOgQFBU1HkxaTyXQLYIGPAOYFNsBFdu4Bke12O/nJgjXNZvPNIUOGIEuj + 0ARpapR7EkCA48qVK/UaN278oV6v34e8cJYhwJQIcwPktXog1g9cC/RUCqWDvXSkatWqC3/66adeqqrW + 4bIFNCDgI9H5wZxBjr7w7LPPerpA+lJplAIAuH9gnYHffvjq1auRypdXAACL6RtOp/MvDQBolCWxB3uv + Njkn/FgqX2hiYmKDuLi451VVHXvlypVFkyZN+t1oNF602+0QiETx88o6NDRUXNS5Zv7kz4qzmEymNKvV + yvJjL8uyvPPJJ598+8iRI6zACgmg4u7BFhUV9TCsKZIkzZckCdXAXKjyB2sArsGDABaxLY4lKwYooale + UAjxnTt3HofNLs6pRkWLhDVkiY2NrdKjRw9UYUM2SzTt5UFcAgACfJYI2Jc1JKa6Yj2ydrXoRKfT6W5I + kvRv06ZNv9y4cWM3WkoWBwV+jd8TGVEUiAMAjrS0tOc6deqEuCSieH0BAGi8RmVbrCzL+xRFGffDDz+g + CFiuXLECAHA6nc4/8wAAUDxIAwAaFQwJAo+l80GhouhQF1VVp9+4cWP5uHHj9pUvXx6mfpQ4ZYGLntMw + FKhYQOdOmQpYtiGwIW8ZDIbdNWrU+HDFihUv0iBE4i8V7wtE78nv33//rd66desBsixvQ0oii/BmJzh2 + PV/N/2AEI9LfMb6EJ598El0ETeIYNCp6JChYrK+yo0aNetXf3x+1ArAHSHAgWHQJ+LqGAAKY1Ylbh0wB + pDkcDgSzXscJ9Omnn/7sn3/+6Ur3JEkDy47F+7nfiJNn9rS0tA4vvvgiIvlxYGHWG2/K18MUJJB+AHq9 + /ojFYpk1b968Bt5SNrObbwEAvP7666/DEnEnAEDLAtAof4hbwLzix6kfAStt0bzi7Nmzq0ePHn20RIkS + KJCSYDQaPYqfmi8zLGD8zfoX3AnT7yWCUK/Xp5nNZkTwHoS5//3333/hxo0bSMnxuSsWTgOxsbHBs2fP + bv3ggw9ODwkJQXENuBBYapbnnsSxeGNByGOM0d26dfO4AHwdl0aFm7g9gtNkyPr168NLliz5qd1uP68o + CgsORMqYR5h7Cyz1xvz7+H1E9xAf4OoyGAzXZFn+t0OHDp+hmmBycjKAACwCXl0DOSmm4k6cXLOkpqa2 + 7NGjB9rpeqqPis9CZDxP6gaAtfGc0Wj89r333nuKHox8mmduDPkKALQ6ABrdEXELU8zlRwxCMzStOHbs + 2A8DBw48YLPZbmITQAmzIDrRxAlBltsAqByYbAI0Z7FYLFD82AS7e/Xq9eq+fftQ29tnxc8TvW/TzZs3 + y3bv3v1Ff39/NIK5ajKZ2GnOTZsAiePJxHwAIHVLXPr000+Rz+0x0YrX16joErdnrJGRkTUqVKgw2W63 + H6PCHFYADwjwZS+w9EH+veLfYFi/GBCQZdml1+thEdj11FNPffHTTz/1oBYB7F0SfCoqpvt1HXLPC7Kt + ntPpXGw0Gm9Spe7THqfvhRUAMnBL79690dSJ9APgmF3HM8/C/JOSxFS2OikAIAePLMaRHQBAGqBWCVAj + 30hcJNyiFE/8SDNsrqrq8L///ntZjx490H7yVk7VCnPDODEzoADfu+AzZS06seFQJhiLHz+xUY7XrVv3 + w82bN7emwVB3HGVP58C6ZcuWSs2aNUODpl1IGaRR3kRA8H5CWAWYwsf4uTxwj89WkqRtV69e1dIAizFx + +wcugXK9evVCf/af9Xp9DI0LYMF8ZD3zyhzrHetGBM+5YKYYWHAaotMPN27c+Jsff/yxd3Jycg0xY4hX + ROK9FHfi5Bye1cPjx4+fBpBOffs+yTT6LFNNJhNcB0ctFsvsW7duPUZBBQ8AMswx/xp9HgBosKoiBgBx + JMQVkcU4sgIASANEJUANAGiUkbwtBmER8oqfpfVBWCBqvmVqaup7GzZs+LFp06bIeb5Ni9t4W5y5Yvg4 + xWAnnqmSJYzfofjptRMsFstZu92+evLkyS9RPz9JhxLv804I84HUxvnz57cODQ39HGDDarWiB3gaTl58 + yVDerQHBznUVQ4exE0OGDEE8gsccK15Lo+JBwl4KRGBYcHDwXJwSbTYbKR9Mm3eR9eFwODKsI9Fllgf2 + 7BnaqRLK5HyZMmV+mzlz5kfotEmr33kyiO7HNcndN/Zk2A8//PCGwWCAxSY1q3RgLwxwzwDXLZvNtm3S + pEm9VVVFOrQIADxWAOE1PAcAAGR3Ofv27ftHHgAAqwOAXgBaN0CNMpK40b0wW6jYDPBHIaWvVVRU1AfT + p0/f/Mgjj1y2Wq0JSK/zJUc2N0yj5Amjep7VavUIMJj4jUYjhCY2GH7C4oD+2+v69u3bg/r5GdouECFG + v1d/5cqVkP79+3ekhZlwuiLWAKvVijGS8WJugoKCPNUaLRYLASuPPfbYp9evX7ez7xOvoVHxI25fERDZ + vn17WJJOhISEkOJTWNssPgBrnlf8vsaZZMNuPz8/zz4KCgrCNYhVoGTJkpGdOnVafujQoaddLhfS1mB+ + znBSvR/WqCD7HMePH++g0+lQh9/nTqzU6kf2Oss8CgsL+3Hjxo2wlkKOMhDAXKliPAazQMDKCgDwmtPp + RBAyDwD4sfCv8QAAlQBRChiF46prAEAjQt42tfiasBCDk5KSmu/bt2880lHKlCkDRZfBzO/ND5kXFivv + cf8jG8pqtUJ5EqVvs9ngR4Wf7feXXnqp55EjR1ATgaTb8PdWUMTNk27nzp1lGjduDNPuPrPZjPkhpzoK + jljAV5rJZEoyGAxXK1Wq9M3Jkydx4vLMtfj9GhVPEvaY9bPPPmsjy/JK2sAlGSd0LymDPikfX5mrH0AU + B6wPNCblSqNGjbbNmTPnwxs3btSjRYWIVYAfu3hPxYUE2WdMTExsFBIS8quiKEz5ZppLkVkgst1uJ65J + CgIu1qlTZ9qRI0eqcUWaGAgAi1YBvAfBmgAAfZxO5+95BABoB4xUVA0AaPR/JAggcSEyUz/QZzmXy9X2 + u+++mxIeHr7Pbrff1uv1xMwPnyRvpscpPT8AAMuN5gIEmYBKpYF9iX5+ftgIyC74q0WLFiO2b9+O1sEk + je5eCSh6XdvcuXNrV69e/X2MjTaGAUCBrzfKYDCclyTpl4EDB74QFRXl4D+b8ds0Ku4k7D/jwYMHKzZu + 3HgEynsrihJNO9AR8MjiA/JjfwkWBdS04JUHYlOY6fpmaGjonp49e36+ZcuW11DTg7rUEP+TIV5AvLei + TIJMhBys2LVr11l6vf4SnZtMcyoyc/vBgkPdOgB0AAH/lS1b9rNVq1ahUivkK7ME8MyujXmGuxV9Hvq8 + /vrrqEcAK5GvAIA1A/pBUZTBkiQ9Onbs2DwFQWtUzEhY5IyB8s1xcXE4lda+cOFCn9GjRy9++OGHz9hs + NnQWJMFKohARi+LkBwMEMKGHADs/P79kRVGwgWJRSAjKtVq1ahOXLFmCjVSoUC3m8urVq7Y1a9ZUGTx4 + 8PMdOnTo//jjjw979tln35w8eXKzmJgYVEf0nKg0ur9J2Iv+U6dObR4YGDgblSrtdjuqyQH0pgYGBvoc + hJYTI6iQT0eFwuLcCx5lQmt2QJlceeyxx3YOGTLk01OnTsHFBjCAAGDsvWK1lgVghmcSuGrVqm6yLCP9 + F8Ao03yKzMlD3nqDucTnr8iy/OPo0aM7I72YcwEwOcwOYHDBIHi5EnUBwAIgAgC2HrwBAFiTMOaViqIM + kSSphgYA7nPKQvFjsWGhPXz79u12q1ev/uD555/fotPp0M4ygQtM8lTZQ5MdPiqZmeqzC9zLDXOnEvhE + sWkQ1X/RYDBsK1269Kdz5sxpyBC0eI+Fheg8Mx+fx88nvk8jjQSlYzxz5kz5zp07vy5J0mqLxXLaYDCQ + ypkGgyHfQAAF2Zlex17mAAHZh1Bi9ACAfPiTDRo02DRjxowZR44c6Zmamgq/Nk6pALZQWhnM2eK9Fnby + AgBMV69ebVClSpW1XBpepnnj5w8/hTRNfAYBwpBnSVar9SoAXrNmzd49ffo00pNh6ofJn8kKvnkarJt9 + swEAPPMuhxuKohySJAl1DNDf5DENANyHJCxm9pNFmMJnXvfcuXP9Pvroo28qV64MnxH811kGvIhmf26R + Z3pvHhnFe7CIU2RZjjeZTDD1/16+fPlx48ePb0hRc5EVMBpp5I2EfQolGrhy5cqGlStX/gClhM1mM5QG + BLsnNoBjcQ9ly2ITq6yYxvV4UzKk1r2iKKcfeuihf998881vt27d+k5aWtozqqqi7C2CcFH4hrkLyH4V + 77mwkvAsICtLOp3OEQaDAV1DPZbQnDgwMJD8xHzT4EsW4Jms0+kQv3S+dOnSn3z33XfojMpaOmPOECgI + 6wqyBlCvAb0A8gIA0IxqtaIowyRJqqUBgPuEBBQrKn2Y7mrduHHjuWXLlo1p27btT1iIQPcWiyVLxe8r + i8KFz4VnZscsmvUw/yPqmSfJsgwLxO+hoaFffPTRR01v3rwJgVKszI0aaSSSsGcNyGgZMWLEc1ar9Qsa + H4CYEhT2ISmnbO8gHZbFzLBTPAPl2JN3UEeAZ3ItgAJaxhh/A6jHms3mC35+fnv79u27/JdffpmSkJDQ + OzU1tUVcXBwAAWQOlA+UG/awB8AXxv3sRXZaTp8+3cRgMGw0GAxI983UGRAHIx8OQexZoQAUGpPBvfOf + 2Wz+ZciQIcNpJ0fEWfhHR0fD/w937KMul6v/a6+99ruiKL4CAHzvTUVRjkqStFZRlOGSJNWeMmUKLA2F + br41yicSFi0zP5vRJzw5Obmmqqodly9fPubVV19dERgYiNM+ThWJNpuNCRNxweaJIXx82RBUkJATPy2m + g7EgcG5bWFjYjAkTJrS8ePEiUg8hOLSFq9F9Q9xexj527Nmzp+rzzz/vlCRpKW0zDHM8ulQi3ZRYBLCf + uDQ/b/st02t5YQYAeOUDAGI2mzEO+J9vBAcHn3ruuec2f/311wtPnDgxOjk5uTOKhtGCOChuA7cjTrpw + QRYqQOAFABgSEhJKDR06FCfpk5h3uCkxDygHLh5wsmMOOBFrAKo0ImDPZDLta9KkyfRz5849B6WfmJgI + K0qZlJQUdHUc0rlz5+2yLPMlibNiBgBuKYqC+gXrFEUZKUlSHQ0AFDMSFiovMKAwUXqyRmpqapsDBw4M + 7t+//9d2u/0vWZYv0HQSnLQ9FcioAMm0YHPLOGmI+coABGCc/NHClF2P65wF3xpM/X/abLaZb7/9dtvj + x49jAxDFX5iEg0Ya3U3i1j7AfMjmzZsbtW7derAsy6utVus5vV6PvcO7BUiTIRQSwp5j+9EX5eQrQ054 + sShkkCVgvV5PFBEtOLT3ySefXL9kyZKvIyMjP1RVtSftG4JAXtS7h4UPJnBi5buXe168PosFOHfuXO3y + 5csvlmUZ94TCTUyO4aevAIuVaCaMQEua8YHT/bGQkJBlP//887uqqnZISUlBGmbzpKSk9995552/6Xty + AgDMRQMAcEKSJKQwIivpcQ0AFBPysjixaeAzKpWSkgKE3e7o0aNvjxo16quHH354kyzLQK3RiKQHSqcb + lSxILEZWatQXv2BOzAsGbAi+PS9bpAEBAcwXlujv739Rp9NtK1my5JzBgwe/fO3aNUS9wlVRbFONNNIo + t8TtdwSIhSxcuDC8UqVKEyRJ2moyma5YLBb4lFNRd4JTEhkUvxelnWem8QGZXoflj7sOUY701Mui0xFj + dL58+fL7unXrtmHp0qULT548+V5ycvIrqqo+nZKSggwD+MPh/8YBIIN14G7IAvF6lElcxvz58/+HmIzA + wEBWuIkpXp9BFtIDOfcN6QeBIEuj0Yj5uYyD0HvvvfeFqqr9UlJSAJRmdOzYcZdOp8sNAECMBuT+JkVR + xkiSVG/27NmkIZF4vxoVcvKyGIlZiuaJollEvZiYmM5Hjx4dNmjQoG8ee+yxLShPSzcb6zzGLzpitsoq + EvhOmc/jZ35JMBa+yWTCWEiQiiRJf+PE/84777x89epV1CRH1CtR/Hdrs2ukUVEjujdwWn5wxowZz5Uq + VWoWms7o9fqLKFiDEyV8zGzf0yj+fAH4jNnezkp+iMqQyhu4CYgcMpvNMKPDegE5cKZkyZK7W7RosXXE + iBHLNmzYMPHq1atOl8v1JKyY1BfOKujdFbngReaC9fHx8SXffPNNNNdBil0iLZ6U4VCVEwtAjHenoJVz + MjX1n2zevPma69evL0hLS1s5cODAw7Isw3LrKwC4jSBNSZJ+UxTlQ0mSGkyePBn6osDnTqM8kpcFJyp8 + O83Txym5SVJS0qvr169//7XXXltctmxZmIhOGo1GKH0SLWy321GNKsPC9Fawhyns/BIQzD/GFiX+pumE + yaiCBwRdpkyZeRMnTuweFxeHylhA+7i/u7K5NdKoOBCVCwiue3jatGnPhIWFTZIkaQNKC+MECPcaPV16 + igmJe/VOmLkCwAwM2O12vulVJlkjMjsgoDGWXq9PVBQF44ab8nDNmjU3DR069Iuff/657/nz59HUCyWK + Sd0PkcW5yW/irmWIiop6pHbt2phr9EBJRHof7Qaaq/llwZq0MZgnNgAxUXa7HTL8WlhYWOTPP/98oF+/ + fshAIB0kvSh9EQDArRqnKMpZBFIrijJekqRGGgAopCQuZi6Ij1XkK42uXQkJCfAL9V2zZs1HL7zwworg + 4ODdWIQ6nS7aYDC4qJLFpsqwEHHS5/3yzDTPRwrnI5N+2CxQiPq7SGtMVKYqV67cvHnz5r0YHx8PZM8U + /11D9hppVJyI7hvICpvL5ar42WefdWjWrBl8vqslSTpNO9KRstRcHYFcK6usODtLgJh9wGQQAILY2ZN9 + F00zJopMr9dD4SE2aF+dOnVWT5w4cdzNmzfbJSQkIKuAldO92yBAh/4dZ86cqV+hQgVYXk4HBQXBysr6 + oWQ7t8wyymdHUSaf460BKHtuMBgwB7eCg4Nh0mdZWtkxnjGsEgAAyO7arigKwErjmTNnIvCywOdJo2xI + XLQcs6h9kp+fnJyMk3ETVVW7HDx4cNiECRM+a9euHQI6DsqyDGQXgwhSmPr4lBRsLrYhxTai4oZkr1EU + 6nUT54LZAvb4H2l0MsxZ+5o1a/bVV1991ZNmIwCJZkgHEudJI400yh0xIJCUlFQ+IiIivGHDhgAC63Q6 + 3SmHwwEgAAUiggCRxX2dgUX5ITL+7y3okMkW0croTe5wp2GSGizLMguSOxscHPzLzJkzh6Wmpj5BAwfv + qgzhYq4chw8fbhwWFvYpTaNO4qqlZjmX4v3T+/WAI9y3UJ6ZxAfQtMGcnh1jjAPpirCk/KUoylRJkppO + mjQJLta7Mk8aUfKi6MFYRMysD4UPsz4qPmFRdz516tSw+fPnf/7iiy+uLl++PII/4MuB6Rw+M4LmxUV0 + t5m5DahAIAuP/U79/LGyLB/t0KHD3N9+++355ORk5AMDgWbw8WsLUiON8o84+YIYgTKbNm1q0b59+3dk + WV4BszrigoxGo4tvNkQDgT0KhJ1S+b3OK3T+xO/toJHPnEGx0aY8kU888cS3Z86ceZY2K7qrsoQDAX7H + jx9vUqlSJdRoOGM0Gj3WFmQIUAsouQ9UT/Vyb76wqNxz+j8DAAmKoiCl+h9FUT6WJKn5jBkzYHG9K3N0 + X5Go0ARmJ3tEtMJ/hUp2FVJSUmqlpqY2S0pK6nr48OH3v/zyy9lvvfXWGpvNdsBkMp1XFCWKpusR1A4k + TJGhuADuKgtR/TwDtWPxX7LZbAe7du06Y+/evdigLKo/Q3qPOIcaaaRR/hEHBBA8F7pnz56ao0eP7hYY + GAhlBdfhDTSooW21CRighbgIKIACg7wRT/LemB0GxNcLgImC8/f3Tw4ICLhqtVpX79ixows9QBFLgDgP + +U3cvJIDHC1Q9niLFi1gZt8DgGW320kjJ5YhQOewIGW3NwCAeApkFOxWFAWuilYTJ04kYEm8J42yIUGZ + swfPMxQ8Y5zo4ZtipRxDXS4XFCBS85ridH/jxo1Rf/zxx8xx48Z93759+20VKlQ4ZjabUfUOFb4SoERp + 1G4mJF7YmJrvsOAgSE6FhISsmzFjxhuRkZGoD16KzgM78fNzlgEkiXOukUYa5R/RfUbM1klJSQ/Onj37 + mWrVqk2VZfkPmnZGUgiRqmc0Gvk0QsKQRbRzINn33nz+3tyLBcHIJGJKDvn4Vqt106+//tqVWgLuJghg + Mg3zCmvLI++8885rRqPxRzT8MZvNmco2+/v7FxQIEAEArpmkKAqsxnsVRflMkqQ206dPx+GzwOenSJCo + hLJhXsnjYbNGDSiqAF82Cu4gb7VmSkpKbVVV66N4A6ru3bhx460///xz+tSpU5d26tRpe9WqVRE1egNp + HjS4gyBFPDRsKETQihuLMZQtX0L3XjFACcZC/VGxBoPhcKNGjb7/5ptveicnJ1dFm1shsA/zlkHpi89C + I400Knji5BmxCvz666+PvfLKKwNDQ0PhHjhD089QZhgVBpny8lgFmJxiMiArWVWQzE7TOF3r9Xr4xW/L + srxu9+7dT4kZAuL95xdloSNIfYa1a9e2DAoKmocIfJ1O53HZWiwWT2xUAbE3AHAd6YqKosDq8+TEiROJ + pUS8n2JHWTwg8bQOZc5O7DDPg/E7Y/wNZAcTD9BlKZfL9QiC2FJSUpiS/19KSsqgc+fOfbxly5aI7777 + bm3v3r3/bNOmTWTZsmUv04pRWARJBoMhBakiLN2OZ34jsdeApu/FBsuJ6Ynf5XA4rrz66qsbfv/99yEp + KSnozofFhYwF+PnxE0KGzSnmmjHmHD/Zc/CAA/E5aqSRRgVDdM9h/1muXbsWNmPGjKbNmjWbZDabN6M+ + PXU/AgwkU0VLCtZwQIDE/NwLGcW3C6em9ltBQUHfX79+HUHTGaqHivedn8S+n9MtxBoQHR1ds0mTJgjA + 3MVKNvv5+bHYLfG0nl+gQPxOBIijxsIRRVEWSJL09LRp09BnoHgBAO4heFP2UD5Q4jiVEiWOCFmXy4UW + jOiyhEh7mOdxcgfXSUlJeRysqioqUrVUVfWptLS0Fy5evPjqoUOH3l2yZMnHU6ZMWd69e/e/GjZsiIpW + t/39/REBSh4wAuBYKgcUOU7tvN/c24ahJ2qv/yuEnNSsWbOL06dP37p+/fqxa9as6bF06dJ+ERERb61b + t+71H3/8sf/SpUsHLl269J0VK1a8u3z58qHLli0btGnTptePHTv2wrFjx1peu3YNcw6rCer8AzggOhXW + FAAHWFfw3DJZDgp6Q2uk0f1InNw0nj17NmD06NGNKlSoMFmSpB3URYBDDMr6euIFmKLhM5DuFrMupDhQ + USCQ6nA4LrRq1WomDaa+q4cKTj6xQ40RqYrvvffeS0ajcT0tduQymUxZgYBM95gHFr8TxaDgVo5UFGWh + JEkdJ0yYAGt10QMAghLg0Rbzt0PJQ3mwDkpQLJVpyhmUOBos9FFVdYCqqqizPDI1NXV0dHT0tFOnTs3d + vn17xA8//PDTN998s37mzJm/Dxs27K/nn38ehSguBgcHI8ceaBi5njCrwGwvPkjPg/AWNMOiaNn/mBlN + 9Jmx93kDA978bveQWa4/4hWw0DAnEBCIBcA84XcXoo1tNht+sjkD4/2JJpMpJigo6FKVKlX2P/XUU78O + Hjz4u2nTpn2+fPnyD//8889e165da0e7Y6FxCJ4pLAusVjjZ4OI60Ugjje6MODlrPHDgQOhbb73VoWzZ + skh1+9NgMKBzHQqNARAQ9yWsApAFgizML6XmlZG2zOQnDYxGQyS4VP9dvHhxDyor7hoAYCToJ7Dfb7/9 + hlTBL3Q63Rkaa8FAlKiwM91nLln8PshmPKsTiqJ8J0nS81OnTkX796IDAARkxSLpcUKEokcDiVo0uK6D + qqrdVVUdfOHChUl///33gq+//nrliBEjtr3yyiuHw8PDL1avXv3WAw88gNQIF80r5ZUSCYDhymeSQjZI + jUHwC63UlGHCmame/c2UOvudKXLxQbFgGabQC5FS95k58EIWG4KE+DQi+j7xb2xccZEyxpzjOQA4JOj1 + +hh/f/8rFStWPBseHr5txIgRi3/55ZePz549+7aqquidXZW2GGUdxTwZBuIa0kgjjfJGnEIzbdmy5YF3 + 3333qbCwsAlWq3UN7Uh4DWl5siwj4C0rxSZyJnmSW4bMZPIYYIB+L6rnXatQocLcuLg4yAfojLsuE4SD + Kth2/Pjxxxo1avSRw+GASwBuYRb7JVoDMt1rLlicZwAAVFU8pSjKMkmSXpw5cyYCswsnABAmDZwhdS4p + KakCFH5qair8PM+73e5RFy9eXLFmzZq/hg4dGtmkSZPLpUuXxuTiBJrJVJUPE6xx7jg/5hyfZ+AA6PlG + 5cqVT3To0GHL5MmTv/rzzz/fj46OfklVVcQgwKXA4hC0lEONNMpH4g5i9p07d5Z57733wuvVq/euw+GA + eXkb7T1yFUF5KOmLfgQ0LdibHPbIBabMxSwCzszva/AzCXwzmUzbxo8fj9RAUvb2bu9/Xu5wOs164cKF + h95///0+siyvNxqNyPpyoR8CO2zyKYNsHvjqrT4EXYrzCwCA+AMEdy6XJOmlGTNmoMNq4QEAwiQxnz1T + +iG0TnwzVVVfVVV1zNWrV79bvnz55v79+x8pX748/Cok1YL2xM4PhaNx4WfSV8BiseDZw8T1X7Vq1faM + HDly+ebNmyckJSX1oEGacAMhgJPFE2iAQCON8oE4MGA5cuRIyTlz5tR96qmnXgoNDR0rSdJiSZKQXngM + aWgABDqdLsFgMCSj5gCtXOqJkxJldlhYmOd3eronzABBNgwAgJP10TZt2ryXmJgIZXdP9nsWIMAQFxcX + +v3333cICgoCaEJxtwSLxUJAAKu7IM4JsyRnU3+FcVYA4JwsyyslSeo6ZcoUyMTCAQAExY/IcATqIUjh + QXqiQ27nuGPHjq2aNGnSwTp16qCqEcpBwkycyrex9TIZGhdTZn0NWLlRWnELmx+Wnxt2u/1kmzZt1s2Z + M2fayZMnEfcBAAmTIKpgZegopoECjTS6M+LkOA5ugVu2bCn/0UcfNa9fv/6rJpMJFeiQF/8ndRlAhhMr + LdywAAN83xBeljscDs/vDAh4c6lShsJjAOCGoijzdu7cifgvYgkUx3w3SJQvnK7z+++//+rVr1//A5PJ + hMJBMNOn0j4NKMaEdunMpeq5x6xcysIciAAA+vK8LMurJEnqVigAgDAZOJ3BZFsyNja2EfXjjzpz5sx3 + U6dO3Vm1alWSjoIgM/Sx55GRN3MIbzLR+P5hLq7CbbPZgKYhCBABe6p8+fK/O53OJdu2beuvqioCC5EB + AjCAtZcBDIhrVSONNPKdONlOSpwjvXDDhg2PDh06tEP9+vX7+vv7T7NYLN8bDIbt1GVwHS1uId8RgwUF + GBoaSmQ8izNisVY5xEt5AIDZbMa+Xz516tS2NGj4nu7rLEAADiJl3njjjb56vX49zdd3+fn5ZXCXQJ7x + Oi2PAOA/WZbRGKrHxx9/jLi5ewMAhAkAWsSJv1xSUhJ8+q+mpKR8sWPHjr+efvrp06VKlYJpFyf9DEof + viAw84dggYid7jQu/oznjXUgPndeQABB02IhpO+4v7//mbCwsD8HDhz42caNG/uqqtqCpgzBV5ihs5i4 + djXSSKPcE91PxFVAA3bLbd68ud6nn376v86dOw+vVKnSfKPR+Avy5dG7Xq/XE7eun58fQDzZx/7+/uQn + k/WiLOCYxAqZzWYo0/Vt2rR5kR4u7/l+9gICGEgqtWrVqv+FhYUttdlsaPAWj3oxfFYFLJzUvS3er8jZ + AYCfJUl69Z4AAO6mWdoeUfyxsbGNVVV9Mzk5+etPP/10R/ny5dG5CKVwYRbyFJqA7weLgPcHeWO81wc/ + icbFjFn2BVP+WANeUjEZomYnhCNly5Zd984778w+evQo0oZQ8wHup0wuAnE9a6SRRjmToPR4HYD4LtRk + QdBuw8uXLz+3cuXKgQMGDJjRrFmzlSaTCQ2L4mDJw57lD3g5BAOyYOEoq9W6OygoCO4/P3Fc95KEuWCZ + bSFnzpxpU7t27U/NZjOyBHD4JUXjmNyih5nsLCAeGZcNAOg5efLkcncVAHA3C8WPB18qMTERwvb1uLi4 + z8eNG7ejRIkS8AvFw/xBK+V50I4oyBERiq5K/OsQ/uL7NC6+jOeNzcAsQfz/xHgQvJcJEAoSyGaifkf4 + Ia+bTKZ9DRs2jFi4cCHqQ7R3uVzMKgCEnkGIietbI4008k7i3hGUHrEAJyQkIC3tEQrAn4ZeOH/+/Bfl + y5dHvEAScwf4eLBjAOCG1Wo9KknSkNu3bweJ47rX5GVOMB9BqampjYYMGfKuzWb7lXZ+TbZarQQEsQOx + l3vmOTsAgLTNXncNAAg3h1MVEB9y9nHa+mz8+PHbAgMDzwHpWSwWPneU3AyXZ06YBXzxNyymjbDPeZkY + jYsRi+uA1Vxg6Ji3BvDvycKHiDWH9RdrtVpPBgcHb5o0adKMQ4cOIRYFMSmwCmhAQCONcklsnwjKjo/9 + woEQsTgITKuE7qhpaWkd4uPjhx4/fvx7GsODoDiyV30AASQGQJZlBAHulSTp7YsXLxb67nfcnMAy/vCy + Zct6PfTQQ4ja/0+n0yGw2eMOQE0aL/fN5JjI9wYA0IfNar7bk5KScFG0hZ34yy+/bHjggQfO22w2DAxo + jXW9y+rG8p19yRxg8QW8wmCmZvG9Gucfe1HQd5Ox0ZBaeNlms/377LPPLl23bt2A1NRUFJpCBa0McQIa + GNBIo5xJ2C/sUMgKuiEuACAbIKBaWlraUwkJCaNVVV0SHByMdujYk+I+zYpZFkCUXq//12AwvPnXX38B + YBTqPcrNCwsOLH/27NkutWrVWmgymY4jhRL3BgtADnrSGwBAGiCyAAoeAHAPmQX5IQCjuqqqvc+dO7f0 + qaeeijQYDDetVitpd8sGei+FPosyzQkQiJ/JbswsavV+ZZjnOZN7hnkD+IILhw/kFOevEDD8bRAk8MUd + at68+coff/zx7bi4OKQTAgh4Uos0EKCRRlmToPj54DcoOlbRFQAA5b7rpKWlvaKq6tz4+HhYiKG8SAxA + QEAAkRXZxIFBlzAAcE2v18OX/vrBgwfRY6RI7E9unsz00NzxnXfemSvL8jFaLyBDQLwXzg4AIAag4ACA + oPzxYNF1KDw5OXncrFmzfrPZbKTykRjVLyqA3Cjiu8V8Kkp248vCxHxfMz932c0Ns7hkN793izFW+jtS + CmGlwiaKbNas2U+LFi0aTrtA3rXe4xppVFTJCwBg5n9PgzZasAdxAE+i7kt6evrGGTNmnDUYDGiek2l/ + ZsHQKXDlEQBgMBh2Iujt5s2bhSoIMCcSdGj5tLS053/66advLRbLWYvFgpil7CwiWQEAFAJCGmDBBQHS + geNk5HC5XIju7BwdHb2offv2x41GIyl0QE9WngEzxcDfRHZKIr84O0WD19nplb2PFpoRkRfLUvAEaHDF + LHgmLTQLCYtjKxBmLh3KmZQ/UlqwDnhLgfgc7iVjPGKAoclkQjtUuK3OVKpU6ZdvvvlmEG1UBCHGmzg1 + QKDRfU/CnuCD/6D8odywb2D+RxBgHVVVX05NTZ105cqVLSNGjDjn7++PZkNpfDEgyJBs0gAZAIAL74pe + r19jNBpJGqA4tsJOdL4wT/6xsbEISO5x+fLl5RUrVkRNHBxI2P2Kc8BeZ4xCS9C9Z2VZ/ilf0wBFoUfN + Oii7+qiqqu8sWbJkS2ho6DWHw4GgDFLmkOUyelMK7AF7uaE7YTZJIjIiTKMqPb+zvHHxfd6YKXtq0QBj + 8YnMGg2BWfMhnknHPNZFj2MEfogMP1BOLH7GG/PXYczGIDZIYnW8s2N2/x7W6/XsdzZfeP6kTTKLavXy + DMgzK0xggFkl+NdQjEpRFAinMxUqVPjpyy+/RFAr1jyEmhj0pIEBje4rEpQ+U/zM5A+XMEzysJ7BlYZT + PwpzjTlw4MDKN9988xBN0SWWYqbs8dNut5PfkQUm7lPKkCuQV5BxSCdfUK1atXDsS3GMhZ3o/AEsYb4A + kFqrqvppz549EQ+AucH9emSmwLyeYgAAvQBQCbBAAAAL6sCDbZiUlDTiyy+/hP8G5R5R3tAzIP5kLSp7 + Zir2ckO54QxKmldA3hQzrTwlKjIUkkCuOMxP6EqHTldoBQxTyi2kjdEJParX6/cZDIa/dDrdnzqdbodO + p/tDr9dvlSRpiyRJmyRJQjoHz+gLzXidJEkogLFWkiT4Z4DQUDLzB1SxkiQJ3ZuWSpK0hNbW/laSpEWS + JKGGNPgbSZK+pvwV5QWU2d+M2fvwGcbse/Cd+H60i8T1EH2L62McWDQwHWGMGC/uYSO9N9wj7vV3Wvcb + lb1Q7vMvyjDB7VYUZb9er4+UZRl1r4FgL8uyjA5iUTqdLlqWZZyqSScxWClYOcxsFvhdYW/rk38tMDAQ + awbr4ljz5s0jNm7ciNMGLF+ZAgXFvaORRsWNvCh+dtrnG7mhr8tjMTExUGg9VVUdizbsXbp0OehwOBDw + l4SDAvYXdAVfAEjM/BGYyXgcXiCvUWHw4759+8JCR/ajON7CTBwAgJsk9MaNG+Fut/vTQYMGIRYAspLd + szgP7HUeAEAPn5ZlGbolfyoBCg+bRPoDpZw+ffqLyZMn70NKFW2rSwZSqlQpMtjsTDjZmeVzYFHRM2XP + n0qZ0mcn7XhZlm/Lsgx0BMR5TZbl8yaTKdLPzw/pI/9ShQYFvYIqxWU6ne4bi8UypW7dugMbNmz4WrNm + zXq0bNnyfy1atHi6ZcuWHVq3bt2uTZs24a1bt27Rpk2b5uHh4U1bt27dBD+9Mf7Xpk2bxuDw8PBGrVu3 + btiqVav64eHh9dq0afN427Zt67Zq1apO69ata7dp06ZWu3btHgsPD6/ZunXrGm3btn0U3LJly+rg8PDw + auDWrVtX9YXZ+/FZfA++E9+N6+B6uC7GgLFgXBgfHWfTtm3bNsM9hoeHt2zbtm0r3HN4eHjr8PDwNm3a + tGnbqlWr9uA2bdp0aNu2badmzZp1rVWr1utly5Yd4ufn94EkSVMlSUJ/8a8VRYkwGo1rDAYDgnYAEBB4 + B2sGs0RksBhwLK6DfGOx6Qi/LnlBBAsQLd0JEHOoc+fOn50+fbp1QkIC2hTrhb1SpISQRhr5QoIuYP59 + Ft2P0yuCwBEz87Kqqh/FxcXNU1V1xbp167Y9++yzJwICArDfIZOJlRj7ii/2w+sLWAFEYE4Zn8M+hHxH + J8JIRVFGr1u3rhIdU5Hbe1xGALqbtlJV9fNXX331pNFoxD3mJAO9AQCkFXbPFwAA4pR/sKqqtS9fvjxj + wIABKL4A5UpSFvhBiqYbCFJemPoQQCcqALC3kz3pJ0+FMpQ7zEEY12Z6sl2iKAoYJ+JPJEn6yGQyDQkL + C3v50Ucffaphw4YtunbtWv+NN954dNy4cQ9+9dVXpX/99degAwcOAMkiswHIDA+HIV1vnOEEWMxZvPfs + GPPGfIGGCxcuWDZt2uS/aNGiB0aMGIFuYi/WrFnzPQq6/pEkCRXBAAoA1GB2J02gOIAnrgdxzeSZRYsU + nzoq/o+CV4wn1mAw7H/rrbc+Pn36NMpbwyXmWQ/iHtJIo6JKwv5ntV6w3hH8XVlVVVR5fSEpKWmCqqo/ + q6r65/Xr149t2rTpYs2aNWNsNhvp4sr2LWQ/9hjbV7zvn4GAbDIAiOWWmv+jjEbjBrPZ/AqrAVAU9x6X + SYc0xqYpKSmf9OrV6xTtcYJ7zk7e8QAAAOsUBQD50wyIPnQo/9DU1NTGbrd7cnh4OCo3JaAtr68CGUiP + F6SiUGW/03ru5DtpFGQKJkKv10Mh4KHDFHtDluVT9OS+wmAwzA4LCxtYv37953r27Nl04sSJVb799tvQ + 1atXO06ePGnaunUrFu2dTYRGBUJ4Lrt37zasW7fO76OPPqrRokWLl4KDg4cqigJ3BtwLJxRFuakoCoAe + 6wxJAh2xRmhshmf9iMCS/5sXOuK6yyNjDDFlypTZMnPmzNdoZ0tsZA9oEu9XI42KCnFKn/n2cdqHosVp + +4mEhIROqqq+HR8f/63L5dqrqurlhISEKwsWLLhVv3597FXRqifunxyZ7V/8pPomxWq14rtx6EP2wGev + v/56PQpKiuS+o3PsAQBut/sTp9MJ/eYrAMC8uCgAOCnLMly6dw4A6GTi4fsnJiai5/pHzz777E6bzXab + 69aX3eC8IjkIXrxOhTHpi0wFOZid7Mnp3s/PDw8apo0LZrN5u91u/yIgIGBw8+bN27///vuP4MR+9uxZ + PHxi/uEWbZFbCPc7cc9Pt3v3buvy5csf6N+/f6MaNWq8rijKLEmS1siyfIBaCm7Z7XYCCAAGsIa48pmk + 3gSzOnlT/PlclwAb9dxTTz21eM+ePShxCksZqR/A1qC2FjUqCiQofebXL4Fsr4SEhLqqqrZxu939XS7X + x6qqrk9PTz+qqurVW7du3Z48eXLiQw895M2dJ+4Xn5lZBLC/sddNJhO+H4eB635+fjgg9Nu7dy/ccEVW + 5tOxY64BrlogBiCPAABW8BOyLMOq+sqMGTOQcpk3AMApf3t8fHwNtO3t378/Ar9IwB/14WQ3MMJisJ9w + 6uIVP1wJyQ6HI85qtd7Q6XQ3jEYjAjy2GgyGr2rVqvXuyJEjG+/cuZM1cWGm+SL3wDXyjThAoL98+TIB + BN26dXuiXLly3fR6/QxZlncoioKNgmDNREVRENSZBisSS1Pk111BpiFarVaYOOP1ev3fU6dORdogyxbw + AAFtrWpUWIlT/Cygj9Xur5aamopOmmi2MyEtLe1bVVX/UVX1fHx8/M3z58/HfvDBB0nlypUjSp93B4uu + 4Lwy9jG1Bnt8/35+fgg0XtyjR4+WrA1wUd1jdNywsAAAtHS73Z9zACAnPSsCgOOyLMP93TXXAICfRGaW + uHXrFiI6X3/vvfc22mw2mN6JL4ea6cXBeGWctFgqIAUA5KZwctPpdMyfn0RrGePG1ymKMq9KlSrO2bNn + 146MjMTEwETiOeVnNXbxdY2KFzGX1L59+wImTpzYqF69el1osCGyFw4h44CeEMRTiGe95uPJn5kmPb/7 + +/tj056vVavWoh07drSh5lLNLaBRoSRB8UORwgyN4LGaNG2vn8vlmonTvqqqx1RVvZaenh53+PDhpA8/ + /DClRIkSxCVHdQJx9eaDa41nN7U2I3MIsQRxBoMBzXO2BgUF9Tpz5gwOhEX6IMgBAMx9K7fbPSePFgC0 + Vz6mKAoC2V/ONQAAcYJKj+5KWAQRERFIS7tkNBohVInJnj1wLwPKxFgUnNAl4AGLBil4ENY2m+2qoihI + e1gXGhr6waBBg+r9888/UPqedq1exldkH7hG+UPMTHny5Em/qVOn1qpRo0YnSZJmybL8q8ViOYW8WJT5 + Rb9xq9XqAQJYj95cU3fKXHArYhRizGbzxiFDhsykptMMpxRt/Wp0L4kz87M6/ZC3D8EHrarqSy6Xa4jL + 5frc5XJtSk9PP5Genn4zPj4+4Y8//nB169YNnVw94BqWNV7pYw9klQGWS8b3kwMizYmPM5lMUUg3liRp + 3MKFC5F14EnFFe+xqBDTtzS9HhYAEQBkxzwAwOEHWRFIK+8yZcoU4hoRr5clccIJCwOL4tHdu3d/6O/v + H0mD8MgDp72LxYFkyQwwgBHIodfryYmfuhNOIFf9gQceGDJhwoQ6KOfId2TLaozi6xrd38QsVseOHSs9 + aNCgBuXKlRtEax4cpBkiJBIZBYoYos6PkwrKl4L576KuBlwD17zatGnThcePH0ehEqRLFVlfpUZFm+i6 + Y6d9HK5Qmx+BYlVRyl1VVQSyTklPT/9BVdXtqqqeUlX1ZlpaWvz69euT27dv7znts0Jv/CHQz8+P1PFn + e+EO3G1MqaXKskwi/k0mE4K/iYlbkqS5o0aNQq8OpKTjfoqDBQDPBPIhrwAAFnQAgKOKoqDGy4szZ86E + CyfXAIAFJJS6du3aK0888QRS6mCaJ4FWTHjmom4z8eHgc/Dj2Gw23BQps2q32zcGBQWNhuKnaRwZFL8m + KDXKLbHNFBUV5di4ceNDrVq16lmqVKkvJUnaptPpzhgMBk9nSrvd7lnP+cX8vqAgAEIsxmq1/rJkyRK0 + HUYBIY81QBy/RhrlN2Wh+GEero0mNKqqDoTSiY+PX5eUlHQQZv60tLRbN2/eTJg7d25yzZo1SSou36Me + VrScTvl5cLWx/cj8/cRCjD2LCHdYia1W65edO3duFx0djXtgB9YivY/uAACw+cJcAQAgFuqIoigo9Pa/ + qVOnogKjb3PDLRIS+BcbG9towoQJc2luPZAfuRjfo5gv4pANE18/G6ROp7uG9D1/f/8pHTt2fO7mzZvw + NwFweE5GxeGhanTvia4p+7Fjxx4ZNWrUM+XLlx+Naod6vf44PVGIcQLi2s2R2SkHP/n9wH5nbT1lWYY1 + YFf37t3HX7lyBRk12OzaGteoQIiTo3yVPhyy0IkPVfOeUlV1kNvt/lpV1W3p6emncdpXVTX+1q1brkmT + JqWULl2aKH0+3ks092Pdg2l9DGIRyAkYeGGm9HnFj/2CWJ4YBITT+i5fdO7cuTV1TWfIsinKlI8AALoV + cVCo+PrchAkTEB/h2/xwAACLpdy///77ll6vR6U8PIhsBSRfTY1HfTATwWqg0+kgaOHrP4NKexUqVOi5 + efNmND4AissQJV1cHqpGhYfourYmJiaWWbx4cYvatWsPR7yJTqdDsQ3kzsLH6Kk/wa9t0bTPmzx9MXGy + WAOz2QwQgA19tl69evM2bNjQhVZP04nj1UijvBAnPzPk7ScmJpZNTk5GaV5UmYMV6gNVVaH4f09ISDin + quotVVUTDx06lDxw4MDU0NBQZubPtJ5zy1xcTAbG3mG9WFAS3Gg0smBwFLRJoM24EMODA+hOvV4/5f33 + 30c2ApR/scsAY+n2NA0wLwAAWVAIjjyoKArKvz87bdo0FGrKeY445a+jPvjwp556ajktLJDjCYkXkpw/ + lB9crF6vR5Df3FdfffWpqKgoBCd4Tv3ieDTSqCCIrnOYQMusWLGifYsWLUbQvgsobEUsAnBT0Q6GnjUv + 1gyAYPTR+pWBASCCgoKwH66VLFly89dff92XVlIjWQLieDXSyBfi/OAsdx/d93D6qxIXF9ciLS2tMz3t + fxofH782JSVln6qq/1HFn/TLL7+kPPXUU2nUJZZp3eYHs7octP4LrsNO+6k0uBzKzqXX66HIiL8faeA6 + nW5F1apVB/3444+P0ftiluJipTvyEQDsVxQFPWKezgsAwGm83Lfffvu+oigIzssxD5FX/vidFfdhA4P/ + xmq17lUUZcLIkSObxsbGokhKlkF+GmlU0MQsAqqqlt6xY0fD55577m3apCnSZDKROhdYvwh4Ym2OsbZZ + OqsICHJigGLBWoC9EWuxWP4aPHjw6JSUFLRIJR0GtT2hkS/EnfaZ+RggEmZ++H0fTU1Nbe12u99QVXWG + qqrLYeZPTU09oapqFMz8169fd/3www8pjz76aFqJEiU88p2Z8fMjQBbMrXumE4hLWK/XQ/En02JesDIn + 6vX6eJoKDkvxepvNNmXcuHFPUzexJyOsOO4TCgBw+G6eRwCQoCjKFUmSoGvnS5LUfuLEiegtkPM8cQgS + k9y8WrVq69AZjzv9ixfO9ID5Bw2/EeoFGAwGfAcaBn2wbNkyIDhEbZKyvMXxIWpUtIiuQxMa+mzbtq1V + hw4dkDmACNqzVqsVZad56xdJe+UVuS9psDabzfNeVhgF1oOQkBB8Z4Ldbj/arFmzT2NiYmCehQDQ9oVG + 2RJ3YGNpfPAdI6ivekJCQoeUlJSBaCmrquqvqqoeiomJuYigPpj5z5w5kzJ27Ni06tWrk7Wd3RrOLxCA + 61AXGzv1sxO/p/W5TqeLMxqNUHpbw8LCZkLxR0VFoYVwhh4bxXVv0GcJCwdKAfOFgMS5zDCvAgC4LEnS + HkVRELvXbvr06ThsZz9fdFKZTyV44cKF76KsKR4SbwbNitlJiJ38EfFPc0QT0UYXJ//Vq1ejqAQinxnQ + KLYPUqOiRZwwBfgtuWzZsoZ16tQZhawBSZKAqFF7HNkrGVxheRGOYsyAw+HAd8HseaFq1aoRp0+fRhlh + 5AIXK/OmRvlDnBJkJ34ojAdQZyI5OZnU5VdVdYGqqltVVY1MT0+/rqpqnKqqrsjIyJS33347LSwsLMv1 + i9cAWBHT5e3/eWC2XxBMiANhisFgQL46gsETTCYT8fMHBgaiqt9fISEhsz7//PNnYmNjofhxb57Cb8V9 + P3AAoAktBXySVj0U59Tb/PIAAG3ZP5ckqc3EiRNJgyTxWhmIE4D65OTk6g0bNkQnIZL2x1o2ZsdsobAS + kMjzp0Ubzvr5+c364YcfmPJn1yn2D1Ojokl0fRoRNPXFF188Wa5cuYk6nQ7CCScV4hagZUlz3Bc8o7Up + O2kxdwL7naYN4rujQkPRv2r1S9SMS4SfOEaN7i/iFCCR0RSoshM/SrQ/73a7R6mq+g2C+tLS0k6npqZG + p6enx6elpSWvW7cu9cUXXyRxLVhzzA/PDm6saA+sU3mI3vfGTCkRxW82m9mJ32Pqp3wbjWsMBsOW8uXL + T4fid7lcKEQEN8Z9o/gZ0ecLC/kTtBkQXPCs9o44x+JcMwBwCe3tFUVB+/XwGTNmIGAy+/njFpd5w4YN + TxuNxkMwPdjt9hzN/2AW8Mfl+uNhX/P3918ybNgwpJtkKIOa44A00ugeE90Plhs3bjzQuXPnN8qWLYv4 + AKTYJNOypGRv+FIQiw8WhOCFoBXNrlTw4jtvBQQE/L58+XJnYmIiBLwGAu5jovKSRfTjEMXy92upqtoB + ZXpTUlJQm/9vVVXPQvHDzK+qasqKFSvSGjVqhKqXZI2yIDx+3WVVq58B06z+nwV7lD4X4MdM/UkGgwHd + Y9HmG+2+jwQHB6+uUaPGh1999VXbpKQkpCYiBoYpfmIpFuejOBMHABq53e6ZTqcTBY9yCwAuorW6oiif + SJLU0lcAwHxJIT169JiKkwgeIMqn5nDxDAOhRYLwGVgPNrRv3769WKkpx8FopFEhIAGw+q9atapus2bN + xhsMht0QYIqiJNPmJD7tDxY8yP/NTlvMGgCB6+fnh++LNxqNOz///PN+tEqbBgLuMxIUP8vfLwcfv6qq + z6Bwj6qqc1VV3Yxo/tTUVOLfv3z5csqECRPSypYtSxQDr/D5wFWsObb+WJqeyOIazoaZEmLynyl+3r+P + 4D7olUM6nW5t06ZNh0ZERDSgabDFOrjPV6JzgGfdwO12f+x0OpE1lxsAgDkGANipKMpMSZKaT5o0Ce7E + 7OeTmZZu3rxZTafTbYZ/hqZC+SzguIEA7Z2pWLFiv7Nnz8KMed8/WI2KNtG1q4+Pjy85ZcqUZ0NCQr5G + OVKj0QhzJgukIv0FsBfErBgveyUTM0ENwUtNtUn+/v77Bw8ePExV1QdZrQxxbBoVH+LkJAvsw+EJQVwP + pqSk1EtLS3uepvLNTk1N/UNVVeTvo3BPwpYtW1JeeeWVtODgYCaHM62xO2FYArzVBMC61+l0ROkrigIm + Jd5lWY6n2TQxsiyjiM8Bh8Ox6tlnnx2wfv16uIShmABuNP1AiQMA9dxu91Sn0xmZRwDwt6IoH0uS1Gzm + zJk5Fxtj5v+vvvqqs6Io8Hfiy3zy/7NBwMxEq/3BxLN2+fLlCOK47/w4GhVPomuY7JMDBw482LFjx16S + JG2kZUpRItsDlnHS5/2rXvZLJuaFK40XIGA6ICDgbO/evT9KSkoCCCDCUhybRkWXOPnIrLDsxI/8bfjD + 6yKqX1XVAaqqfuJyuXa43e6zqqreiImJiV29enXS448/nlqmTJkMcSn52faaB7FYlwhcpeuTmfpTbDYb + FBUYgX2wkMHMD8WP3vSr+vTp8+q+ffvQVRZmfk3peyE6L5ifum63e7LT6UTlw9wCABRN+ktRlOmSJDX1 + FQBg4QW3bNnyO4PBgAdHhBkLGvGB2SDwuUvNmzeH6bJI92fWSCNvxAlry9y5c+vbbDYU3EDxDZfNZkOj + oQxC2NupyRvD/O/NPEuBeFTPnj2/un37NgoGaa60YkLcWuIj+smJX1XV+mlpaf9zu92DVVWdHx8fvzst + Le2iqqqxZ86cSRw7dmzKI488wkBnBjmNtZNPwXweRqwLp/SJiR+xXjqdLlmn0yF/n5j6bTZbNK32+k/p + 0qXnjxkzJpwWliP+fE0nZE0cAKjtdrsnOp1OFCdjVXgzPRPK3gDAn4qiwJXfePLkyaRfgnitDATUCfO/ + 3W7fYzQagTjIwuKFWTZM8jvpZ5JMJtPmdevWof85bkY7sWhU7IitaeybI0eOVH7iiSdGWa3WPbRTmSdT + AF3RvOyXTMxOWHAD8IIbgICW2EYK1Y0uXbrM5i0BmiAtesQ9N6b4WWMe+MLRka+xqqqo2jdcVdUlqqru + VVX1MhT/nj17Evr27ZsSGBhIhD7ryYK0PWai50/rWD++uqCyYVKmlyl+xL44HA6k8MHSe1tRFETy3zCb + zVdRVluSpE3BwcFTp0+fXu/69etwYXjKXGtrNXtiBwsEeLrd7glOp/OwD2X4swIAkyVJauQzAFi3bl17 + WZbPMuWfzQVFJu9FqgfMPuHh4WPElD/xehppVNSJE+T6pKSkCgMGDOiCltaBgYHwwbksFgsBAl72Sybm + uwd6yxCgf6cpinLzpZde+tTlcqGboAawixjxa4ZT/KWTk5ORytdaVdXeSUlJk9LS0n5SVXW3qqoX4+Li + bn/xxReuNm3aeNrw8msjOwV/hwCAHerIad9sNicbDAYoIxR2g28fAX1XZFm+ZLfb/5QkaVGtWrX6rVy5 + EtH8KEWsrctcEgcAHnO73ePyCAD+kyRph6IokyRJaugrALAMHz58hMlkQitBhvayuqDIbAAI/ji9atUq + dDnTzJQaFXsSTnPmbdu2VXU4HNPsdjvSd+JMJpNPIEA8tbGfzIeL/9PX4Za70bVr108AOjQAUDSIWydw + tbI6/QiQho+/uaqqKNc7lVbti1RV9cr58+dvffjhh4lVq1ZNDQkJ8RzKsCb4HH5+3WCd4P936PvPoPiZ + X59mdqEvzFWDwfCfXq+HeRrNtL5o0aLFK1u2bEFqIonmF++d/1ujrIkDADXdbvdHeQQAsAAAAEwEAJg9 + ezapLCpeKwMh6KRx48aLZVlGHiH5QhZQIi40L0wK/yDlo2zZst/D30O/UwMAGt0XxAl449WrVx+tWbPm + e7Isb4XZHpXPstm8HsYpXzz5wx3AWwdoPAHcCzdef/31L6ivWEsRLKTEKX2+Tj/ysuEibaKqakdVVWEx + 3aiq6tHExMSoNWvWxHfu3DnZ39+fBGLza4cpePzOn+4ZQORZXF8+MFP8TOkjhY+c9q1WKw6GsGwdMZlM + qI652Gg0jurevXur/fv3Q/Fr8V75QPkIALaj+q4kSQ18BQCBoaGheLAo1ci+MKsLigyBBPP/tVdffbWX + 2NpXvJZGGhVXYiAgKSmpXO/evf8nSdIPCIrlGmqJeycTQ5jDDSBEXpOfEOz0d/hlr/Xt2xenRlgCNBBQ + iIiuAwhzRPTjVAwhjM58eFa1qeJ/n5bs/Tc+Pv7yvHnzYurXr+9CkSlvlSaxHvhAUbBoCfCm/LNxATAZ + z077pBMfzeJiEfwoK4uAvn1Go3GdJEnTHA5Hz4EDBz52+vRpmJY1U38+EgcAarjd7g/zCADgAgAAGC9J + Un2fAMCuXbsqWq1WVP8jX8asADksIM8AdDodUOPxtWvXPsoupgEAje434oAvFHLAwoULw00m0xcQonq9 + nqXzEDMu9g6EtcPhEPeTVxbqBOD3VH9//5Nvv/32CBpApu21e0ic0mepfKxcL9L5kL3RFCV7VVV9x+12 + L4SP/8iRI6cHDhwYTf3rOERlEvI+yF+fGNYkGsVPlD7q8uv1+hRFUUhdftr4DSb+ayaT6T+DwYAcdBwK + l0iSNKZOnTrPz5o16xEa0a/VpCgAyicAwFwAAAC+WQDWrl3bknZhIl/GavrzZqZsGO9F0ZKd165dA8pl + QlDzT2p0XxK3B+xbt259PDQ0FCk5J2VZTmYNhUqUKJErX202dQL2f/bZZ71pYRVtv91FEmQdK96DNC74 + +Eu4XK6Hkc6nqip6O0xSVXVFfHz8zpUrV55q1KgRlG0SUkeRbo3n6U3Wiif6vDD9XqL4ofTRfpcWsSKR + /FTxX1EU5ZTRaETnVtS3mOfv7/9m8+bNW/78888P0hM/aeEuzoNG+UMcAHjU7XaPdTqdOJQXPACYPXt2 + b5gqmeIHA43yBU2yYXRJi6lRo8ZqGtXqMf/neGGNNCrGRPeA+ciRI9WrVKnyAS2KksQqbOam1noWdQKw + VxMcDsdvv/322/+o4tH2XAETp/RxEoYZHKd9+Pch/0KQqpmSkvJ4Wlpat+Tk5NFpaWnf//fffwemTJly + uUqVKjGIpkeWCLO0suZQoqz1ZtLPJbODHFH81ArFAvpQrOeG0WiEi+qc1WrdJcsyXFYTHA7Hqy+99NIT + q1evxoEOCklzMd0FomsKAPJOAABiNZAG6HsMQP/+/RExeJPm82dYlF4uKDKE2bUXXngBQUkweeEmtCwA + jTTi4gKuXr36YI0aNcZIkgTTKoQwAQG+7DH2nizqBGC/3vbz81tz4sSJNnxAljgWjfJO3KGGP+2zwj1Q + lOjZgOqnjZOSknqqqjohLS1t5c6dO//p2rXr2cDAQChdvn8Ec7VmeJ7eWFwPPjCT4yyoD/79BFmWYw0G + Q7Rer0dQH/z7SPveI8vyL5IkfVSyZMkXhg8fXuPy5cu4J4AaTfHfReIBgKqqHzidzoM+AAD2vAEAWDdA + lAJGGqBvdQDat2//FYQI8kyZFUCMSM6GU0uUKHHtgw8++JymJsFMhIWjgQCN7nviFAfqBTzYsmXLYYqi + HLbZbDC/+pRum1OdAKpUoh588MGFN27cqMd33xTHo1HuyIvi9zTngby7desWuvI1S0tLezE+Pn6Iqqoz + k5KS1n755ZcHa9SogTx5KF1SXA2ylbf4BAYGZqoUeYfKX1T8nhO/0Wi8aTQar0iSdB7xWgaDYZder0eH + y/GVK1fuNm/evBqxsbFQ/Fg7nhLu4nxoVHDEAQA0fBqdBwCQqCgKnjHaAZNKgD6VAq5Tp84yLBI0dWAA + IBf+SSy22yNGjFiTmJiITcDMRpolQCONKNF9oEtMTCzTrVu3obIs74XJjjZSyW5zZ7DEMaWAn2yP0p+p + drv9fI0aNWakpKRAKREQII5DI99JUPww9UM4s3a8KN6DaP53ofRVVV158ODBv7t3737cYrGgbTQAHpQw + kak8iMtOtuZR+fOKH4qAj+aPUhSFRfMftlgsW1G0R5Kksc8880znDRs24LQZoin+e090/rHGqqmqOsrp + dB7IAwBAWfI9tBtgM5+6AVauXPlXmvPpCQDki5B4uWAGNpvNWOgX6tSps3rdunU9VFVtQc1i2DQaCNBI + I06hJCYmln399dcH6vV6tBaGaThHEOBLnQCYevV6/bHOnTtPiI+Ph4LSorXzSILix4GGlOuNi4urnpiY + iBr9Y1JSUhbGxMT8Pnv27COPPfYYTl63LRZLEqqiwirDu1TRLI2VVufBmy/yNRsWFT9rwQvFDzM/8e8r + inLIaDSulyTpS4fDMbJnz55PHjx4sAptMZxBRmvr5d4RXW+wLqEk9Ein07k/FwAAayBJURQ89/2Konwq + SVKrGTNmoO5E9s+0bNmy/1BTkSf/lAkb0USVBWOBY/FFWyyWnY0bN/7+2LFjqAnwON04EETaItPovie6 + /nU3b94s079//zeNRuPf9LSWIwgAQ2GIdQKYMqE1PKAADnzyySdoIwy/tLbffCQG0LhSvahlDwGKVD74 + 9xFoiRP/t0ePHt01aNCgM0FBQej/gA545LRPD08exQ+Qhlr97Fkhg4P9zmRrLk77nu/lhD5/6sezR1Q/ + ToHI6oICIRH95cqVGzhixIhWp06dQkoiYhc0mVyIiMkFCgAAzoY7nU5kZOQGACClEyWaDyuKMk+SpCcn + TpwI606G6oyZyM/PD6VLM7QdzEs3KcQQ6PV6DPimw+H4e9iwYfOvXr3aRVVVpMNkWHTiGDTS6H4hutn1 + AAGvvfZafxRa0el0HgAO8M0UvC8AHAqEex8+j+/asWfPHuw9KDFNwHshTvnx/n2m+KH0IbfapaWlwar5 + QUxMzKoFCxbsbNSoEVKtYDF1cY1yshPQPjHfwhfPlK0BlsaHtQFwQduue079Op0OMpeU6qUnQMjzn+12 + ++xHHnnkjWXLljW8cOEC3BZQLh4zv7YuCg8xmUDXHsDmUKfTCTdhbgEAAGmkoijfSJL07IQJE2CJzx4A + 2O12LGgXDSYiXyqaG7NjHsHC1EW/J9FgMFwtW7bs7wsWLBivqip6WqNgCcxpGdCnOB6NNCruxIGAsoMG + DXpbkiSk/OAERzZ7dn5ib4w9yNwByCs3GAy3y5Ur98OlS5eeYPnb9/NeE5VeFkqfL9zzrKqqH8bFxX23 + a9eu7X379j1ut9uRLw/Fz8o7u2m3xjtiwY1DGEofr3PFezwnfr6IDz24xVkslssWi+WYJEl/mM3meS++ + +GKXDRs24CSZyb+vKf/CRxwAwEEZAOAdp9OJDqMemSCuEY7Z/5MVRUGjppOKoqCA0wszZ86Ezs0eAFit + VvivMgAAHol6uWCmxSq+xi1YnEbOV61addXatWsH0uYXGBQ2XSYzlLY4NbofiFvn+piYmIo9evQYLcty + pMPhwIYnJ0pEiXvZV16ZAXa2b00mE77jcs+ePae6XC40nfGU6BbHUpyJ3jMLSGYK36P0Y2JiECSFxjwV + k5KSmqekpOC0P+batWsrPvvsswPNmze/bDAYoPTR9z7N4XCkWSyWnARyrpgHe4K8JYcpPEvUjkDJdRbd + j3oSVDnE+/v7I8Bvi5+f38xJkyY9GR0dXS6r0/799vyLCtH1iXgMuMwB3IY4nU7ECOUWAMAFdI7WdHhl + ypQpcAP6DABI9T9+IWah3DMx3g8hxC9gmLRolSsgVpioTrRr127Z33///XpKSkoDirYZOs0EBMRxaqRR + cSMGAtAgpk2bNije8Z/JZGK9A3yqE8ArEOYKwGsOhwPKYveECROGqqoKpXBf7StO+UO+YI5hfcQJC0of + hxA0U6qZlpb2NASu2+3+9p9//vmzf//+p0qWLEkq9VGlSyr1cYKWnPx53/6dMp4Xnh0fPwDm/iYmf0VR + PM16ZFm+bDabdzdu3PiziIgIlBrGad8T1MfNgSZXCznRZwZdiLWJIEBYAHILAGAVAli9KMvyGkmSek+f + Ph3tmbMHAP7+/qgeBEQJ8xL5UvbTF1NkTu4CLGIaXIjFe8tkMu3p3r37V0ePHh2sqmpDGo2Km2dIXVuo + Gt03xEDAuXPnqtapU2eGTqfDfky1Wq0++ZbZXmU55tizHBB3WSyWXZs2bcLJ1lOpUxxDcSJO2bFTFU77 + UPw4cEAg1qQm/reSk5PHx8TE/DBr1qxDNWvWjKI974nSFwUv5hSHGv6Q44uF1BeGVYHrwQLFj0wCVO/D + WMDE/G+32zG+W3q9/mjv3r3HHjx4ENkeqPZGhLyo6EXlX9yffVElulaxTqELkQYIC8C/eQAACChG/QkE + f74xbdo0gNzsAUBYWBgiRkl1MrENsC8nEG8+LDCAAW12QgBAYGAgGyhZxGaz+Uzv3r2/uXHjxsCEhARk + DODmtdKTGt13RIWzITY2tkqFChVmIIULTWKo4M+0t7yxWC6Yvob9llCpUqVfUlNTG7EObsVxf3FKjqXv + kSj+hISE0qqqPpSamtrU5XINUFV1iqqqP23atOnIgAEDLlut1jh6siYWF/HQYzabPb/jlI6Tf25cpD4w + SxEkDJM/F1xIgIDZbL6t0+kuPPDAA5vff//9/rdu3ULRNYCaTGl8Iovzk3HWNLrXxK1Z6D4GAAY7nc6d + LDsvFwAAgOG6Tqf7XZKkQZMmTUI8i068ZgYqX778XkVR+Hxkj+kxNwscCh+bRdxAYPoaMWkhWwDX8vPz + w6a76e/vf3DChAnzoqOj36QFNuCTQ0EE4hoQx6uRRsWNOIFtOnLkSP2KFSsuAJLnTqOZ9hTPDITzey8o + KIj8RNS4oijRffr0mUVb0npMxMWBOAHKp+/htI/TDw4WL6uqOkhV1bmXLl3aNX78+LPly5eHrxQnbCLz + IO9ESyb+5l0q4v+9vZZH9pj6cVCilh9S2z0kJARFfHaFh4d/tmLFio5JSUmwYODEj/v16jrNibk5y/Ca + MJ+Fen2I4xeYWZLzyuL3eZ2nOyHuO9m6ZaWlEbWPQl7DqAUgNwAALiKShafT6f6UJGnY9OnTEU+QPQB4 + 6KGHNqFGNA8AvCnxrFj0/bPX2OZgqJo1MKGNhjxolw46+qGHHto9b968Sbdv34ZrAH2z4adjfac1IKBR + sScqFGybN29+MiQkZCUqufkKAtgeZJHp+JtzB+AUeXDDhg3FJjWQE/bMvw/FiNM+hF5LVVX70NK8mxcu + XLiradOm16xWK2/i98gmcR4FN0oGZmAhq//nhan5H/IXhyIcxs6XKlVqw2uvvTb61KlTrVBGmmYpQFGw + cuu4bzADAzyLSo29Jr6P/x4wC5IEQ+56Y/49/Gfzwvx35XRdxpgDngH6wFgDYBweRUZQpMjsf+xzjNn3 + 8cyuJY6Fnw92T+L8emN27/g8i03B6b+sqqqIj0Mp4F25BADQpbAaotET4gc+nDZtGtxdBnHvZKCaNWuu + MBgMyB8lAAAo1Jf843xgz8D9/PzgfoD54kLVqlV3z58/f1Z0dHQ/VVXDESBFNzdZ+OL4NdKoOBFVbIGr + Vq3qLEnSelmWCThHQC32De+W88VFx6xver0+0d/ff9Xt27cRd4O9VCRBgKD4IUChGBHkWDMuLu5FVFFT + VXXh/v37/xk7dux5h8MRbzabk1gjHihuzFt+KvA8skf+AZSYzeZ4q9V6oWLFijs//vjjL27fvt2VWjAQ + yY06/QgQgxwEgOMVHf7G6zgsZcWYI3wehY3AUDbsJ2MEEcJyglMoGJZYntnreA/eC8a4GLPvYdfgmb8O + /xn2PVldG4dAMIAdahmAMR9QlGA8d1hFYNkCSKpI0ziR+YI6DgCDCKqDWR2MOvs8s9fxHrwXKXj4HD4P + hu7Bd+K7cQ1cC9fEGDAWjA3jZHPC7h/zjWcCxY7nI4IP9szwTPBZfB/G/VhaWtozbrd7Vr9+/Q4piuIL + ACDpogCRcBfRVFUUA5oxceJEgInsy4LXqVPnC51OB1MT8zfmphnQnTK7ObIRHA4HfF5A6VcaNGiwe/r0 + 6d8mJCS8T8sLY/Ixudj0xFQj3otGGhUHwvq+fv16yaFDh6JV9w5WLdBms3ncczS+xiemSs/tcDiuv/LK + K59TIeYxd4rXv9fEmUgZ8ydZgBdWlx8CuGFSUhJO+xOTkpLWf/vtt5GPPvroDRpABcXKLI6e+ShEAAAy + F+O82axZszOrVq3ampycvBA1CGgBok6qqj6pqmpbatVAtD+Eel1VVRHTgbRqHJLwf7wP9VbAT6mqiuwG + /HyG9i14nlYz5PkFyp1VVX1JVVWAjm5eGK/DlQILEkAWPovvw/gQUIlrsOuxMbSnLI4J7wXjcxgXvuM5 + bjz4fowH18I1ce1X6Di6q6qKeXlVVVVUm+2tquprqqq+rqpqX1VV4Ubur6oqUs5hSUaDpndQWAfV9VRV + HUEBosh4Hf9HBU28FxUf8bm36fe8Rb8X34/r4Jq4PsaBcWGcGDfuA/eGZ4HngufTmAa7o1EXAB1+1qev + 4z2YkxfS0tJwj7jG5PT09F+cTifSO30pBMTWMmQD3ACJJpMJtQDmjRs3rhUFG1lb0Fu0aDGddonK1Azo + bmwSlDAFiykvMH/o9fqrderU2bts2bKv6cN4xuVyAaUBOQEIQCAUOgGmkUZ3QlTpGc6ePVvhySefHCpJ + 0lGj0UiqdQIEsH3Jd5fLjjmwAAFxfMWKFRD2rGlXodk/gtLnTaXMBAthFpacnFw9KSkpPCUlBQpgzrp1 + 63Z07NjxjNVqRR18VEQjYAkBe95kWCECAKmPPPJIzMyZMy/+9ttvZ5cvX75/xYoV23/++ecNERERqxcv + Xvwzfi5btgw/f1q2bNmqiIiI75cuXRoRERHxY0RExLqIiIj1lPGZjfSnh5cuXbopIiJiS0RExNaIiIjf + ly5dug0cERHxR0RExPaIiIgdERERf0ZERPwVERHxd0RExE7K+B2M1/H/7fRzW5cuXfpbRETEZvrduA6u + v27ZsmW/RERErKW8RuC1+D99Dxn3smXLfmXjxnfR79tMx5vTmL2N+5+IiIh/IyIidi1btmx3RETEnoiI + COiPfREREfsjIiIOLFu27CA4IiLiEGP2Gn39AOX99HN76ffsot/N5gbXxRgwpt/peDH/uLfVERERKyMi + IpYtXbr0u4iIiIURERFfRURELKD8DV5ftmzZD3i2S5YsWbdkyZKNy5cv37F48eK9S5YsOdX+/7X3HfBR + Vdn/d957U9PpIB1EYVFElEUpAiZRxL6KbS0oVixgRdFdcAVdK7oURcrawM2uBQUriooggxSpijTpCSSB + hGQyNff/+b7/PfO7uXmTTOjoO5/P95PMzCu3n3PPPWXAANjHxV2CLcaPCdJoif+xeTdz8zDG/vvMM89A + kIKGAfPIep5ffvnl/xC5oeMCAE2OZFSMhwJ4H96NXQoJBKIsZpYjBDWBRuD999//r5DYzistLYUgALUL + 5a6uYsCh1tMmm44nEuPYtX79+j81a9ZsIlJ9ytbqmDfJauqk0N6wu6lo06bNu0VFRVCBHhMCgMUun9T7 + vpKSEmj9oCJtF4lEENkQu61Rq1atevvJJ59cWL9+/a2w5Bd57801TD3XlyHWmmrfHwXQwo4ALlD1QsuD + qH6wAUB99mdkZOzXdV0GsrbS/+W6rgcE8D8BWSYTQb6O7k0G8n3qO9Ty1RVqHWuCWh+reqlQ61KRBNR7 + rNogUVugTvDaAPYJ7BWgz/Q7+roUAXzcbneJy+XC5zKv1wuel7QXEI13cQwAnlnodru/e/HFF4eXlJTg + KAM80lrjN3ToUOwwNuNGEgBI4jgSAoA8GXGWIZdBuMdEfT6faRULQaB///7L5s6d+1YkEhkRjUYvDoVC + OLuBRqCKIFClkjbZdBySmLC+zz77LNvr9c4WC0VERKNLKlcAXQMhAIK1iCWfP2zYMKg7j7pBoKLaJ6Ou + VMH4cfZ6bjQaHRyLxUbk5+dPfeWVV+a1a9cO8e73uN3ugMvlivvtY/2Q3ZJVAYmY/zEiAJiA5hPrHPpJ + KZe8Fquo9hwbxwzUvkoaxPswHvA/jq8snp8Qkpfd/pSUlLUPPfTQeM45jgHkkNBVBYExY8b8FUcAuq7H + Y1wDR4L5Axj4aiyB1NTUuG+sz+ejMiEspnk0gGhH559//pIvv/xyBuf8MXG+hB0NBRWyjwZsOu5J0mhl + PPzwwzdqmoYMb2bYbpH9r9p8UkG7A/yV5lK4Xr16C3766SecRVrvDA4jSTt+YvzkvtdYuLrhjBvnxneW + l5dPefvtt+f16dNnja7rBZj/cCEW4Y7jC6aoW7zexEyJ4WM9O0ZU/1UgC3GyZofiD8hCi43fH2RtlRwM + SkK1MSND0XZR1EpoDwpOOeWUeXPmzHlUaM7kyLv/pymfMmXK+QhBqgoANanRLKAWOqnCq1AjbYkzTlMa + oqMBUUGUFRqBHb169cJZzbswnIFBCXJ2C2NBLCrm2ceRXNxssulQkhi/emFh4Qk9evR4Ckm2KDqcHKSm + JshxAqRjvpJBgwY9I+LhH/Y5Ii06ZMEPxg87BBjzYYfSMRgMQpCHkdVLs2bNeu/KK69c5HA4tkFVChsI + MH0KVgZgrVDtIMA8VRsmecFV2+ZYAfqIjmogCCSj3bHx+4I8PvG/qsGygsU4wfyAcAwDQoQF/uKRRx4Z + UVBQAKNDOVz0/9eU5+XldWeMbTIMQzY4qIsnAK7HgoT7q4SuTFYQwISVNQ5yHAExoePlEikx6XPE6XTi + vGTX6aefvmrGjBn/DYVCo4SF6emKjcBhXeBssulwkMQ4natXr+7icrkQ57vC6/XS/Ko2n1RIZ4TmXxjI + iXm69vvvv8dO23SvPdRzRGH6dLZPQU+gresQiURgKQ3r70eXLFnyzvDhwxc0b978N8QGwXms0+msFgdB + 3c1bMcyafPnl56jfHWnUVE76zcbvF/I4xl8ax3XgvyZwH41nbJRFQCm4v2LD8NX111//aH5+PrwRIHD/ + 31G53+/vIHJImxmviNFS4dQXWcB0ZcnIyEDkMrjfYGeOiQuBADt12BbEDQzlyVzXSkqQnwUVIBkL5nfu + 3HnNtGnT8kpKSl4SLiRwvYDPKVyHsOtI7BJhk03HIEmM1D1+/PhLDMP4WUpLKxv5maBdsbo7VuaPuUC0 + bNkyT/hUx9WCByMIKExf3u0T48e7zhBJeB5eu3btv5966qnPO3bsuAZqS6j43W53PEqfyvxt2LBRK2je + RHVdBx/e7Xa7vxk0aNDDZWVlXeRskWzt2rVNNU1bRlaHUljKZAQA+BaD+e5p3rz5B4yxDx0OxxK32w03 + hP0OhwPn9VBFmNoBGCDBsAEgqedgISQmUyuQlZWFssBdqqBz584bnnjiic/Ky8tfEZbD8J+FUREWIVMQ + OJiFziabjiRJjDXzkksuGanrepGkZTPngpwQCH9rmWPmPPd4PLvGjh0LP2ozYIgKtRwg9XvlHtman3z2 + IYBDxZ8TDAbv2bp167+ee+65jzp37rwqLS2tQGQLNTcgsrZPVvfbsGGjTogLAQ6HI+TxePbouv7ZI488 + ghgJ4IPmUQCDtW1KSsq3glFHRMQxk0HXsoDQS5C5bPsnn3zy8NSpUy876aSTHmaMTWaMLfN4PFsRh9zn + 85nRuKRjgsMh3ccXDqF1CLpcrr1paWm/3XfffV+vXbt2sgjwkCOiLkEVEk8+pC5qNtl0LJHEYPWCgoK2 + Pp/vMxFGOz6PZJsAVStgAbovXL9+/a937dqFiGhxg0ArISABo5fV+7TbN5l+MBhEEp6+0Wj01g0bNjz/ + /PPPf3zqqaeuhO0OQpYahgFhXV4LqqwJqnGwDRs26gTi5VEx13ZkZmbOmjt3LnigqQXApM5s0aLFR8K6 + PiJlpkpKAyDU74WTJk2C8U6LQCDQ4sUXX+x+wgknDGOM/ZsxhqxGW3GmB0nf5XKRjyPO7w+pICACIZjG + ghRfG7YNeG+jRo22X3vttcu//fbb9znnYxBpSmQhROjJ+PGAuujZZNOxQiQAYKyOHz/+aswrRP+S1OU0 + D+I5AWoBzb2Cxx9/HAlzsCjIzF0VBmSGTwDTh50N7sVOH+FT+5aWlg7ZuXPnC88+++yHZ5111iq48MLn + OTU1NSTOJ80yw+OHIvVhvcGxYBLrjg0bNmqHyQvFHI+kp6djw7Cla9euT4ujOBcWlfq9evWa4XA4EEUr + rgHAA5LxBHC5XJjIhSNGjECqTajXoUr0IZTpyJEju2dkZNzhdDpfZYx9zRjboOt6sdPpRMAESCSmjYCq + yqwL5J2OKC+VX40uiHcFUlNTC88777x177777reIGR4MBm8rLy9HeEY0CGI4x40GbUHApmONJMbboE+f + PlPBVDEHhcAbNyqqAxNFxLxgRkbGN9u3b6c8AfQOdYeP3wjmPBfheDF/zi8qKrr/u+++m/j4449/1aVL + l/UimRGC2phn+jj6U/LeV5nzqsaxDnWwYcOGBWQeiHg6DocDNnpL586de11+fn4KFpR6d9555yu6rucj + GJB0Q7UJmQAIYlEycODAZwQDldWBrjVr1tS7+eabuzidzusZYxOcTidimyP08F5RGEglYM4HpA0A01eN + CbGrEMFSUDY5siAJAyGv17v/5JNP3j59+vTF+fn50Ao8XVFRcf2OHTuQiRA+k1jcEodQtMmmI0g0DqWd + ubFkyZI/u1yupeL83Jw3skCcxPw154cQwnc98MADCA4E63yZ0QOUtQwJTLDLRy6BzlDvFxYWjpgzZ84H + d9555/wOHTrsNAwDqXbNWAV4NuYd/gr33fi7MWdRVjB5zGGrzUYSxxg2bNioHdC0kdYNvLagZ8+eryKR + kSkAjB8/fqiu6xsp1ChAO4raIKIVlbVv3/4T4X+v7hzw11i0aFH6ZZddBkEAAU2mpKSk/OhyuaAW3Cs8 + B8hroE6CAO0S8FddMFSNABYi4QJVRRjIyMgoGTJkyLa1a9eu5JwjuNBNgUAAuyEEJYFqE4KA7T1g01Ej + SQAgVTz+Ztx7772PIpkMxrI6Z1XB2Aqk8fP5fMH69esv2LhxI9wC4T4LYR52MhAIMA+QWhQJaK7fsmXL + y5MmTZozaNCgVenp6fucTidp82qcs6TiV78n4DcYMiZ59p/0GmHDxhGEzF8SQb3ncAN8jwQAGAVi0/0T + 3AKxoKR99NFHl2iatlz8YBYy2Uhj4vqgx+NZVVRUBEMiStKjniGaAsGsWbPS+vXr14UxdgcSFjDGYBQE + X0UIArAGrrNGQN3pQBCghcYi0qC5G8FiSTEFhPuj6UrYr1+/HUjKUVpa+h3n/EnkHRALICUgMuulLtA2 + 2XQkSJpPpqattLT05JYtW8L7BjHMzfkCwVf1i68BJBRjDhSMHTv2X5FIpF84HIYAjAx0sJUZ/cMPP7z/ + 6KOPLu7SpUu+MOitcnSHOUg7eVl1b2VMLH9H91mp+8V36uJ5MIgvghZQrz1aqNYONg4L1HY/nqDWpSZQ + lEx5jMMubueECROewoLi/u233zo6HI552ImDGUrqcvVh1SCS+ITcbvfW+fPnIw0i7ADiZ+gypAXM+PLL + LzNyc3O7McaGMMbeYIz5dV1HToJ8TdOgESCtgGmYSHkC5F1+kjuFGiEvMpR7AO898cQTS2+77batq1at + +qGiogIeBEj32K2srAxGgwhb+v/dKGyy6SiQNK9SJ0+ejLTB2yjnPY3rZCIFggEL9TwQzszM3IIjse3b + t781e/bsL/7yl7/80rp1a2gYsMuH4W58XaiDkFEXqIsdNBvEpM1AY4gT4HQ6sUnAX5xrxoOP6bqOMoZF + ZFMZWEtQBwACDIG+O5TAuwhqOShYmgpVIEkWanv90SG3jdrGal8cKNTnHgqo/WpCbE7NusjGs3V0kaW8 + AnQcjueWXHXVVZ9jIXFWVFS0SUtLmw1VIqyK6QU1qevkh4tGKRg/fjzyJNMxgOUuWREKjLy8vIycnJwz + GGNYxP5lGMY3wkZgZ4MGDchOAJMK7zCFEzpPVHcWBwJ55wGBgnZRWHTq1asXSU1N3X/OOedsnzJlyoqS + kpLZCF4SDAYvLCkpgeFTE8mDIK71UOtsk02HktQ5tH///s4dO3bMc7lccLc154bVmboVSKDGfRQhsGXL + lmZmOsy71NRUxO8w5wSeqR6zHUIkWsjDLpcLGwyVscYZuqZpQZ/PV+HxeOga83vDMAKIRYI1xOFwIC7J + PofDgTWlWKAoCRRKkL+nZxDwXADvAEoESsW7AZSDgHIBKCMBkdtgP1EbQkkgnACmwHSIoD77UECth1xv + tA+B2ozakfoY7Q2g7akvqM/lPt2jYLf0v9zfcv/KfUvvIVj1r9yvMmrqyyrtgPS+JOwKQQHzoZrnTyIQ + jyTvPvKOg/D75z//eR1ZFTc67bTTphmGscMwDFMAEOrxag+0AK7FPXuvuOKKfwhr+oTGc6pWQDBN1wcf + fJB59tlnn8YYG+x2uydmZGR8yRj7BcZJcCHE4kaCAKQi2V3xYKC6HUHAkIORiEaLYHFp3rx50V133bVq + 9erVOB54h3N+l8i21Jlz3kwYSVXJuqTWXf5sk00HStLcwVir9+GHH97udDopQqA5luuiISNVPGkEANmV + UN0MWKn2DwJWjN9c7LBIip16ANn/RKpUEwgDLoKN4TPWByzS+bqu/+ZwODYxxn5ljKFNViMuCWNsMWNs + IWNsPmPsO8YY4p8A2HRAAwrAW0nGVxLoO1yHe3AvngPD5gXC5dnPGPsRltaMseWMsRXimBOukIh2iPJg + XUP0VQBlhMfEBsbYRoRlTwJI3w5YfUdAOGUZ2FQRrL5Xrwes3oMyykC5kwXqSUC9CdQWaBe0D7BWtBf6 + Dm2HNkRbok3Rl0tEO6O9fxDtT/2K/kF/gYd8zhj7hDGGDS7c3WcxxhC07j3G2P/EMTQBn/E9fsd1CLuN + e/GMueK56HP0N8YR+htjCmVBmZCsC+VEmVF+6mfqX7mv5PaX/4fLPIBgeoiXsVPTNByRA7vAoxHZD2mF + abNuMZ/iIIFdzF9ZCIg0bNhwD1kVpw0bNux+FBjSNgkA6sMSAMZ1pkTRqlWr2eFwGL718fzD6sJFZCEI + AM533nkn67TTToMgAI3Aq16vFxMOjbrT5/PBVZE8B0htctCCALlO0Wdxhmq2AXkTACIDGdpnf+fOnfOH + Dx++YuPGjZ8Hg0FYVN4jkpnAi+AEGFHBzULRDthHBjbVmSzmCTF/wLlt2zZY6J/Zt2/ft+GSW69evaR2 + BzTWZeZOQgDNB/wGQUK+pjZjvjpCZf6kEoUgA+aP0MDlHo+HGD2YfplhGPhcahgGwo9jwVySlpb2v86d + O08499xznxwwYMDI7Ozsh7Kzs4dlZ2ffnZ2dfWt2dvbg7OzsG3Jzc6/Lzc29Ojc39ypCdnb2ICAnJ+dK + IDc39woV9Buuw/05OTnX4Fk5OTnX5+bm3ojn5+bm3oJ35eTk3JGbm3tXTk7OULw/Nzf3XpQlNzd3OJCT + k/NAdnb2g7m5uQ/l5OQ8nJOT8wiQnZ09gpCbm/uoFeh3uidJ4B0P430EvB/lyMnJuR9AuUR7DcvJyblP + lPkegbtRl5qA+iZCdnb2nQDaReB2IDc39zZA9A/abQjaMDc392YAbZqTk3MTINr4BrS3wF/R/tnZ2deK + vjD7VO7D7Ozsv2RnZ1+ek5NzWW5u7qVAdnb2JTk5ORcDubm5FwH4H99L11yOe8Vz8Mya+hr1QB3Nfqb+ + RXuLvhqZk5PzBJCdnf333NzcUQR8lpGTkzNa4MmcnJyx/fr1e/bcc88d179//39dcMEF4wcMGDCpT58+ + b/Tq1QsCiem6X9Ncp3kqawTFMR4yilaQAOD66KOPzoEEJVQWsr9utYcqwLmCqaqD5LZixYqrJXfAhAIA + yGJRi2sE3njjjfpdunTprmnabYyx5xljXzgcDkhTkIiKPR4PFoP40UCSZU0INJSqNoUAQJkIpXPSuDDg + 9XqhZizp06fPrsmTJ6/ctWvXZ5zzicFgcGgoFLqcc45EJx1EsCFoByAYkUAQr7PaLjbZBLJg9iowjqBx + gqDZ8dNPPx2FHVVaWhp2zpaGdVags3wwetluQJ0P5GlziJh/lfkkq/wlNT52+TiKgNAf0HU94PF48Nlk + +g6HA7uvvM6dOz87evTo63/88ceugUCgufBcIC8GzDvYJaGNcFwHYYmA+XgwkJ+FZwN4D2yEZOD9AMpC + QNlUoMxWgAFyXaDer76HQGWh8gFq2VEfGVRPK8jtURPUdqwJGN8qYH+VCKoLK7mkq8DcsYJ6newKKwPl + sBoLNAbkcaD2udo/Vn2No/RGgUAAm8nWCLAVDAZPCoVCyHbbbefOnbc3aNAAGgPMlYT8jwR5eZNLwfJw + jEOLjL579+72jLH/QKoA4yPmpz7QAubDxDHAzhdeeGGkOAZAAyW9400gCLhnzJjRoH///qczxm5kjL3k + crmgyoGqxTwaEGeVVmGG1XJaQrVYVn+XYOXPbBpXiIxlFSkpKXsvvPDC7TNnzvxp165dX0Wj0RmxWAzZ + CRFr/aJwOHxmMBhsJzqVQhFjMJluhrZA8McmizkgzwVaoDBesJg0hwdAIBBAru+L5s+ff9d///vft5o0 + aQJVIsZjUuf1GPOJogaqRn74LAsFBygIqIxfZf6k8jfV/mD4OF+F0ZJhGFCDQhv4QceOHcfdcccdN/30 + 00/dd+7cibgEpvGx2qY22XS8kTLvMd/BJyBQpCN0P0LZFxUVQUO+PVkBQOVtcVsA6UWN27dv/yKYuDDw + SCoWAJ0ZwmgOk/Scc855MxAIdBeST50npMwExf9Y9Lzz5s1rIrwGrmSMPenxeD4V5y44h9ot1CFyYKGk + hAEskhaNE3dpkhc89dxTdS+UgqpUZGZmlp511lm7J06cuGH58uVLOOeIkzBZCATDOOeXcc7RTshLAGNC + LOro6CoGhbZA8PsiC+ZO84+YvBlAS4wFCIkIStU6FArBDx/MPnfr1q2D33vvvcdHjx49vm/fvh82adLE + bxgG2ctAM5ZsMq/4eCfgc0ZGRnzcE9NXj8noN/VZNUBl+sT4ZZU/FjPZMh9q/kJN035xOBxzU1JSplx2 + 2WX3fvrppwg1fJJYDDFfqs0Rq+9ssul4IEXox/iGhgGaBfBUjPkTy8rK7s/IyIBATEcAlnxOntcJ5qL5 + QrwsfcCAAXfDn18Y3iR8qAyxKJjXIryv0+n079q1a5CIGGY5OZMlZZFEY3gWLlxY78orrzxF1/W/MsYe + Z4xNE8YZMCaB4QQaBdHIqngP1FYX7GaIwdP/9FtNgkBKSkqVa6XGpvgCsGAu79q1674RI0bsWrhw4YZg + MIiAQ5/EYrFJnHNoTG4SSYpgP4BY6jgywOKPTocmxfYyOEbIgnnLDLwmUP/JqkYwekxu9DWMSHFcBO8S + GJZeyjm/Zfny5Q++9957Yx977LHpOTk5s5s3b/6d0+kEs4f6D8wRGjAzk54QQM3xl8zuX77OipmTPYD6 + nZXQXAsSMX7ZtYqYP5g+5i8MpfxOp3Nm//79H58+ffqlu3fvPk3MDbRZNe2iPTds+r2QtK5g7aew29AC + 4HigQ0FBwd8pAFhNvE2218GcFZtWcx6KDX78Zcg1fi7O2sE8vV4vPTjhwwGRgpSuw0T+7fXXX38Mqm5R + 8IOelFaCwOLFi5sMGTKko8fjOVfTNAQVQr4BWHEucDgcv+q6DmGg0O12x4MLwXVCsfCvVp/DBXFMgjaF + a1X5RRddVPTKK69s+/XXX1eVlZV9LSIQvhiLxUZwzgdzzhGRDcFYEFwJRyrYCaLzSSigo4Mq2oJjFCoz + PNaQzBmgfKYof5bPA0lVR+e9dOaHM2loedCPJ3LOkZP7LITS5ZxfUlZWNnj9+vX3f/XVV09PnDjx30OG + DPm4S5cuC3w+H6yJYTUMy18cd2F3jzl2RMduTZA3ACqTh7+xiE1A6v0qQK5ysvLXNG2v2+1GXWHNPfPs + s8/+x9NPP31TYWFhdyQYE7sftL05ptQ1wiabfm8kxjod+5EWAHYCJxUXFz8ltN41CgA1gObp/71o6dKl + HRGUBz6QmKByYqCaAJc8cS0Y7N7u3bv/R0QRwyJYTVI/WJIaxr1x48aMYcOGtU5NTe3LGLvK5/P9jTGG + JCnfGIYBW4FN8PEUOcfNBRRn9hBw6hDt8IChBmOhBRMLo8/nw66nvF27dntvuOGGndOmTVu/atWqJfv3 + 758bi8Xe5Zy/EovF/sY5R6bF6znnF1dUVPQuLy/vJlwP24q47EjIgvCtYDRQEWGQkHGPasyjGvkQZEOg + 2gyWrIxWZKAMRwtoAwAaKBn0vfw72gw7SrQfANsMMBu0KYzJ8JmAHTqYOK7HX1yP73Bth3A43CUcDndH + /0QikVyxg0fwKPTbncFg8KGdO3eO/OGHH8ZMnz59/P333//2oEGDZp100knfNWnSZIXT6YSBK3b1SKCD + sQrGaCWEy0y22ng7QqjG7AkQcoWgbfqKY6fvdrtDyESGcMOC4Zu7ffhUu1wuCOo41//o9NNP/+dLL710 + zaZNm3A0hpzllJdAPhK0BQCb/hAkbZ7oGIA0AB2Li4ufFuvEga4FdF/8CABo1rJly1GGYUCdDgvcpKQL + ijIEeL1eM87w1q1b4SOPBfKgjgFqIqmBXMXFxRmjRo1q1rRp0266rl+UkZHxGGPsZbfbPccwjDUOhwO2 + AnQ8QDupGs9PDjWgPoVAIBtPCUNL2iGh7fanp6cXw7PgvvvuW//xxx8vW7FixTfl5eVfcs4/4Jy/wTl/ + LRaLjeOcj+Wcj+acP8o5H845H8o5v01oEMB4ruWc4zjmLxKuUAAmhWuuEoAXxzXi3us4538VzwJu4Jzf + KI4sALznZoFbkgRdT8AzCPRcvAPA+2RQOWSgfFYwyxsKha4LhULXRqPRaxRcH41GB4fD4VtjsRgELLQd + 2vAhzvmDsNMIh8P3xGKxe8Ph8H2xWAzZLjGm7+Gc34+AUDi+iUQio0Oh0HP79++fuG3btil+v/+NN998 + M2/kyJGfDh48eF7v3r39HTt2XJ2RkUE+3nBZg696kdPpJO1U3F4FQinGCFTyFmd3xwKsmD6yiJoBTGSV + PlJxSxb9pmGfy+Xa7/F4YKsA7cYXZ5555vjnnnvu9k2bNvUR9jAQMG2mb9MfniwEALIB6FxcXPyMMIA/ + UP5VRQCgSZZ+6623Xq3r+reGYUC9UKu6Uexw4wKAUO3tGDt27Mucc5zZQW1xyLUAMkkNZcD3/rnnnmvU + pk2bUxlj/UXOgUkOh+NDTdOWOZ3O3zRNQyCF/QgkcqDeA3UB2RXI30EYwPGJbFsgFn5qR+ycyBCqNDMz + s6Rjx45FAwcOzH/wwQcRmfC32bNnr8/Pz/+1uLh4bSAQWBGLxZZzzpdEo1F/JBJZGAwGv+ecI2gRUh8T + 8NkK8znnuB5YwDlfyDn/QcIiAb/AYgU/1gD1WoCeQ8+V34V3E1AWKheAchLk8st1/Eb6i+MV4Cvp/3n4 + PRqNfl9ZWYl3mPWKxWJLysvLlxUUFCzdsGHDkjVr1iz+9ttvF8+ZM+fHN998c/ELL7yw5JFHHvnpxhtv + XDNgwIBfzz777I3t27ff0rhx4x1Op7NA7N6hPaO8FuSqGh9fOHeTjWtJeyYMaet6tn4kITN+MtxDRDI6 + vzcN95AYCFH5DMMwjfkQvMfpdBYjzLcI4vJZx44dxz/zzDO3b9++HVpCHIlgUYOaM87sVahz3iab/ghE + fE0RAE4pLi7+56HUAJC07Zo3b14Pxtg7Xq8XCxq5GKg3xyEbvaWlpZkLBNTtf/rTn74IhULYcULNap7d + qZU7HCRpMzzz5s3LHDBgQLt69erlMMZuYow9axgGIjzhaGCHrutYrNGIYLKqweCBNKolalrYVcFAvVZy + vYovwHIYTtptZWVlBdu1a1dx+umnB3r37l2enZ1ddv755+/PycmpDWUJUH6Yob5PRrx82dnZpckgJyen + RMI+Qv/+/ff169cP3iklvXv3LunRo0dpt27dSk899VQEcypr27ZtWYsWLcobNmxYnpKSEhCMKx5tToDc + 0sDgYNSJ3S0xQdoJm/2DHbwIKR3vT7VP8RlMXwSZqjYmpGuqfX8UQONOZv7E9InxI4cIGd1S++2FsI2I + eC6Xa06PHj2eef7556/75ZdfegpDV6gyLZm+mMdHZL2wyaZjmcScAP+EnVEiAUCds8mgqgAgvaid2+3G + wzeLxZDU5OoD4qAwg9JRABbKdR988METOK84EloAlUR9TPXJkiVLMkaOHNmibdu2vSAIuFyuMV6vF2Eh + EWISKYmxc5PdCFWtQI31TxZkkQkGQbnQ8T2+w+5f9TyoyZKbjhPII0ERMORF+w8NMGQK5CTFtlBh2b41 + tT8BfUB9maAvzM+1BdDB73iWLDwcRajtQ0IOMX8zSI9AucvlKsWxldvthkoSO/2fGjVqNOuUU055+q23 + 3hq0Zs0aaAJxHIgFDOpMzMtqjN9m+jbZVJVqEABwBHAgAoA6t6u8DBOz0aWXXoroez/Arz+ZYwBpYYtn + 1EMihX79+n0YCASgBYDR1GGzBaiNSI2yc+dO39SpU5t17doVyYeuZYzBkAKeA4jrjHjNCKyAmAKoN7QC + ckyBhMyiJhBDUHeB9Jt6PY4F0tPT48IBrkH7Yjdo5X5ltcMEwERwj8yU/ohQ2xffob1k1058RwxfdQGl + 9k0E9fl0D55TE8On/lG/l2FV/sMIdWFQGT+56cUZP84gvV4vtGiwb1js8Xjm9+/f/6WXX375ko0bN8Kl + EZ4rEP5hsFuN2R+t9cAmm44XSiAAnCo0AOBTdeVL6vyu9jLfG2+80c/tdiM5AozmZGtk9WHxhVbaLVEe + Adz3y8qVK/+xd+9e7ABgWX5EtQAqifqZRoPz58/PGjx4cCfG2AWMsaHCjXCOSCxBBoMQBugs94C0AjKT + wKJvtcNLxEysmD4xK/X6RAzvj47a2gRMWm1Luo++r6lt6TqrZ1g9X30W9aUK9TmHGCqjVyHv9uUzfswD + M+mOMGZcnpKSMvfSSy99+MMPP+xdVFQEzwl4jcRV+8rcsxn+USJV8KoN6v02HR0S/SELAPBe6rZ3716E + xwdvSsibE0Cd59VfVlJScmJGRsZYROByOp1IaxjfAWOHSgtYohCi0sP3XHzxxXAJ/EtFRUUrWhiqvPQo + EdV18+bNnrFjxzbs1KlTV13XL2SM3QVXSORFcDqdS3RdJ9csM+ywrusVIj2jKQxIKmWz7kdoAbfxB4GV + 4EFChDzOrI4YFDsElcnTHI277pFhH9KNijFO5/xYAzD+4R20sGXLlv8bOnTosE8//RTRCeksv5pwbzOT + o0sKU1djXqjxLCjGhQw5PkYyoHccKKoJIocCarscTyTqQEaA2ERDq3bW/v37X05WAFA2HaqQX+1lQOaQ + IUOuEakVkfs4jFC/lBtAVp2qL5OAa+H2s2rz5s3/5JzDzQcuPnUOD3w4Saqz/vHHH/sGDx7comXLlrAV + uIExBldCpIdc7nA4kN6RhIESGD1BGJCOCEyBAAst7epqaR8bNmqFqjFQv5c1bwBsHWCLo6a0JlCIbxGg + J5KWlkZjNwJ3PpHTA0x/v8/n26Fp2oqmTZt+cNFFF4157bXXcjdv3ozjPCxGlvP497T4Hs8k9QEYKzF8 + CjGNnSTWYghvcswMGGzLMTPUGBtynA0Z8u81JSUC1JgicrwRNTGRmpxITUakJhlKlGhITSZEoMQ+ByME + 1VmAUfuqJhL3yAIA5l/fkpKSSckKAArMNUDMf/Auyxe6vv/+e3gDvMUYKxD+vBEy8sMiIyIA1gRci8Wk + +MILL4QP+x3C+rdOSYKOFCkTxjlhwoTU3NzcNoZhnM8YewAZCXVd/5/H41kMzYgIO4wAQ8jLDOMn1Wag + rh1jw0Y11CRICgEgbuCoMntA2vlDOIXbnjw2ZVU/PCCwy4fx79Kzzz777REjRtz2xRdfnLF161YY8GHx + NRLNG/V7m44uSWsZmFQ8t0RZWRkYCLSxsNFA8Ko/RyKRPpFIpH8kEsmORCLnRSKR86PR6ACBC6LR6MBo + NHpRNBq9OBqNXhqNRi+PRqNXCFwpQJ//In4HLhPAPYRLBPAsPPNC8Xy8ZwDeLcqQG4lEckSZzhXl6yvK + imBbvSKRyNmRSOSscDjcA0G4kGwN6ejD4XC3cDh8ejgc7hoOh09DkC7k0giFQp2RTS8UCnUKhUIdkV0v + GAx2CAaD7YPBYNuKigoEn0LbIBiYHPwLu2450BqEGwgvYMiYF2hbCtmuCg7VhAO1r2oiCwEAAchy9u7d + O1XTtFoFAHntIOGfNgAOhwN83fKFOsJvdurU6UGXy7XC5XLh3C/s8/nMl4ldbsKXSsB1eMmWuXPnThHx + 7g86R8DhILlzpM7ScUQwatSoJm3btj3FMIxcTdPuRYAhxtgsh8Ph1zTtV03TtmqatkvTtCJ0iqZp5Zqm + IeqZLAzU2FE2bFiBBAALIUBm9GbIXWjpaKyB0ft8vrDX6w1pmmaOQ/GXrPj3eTye7UgilJKS8mOHDh1m + 3nTTTY+9//77/QsKChBhEgtctSM7eSE70EXNpsNPCvPHbjlLHMOeAYaLoFyxWOwRzvlTCEGORGWc82mc + 87dEWPKZnHMc3+Zxzv/LOX9PBCKbxTn/mHM+m3M+RyQ5I+CzDFxDwD2Ej8RzPhTAc98X7wD+J96Jd6MM + KAvK9I4o35uc839zzqeLMoO3vC7q8CrnHDlWJnDOxyOaKuccQdNQx+c5589yzp/hnI/hnP+Dc/53kY8F + bYEAX/cicqfI4IrgZAiGhkBpSN52IZJxiSi3SMwFoaMrhAmxuaWorOBx0Fig7Un7QsJAneaKJABAyICG + BELJwD179swQqbJr5CuK/RExf1wPV3KsA9VJvDR1zJgxA6AC13UdMQGCtHtQz71rAO0y9vfu3XtxKBR6 + TCS8QUUsVYjHEkkCATrOWLhwoXfYsGFNW7Vq1ZUxdonX672PMTYBwoA4LvkJEQc1TZNdC620A7aGwEZS + EOo6mdmbIDWex+MBY4+r8aWxRTt7TPJSp9MJg1Z4uix1u93f9ujRY8odd9wxfNasWef//PPPp4idDhYt + LDbVjPfqunDZdPSINi9io4UdKnaubbCzLisrQ6TLyUVFRZ8vW7Zsqd/vX+33+zf4/f7f/H7/tsWLF+/w + +/07/X7/LoF8gQKB3QJ7LFBYR6j3y6D3APRugMoDUBlR3jhEHbYLbPP7/Vv9fv8WAdQT2Oz3+zeKuv/q + 9/t/8fv9a/1+/yq/3//T4sWL0TaL/X7/Qr/f/53f7//K7/d/5vf7P168ePH//H7/jEWLFk1ftWrVxBUr + Vjy/fPnysUuXLh21ZMmSB9esWXNHfn7+JTDWE5oEMO8q2gC1zxKRJABAiINQDu3E5du3b38PUTVr4yOy + wbm0jpjqfxG7w5rw0m3btrV3uVzIOrTW5XKBiWFBqZMAINwCEdVu99SpUyH9IRwsQn6iUZJuiGOBRGeY + RwTz5s1LHT58+AlNmzY9PSsr6yJN0+A6iQQNbzLGvnQ4HIsZYz8LuwFyL4T1NDpNjjdgHxn88VCNoSdA + fEcvA0a5YPrSjh6JrpDjIijsUiB4IoHQGl3X59evX/9/ffv2fW7s2LE3Ll++HDsXRN/DLsVyly+TzfyP + P5IEAI9ImXwyVO2RSOSF119/fV6/fv0QkrooPT0d6xAFQaO1iKAKlaqAebihvvNwQa4zgYxfyfuF3F/R + VmgzrOFwwcN6jox82Oxhk4wQ11jrN6Wnpy9r2bLl7Lvvvvvv27dvP1fkEDE133WZU+JaEuRw9NAaodrX + r1//sWEYKAvaKiHfkDUA8nEg6uXz+VB2axIvzrj11lv/gvCdhmHg4rgrnBzOtCaIhDtIvBNo2LDh2oKC + AqhoBubn5+Nc5Zg7CkiWZCkbwsCDDz7YqGvXrp08Hk+2iDr4mNPphKHGB4yxT4V7IWwHEB0N9gMYNBhA + csyBA3I1tHHcIBGDVxcleXFSF2ZEgAwII9R9brd7p67r2NmvYIx9zxj7/OSTT37jtttuGzVx4sS/btiw + oWdpaenJQjWJM8Tjds7ZlByRxlL0N45zLlu6dOm4Nm3aLHO5XLDzgDbXXGNIwyQQP26ykRBV2ozaUEQA + pYyvmLuIFooz+q0pKSmz//WvfyGPCJh30kcB0oYTQjr6Epoc2G7cuHr16s8E36hRACCg7JKdEFKHlzVo + 0AC8KDFhsVizZs2fGGMIOrAeZ9tI+iEYeq0vFSBDJLgWFT/yyCM/VFRU4NwF6hHzKCCZxjiWSdYMLFmy + xPfKK680POuss9ozxmBIeTljbDBj7AnG2Osi8BDiDSwRGgLEHFA1BHJoYlUgsAWDYx8qg1ehMnh1x4Hd + BsYBdvJYsLG7gNAIN7yVuq5/o+v6bKfTOfOss8569uabbx42ZcqU61esWNFfZIrEeSRU+lg0qqj0ZZJ3 + I4musen4I4lpgGH0nj179nOtWrWCgGiqjOvXr2+uH2o8Eht1Bxir/L+04zaP6JB5FvPY6/X6R44ceW9Z + WRk0AUkdBUibTBgYQluHe+F6e9vy5cvniXUiKX4AHix4tsmLU1JSSlq2bLlMfWcVEgWol5ube7XL5frc + MAzsWhHmFwYESUkeAOKeS8GB8r/++utPOedDYIEpVBvHvD1AsiQJA6bl5gcffJB51113NWnVqhVSLfdh + jF0mNASj3W43NAQzGWOfGIaxSNM0uBpCPWdqCDRNgwtmlSMDGBaKVKsyQ4kLBpBG0daE37tkDze4RAsZ + fle/U1HTNfhNscKXXegsIaxrZeZuqhCxa9c0DZDViehbU43ocDj2OByOnQ6HYwPO6ZHOGuOCMZbn8Xhe + 79Chw/MDBw585KGHHrrtP//5z0Xr168/CyFBxa4CzD4eW18dkzb9cUhaf8A02mzbtu22xo0bf4VxhvgO + GMOS10i1MW/jkAJM19QGYPPrdru/z8vLu5g84Wqbq5IAgONyzO8T4PGAbKWffPLJIrG21CgA0Nolewl5 + PB6sTXvPOOOMr9V3ViMU9rPPPutiGMYLuq5jcSpHkBBhcZzwxQTKEyDUJVFkCmvduvWWXbt2wZITqWhh + 1AAXhxob43glqRNdCEX82muvZVx++eVNmzRpgiiEvXVdv5Qxdgtj7HEYFLpcrhler/djXdehzkXK1A26 + rv9mGAa8DMxgRIJ5mAzF5XKZCWyERacV1B2met5FUNXPVqjG8CwQH2h1gPqMg3mWJTD+yAVGoIrVPECW + 9FDjiTN2tf6kgodlfRDMHFoxh8OhngsiPC4iSeIcHh4imzVNg2CHOPmYQ0hGtcAwjC8ZYx8yxt7VNO3f + qamp4zt06DD6wgsvHDpixIjrJkyYcNGyZcv6/Prrr6eVlpaeJAyKsKszjfXUsaaSvcP/Y5HU11hvsLHq + PnTo0FfEsSPGrjwnag1FbeOggXaOZmZmYt2F4F/Ypk2b8YWFhZjHpua7pnkpficDQNhywMvg3FAoNPrV + V19dWRcBQD7/F279e/v06QNtdM0kJJUGvXr1QmCceW63GwscHkALdLWXWhWAzku8Xi8W0rIhQ4b8zDmf + GAwG4RoIe4A/xO5FtGdcIJgyZUq9e+65p/npp58ODUFPxhiiEV6nadowj8czVtf1CbquT9d1HW6HC2DY + hWMDuB4ahoGjAzAZAAYo2EEiy+F2gR0Oh2OXw+HIdzgcBQ6HY7fYaRYiVwOiuzkcjr0Oh2Ofw+GAtgEo + hdYBTE0CmBwQsACEDxlwf0wW6r11gfl+OWufxXeYdIQq19IuHMatiHap6zqEKtXIp9jlchUCbrd7j67r + OKYBY4eXx1aHwwGmDrX8WqSaNgxjga7rX+i6/oHT6Xzb7XZPEV4iLyGOhKZp/6xXr96Tp5122n1XX331 + TQ888MDlU6dOzf3yyy97bdmyBap7uBPBFxmuPjDSwxGZGXRHnRvqZ5tsUgSArIKCgr+kpqbirHiffOZP + a7MtABx2kLYQm4YKkVvHj7DZxO9qEgLEb7DZwVEe1gMYz18eiUSev+uuuzYJRl6jAECQPQCEa37hNddc + g3WpZhKFcL///vvQAozTdR2LHnY+pjpJfVEikCYAENHH9r311lvIFf94IBCAOhMSTsLzyt8jibatIhAg + c+GkSZMa3XTTTa179uz5J5/PdyZj7BzGGDQFt2qaNgLZDDVNg2T/mq7rCAiB0MVvi8BN+P/fEvAZngn4 + fQZ2m8IOAcaJyIgINfPnjLG5EPCEOyO0DzBa9DPGfhQqaeRyxzkiJE9oJiCIwIYBho3rBCOEMRp2uABs + G1TQbwCuxT24F8BzADwTRyEA3lEjNE0DVmuatkr8Xe1wONYA4nfzO/E7sELTtJ80TVsOGIaBvzgLA2CX + 4Xc4HN+4XK5PfT7f+6K93lHadyoEM7fb/QJjDH3x95SUlIcaNWp0Z6dOnf46YMCAS++6667cUaNG9Zk8 + efKZmDtLly7tuHv37vYVFRVQ2ZOvMCKjYacGJl/j2K/pN5tskpgJrSdNPv30U4Q1/9Hj8UDQNQUAHJfR + 8Zm6Rts45MCG1xQA4J3j8/mQInvDLbfccr2Y91U0dBagoxysEzjmQ06duxH7oEePHnvE8UIyPJiYvywA + 7Bg9evSt6jiyJFGQrKuvvvoquLiJnRHUoLVqAUjKxFkqbAGoIFCjNm3atGDRokWfIQBDWVkZJQyqttv5 + I5EyiSH9uSEYfPnllxmvv/5645EjR7a69tprT+zevXuXFi1aQDg4C0cJQkiAjQH+RyhjaBN6GobRyzCM + 3oZhnGMYRl/DMPobhpGDCIe6rg/Udf1iXdcv03X9Cl3Xr9J1/Vpd16/Xdf1GXddv1nV9iKZpt2uadqem + aUMRCAnaCU3T7tc07UFN0x7SNO0RCCaapj2qadpjmqaN1DTtcQn4DOA3XINrcc/D4n48B88bLp4N3CeA + 9yXCPYwxBGYCEJNhGGNsOGPsfsbYg4yxhxhjjzDGRjDGHhVAeOeR4sgFhpn4/2Hc53a7h2ZkZNx+wgkn + 3NC+fftBnTp1umTAgAEDLr/88uzBgwf3HzZsWP+//e1v/V588cXeb7zxRncw9nXr1p28devWdgicJSYp + MXbs3om5Q9oHg6/13M8mmw6EFKZhIOjP2LFjMa5XGoYBbVc8lDvW4iQiudo4cMSZLeyBRMQ9HNdCe55/ + zjnnIB4O1geV4aug839S/yPy4dOVlZVfp6enQ1uZzO6/ireC0NyDd2+eOXPm2eo4siRRGOeiRYtO9Pl8 + T4qdGgpAEkiNhSAhQDLWgiECClLRp0+fbVu2bJkTi8Xu4Zz/SVTYXigVUgQDMBMwFUiHnm3btnkJCFYE + 5OXlxYEcB2+++WYKkJeXlwrMmjUr7e23307Py8vLmD59eibwzjvvZOXl5dV744036s+YMaNBXl5ewzff + fLPRjBkzGufl5TV56623ms6cObNZXl7eCcDbb7/dfObMmS2AvLy8lu+8804rGTNnzmwtQ/4N19O9eA6B + np0IeD9B/v69995r/uGHH7YgfPTRRy3nzJnTat68ea2//fbbNsD8+fPbLliwoN3SpUvbYywDGzZsaL9r + 167WyGRXXl6OnTmOo8DEMekodrkcjxygOOQU/jMutNrj1qYjTQrTIAGg9eOPPw6Bd5U47kLQqPgGrA5e + XDaSQ7xtBZMlm6FgWloa2h9Hi7Dh2t2xY0dEIky36Du1H8n/H2GIEbtjQDgcHrd48WJoYGs9/wfIKFwI + AGTvBAFgzYIFC1qpY8mSpEKlDB8+PNswDKiQzeiAisFWtQIAKSkpVT6L4ECx1NRUUwjo2bPnDs75F6Wl + pQjFiJ2ULQQcBFkMpgMF+qAuACO0AsXHVqFeV1eoz0sGcuIPNfkHnqnWCVDbJSHUvrDJpsNJ6vgTwDhu + NnnyZBwBLBZGqhGhjjaNXbH+SoZhMqqt3zZMqO0kg3hgFcYvbI/Q9qZxMGywvF7vhl69eiHsMDYSar+p + fQjtITQF2Jgggu4NCHn8wAMPIIQ37Apq7TNJACCjZ5QvmJKSMq+0tLSBOp4SEhVqz549TVNTU6F69Tud + TlTMjAuQaBCpLlqUvczr9cYbD+cjQ4cOzYcQEI1GbwgEAsgrjl2WufiqZbHp6JLFYK0rVAabCCrDP9xQ + 318r81fbxiabjiSp41GaN5nz5s2D3dAnLpeLgrjBewv5IUyvH7fbncizR2Vw1db14xxqvVSo7UGMs5pH + kOTqS6DdPngjEsXBABOq/90ulwuG2j8+/PDDcAU0Pd8SAH2ohnGGsTyODuZ06tSpxOfzJdMn5jUiOBHF + JAi73e7Sxo0b/wvaTXU8JSSpcK5XX321C2NsvNPp/A3W4TAIJPUCJA5SNUmpShMhlpKSYt7n8XiCEydO + LAiFQkj8ACMJBDMxYwTYi+3xRRYDujaoTPdgoDL1RFDvI6hlqxFq3W2y6UiSOh4FML5xRPin5s2bPyeO + bEvgNix7xrhcLoo+aoVELsIqY6wLVEZ7KKG+KxESMXKZoRNTVz2IZC8hRPlDm5qMXgraBRdgeAvtNAwD + 3kK7hEfWVhEWfiaOHmW+RuuI0n84XswKBAJwGexSVlZ2QywWm7xy5UoYYVdIxzkqT63CX8VGm3KGoH6o + z+a77777Wmyy1fFUI0kFTDvvvPOQJncO1BqIQY7GbNiwIaRKs6HT0tKSKWC8kMJNJTRp0qQtnPN3w+Hw + 7UjXqAoB9qJ7/JHFApUsVOZ8MFAFgIMSAtQ62mTT0SJ1bErjvd748eMv8fl8U4XXDRhTYUpKSqHT6URQ + t90igymCjgH4DOD/QvFbsaZpe7GTBbMTQMbTRNivoEwBNowHA/V5NUEuB5WP6oD6oF6oH+qJ+lIbFGia + lo+kbpqm7dA0bZvI+Pob4nlomgY3bIBie8DD6VeXy/WL2+3+WdM0eDKZcLlcPyNBHP53Op3z+vTpc6Mw + dq+y1ih9ib4D34NRMdIWY/eP6LlzHnzwQQgVckwHlZ9W4a3gxULTg1wh5pGEYRgL8/Ly4HbsrDqSaiFp + gOnz5s1r0KhRo7s8Hg+S3sC9AdGOTGmRfE6TKGCVCEUACjlp0qTtOA7gnN+HRBZSljKzwdRy2XR8kMVC + dSBQmfXhgPpOE2p9bLLpWCNlnkAL0KJXr16IPjoN7q/IG+H1euF2C5deBKSCiy/WcLgAfyHcgj8WLsIA + /p8twpfjN+Q1sQLiDQBwKcZz4FaMCISINgfg+Yhu+a0A3I2TAV1PwDOsID93vgXk5+F6lAflQhlRVni3 + odwoP0B1UUF1w/3zUlNTvzMMA27TiNGyULhPAwucTuf3cDtGG2dlZX3eoEGD23ft2gWDviprjUX/Qf0P + A2TkcTgrGo3eGgwGXw8Gg2saNmxoWv8jmqPKSy1gCgCpqakQAEIi1kkp4pOUlpbiaKHua5o0uJxPPvkk + 8gQ873a7EWkKD4fqJIJQtZLLn1qoKhAeAuaxASAMU4KTJ0/eHY1GvwsGg8NCoRDiH6NBkgqhaNPxQSqD + PYRQGboV1HuqQS2vTTYdLyTGuGn0umfPnrT+/fufDnfYzMxMxLP4D2KDOJ3O1zRN+5emaYhn8TfhSgvD + QeQuuZYxNogxhmRwyGcC4P9EuIIxdqW4B+7iVzPGrhHPuY4x9lfG2PWMMQSUu1GEQyfgfbVBvt4KdN3N + IrLqEAH4ugPI1grcLuEOgTtFve8WLsVwJYYLMbwo/q5p2lhN057TNG2cpmkTNU2bgtgrmqYhPkieiKky + 2zCMz3RdhyBhChUOh8MUIjIyMv7jdrvv/u6772DMR2uPJR8Tu3/Yv+HabtFo9JpoNPoK53zhhAkTcLxg + 7v7BXy1iORC/Jd5rHnkgfLw4wig2DGNtx44d7xTvqPb+WklZJH09e/a8AIlJELseEdUgBIhY6JQxsFYh + gM4zZKtUt9sdmjhx4h7O+XzO+SjOeS9xHoKCm0cCatls+n2QyoiPBtQy2WTT8UZiLJPA67rvvvsaM8bO + SElJwfHtBYgLwhjrxhg7kTHWkjHWhDHWkDGWxRiDgViaQCpjLEUA58Z1Bd1LwPNqAr3XCuq1Nd0HVzsC + 6pMp6laPMVafMQYr+EaMMbRLU8bYCaId2jLGOjDGsMGF4AR/+X6MsQEiIBsEHAgztzmdzvvcbvf9KSkp + D7tcLghRSJz3MmNsnAgUNrpHjx7Z69atg2sxHWXHNyFKf5n9JOL+I0/OAM75iEgk8r9gMLi+YcOGgZSU + lDiPlFP9Kow/LgAIXlzhdDphs4DIsbNGjRqFfAIHnhVUWig1RK5r0qQJJDCoQGBtGkhNTTU1AcLAr0Yh + QAlHGSPrRqg4MjIywi+//HLxvn37Vkaj0QmhUGiQ8IekPObVGtGm3yepDPpQQH2HTTb93kgd82BCL774 + ovfKK6/MaNmyZVb79u3TmzVr5mvdurWnU6dOrm7dujn79u1rAIwxJGkjaIcQ8nMPO6g+KlBX1Blo3769 + G23QvHlzL9qjU6dOqW3bts1o3rx5vfbt2zds0aJFszZt2rRq165d+9atW5/crl27zu3btz+9efPmf27W + rNnZTZo0OeeEE044t1WrVv27dOnSb+DAgb2HDBnSEUflUthf2e6oyhokvqOwv/CCQ3TcO2Ox2Buc86Wj + R482d/8Jdv5WAgAZPIbcbjfCuMNAEXYJY9etW2fmIqg6Ug6ARCWM6dOnt87IyECEtRVOp5OEAPgpogA1 + CgBA/fr1zb9utzuuDZAQueWWW0r379+/nnP+n1gsBvXFmSKtIrQBpm2AWjab/pikTiybbLLp/8gWgOtO + FkKUepwIyMbFclwRq/usngchAbZuUP0jKu51nPPx0Wh0/s8//7wjKysLAYXivDSBh53K/E2rf13X4bWA + HCaf9+nTB88lI8SDGwNS4b3Dhw+HuuQ5l8uFWOyQVhD60NQEKAxdLbSJtLS0avGpETBIRKyKXHDBBYEN + Gzbs5Jx/FwgEEEnpIqEmQcQ22AbYxwI22WSTTTYdE6QweJXp0/cQFBATAFpt7PzP4JzDRe9Fzvk3nPPN + l112WSnc+MA/xTF5Nf4pCQAy8w+63W64LSLZG7wXXh03btyZh1R7LlXGnZ2d3QNnH7Au1XW9CJnZXC4X + XARRGLgjVBECEkgxaoXikYw6dOgQXLp0aTHnfC3n/B0RPriPiJMM6QkqFFsbYJNNNtlk01EjC2ZvQvqN + mD/F+m8tkuLB3/95zvnXnPMNU6ZMKRIbadPwD3yRjs1Fgj2VX8aZvzD825eSkoJssPB+uL2srAyuhXFN + hFruOpNcuaKiovQTTzyxj9PpfN7hcCBeMTQB+7OysmCEYAoBUPFLUQDVClQDGQYK4SGalZUVfu2118o4 + 59uj0eiCYDA4jnN+dVlZ2SmcczoWMM9a1LLaZJNNNtlk05EglfFL3xPzB6+CO167SCTSk3M+JBAITICW + m3O+Zfny5cWtW7c2w+3D+E/wwDjjVwQA2v3LzL8sLS0NPHg9speOHDkSxn8QOEgAOXgBACRVVF+5cmVW + 06ZNz3M6na+KRBTIGYAc88jhbsYJQExisauvxvCt0LhxY7mSppTTo0ePiuLi4n2c858jkch7yCgYiUTO + KykpISNB+1jAJptsssmmY4Isdv4wEDyxoqKiH+f8rlgs9nppaeniSCSyo7i4uKRbt24I3GOq/uXkTbCV + w1/JC4CYP66VwxEjOuFOp9P5HbK6Ioy/bJeglu+gSFIrOBcuXAh3iis0TZvq9XqRRx4Rlfb5fD4UzIwa + KBJT1CoE+Hy+uKRDsQWysrLMPMvp6enhd999d39FRcX2cDj8XTQafY1zfktZWVkXJMMQiRRIEDh0Eo9N + Ntlkk002JUES4wcfImM/BATqEIlEzuWc3xMKhf4dCoWWcM53BQKB0nPPPddk/uB5wvXP5IHghZRfRwgA + MvOnUL+UiwC7/3VpaWlTr7766t7k+3+4BAB6MCrqRvpX5JdnjL3q8Xi+d7lciIMMV4RSEZIwKQ8BGcgq + KAwF6T7YB0RuvPHGioKCAtgGrC8tLZ3DOX8gGo0OLCsrQwAhSD0QBGBoUcUyU62DTTbZZJNNNh0qIs24 + sE8jlX8rxPfnnA+MRCIPcM6nl5WV/QjmzzkvveKKK8xNMh1/k+Efdv6065eYPwkApPo3o/0Jl/ztqamp + OPu/d9OmTXhnFa8EtayHhKQXuMeNG9eyQYMGFzLG/oHwi4if7HQ683Vdh1VinYQA1UPA4/HEVSFogMzM + zNDTTz9dFolEkFUQZyjTOedIu4jMS4h7DENBND5iLEMrEA8tfNgaw6akSR6YtYA0TQcC9VlJQS2rTTbZ + ZFMiUtYqUvfjWBr+99iUYteP1L5PRqPR/3HOl8VisV3BYLD04osvNpl/enp6FZ6Inb/E72R3+bi/v8T8 + sdFG5kGEep5w++23w1A+vvtXy3tYSLzMPWHChCatWrVCFKWxaWlpCJGIONQ7PB4PVBRmZUUlLAUB1VMA + RwLyZ0hCgDgeiJ588snBadOmFRYWFm7mnP/AOUd2QUQS/CuiCSJDFiwuhQoGmgF0DqSz+DHBEWukPwip + DDUBVGadCLK/7YFAfV5tUMt5UFDbxiabbDp+SZ3fAlg3wPix0YS6H8bpcFmHGh5++NiYThT5btZFIpE9 + xcXFZRdddBEdj5t8EEwf/A+bX3kDDF4n5dCh3T821PD3x7k/Ej1tYIz9r2nTptcXFhaagX+O+BokGsI1 + ZsyYxo0bN85mjD0lkizAOBBpElFgKyGgmiCAcw859CFJQ7KAIGwFcG/4wgsvDMyZM2cv53wbIilxzj9D + YAXO+YOcc2RkuoBzfjbnvLPQDsAgg44KIBBU0RAc8cY7RkltjyShMlVAZcwUPIOAPlCB87ODhfpMgvp+ + Oi5SodajrlDb5pBA7SebbLLp8JE09+S5TesYMX7wlDac89M555dwzodzzl/lnH/MOYfKf1skEtm7atWq + QLdu3bCDj1KSH2L4isqfBAKT8Xs8HlX1T+f+yBiIhERPTJgwAUGFyPL/yK4TUgO5XnvttaaNGjU6jzH2 + OOIRe71e5KgucDgcJbquQ3oxPQRcLlcUFo/k83gQwP2RLl26VMyYMaOUc17IOd8YDofR8J9yzqdGIpFn + YrHYI9Fo9AbYDIiYAugsSGskFCBqEhoQnSprCpJe0NV2OZKklqUOUAe2FaNWmSgxWbQVAQIVAe1IgEpK + Bo5mAEwcAO0OQCgjQI2WCEgWpUK9hiA/k94D0LsBKo9aTio/1UmuK6AKHCpqEzoOVPBQ++93D3WsH25S + 33+8Q62fTf9HaltZgOYdrYOY+1gfsI6AbyCTX7fy8nIErEP02mcDgcC7nPPFYPyxWKyIc14+efLkYPPm + zeNxcuRNLhn7WfC1Kqp/hPr1eDzYTEP1j4h/651O54wePXrg3Tj2NtcHtY5HhKQGc3322WdNnU7nnzVN + Q+alWYyxX1wuF6SVvaiErusUOdBMJCTOOdQGqBNSU1PNxmrRokX42WefDRQWFkIYKCgvL98UCoVWIMsS + 53wWBALO+b8450/FYrGHOedDOefXk6YgHA6fHgwGTxIGHPAwgFoHHY3EDWAkYBoYADJToAW/psVdXcgP + NdT31cTIVQYuM26VScvMmRgr2gJAYAsAgw9AOwE4drFCIwloVwABKwAYcRLQ7laAissK6nUE+Zn0Hnov + lUMuH5Wf6oO6UV0BVfBQkUj4UAUQK0FEFkasBBJZKJEFk0QCSiKogkptUIW/ukAVeJKFOoaThTonkoH6 + jERQy2gFtf414UDaWX2fWsZEUOsMqIwuIdS1/lghtZwHiJrGAdoYfYP5hTmJOY61A5tG8Igzo9Eo+MZd + nPOxkUjkv5zzRZWVlVD3w1i9Yu3atcFBgwaF09PT45pv2dUPzN8i0A9gbmzFhjns8Xiw+y9zOp1Q/efX + r19/g8PhQKri+9asWYPyoKxHv69Eozp/+eWXtA4dOpws0jF+4HQ6VzLGtmmaVmQYhplNUNM0pDC0PAo4 + UECgcDgc0ebNm0duuOGG0Ny5cwOc8/3RaBTHBDsQdSkUCq0NBAI/RiKR7yorK+dWVlZ+jGQMsVgMRwdj + OOePcs6HCYnuVmgOOOdXcM4v5JznRCKR3uFwuDuEBaQwDoVCnYQ2oT2CPQhAJQQbBHROC4lZETMiRiQz + IyvI18lMU2aW9GyEmMS78E4IMHg/JFSUB2VD7ASUE4O3I+cc5cbRCIIrwVq1qzCkRBjJP3POEVACxycI + XoFzrXM453055/2FgUsO5/w8zvn5IqMVJgM0LGgnAJIpAANNAlRkiXCpAqvv1XtUyO+i91N5UDYA5UR5 + UW4AdcgV9ckWQP1QT/juos6oOwDtEdoCgK0J2oaACF8EtB3asLtoT4T+RNsC0D7JQLsDUOMB6AsAhkQy + 0E8A+gyAnQuAfkR/Ek4WQD+jvwH0PY1PjAkAY5SAsaICY+hQAWNSBcaqDIzfRFCFvtoEQFn4s4J6vTyH + aB6pcwntlGg+ob1pTgHUN1ag/lNB/Ut9LPctnk/9SOsLtSutL3LdaY3BGkJCLQRaElRJACVhk4RKK0Gx + NkFEhcpIDxTqc5OFWl6qR6IND9oBQjraBu2ENkP7YRygndH2XSORyDmlpaUX7tu378pwODxEHDMjmt8H + e/fu9SOcbywWQ8yaslAoFBwzZkwkMzOT1P0mYPRHgX4Q6U81ehegnT+p/U2ff6/XS2f/MPz7MTU1dcyr + r76KdQJ1OvrMHyRLVjt37vT16dMHKSihCZjucrmWMcY2CtcF0y7A5XIl7SFQEyBJwWNAaVDTiCIjIyM6 + fPjwyBdffBGKxWIQCMrhhsE5h5RWGA6Hd4fD4a3RaHQjAg5xzldVVlYui0ajfiRpEELCbM55HkITc86R + uWka5/x1cdYDjcILnPPnOOdPCyHiSc753zjnI5HqkXP+EIIYcc7vgz+okBrv4JzfBiFDAIOqJtB1uOd2 + cT+EFDwLmgw8917xDpxD4X0YpNB0wCAFgg3K84QwmEQZn4L0yjlH3oVnRT1e4py/LOqFiFWTOOeIvYD6 + ThFaFNT/36It3uScvyWA9kmEGRLou7cl0DMAPJOAdxDwTgI8QGSgTADKB6CsAMoNTBb1ANBvqBcAQx3U + EwIg6oy83Kg/ok+iLQDE7EbbYMID6Gu01z8F0H7oe7QlgHb9h2hjtPXfBTAm0P6ExyWgbx4T/QRg3ADo + OwL6EsB4Qt/CvQhAX6PPAQivAMYBxgPGxd1ijGCsYMxg7GAMyePvQMcgjUMaizQeAbyXgHKoQPkI6meU + n0B1SgT5Wqo3PZMgl8UK8vvpuTSH0N7qHEJ/jhb9jDlP84jGBMYHxgnGC8YOxhDGEsYVxhfGGcYbxh3G + H8YhjUl5XOIaXI978Sw8F2MNYwzvRzkwfjB2UEaUFWMCYwF1MjcynPPBwkj6Ks75X4SQDGEYgi+EXQi4 + EGohwEJ4heBKAisJqLJgKgssqnB6tEDlQPlQVpQZ5Uc9IISjThDKIaCjnhDkUXdsBNAe2OhBI4yxPjQW + i90fi8UeDYVC6FesJeABH3HOv4pEIosikcgvnHN4pJVwzoOFhYWRcePGRZs2bWryNLLiB2+S1f7gU6rh + O/Esxd8fzB+JfijgT5HP51vLGJs8cOBAbFwguJgaHZUXHzVSVCzuO++8s62u65cYhvESY2yp0+nc6PV6 + cSRgegi43W7zbORQCAIAPAjS09Pjnyk3ATqjffv2scsuuyz6yiuvRNauXRuurKyMcM4JYXQiUFFREQgE + AmXRaBSCAqQ6CAt7OOe7cbQQi8UKotFofiQSKYAAIX6D/QGAcx/8pesBDBL4fyLRETQR2znnWxEKknP+ + mwA8GjZJgEBiBfkaAPcB9Bw8E88mwEASwDsBvB/lAFAmAOUrEKAyy3WS65YIaCMZ6u/yc/BsAr2P3k9A + mVRQeVVQfQioI4HqLYPaBJDbivqEQG0q95EMq/7agFgVnPNfBdYJYLGAgElArgsZawRWC6xSsFIBjraA + nxQsV7BMAEayCEIC+xgA55QAdi/JANfiPjwDz8Iz8T6UAeWhcqLsqAfqhHqi3gDagNoE7YN2AtRxrY5n + GtMyauozK6j9WBvUd9H8oTFFc4fmjTxn1HmjzhFoIwlYWwhgIgDWHIA+y6Br5Weo802eXzSvUFZ53UEd + 0dZof/QL+onGHo0pdczIY2WRBazGS7JQnwvPLgBHtwsEvueczxfu399yzueJWPpfcc7ncs6/FBb3nwvg + fwDf43cA1+Ie3IskPHjW/Gg0ujAajUJ9j7Kg3igL3o+yLI/FYuui0ehWuJ9HIpGiyspK9A82khXgG36/ + P/LEE0/E2rRpY/IaOZmP7NZHkIUBCAcS71OD/SCoHhn+Fbvd7u2MsS9OOeWUmwoKCqDhObaYv0ySEOCa + Nm1aQ4/H09fj8YxmjMFNcHX9+vW3iYqRcSAqf8CCgNfrrXKeImsDVC8CaAxggHjiiSfGBg4cGJsyZUrs + 888/j23ZsiXGOa+UgM+xSCQSBSkCAwkNocrKymBlZWVFZWVloLKysryysrKssrJyv0CpQInAvsrKymIB + DCagUMKeWiBfS/cD9ExgrwS8j0BlAKhcAJUV5SagHipQv7pCfQZBfheBypEIcplrg1xXGXJ7AHJbAXI7 + qv1k1V9qn+2WUCCQL7CrFuxMAjsssL0GbJOwVcIWCb/VAvla3EvPw/OpDCgb1YPqi7pTW6jjty7j1mr8 + JurPmvq2tn62KodcFnXuyGNTHcuJ5pA6j7BuELCOJIJ8Ha01VnNMnUs0F6g9UD8as+gf9BeNIRoX6PNN + lZWVGwU2VFZWrlfwqwXUa5KF/Ix1lZWVv0j4ubKycq3AmsrKytWVlZXQ0q6srKxcUVlZ+VNlZeVyaG0r + KyuXSlgi/Y/fAFyLe3AvnoFnQgCCAAqhE4IehDuM1+JoNFoSDoeRk8Zk9LTuB4PB2Pfffx+9//77Y127 + diV+FQfU+8TkiQ8hEy59r/4m3asm+TGj/WmaBqv/7R6P50e3233/smXLcNRz7DJ/IvVIoG3btmcwxu5u + 3Ljxi4yxxV6vd7PT6dwrpBwYB6qCQDVGbwUhRcUBYYD+V9UtEABk4QAdQ52C67KysipPOeWUykGDBlWO + Hj26ctq0abFvvvkmtmDBgtiyZcti69ati23bti22e/fu2N69e2MlJSXm3zoiaoHIMQC1TAcD9dmJEK4F + oSQQPFDs27ev4nBi7969gQQot0CZhP0KSiWU1IJ9NaA2Uq8nqO+Qy0NllMsv1yteb4v2kftD7VcZ6rg4 + FFDHYk1QxzdBndt1QeUhhvr82qDW5UDm7+GG2mcq1HGiorZxFSosLAwXFRWZ2LNnTzg/Pz+8bdu28KZN + myLr168Pz5o1KzJ+/PjobbfdFuvevXusQYMG4CPmETM2kla7fGwy5e9VYz/wIClhHvE8decPtX+hz+eD + /dxSTdMenzdvHmwT4oacKs895kgWAqANGDVqVBPGWLZhGGMMw/iCMfYbY2y3sAtAxeNeAnXRBoB5q40s + N7wcX5k6wMoIA9/hWlVQAEhIwG+yGucwoJpUeQShlqUuUJ91pEETycaxBbWfjneo4/54gVoPGxKgugdT + lwLwVAExfblNiUeAt4A34K+qfQavoO+kvDfkEYD5Iav9wfix8wc/RLAfGP3BiP4feXl5MD7Via+qvPaY + JcUuQP/8889TzjzzzD8xxm5hjM1wOBwIZ4jzjSKn04kwhwGHwwHfR1MQQENZMVw0agI/Shs2DieqLQ6H + EOq7bNg4VqGO3d8b1PoeKuDZJByD8YPXVWiaVubz+XAsjp1/cXp6OnLrgPk/M3nyZHiBOImfqjz2mCdF + CNDWr1/vHj58+AmGYeS6XK4n3W735w6HAxaOEARw5gEJCI1SRSMAhg8VPyQpK6HAhg0bNmzYOEZRjfkb + hkFqfzPBT2pqKjTiCPazmDH2t+nTp8MNFS6Ox4favyZSBAFjzZo1qT179vyTruuDGWOveDyeuYZhrDEM + Y6fP5zMzC2qaFnC73SHhNhhXKUIAsFL727Bhw4YNG8cQSKsgq/yxua0QmXPJ2t/M8OdwOFZ6PJ7H3nvv + PcR7iDP/414AkEmqlAdhhE866aSejLFb3W73RGQWFFEEzaMBCAIinPAB2QjYsGHDhg0bRwGJmL/p5w/m + r+s6xfjf6nQ6v8vMzPz7l19+iUBPCIr0+2P+MgkDQWd+fn7KCy+80KJJkyZ9EebQ5/NNYYzN9Xg8qw3D + MCMJOhyOUsMwAi6XK+RwOA5pDAEbNmzYsGHjEEG2J0jI/MHT6tWrB+b/M8Lnd+vW7Q6/348ohMefwd+B + kHosgFDCI0aMaNusWTNkF7yDMQaNwOeMMdlGwDQWdDqdlGnwkEQVtGHDhg0bNg4S8ll/lch+kqsfhffF + mf/KzMzMFwcNGnTRunXrENr593HmX1eSBAFnUVFR+ksvvdS6Xbt2/X0+350IgehwOL4yDGM1Y2wHLCUd + Dge5D8oph0kroHaKDRs2bNiwcbig7virnPdLPv7gW9jIbna73Ujs8/dnn30WYYuRqyGu9lf54x+KKHZA + cXFxxksvvdS2bdu20AjcB42AruuIIbBKCAJoSJyhkCBg2wnYsGHDho0jBXXHT4yfIEf3A/PHrh/5caae + eeaZN61duxaJnpCg6NiP8HckSUhCpiCA5AezZs1qf/HFF/dLS0sbwhh71jCMD+Au4XA4kGgIgRMgCEDC + QoOj4SO6rkcRwEHKPmgKBGowIPpMgJeBGthBhh2HwIYNGzaOf6i8oKbfiDeI7+I7fofDgQy3EU3Twrqu + h4ULOzLfhnRdN1X+uq7vdblcmxljc5o3bz7i6aefRrZRZB9E5kJ7118TkbEgUjj+8ssvzR566KHTWrdu + fSlj7GFN0yYZhoHjgTUOhwPJhvYhi5Lb7VajC0YRvlEkbKiiHaiN4duwYcOGjd83aGOHKH6I36/+LvEN + k/H7fD6k/QXzDwvDdEJI2KhB9b8/Kytru8vlWoSj7KFDhw4KBoNI7Yx0xKbKX+V3NiUgISmh0aAVyITF + 5NChQ/+cmZl5E2NsrK7rbzocjq/hRogjApfLtdfj8cBgkPINRJxOp6kVQCdK2oF4J0MYQCxnBByigQBY + hXu0YcOGDRvHJxKt5/JOXyAeLljTNOz4zV2/qvJHFFt4qQm39XJN04qdTud6h8Px32uuueauXbt2IS1x + fbGZtVX+B0OiAWEx6UGjrly5su0TTzxx1qmnnnqjz+cb4/F4pjHGIAxsgtGgruuy0WDY6XTGbQXQuWrO + gJrsB3CdHYjIhg0bNo5fyLH6rQC+AOZPkM76zfN+kdLeFACg7kdgHwSvE+f8K+Dad++9947Yvn17D855 + I7FxPX4S+hwvJGkG3JzzrBUrVrR5+eWXzx4wYMCtjRo1Gs8Ym80YW+R2u38VnVPm8XgoHbFsNBhXASEP + gUgQUeMgsWHDhg0bxzdo1y+gHhWTBiAKDQC0yCkpKfGdP0L66roO9/StjLGl/fr1e3vy5MlXFxcXd96/ + f39D+ZzfZvyHiahhhYRFwkBGIBBovmrVqlPHjRt38cCBAx9p0aLFv91u9/eMsdUul2uLruuFDocDQRkg + xZkdrJz1mNKfGBTVBo4NGzZs2DjuUWXNB9xud/yYWBIIzN2/w+EIer1eeKFBw/zTaaed9vbzzz8/ZNOm + TV04502FZT/4EPiRves/3CQJAHJwIRIGIIGhQ9KhitmyZUunN99884IHH3zw7quuuuqfnTt3zvN6vchM + iBSMCD+8z+12w6sAUh3cNyjWgDkYSEtgMYhs2LBhw8axjfiuXvEQM5k71PmIOivc9swsfbquFxmGka/r + +rbU1NSfmzRpMvvmm29+dtasWedXVFQgel+WOI6WmT79bzP/o0EWwgAEAXSSj3OeIgBrzKxAIHDCr7/+ + 2vGTTz4557nnnhs8fPjwZy699NJ3zz333G+7dOmyulmzZrt8Pl+ZHYbYhg0bNo55VNvRK2f4Vc7zAZfL + VZGRkVHcpEmTza1atVp0xhlnfHDOOedMu+66654dPXr00Hfeeee8H3/8sfOePXuacc7TBC+BHVo1Ji/z + nqpc6cjR/wOZdJ6L8NqgyQAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/ManagerMainForm.Designer.cs b/ManagerMainForm.Designer.cs new file mode 100644 index 0000000..1448b4c --- /dev/null +++ b/ManagerMainForm.Designer.cs @@ -0,0 +1,486 @@ +namespace demMalyhin +{ + partial class ManagerMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnExit = new System.Windows.Forms.Button(); + this.OrdersBtn = new System.Windows.Forms.Button(); + this.comboBoxFilter = new System.Windows.Forms.ComboBox(); + this.comboBoxSort = new System.Windows.Forms.ComboBox(); + this.textBoxSearch = new System.Windows.Forms.TextBox(); + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.SaleLabel = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBoxFP = new System.Windows.Forms.TextBox(); + this.textBoxStock = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxSup = new System.Windows.Forms.TextBox(); + this.textBoxManuf = new System.Windows.Forms.TextBox(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.StockLabel = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.PriceLabel = new System.Windows.Forms.Label(); + this.SupplierLabel = new System.Windows.Forms.Label(); + this.ManufacturerLabel = new System.Windows.Forms.Label(); + this.DescriptionLabel = new System.Windows.Forms.Label(); + this.NameLabel = new System.Windows.Forms.Label(); + this.CategoryLabel = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.labelFIO = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBoxPhoto = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).BeginInit(); + this.SuspendLayout(); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(12, 7); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 28; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // OrdersBtn + // + this.OrdersBtn.BackColor = System.Drawing.Color.MediumSpringGreen; + this.OrdersBtn.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.OrdersBtn.Location = new System.Drawing.Point(720, 540); + this.OrdersBtn.Name = "OrdersBtn"; + this.OrdersBtn.Size = new System.Drawing.Size(99, 39); + this.OrdersBtn.TabIndex = 27; + this.OrdersBtn.Text = "Заказы"; + this.OrdersBtn.UseVisualStyleBackColor = false; + this.OrdersBtn.Click += new System.EventHandler(this.OrdersBtn_Click); + // + // comboBoxFilter + // + this.comboBoxFilter.BackColor = System.Drawing.Color.MediumSpringGreen; + this.comboBoxFilter.FormattingEnabled = true; + this.comboBoxFilter.Location = new System.Drawing.Point(659, 61); + this.comboBoxFilter.Name = "comboBoxFilter"; + this.comboBoxFilter.Size = new System.Drawing.Size(160, 21); + this.comboBoxFilter.TabIndex = 23; + this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.comboBoxFilter_SelectedIndexChanged); + // + // comboBoxSort + // + this.comboBoxSort.BackColor = System.Drawing.Color.MediumSpringGreen; + this.comboBoxSort.FormattingEnabled = true; + this.comboBoxSort.Location = new System.Drawing.Point(491, 61); + this.comboBoxSort.Name = "comboBoxSort"; + this.comboBoxSort.Size = new System.Drawing.Size(160, 21); + this.comboBoxSort.TabIndex = 22; + this.comboBoxSort.SelectedIndexChanged += new System.EventHandler(this.comboBoxSort_SelectedIndexChanged); + // + // textBoxSearch + // + this.textBoxSearch.BackColor = System.Drawing.Color.MediumSpringGreen; + this.textBoxSearch.Location = new System.Drawing.Point(30, 61); + this.textBoxSearch.Name = "textBoxSearch"; + this.textBoxSearch.Size = new System.Drawing.Size(455, 20); + this.textBoxSearch.TabIndex = 21; + this.textBoxSearch.TextChanged += new System.EventHandler(this.textBoxSearch_TextChanged); + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(72, 87); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(691, 223); + this.DataGridViewProduct.TabIndex = 20; + this.DataGridViewProduct.Click += new System.EventHandler(this.dataGridViewProd_Click); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.pictureBoxPhoto); + this.panel1.Location = new System.Drawing.Point(30, 316); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(789, 218); + this.panel1.TabIndex = 19; + // + // panel3 + // + this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.SaleLabel); + this.panel3.Location = new System.Drawing.Point(623, 14); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(142, 189); + this.panel3.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label4.Location = new System.Drawing.Point(29, 51); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(73, 28); + this.label4.TabIndex = 4; + this.label4.Text = "Действующая\r\nскидка"; + this.label4.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // SaleLabel + // + this.SaleLabel.AutoSize = true; + this.SaleLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SaleLabel.Location = new System.Drawing.Point(53, 87); + this.SaleLabel.Name = "SaleLabel"; + this.SaleLabel.Size = new System.Drawing.Size(0, 14); + this.SaleLabel.TabIndex = 2; + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.textBoxFP); + this.panel2.Controls.Add(this.textBoxStock); + this.panel2.Controls.Add(this.textBoxUnit); + this.panel2.Controls.Add(this.textBoxPrice); + this.panel2.Controls.Add(this.textBoxSup); + this.panel2.Controls.Add(this.textBoxManuf); + this.panel2.Controls.Add(this.textBoxDesc); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.StockLabel); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.PriceLabel); + this.panel2.Controls.Add(this.SupplierLabel); + this.panel2.Controls.Add(this.ManufacturerLabel); + this.panel2.Controls.Add(this.DescriptionLabel); + this.panel2.Controls.Add(this.NameLabel); + this.panel2.Controls.Add(this.CategoryLabel); + this.panel2.Location = new System.Drawing.Point(212, 14); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(395, 189); + this.panel2.TabIndex = 1; + // + // textBoxFP + // + this.textBoxFP.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxFP.Location = new System.Drawing.Point(247, 113); + this.textBoxFP.Name = "textBoxFP"; + this.textBoxFP.ReadOnly = true; + this.textBoxFP.Size = new System.Drawing.Size(95, 20); + this.textBoxFP.TabIndex = 15; + // + // textBoxStock + // + this.textBoxStock.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxStock.Location = new System.Drawing.Point(148, 158); + this.textBoxStock.Name = "textBoxStock"; + this.textBoxStock.ReadOnly = true; + this.textBoxStock.Size = new System.Drawing.Size(194, 20); + this.textBoxStock.TabIndex = 14; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxUnit.Location = new System.Drawing.Point(148, 135); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.ReadOnly = true; + this.textBoxUnit.Size = new System.Drawing.Size(194, 20); + this.textBoxUnit.TabIndex = 13; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxPrice.Location = new System.Drawing.Point(148, 113); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.ReadOnly = true; + this.textBoxPrice.Size = new System.Drawing.Size(95, 20); + this.textBoxPrice.TabIndex = 12; + // + // textBoxSup + // + this.textBoxSup.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxSup.Location = new System.Drawing.Point(148, 87); + this.textBoxSup.Name = "textBoxSup"; + this.textBoxSup.ReadOnly = true; + this.textBoxSup.Size = new System.Drawing.Size(194, 20); + this.textBoxSup.TabIndex = 11; + // + // textBoxManuf + // + this.textBoxManuf.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxManuf.Location = new System.Drawing.Point(148, 64); + this.textBoxManuf.Name = "textBoxManuf"; + this.textBoxManuf.ReadOnly = true; + this.textBoxManuf.Size = new System.Drawing.Size(194, 20); + this.textBoxManuf.TabIndex = 10; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDesc.Location = new System.Drawing.Point(148, 41); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.ReadOnly = true; + this.textBoxDesc.Size = new System.Drawing.Size(194, 20); + this.textBoxDesc.TabIndex = 9; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label3.Location = new System.Drawing.Point(131, 14); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 15); + this.label3.TabIndex = 8; + this.label3.Text = "I"; + // + // StockLabel + // + this.StockLabel.AutoSize = true; + this.StockLabel.BackColor = System.Drawing.Color.Chartreuse; + this.StockLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.StockLabel.Location = new System.Drawing.Point(14, 158); + this.StockLabel.Name = "StockLabel"; + this.StockLabel.Size = new System.Drawing.Size(112, 14); + this.StockLabel.TabIndex = 7; + this.StockLabel.Text = "Количество на складе:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Chartreuse; + this.label9.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label9.Location = new System.Drawing.Point(21, 135); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(104, 14); + this.label9.TabIndex = 6; + this.label9.Text = "Единица измерения:"; + // + // PriceLabel + // + this.PriceLabel.AutoSize = true; + this.PriceLabel.BackColor = System.Drawing.Color.Chartreuse; + this.PriceLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.PriceLabel.Location = new System.Drawing.Point(57, 113); + this.PriceLabel.Name = "PriceLabel"; + this.PriceLabel.Size = new System.Drawing.Size(69, 14); + this.PriceLabel.TabIndex = 5; + this.PriceLabel.Text = "Цена товара:"; + // + // SupplierLabel + // + this.SupplierLabel.AutoSize = true; + this.SupplierLabel.BackColor = System.Drawing.Color.Chartreuse; + this.SupplierLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SupplierLabel.Location = new System.Drawing.Point(63, 90); + this.SupplierLabel.Name = "SupplierLabel"; + this.SupplierLabel.Size = new System.Drawing.Size(63, 14); + this.SupplierLabel.TabIndex = 4; + this.SupplierLabel.Text = "Поставщик:"; + // + // ManufacturerLabel + // + this.ManufacturerLabel.AutoSize = true; + this.ManufacturerLabel.BackColor = System.Drawing.Color.Chartreuse; + this.ManufacturerLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.ManufacturerLabel.Location = new System.Drawing.Point(44, 67); + this.ManufacturerLabel.Name = "ManufacturerLabel"; + this.ManufacturerLabel.Size = new System.Drawing.Size(82, 14); + this.ManufacturerLabel.TabIndex = 3; + this.ManufacturerLabel.Text = "Производитель:"; + // + // DescriptionLabel + // + this.DescriptionLabel.AutoSize = true; + this.DescriptionLabel.BackColor = System.Drawing.Color.Chartreuse; + this.DescriptionLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.DescriptionLabel.Location = new System.Drawing.Point(34, 44); + this.DescriptionLabel.Name = "DescriptionLabel"; + this.DescriptionLabel.Size = new System.Drawing.Size(92, 14); + this.DescriptionLabel.TabIndex = 2; + this.DescriptionLabel.Text = "Описание товара:"; + // + // NameLabel + // + this.NameLabel.AutoSize = true; + this.NameLabel.BackColor = System.Drawing.Color.Chartreuse; + this.NameLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.NameLabel.Location = new System.Drawing.Point(157, 16); + this.NameLabel.Name = "NameLabel"; + this.NameLabel.Size = new System.Drawing.Size(112, 14); + this.NameLabel.TabIndex = 1; + this.NameLabel.Text = "Наименование товара"; + // + // CategoryLabel + // + this.CategoryLabel.AutoSize = true; + this.CategoryLabel.BackColor = System.Drawing.Color.Chartreuse; + this.CategoryLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.CategoryLabel.Location = new System.Drawing.Point(19, 16); + this.CategoryLabel.Name = "CategoryLabel"; + this.CategoryLabel.Size = new System.Drawing.Size(92, 14); + this.CategoryLabel.TabIndex = 0; + this.CategoryLabel.Text = "Категория товара"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Chartreuse; + this.label2.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label2.Location = new System.Drawing.Point(275, 11); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(251, 33); + this.label2.TabIndex = 18; + this.label2.Text = "Каталог менеджера"; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(30, 540); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 17; + this.btnBack.Text = "Главное меню"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // labelFIO + // + this.labelFIO.AutoSize = true; + this.labelFIO.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelFIO.Location = new System.Drawing.Point(651, 11); + this.labelFIO.Name = "labelFIO"; + this.labelFIO.Size = new System.Drawing.Size(0, 15); + this.labelFIO.TabIndex = 16; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Chartreuse; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.Location = new System.Drawing.Point(561, 11); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(90, 15); + this.label1.TabIndex = 15; + this.label1.Text = "ФИО Клиента -"; + // + // pictureBoxPhoto + // + this.pictureBoxPhoto.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxPhoto.Location = new System.Drawing.Point(17, 14); + this.pictureBoxPhoto.Name = "pictureBoxPhoto"; + this.pictureBoxPhoto.Size = new System.Drawing.Size(174, 189); + this.pictureBoxPhoto.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxPhoto.TabIndex = 0; + this.pictureBoxPhoto.TabStop = false; + // + // ManagerMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(847, 589); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.OrdersBtn); + this.Controls.Add(this.comboBoxFilter); + this.Controls.Add(this.comboBoxSort); + this.Controls.Add(this.textBoxSearch); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.panel1); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.labelFIO); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "ManagerMainForm"; + this.Text = "RegForm"; + this.Load += new System.EventHandler(this.ManagerMainForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnExit; + private System.Windows.Forms.Button OrdersBtn; + private System.Windows.Forms.ComboBox comboBoxFilter; + private System.Windows.Forms.ComboBox comboBoxSort; + private System.Windows.Forms.TextBox textBoxSearch; + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label SaleLabel; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox textBoxFP; + private System.Windows.Forms.TextBox textBoxStock; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxSup; + private System.Windows.Forms.TextBox textBoxManuf; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label StockLabel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label PriceLabel; + private System.Windows.Forms.Label SupplierLabel; + private System.Windows.Forms.Label ManufacturerLabel; + private System.Windows.Forms.Label DescriptionLabel; + private System.Windows.Forms.Label NameLabel; + private System.Windows.Forms.Label CategoryLabel; + private System.Windows.Forms.PictureBox pictureBoxPhoto; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Label labelFIO; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/ManagerMainForm.cs b/ManagerMainForm.cs new file mode 100644 index 0000000..7149524 --- /dev/null +++ b/ManagerMainForm.cs @@ -0,0 +1,296 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class ManagerMainForm : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + public ManagerMainForm() + { + InitializeComponent(); + LoadProdData(); + LoadSortOptions(); + LoadFilterOptions(); + } + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT article_product AS `Артикул`, product_name AS `Название товара`, price AS `Цена`, supplier_name AS `Поставщик`, Manufacturer_name AS `Производитель`, Category_name AS `Категория`, sale_percent AS `Скидка`, unit_type AS `Единица измерения`, description AS `описание`, quantity_in_stock AS `Количество на складе`, photo AS `фото` FROM products LEFT JOIN Category ON products.category_id = Category.id_Category JOIN Supplier ON products.supplier_id = Supplier.id_Supplier JOIN Manufacturer ON products.manufacturer_id = Manufacturer.id_Manufacturer"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void dataGridViewProd_Click(object sender, EventArgs e) + { + textBoxDesc.Text = DataGridViewProduct.CurrentRow.Cells[8].Value.ToString(); + textBoxManuf.Text = DataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + textBoxSup.Text = DataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + textBoxPrice.Text = DataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + textBoxUnit.Text = DataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + textBoxStock.Text = DataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + NameLabel.Text = DataGridViewProduct.CurrentRow.Cells[1].Value.ToString(); + CategoryLabel.Text = DataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SaleLabel.Text = DataGridViewProduct.CurrentRow.Cells[6].Value.ToString() + "%"; + + try + { + object photoData = DataGridViewProduct.CurrentRow.Cells[10].Value; + if (photoData != DBNull.Value) + { + byte[] imageData = (byte[])photoData; + if (imageData != null && imageData.Length > 0) + { + using (MemoryStream ms = new MemoryStream(imageData)) + { + pictureBoxPhoto.Image = Image.FromStream(ms); + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message); + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + try + { + var currentRow = DataGridViewProduct.CurrentRow; + if (currentRow == null) return; + + Color defaultColor = SystemColors.Window; + textBoxPrice.BackColor = defaultColor; + textBoxSup.BackColor = defaultColor; + textBoxManuf.BackColor = defaultColor; + textBoxStock.BackColor = defaultColor; + textBoxPrice.ForeColor = Color.Black; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Regular); + textBoxFP.Text = ""; + decimal originalPrice = 0m; + int salePercent = 0; + int quantityInStock = 0; + + decimal.TryParse(currentRow.Cells[2].Value?.ToString(), out originalPrice); + int.TryParse(currentRow.Cells[6].Value?.ToString(), out salePercent); + int.TryParse(currentRow.Cells[9].Value?.ToString(), out quantityInStock); + + if (salePercent > 15) + { + Color highDiscountColor = ColorTranslator.FromHtml("#2E8B57"); + textBoxPrice.BackColor = highDiscountColor; + textBoxSup.BackColor = highDiscountColor; + textBoxManuf.BackColor = highDiscountColor; + textBoxStock.BackColor = highDiscountColor; + textBoxDesc.BackColor = highDiscountColor; + textBoxFP.BackColor = highDiscountColor; + textBoxUnit.BackColor = highDiscountColor; + panel3.BackColor = highDiscountColor; + + } + + else + { + textBoxPrice.BackColor = Color.White; + textBoxSup.BackColor = Color.White; + textBoxManuf.BackColor = Color.White; + textBoxStock.BackColor = Color.White; + textBoxDesc.BackColor = Color.White; + textBoxFP.BackColor = Color.White; + textBoxUnit.BackColor = Color.White; + panel3.BackColor = Color.White; + } + + if (salePercent > 0) + { + decimal finalPrice = originalPrice * (1 - (decimal)salePercent / 100); + textBoxPrice.Text = $"{originalPrice:N2}"; + textBoxPrice.ForeColor = Color.Red; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Strikeout); + textBoxFP.Text = $"{finalPrice:N2}"; + textBoxFP.ForeColor = Color.Black; + textBoxFP.Font = new Font(textBoxFP.Font, FontStyle.Regular); + } + else + { + textBoxPrice.Text = $"{originalPrice:N2}"; + } + if (quantityInStock <= 0) + { + textBoxStock.BackColor = Color.LightBlue; + } + + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при обработке данных товара: " + ex.Message); + } + } + + private void LoadSortOptions() + { + comboBoxSort.Items.Add("По умолчанию"); + comboBoxSort.Items.Add("Название (А-Я)"); + comboBoxSort.Items.Add("Название (Я-А)"); + comboBoxSort.Items.Add("Цена (возрастающая)"); + comboBoxSort.Items.Add("Цена (убывающая)"); + + comboBoxSort.SelectedIndex = 0; + } + + private void comboBoxSort_SelectedIndexChanged(object sender, EventArgs e) + { + string sortOption = comboBoxSort.SelectedItem.ToString(); + + switch (sortOption) + { + case "По умолчанию": + bindingSource.Sort = ""; + break; + case "Название (А-Я)": + bindingSource.Sort = "Название товара ASC"; + break; + case "Название (Я-А)": + bindingSource.Sort = "Название товара DESC"; + break; + case "Цена (возрастающая)": + bindingSource.Sort = "Цена ASC"; + break; + case "Цена (убывающая)": + bindingSource.Sort = "Цена DESC"; + break; + } + + } + + private void LoadFilterOptions() + { + comboBoxFilter.Items.Add("По умолчанию"); + comboBoxFilter.Items.Add("Мужская обувь"); + comboBoxFilter.Items.Add("Женская обувь"); + + comboBoxSort.SelectedIndex = 0; + + } + + private void comboBoxFilter_SelectedIndexChanged(object sender, EventArgs e) + { + string filterOption = comboBoxFilter.SelectedItem.ToString().Trim(); + + switch (filterOption) + { + case "По умолчанию": + bindingSource.Filter = ""; + break; + + case "Мужская обувь": + bindingSource.Filter = "[Категория] = 'Мужская обувь'"; + break; + + case "Женская обувь": + bindingSource.Filter = "[Категория] = 'Женская обувь'"; + break; + + default: + bindingSource.Filter = ""; + break; + } + } + + private void textBoxSearch_TextChanged(object sender, EventArgs e) + { + string searchText = textBoxSearch.Text.Trim(); + + if (string.IsNullOrEmpty(searchText)) + { + bindingSource.Filter = ""; + } + else + { + string s = searchText.Replace("'", "''"); + string pattern = string.Format("%{0}%", s); + + bindingSource.Filter = string.Format( + "[Артикул] LIKE '{0}' OR [Название товара] LIKE '{0}' OR [Поставщик] LIKE '{0}' OR [Производитель] LIKE '{0}' OR [Категория] LIKE '{0}' OR [Единица измерения] LIKE '{0}' OR " + + "Convert([Цена], 'System.String') LIKE '{0}' OR Convert([Скидка], 'System.String') LIKE '{0}' OR Convert([Количество на складе], 'System.String') LIKE '{0}'", + pattern); + } + } + + private void AdmMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = LoginForm.ClientSurname + " " + LoginForm.ClientName + " " + LoginForm.ClientPatronymic; + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Hide(); + LoginForm log = new LoginForm(); + log.Show(); + } + + private void OrdersBtn_Click(object sender, EventArgs e) + { + this.Hide(); + ManagerOrder mo = new ManagerOrder(); + mo.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void ManagerMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = LoginForm.ClientSurname + " " + LoginForm.ClientName + " " + LoginForm.ClientPatronymic; + } + } +} diff --git a/ManagerMainForm.resx b/ManagerMainForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ManagerMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ManagerOrder.Designer.cs b/ManagerOrder.Designer.cs new file mode 100644 index 0000000..f535af3 --- /dev/null +++ b/ManagerOrder.Designer.cs @@ -0,0 +1,116 @@ +namespace demMalyhin +{ + partial class ManagerOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.label2 = new System.Windows.Forms.Label(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.SuspendLayout(); + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.DataGridViewProduct.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(91, 58); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(691, 402); + this.DataGridViewProduct.TabIndex = 21; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Chartreuse; + this.label2.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label2.Location = new System.Drawing.Point(319, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(247, 33); + this.label2.TabIndex = 20; + this.label2.Text = "Заказы (менеджер)"; + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(380, 470); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 22; + this.btnBack.Text = "Каталог"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(846, 9); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 29; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // ManagerOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(873, 521); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.label2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "ManagerOrder"; + this.Text = "ManagerOrder"; + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnExit; + } +} \ No newline at end of file diff --git a/ManagerOrder.cs b/ManagerOrder.cs new file mode 100644 index 0000000..4d569c1 --- /dev/null +++ b/ManagerOrder.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.Common; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class ManagerOrder : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + public ManagerOrder() + { + InitializeComponent(); + LoadProdData(); + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Close(); + ManagerMainForm mainForm = new ManagerMainForm(); + mainForm.Show(); + } + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT id_Orders AS `Идентификатор`, order_date AS `Дата заказа`, delivery_date AS `Дата доставки`, pickup_points.index AS `Почтовый индекс`, pickup_points.street AS `Улица`, pickup_points.city AS `Город`, pickup_points.house_number AS `Номер здания`, users.Surname AS `Фамилия клиента`, users.Name AS `Имя клиента`, users.Patronymic AS `Отчество`, Orders.code AS `Код заказа`, OrderStatus.status_name AS `Статус заказа` FROM Orders LEFT JOIN pickup_points ON Orders.pickup_point_id = pickup_points.idpickup_points JOIN users ON Orders.user_initials_id = users.id_users JOIN OrderStatus ON Orders.orderstatus_id = OrderStatus.id_OrderStatus"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/ManagerOrder.resx b/ManagerOrder.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ManagerOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..db3bff4 --- /dev/null +++ b/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace demMalyhin +{ + internal static class Program + { + /// + /// Главная точка входа для приложения. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new LoginForm()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..db601d3 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанных со сборкой. +[assembly: AssemblyTitle("demMalyhin")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("demMalyhin")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// COM, следует установить атрибут ComVisible в TRUE для этого типа. +[assembly: ComVisible(false)] + +// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM +[assembly: Guid("63e7ffbe-5f99-4f82-b33a-22851eedf6d9")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Редакция +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1d6c573 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace demMalyhin.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("demMalyhin.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Icon { + get { + object obj = ResourceManager.GetObject("Icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Icon1 { + get { + object obj = ResourceManager.GetObject("Icon1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap picture { + get { + object obj = ResourceManager.GetObject("picture", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap picture1 { + get { + object obj = ResourceManager.GetObject("picture1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..690e740 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\picture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\picture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..152cb6f --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace demMalyhin.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/Icon.png b/Resources/Icon.png new file mode 100644 index 0000000..bdb7d56 Binary files /dev/null and b/Resources/Icon.png differ diff --git a/Resources/picture.png b/Resources/picture.png new file mode 100644 index 0000000..1cd0789 Binary files /dev/null and b/Resources/picture.png differ diff --git a/UserMainForm.Designer.cs b/UserMainForm.Designer.cs new file mode 100644 index 0000000..d661e75 --- /dev/null +++ b/UserMainForm.Designer.cs @@ -0,0 +1,433 @@ +namespace demMalyhin +{ + partial class UserMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label11 = new System.Windows.Forms.Label(); + this.btnExit = new System.Windows.Forms.Button(); + this.btnBack = new System.Windows.Forms.Button(); + this.DataGridViewProduct = new System.Windows.Forms.DataGridView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.SaleLabel = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBoxFP = new System.Windows.Forms.TextBox(); + this.textBoxStock = new System.Windows.Forms.TextBox(); + this.textBoxUnit = new System.Windows.Forms.TextBox(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.textBoxSup = new System.Windows.Forms.TextBox(); + this.textBoxManuf = new System.Windows.Forms.TextBox(); + this.textBoxDesc = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.StockLabel = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.PriceLabel = new System.Windows.Forms.Label(); + this.SupplierLabel = new System.Windows.Forms.Label(); + this.ManufacturerLabel = new System.Windows.Forms.Label(); + this.DescriptionLabel = new System.Windows.Forms.Label(); + this.NameLabel = new System.Windows.Forms.Label(); + this.CategoryLabel = new System.Windows.Forms.Label(); + this.pictureBoxPhoto = new System.Windows.Forms.PictureBox(); + this.labelFIO = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).BeginInit(); + this.SuspendLayout(); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Chartreuse; + this.label11.Font = new System.Drawing.Font("Times New Roman", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label11.Location = new System.Drawing.Point(311, 9); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(277, 33); + this.label11.TabIndex = 44; + this.label11.Text = "Каталог пользователя"; + // + // btnExit + // + this.btnExit.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExit.Location = new System.Drawing.Point(12, 9); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(24, 23); + this.btnExit.TabIndex = 43; + this.btnExit.Text = "X"; + this.btnExit.UseVisualStyleBackColor = false; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.MediumSpringGreen; + this.btnBack.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.btnBack.Location = new System.Drawing.Point(404, 527); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(99, 39); + this.btnBack.TabIndex = 42; + this.btnBack.Text = "Главное меню"; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // DataGridViewProduct + // + this.DataGridViewProduct.AllowUserToAddRows = false; + this.DataGridViewProduct.AllowUserToDeleteRows = false; + this.DataGridViewProduct.AllowUserToOrderColumns = true; + this.DataGridViewProduct.AllowUserToResizeColumns = false; + this.DataGridViewProduct.AllowUserToResizeRows = false; + this.DataGridViewProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridViewProduct.Location = new System.Drawing.Point(74, 74); + this.DataGridViewProduct.Name = "DataGridViewProduct"; + this.DataGridViewProduct.ReadOnly = true; + this.DataGridViewProduct.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridViewProduct.Size = new System.Drawing.Size(748, 223); + this.DataGridViewProduct.TabIndex = 41; + this.DataGridViewProduct.Click += new System.EventHandler(this.dataGridViewProd_Click); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.pictureBoxPhoto); + this.panel1.Location = new System.Drawing.Point(56, 303); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(789, 218); + this.panel1.TabIndex = 40; + // + // panel3 + // + this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.SaleLabel); + this.panel3.Location = new System.Drawing.Point(623, 14); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(142, 189); + this.panel3.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label4.Location = new System.Drawing.Point(29, 51); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(73, 28); + this.label4.TabIndex = 4; + this.label4.Text = "Действующая\r\nскидка"; + this.label4.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // SaleLabel + // + this.SaleLabel.AutoSize = true; + this.SaleLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SaleLabel.Location = new System.Drawing.Point(53, 87); + this.SaleLabel.Name = "SaleLabel"; + this.SaleLabel.Size = new System.Drawing.Size(0, 14); + this.SaleLabel.TabIndex = 2; + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.textBoxFP); + this.panel2.Controls.Add(this.textBoxStock); + this.panel2.Controls.Add(this.textBoxUnit); + this.panel2.Controls.Add(this.textBoxPrice); + this.panel2.Controls.Add(this.textBoxSup); + this.panel2.Controls.Add(this.textBoxManuf); + this.panel2.Controls.Add(this.textBoxDesc); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.StockLabel); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.PriceLabel); + this.panel2.Controls.Add(this.SupplierLabel); + this.panel2.Controls.Add(this.ManufacturerLabel); + this.panel2.Controls.Add(this.DescriptionLabel); + this.panel2.Controls.Add(this.NameLabel); + this.panel2.Controls.Add(this.CategoryLabel); + this.panel2.Location = new System.Drawing.Point(212, 14); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(395, 189); + this.panel2.TabIndex = 1; + // + // textBoxFP + // + this.textBoxFP.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxFP.Location = new System.Drawing.Point(247, 113); + this.textBoxFP.Name = "textBoxFP"; + this.textBoxFP.ReadOnly = true; + this.textBoxFP.Size = new System.Drawing.Size(95, 20); + this.textBoxFP.TabIndex = 15; + // + // textBoxStock + // + this.textBoxStock.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxStock.Location = new System.Drawing.Point(148, 158); + this.textBoxStock.Name = "textBoxStock"; + this.textBoxStock.ReadOnly = true; + this.textBoxStock.Size = new System.Drawing.Size(194, 20); + this.textBoxStock.TabIndex = 14; + // + // textBoxUnit + // + this.textBoxUnit.Font = new System.Drawing.Font("Times New Roman", 8.25F); + this.textBoxUnit.Location = new System.Drawing.Point(148, 135); + this.textBoxUnit.Name = "textBoxUnit"; + this.textBoxUnit.ReadOnly = true; + this.textBoxUnit.Size = new System.Drawing.Size(194, 20); + this.textBoxUnit.TabIndex = 13; + // + // textBoxPrice + // + this.textBoxPrice.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxPrice.Location = new System.Drawing.Point(148, 113); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.ReadOnly = true; + this.textBoxPrice.Size = new System.Drawing.Size(95, 20); + this.textBoxPrice.TabIndex = 12; + // + // textBoxSup + // + this.textBoxSup.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxSup.Location = new System.Drawing.Point(148, 87); + this.textBoxSup.Name = "textBoxSup"; + this.textBoxSup.ReadOnly = true; + this.textBoxSup.Size = new System.Drawing.Size(194, 20); + this.textBoxSup.TabIndex = 11; + // + // textBoxManuf + // + this.textBoxManuf.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxManuf.Location = new System.Drawing.Point(148, 64); + this.textBoxManuf.Name = "textBoxManuf"; + this.textBoxManuf.ReadOnly = true; + this.textBoxManuf.Size = new System.Drawing.Size(194, 20); + this.textBoxManuf.TabIndex = 10; + // + // textBoxDesc + // + this.textBoxDesc.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.textBoxDesc.Location = new System.Drawing.Point(148, 41); + this.textBoxDesc.Name = "textBoxDesc"; + this.textBoxDesc.ReadOnly = true; + this.textBoxDesc.Size = new System.Drawing.Size(194, 20); + this.textBoxDesc.TabIndex = 9; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label3.Location = new System.Drawing.Point(131, 14); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 15); + this.label3.TabIndex = 8; + this.label3.Text = "I"; + // + // StockLabel + // + this.StockLabel.AutoSize = true; + this.StockLabel.BackColor = System.Drawing.Color.Chartreuse; + this.StockLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.StockLabel.Location = new System.Drawing.Point(14, 158); + this.StockLabel.Name = "StockLabel"; + this.StockLabel.Size = new System.Drawing.Size(112, 14); + this.StockLabel.TabIndex = 7; + this.StockLabel.Text = "Количество на складе:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Chartreuse; + this.label9.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label9.Location = new System.Drawing.Point(21, 135); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(104, 14); + this.label9.TabIndex = 6; + this.label9.Text = "Единица измерения:"; + // + // PriceLabel + // + this.PriceLabel.AutoSize = true; + this.PriceLabel.BackColor = System.Drawing.Color.Chartreuse; + this.PriceLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.PriceLabel.Location = new System.Drawing.Point(57, 113); + this.PriceLabel.Name = "PriceLabel"; + this.PriceLabel.Size = new System.Drawing.Size(69, 14); + this.PriceLabel.TabIndex = 5; + this.PriceLabel.Text = "Цена товара:"; + // + // SupplierLabel + // + this.SupplierLabel.AutoSize = true; + this.SupplierLabel.BackColor = System.Drawing.Color.Chartreuse; + this.SupplierLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.SupplierLabel.Location = new System.Drawing.Point(63, 90); + this.SupplierLabel.Name = "SupplierLabel"; + this.SupplierLabel.Size = new System.Drawing.Size(63, 14); + this.SupplierLabel.TabIndex = 4; + this.SupplierLabel.Text = "Поставщик:"; + // + // ManufacturerLabel + // + this.ManufacturerLabel.AutoSize = true; + this.ManufacturerLabel.BackColor = System.Drawing.Color.Chartreuse; + this.ManufacturerLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.ManufacturerLabel.Location = new System.Drawing.Point(44, 67); + this.ManufacturerLabel.Name = "ManufacturerLabel"; + this.ManufacturerLabel.Size = new System.Drawing.Size(82, 14); + this.ManufacturerLabel.TabIndex = 3; + this.ManufacturerLabel.Text = "Производитель:"; + // + // DescriptionLabel + // + this.DescriptionLabel.AutoSize = true; + this.DescriptionLabel.BackColor = System.Drawing.Color.Chartreuse; + this.DescriptionLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.DescriptionLabel.Location = new System.Drawing.Point(34, 44); + this.DescriptionLabel.Name = "DescriptionLabel"; + this.DescriptionLabel.Size = new System.Drawing.Size(92, 14); + this.DescriptionLabel.TabIndex = 2; + this.DescriptionLabel.Text = "Описание товара:"; + // + // NameLabel + // + this.NameLabel.AutoSize = true; + this.NameLabel.BackColor = System.Drawing.Color.Chartreuse; + this.NameLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.NameLabel.Location = new System.Drawing.Point(157, 16); + this.NameLabel.Name = "NameLabel"; + this.NameLabel.Size = new System.Drawing.Size(112, 14); + this.NameLabel.TabIndex = 1; + this.NameLabel.Text = "Наименование товара"; + // + // CategoryLabel + // + this.CategoryLabel.AutoSize = true; + this.CategoryLabel.BackColor = System.Drawing.Color.Chartreuse; + this.CategoryLabel.Font = new System.Drawing.Font("Times New Roman", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.CategoryLabel.Location = new System.Drawing.Point(19, 16); + this.CategoryLabel.Name = "CategoryLabel"; + this.CategoryLabel.Size = new System.Drawing.Size(92, 14); + this.CategoryLabel.TabIndex = 0; + this.CategoryLabel.Text = "Категория товара"; + // + // pictureBoxPhoto + // + this.pictureBoxPhoto.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxPhoto.Location = new System.Drawing.Point(17, 14); + this.pictureBoxPhoto.Name = "pictureBoxPhoto"; + this.pictureBoxPhoto.Size = new System.Drawing.Size(174, 189); + this.pictureBoxPhoto.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxPhoto.TabIndex = 0; + this.pictureBoxPhoto.TabStop = false; + // + // labelFIO + // + this.labelFIO.AutoSize = true; + this.labelFIO.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelFIO.Location = new System.Drawing.Point(694, 9); + this.labelFIO.Name = "labelFIO"; + this.labelFIO.Size = new System.Drawing.Size(0, 15); + this.labelFIO.TabIndex = 46; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Chartreuse; + this.label1.Font = new System.Drawing.Font("Times New Roman", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.label1.Location = new System.Drawing.Point(604, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(90, 15); + this.label1.TabIndex = 45; + this.label1.Text = "ФИО Клиента -"; + // + // UserMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(892, 574); + this.Controls.Add(this.labelFIO); + this.Controls.Add(this.label1); + this.Controls.Add(this.label11); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.DataGridViewProduct); + this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "UserMainForm"; + this.Text = "UserMainForm"; + this.Load += new System.EventHandler(this.UserMainForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.DataGridViewProduct)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPhoto)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button btnExit; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.DataGridView DataGridViewProduct; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label SaleLabel; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox textBoxFP; + private System.Windows.Forms.TextBox textBoxStock; + private System.Windows.Forms.TextBox textBoxUnit; + private System.Windows.Forms.TextBox textBoxPrice; + private System.Windows.Forms.TextBox textBoxSup; + private System.Windows.Forms.TextBox textBoxManuf; + private System.Windows.Forms.TextBox textBoxDesc; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label StockLabel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label PriceLabel; + private System.Windows.Forms.Label SupplierLabel; + private System.Windows.Forms.Label ManufacturerLabel; + private System.Windows.Forms.Label DescriptionLabel; + private System.Windows.Forms.Label NameLabel; + private System.Windows.Forms.Label CategoryLabel; + private System.Windows.Forms.PictureBox pictureBoxPhoto; + private System.Windows.Forms.Label labelFIO; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/UserMainForm.cs b/UserMainForm.cs new file mode 100644 index 0000000..218fd55 --- /dev/null +++ b/UserMainForm.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace demMalyhin +{ + public partial class UserMainForm : Form + { + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + public UserMainForm() + { + InitializeComponent(); + LoadProdData(); + } + private void LoadProdData() // загрузка данных в дгв + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT article_product AS `Артикул`, product_name AS `Название товара`, price AS `Цена`, supplier_name AS `Поставщик`, Manufacturer_name AS `Производитель`, Category_name AS `Категория`, sale_percent AS `Скидка`, unit_type AS `Единица измерения`, description AS `описание`, quantity_in_stock AS `Количество на складе`, photo AS `фото` FROM products LEFT JOIN Category ON products.category_id = Category.id_Category JOIN Supplier ON products.supplier_id = Supplier.id_Supplier JOIN Manufacturer ON products.manufacturer_id = Manufacturer.id_Manufacturer"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + DataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + DataGridViewProduct.DataSource = bindingSource; + DataGridViewProduct.AllowUserToAddRows = false; + DataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; + DataGridViewProduct.ReadOnly = true; // настройки дгв + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + + } + + private void dataGridViewProd_Click(object sender, EventArgs e) + { + textBoxDesc.Text = DataGridViewProduct.CurrentRow.Cells[8].Value.ToString(); + textBoxManuf.Text = DataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + textBoxSup.Text = DataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + textBoxPrice.Text = DataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + textBoxUnit.Text = DataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + textBoxStock.Text = DataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + NameLabel.Text = DataGridViewProduct.CurrentRow.Cells[1].Value.ToString(); + CategoryLabel.Text = DataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SaleLabel.Text = DataGridViewProduct.CurrentRow.Cells[6].Value.ToString() + "%"; + + try + { + object photoData = DataGridViewProduct.CurrentRow.Cells[10].Value; + if (photoData != DBNull.Value) + { + byte[] imageData = (byte[])photoData; + if (imageData != null && imageData.Length > 0) + { + using (MemoryStream ms = new MemoryStream(imageData)) + { + pictureBoxPhoto.Image = Image.FromStream(ms); + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + else + { + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при загрузке изображения: " + ex.Message); + pictureBoxPhoto.Image = Properties.Resources.picture; + pictureBoxPhoto.SizeMode = PictureBoxSizeMode.Zoom; + } + try + { + var currentRow = DataGridViewProduct.CurrentRow; + if (currentRow == null) return; + + Color defaultColor = SystemColors.Window; + textBoxPrice.BackColor = defaultColor; + textBoxSup.BackColor = defaultColor; + textBoxManuf.BackColor = defaultColor; + textBoxStock.BackColor = defaultColor; + textBoxPrice.ForeColor = Color.Black; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Regular); + textBoxFP.Text = ""; + decimal originalPrice = 0m; + int salePercent = 0; + int quantityInStock = 0; + + decimal.TryParse(currentRow.Cells[2].Value?.ToString(), out originalPrice); + int.TryParse(currentRow.Cells[6].Value?.ToString(), out salePercent); + int.TryParse(currentRow.Cells[9].Value?.ToString(), out quantityInStock); + + if (salePercent > 15) + { + Color highDiscountColor = ColorTranslator.FromHtml("#2E8B57"); + textBoxPrice.BackColor = highDiscountColor; + textBoxSup.BackColor = highDiscountColor; + textBoxManuf.BackColor = highDiscountColor; + textBoxStock.BackColor = highDiscountColor; + textBoxDesc.BackColor = highDiscountColor; + textBoxFP.BackColor = highDiscountColor; + textBoxUnit.BackColor = highDiscountColor; + panel3.BackColor = highDiscountColor; + + } + + else + { + textBoxPrice.BackColor = Color.White; + textBoxSup.BackColor = Color.White; + textBoxManuf.BackColor = Color.White; + textBoxStock.BackColor = Color.White; + textBoxDesc.BackColor = Color.White; + textBoxFP.BackColor = Color.White; + textBoxUnit.BackColor = Color.White; + panel3.BackColor = Color.White; + } + + if (salePercent > 0) + { + decimal finalPrice = originalPrice * (1 - (decimal)salePercent / 100); + textBoxPrice.Text = $"{originalPrice:N2}"; + textBoxPrice.ForeColor = Color.Red; + textBoxPrice.Font = new Font(textBoxPrice.Font, FontStyle.Strikeout); + textBoxFP.Text = $"{finalPrice:N2}"; + textBoxFP.ForeColor = Color.Black; + textBoxFP.Font = new Font(textBoxFP.Font, FontStyle.Regular); + } + else + { + textBoxPrice.Text = $"{originalPrice:N2}"; + } + if (quantityInStock <= 0) + { + textBoxStock.BackColor = Color.LightBlue; + } + + } + catch (Exception ex) + { + MessageBox.Show("Ошибка при обработке данных товара: " + ex.Message); + } + } + + private void btnBack_Click(object sender, EventArgs e) + { + this.Hide(); + LoginForm log = new LoginForm(); + log.Show(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void UserMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = LoginForm.ClientSurname + " " + LoginForm.ClientName + " " + LoginForm.ClientPatronymic; + } + } +} + diff --git a/UserMainForm.resx b/UserMainForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/UserMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/demMalyhin.csproj b/demMalyhin.csproj new file mode 100644 index 0000000..107fe7a --- /dev/null +++ b/demMalyhin.csproj @@ -0,0 +1,243 @@ + + + + + Debug + AnyCPU + {63E7FFBE-5F99-4F82-B33A-22851EEDF6D9} + WinExe + demMalyhin + demMalyhin + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\BouncyCastle.Cryptography.2.6.2\lib\net461\BouncyCastle.Cryptography.dll + + + packages\Google.Protobuf.3.32.0\lib\net45\Google.Protobuf.dll + + + packages\K4os.Compression.LZ4.1.3.8\lib\net462\K4os.Compression.LZ4.dll + + + packages\K4os.Compression.LZ4.Streams.1.3.8\lib\net462\K4os.Compression.LZ4.Streams.dll + + + packages\K4os.Hash.xxHash.1.0.8\lib\net462\K4os.Hash.xxHash.dll + + + packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + packages\Microsoft.Extensions.Logging.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll + + + packages\MySql.Data.9.5.0\lib\net48\MySql.Data.dll + + + packages\MySqlConnector.2.4.0\lib\net48\MySqlConnector.dll + + + + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll + + + + packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll + + + packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll + + + + packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + packages\ZstdSharp.Port.0.8.6\lib\net462\ZstdSharp.dll + + + + + Form + + + AddAdmProduct.cs + + + Form + + + AdmAddOrder.cs + + + Form + + + AdmEditOrder.cs + + + Form + + + AdmEditProduct.cs + + + Form + + + AdmMainForm.cs + + + Form + + + AdmOrder.cs + + + + Form + + + GuestMainForm.cs + + + Form + + + LoginForm.cs + + + Form + + + ManagerOrder.cs + + + + + Form + + + ManagerMainForm.cs + + + True + True + Resources.resx + + + Form + + + UserMainForm.cs + + + AddAdmProduct.cs + + + AdmAddOrder.cs + + + AdmEditOrder.cs + + + AdmEditProduct.cs + + + AdmMainForm.cs + + + AdmOrder.cs + + + GuestMainForm.cs + + + LoginForm.cs + + + ManagerMainForm.cs + + + ManagerOrder.cs + + + PublicResXFileCodeGenerator + Designer + Resources.Designer.cs + + + UserMainForm.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + \ No newline at end of file diff --git a/demMalyhin.sln b/demMalyhin.sln new file mode 100644 index 0000000..b47f0de --- /dev/null +++ b/demMalyhin.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34511.84 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "demMalyhin", "demMalyhin.csproj", "{63E7FFBE-5F99-4F82-B33A-22851EEDF6D9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {63E7FFBE-5F99-4F82-B33A-22851EEDF6D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63E7FFBE-5F99-4F82-B33A-22851EEDF6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E7FFBE-5F99-4F82-B33A-22851EEDF6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63E7FFBE-5F99-4F82-B33A-22851EEDF6D9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0454A56A-E1EB-4CD4-BE95-D80F4C2284E8} + EndGlobalSection +EndGlobal diff --git a/packages.config b/packages.config new file mode 100644 index 0000000..036ed5c --- /dev/null +++ b/packages.config @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file