From ff7a87438e3994194089c7d49750cd3de82ea01f Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 26 Feb 2024 15:53:41 +0400 Subject: [PATCH] commit 2 --- .../LocomativeProject/DrawningLocomotive.cs | 109 +++++++----- .../LocomotiveProject.Designer.cs | 156 +++++++++--------- .../LocomativeProject/LocomotiveProject.cs | 12 +- .../LocomativeProject/LocomotiveProject.resx | 68 +++++++- 4 files changed, 215 insertions(+), 130 deletions(-) diff --git a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs index c4be050..4ed712e 100644 --- a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs +++ b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs @@ -30,7 +30,7 @@ /// /// Ширина прорисовки тепловоза /// - private readonly int _drawningLocomotiveWidth = 110; + private readonly int _drawningLocomotiveWidth = 120; /// /// Высота прорисовки тепловоза @@ -67,9 +67,21 @@ ///разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - _pictureWidth = width; - _pictureHeight = height; - return true; + if (width > _drawningLocomotiveWidth || height > _drawningLocomotiveHeight) // если ширина и высота окна больше чем объект + { + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX + _drawningLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем + { + _startPosX = 0; + } + if (_startPosY + _drawningLocomotiveHeight > height || _startPosY < 0) + { + _startPosY = 0; + } + return true; + } + return false; } /// /// Установка позиции @@ -82,18 +94,27 @@ { return; } - if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth || y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) - { - _startPosX = 20; - _startPosY = 20; - } - else + + // если все нормально + if (x > 0 || x + _drawningLocomotiveWidth < _pictureWidth) { _startPosX = x; + } + if (y > 0 || y + _drawningLocomotiveHeight < _pictureHeight) + { _startPosY = y; } + // если не лезет, но мог бы влезть + if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth) + { + _startPosX = 0; + } + if (y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) + { + _startPosY = 0; + } } - + /// /// Изменение направления перемещения /// @@ -118,7 +139,7 @@ return true; //вверх case DirectionType.Up: - if (_startPosY.Value - EntityLocomotive.Step > 0) + if (_startPosY.Value - EntityLocomotive.Step > 0) // 10 – высота трубы { _startPosY -= (int)EntityLocomotive.Step; } @@ -181,56 +202,56 @@ Brush whiteBrush = new SolidBrush(Color.White); //границы тепловоза DrawPolygon(g, pen, bodyBrush, - _startPosX.Value, _startPosY.Value, - _startPosX.Value + 100, _startPosY.Value, - _startPosX.Value + 110, _startPosY.Value + 20, - _startPosX.Value, _startPosY.Value + 20 + _startPosX.Value + 5, _startPosY.Value + 10, + _startPosX.Value + 105, _startPosY.Value + 10, + _startPosX.Value + 115, _startPosY.Value + 20 + 10, + _startPosX.Value + 5, _startPosY.Value + 20 + 10 ); - g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 20, 110, 20); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 20, 110, 20); - g.FillRectangle(blackBrush, _startPosX.Value - 5, _startPosY.Value + 5, 5, 30); + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20); + g.FillRectangle(blackBrush, _startPosX.Value, _startPosY.Value + 5 + 10, 5, 30); //шасси DrawPolygon(g, pen, blackBrush, - _startPosX.Value - 5, _startPosY.Value + 45, - _startPosX.Value + 5, _startPosY.Value + 40, - _startPosX.Value + 45, _startPosY.Value + 40, - _startPosX.Value + 45, _startPosY.Value + 45 + _startPosX.Value, _startPosY.Value + 45 + 10, + _startPosX.Value + 10, _startPosY.Value + 40 + 10, + _startPosX.Value + 50, _startPosY.Value + 40 + 10, + _startPosX.Value + 50, _startPosY.Value + 45 + 10 ); DrawPolygon(g, pen, blackBrush, - _startPosX.Value + 65, _startPosY.Value + 40, - _startPosX.Value + 105, _startPosY.Value + 40, - _startPosX.Value + 115, _startPosY.Value + 45, - _startPosX.Value + 65, _startPosY.Value + 45 + _startPosX.Value + 70, _startPosY.Value + 40 + 10, + _startPosX.Value + 110, _startPosY.Value + 40 + 10, + _startPosX.Value + 120, _startPosY.Value + 45 + 10, + _startPosX.Value + 70, _startPosY.Value + 45 + 10 ); //колеса - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10); //дверь - g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); - g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); + g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20); //окна pen = new(Color.Blue); - g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5, 10, 10); - g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5, 10, 10); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 5, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5 + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5 + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 5 + 10, 10, 10); //труба if (EntityLocomotive.ExehaustPipe) { Brush greyBrush = new SolidBrush(Color.Gray); - g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); - g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); + g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); + g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10); } // отсек для топлива if (EntityLocomotive.FuelCompartment) { - g.FillRectangle(bodyBrush, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); + g.FillRectangle(bodyBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); } } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 73b18b9..3898d85 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -29,106 +29,110 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); - this.create = new System.Windows.Forms.Button(); - this.buttonUp = new System.Windows.Forms.Button(); - this.buttonDown = new System.Windows.Forms.Button(); - this.buttonLeft = new System.Windows.Forms.Button(); - this.buttonRight = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); - this.SuspendLayout(); + pictureBox1 = new PictureBox(); + pictureBoxLocomotive = new PictureBox(); + create = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit(); + SuspendLayout(); // // pictureBox1 // - this.pictureBox1.Location = new System.Drawing.Point(0, 0); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(100, 50); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; + pictureBox1.Location = new Point(0, 0); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(100, 50); + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; // // pictureBoxLocomotive // - this.pictureBoxLocomotive.Dock = System.Windows.Forms.DockStyle.Fill; - this.pictureBoxLocomotive.Location = new System.Drawing.Point(0, 0); - this.pictureBoxLocomotive.Name = "pictureBoxLocomotive"; - this.pictureBoxLocomotive.Size = new System.Drawing.Size(800, 450); - this.pictureBoxLocomotive.TabIndex = 1; - this.pictureBoxLocomotive.TabStop = false; + pictureBoxLocomotive.Dock = DockStyle.Fill; + pictureBoxLocomotive.Location = new Point(0, 0); + pictureBoxLocomotive.Name = "pictureBoxLocomotive"; + pictureBoxLocomotive.Size = new Size(800, 450); + pictureBoxLocomotive.TabIndex = 1; + pictureBoxLocomotive.TabStop = false; // // create // - this.create.Location = new System.Drawing.Point(12, 415); - this.create.Name = "create"; - this.create.Size = new System.Drawing.Size(75, 23); - this.create.TabIndex = 2; - this.create.Text = "создать"; - this.create.UseVisualStyleBackColor = true; - this.create.Click += new System.EventHandler(this.create_Click); + create.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + create.Location = new Point(12, 415); + create.Name = "create"; + create.Size = new Size(75, 23); + create.TabIndex = 2; + create.Text = "создать"; + create.UseVisualStyleBackColor = true; + create.Click += create_Click; // // buttonUp // - this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage"))); - this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonUp.Location = new System.Drawing.Point(691, 362); - this.buttonUp.Name = "buttonUp"; - this.buttonUp.Size = new System.Drawing.Size(35, 35); - this.buttonUp.TabIndex = 3; - this.buttonUp.UseVisualStyleBackColor = true; - this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(691, 362); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; // // buttonDown // - this.buttonDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonDown.BackgroundImage"))); - this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonDown.Location = new System.Drawing.Point(691, 403); - this.buttonDown.Name = "buttonDown"; - this.buttonDown.Size = new System.Drawing.Size(35, 35); - this.buttonDown.TabIndex = 4; - this.buttonDown.UseVisualStyleBackColor = true; - this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(691, 403); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 4; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; // // buttonLeft // - this.buttonLeft.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonLeft.BackgroundImage"))); - this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonLeft.Location = new System.Drawing.Point(650, 403); - this.buttonLeft.Name = "buttonLeft"; - this.buttonLeft.Size = new System.Drawing.Size(35, 35); - this.buttonLeft.TabIndex = 5; - this.buttonLeft.UseVisualStyleBackColor = true; - this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(650, 403); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 5; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; // // buttonRight // - this.buttonRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRight.BackgroundImage"))); - this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonRight.Location = new System.Drawing.Point(732, 403); - this.buttonRight.Name = "buttonRight"; - this.buttonRight.Size = new System.Drawing.Size(35, 35); - this.buttonRight.TabIndex = 6; - this.buttonRight.UseVisualStyleBackColor = true; - this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(732, 403); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 6; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; // // LocomotiveProject // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.buttonRight); - this.Controls.Add(this.buttonLeft); - this.Controls.Add(this.buttonDown); - this.Controls.Add(this.buttonUp); - this.Controls.Add(this.create); - this.Controls.Add(this.pictureBoxLocomotive); - this.Controls.Add(this.pictureBox1); - this.Name = "LocomotiveProject"; - this.Text = "Тепловоз"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); - this.ResumeLayout(false); - + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(create); + Controls.Add(pictureBoxLocomotive); + Controls.Add(pictureBox1); + Name = "LocomotiveProject"; + Text = "Тепловоз"; + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit(); + ResumeLayout(false); } #endregion diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs index a17fea0..12b9e36 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -39,20 +39,20 @@ namespace LocomativeProject /// private void create_Click(object sender, EventArgs e) { - Random random = new (); + Random random = new(); _drawningLocomotive = new DrawningLocomotive(); _drawningLocomotive.Init ( random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb( random.Next(0, 256), random.Next(0, 256), random.Next(0, 256) ), - Color.FromArgb( random.Next(0, 256), random.Next(0, 256), random.Next(0, 256) ), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), - Convert.ToBoolean( random.Next(0, 2) ), random.Next(2, 6) ); - _drawningLocomotive.SetPictureSize( pictureBoxLocomotive.Width, pictureBoxLocomotive.Height ); - _drawningLocomotive.SetPosition( random.Next(10, 100), random.Next(10, 100) ); + _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + _drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx index e45e5ca..e4ae198 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.resx +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.resx @@ -1,4 +1,64 @@ - + + + @@ -177,7 +237,7 @@ iVBORw0KGgoAAAANSUhEUgAAAf0AAAIBCAYAAABDdGZ3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAIv9JREFUeF7t3YuS29axheH4KjmpvP97plyS7zrp2V4+bYQaSjNigyC+v+ovguRE + vAAADrwBlbxySQAAIv9JREFUeF7t3YuS29axheH4KjmpvP97plyS7zrp2V4+bYQaSjNigyC+v+ovguRE sTnNvXYDaPkfH4Cdef/+/Z9HHz788ssvT4/ffPPNh3/84x/kof3qq6+eHn///fenuk59F3kNmEToY1d+ +umnP4/Wgvjtt9/+tWAKfj6Cb968eQr/8PPPP3/4448/hD52Qehjdyr4f/vtt6eFsYK+Bz95ZL///vun x3T8PfyBPRD62JV0O2/fvv3bYvndd9/97Tl5VH/44Yenx17TRT/VD0wh9LEr1eF//fXXTwthdUE5rlOi @@ -332,7 +392,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgEAAAIHCAYAAAAGv498AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAHmBJREFUeF7t3YuyG0XWrVH65gsd/f7vSRDGBgPNSpibtLy9JVtLUlXlGBGfJMzt + vAAADrwBlbxySQAAHmBJREFUeF7t3YuyG0XWrVH65gsd/f7vSRDGBgPNSpibtLy9JVtLUlXlGBGfJMzt Pw3HNaWSk+9+BwCWZAQAwKKMAABYlBEAAIsyAgBgUUYAACzKCACARRkBALAoIwAAFmUEAMCijAAAWJQR AACLMgIAYFFGAAAsyggAgEUZAQCwKCMAABZlBADAoowAAFiUEQAAizICAGBRRgAALMoIAIBFGQEAsCgj AAAWZQQAwKKMAABYlBEAAIsyAgBgUUYAACzKCACARRkBALAoIwCu9PHjx79e/f77r7/++vtvv/322XN8 @@ -468,7 +528,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X + vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X 0F1lvcfxAOMMioCAQbBhL9jBgqKCXcCC0WgsGFSMElIgBEgU4+g4OuOV114w44W3inKBBSxYsEdFRQWj YAkaFYMFQcjyeZKlIcmTt+z3v/deaz2fz8z3cI5Jdlkvx/9vHI9nUQMAVMcAAIAKGQAAUCEDAAAqZAAA QIUMAACokAEAABUyAACgQgYAAFTIAACAChkAAFAhAwAAKmQAAECFDAAAqJABAAAVMgAAoEIGAABUyAAA