From e4dd7b74168344d41abe501a3c8f5b8438cca58a Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 4 Apr 2026 20:25:37 +0200 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D0=B4=D0=B0=D0=B2=D0=B0=20=D0=B8=D0=B7=207-?= =?UTF-8?q?=D0=B9=20=D0=B3=D0=BB=D0=B0=D0=B2=D1=8B,=20=D0=BF=D1=8F=D1=82?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=83=D0=BF=D1=80=D0=B0=D0=B6=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../7/5_snake/Snake.lpi | 77 +++++ .../7/5_snake/Snake.lpr | 15 + .../7/5_snake/Snake.lps | 155 ++++++++++ .../7/5_snake/Unit1.lfm | 75 +++++ .../7/5_snake/Unit1.pas | 275 ++++++++++++++++++ .../7/5_snake/pics.bmp | Bin 0 -> 55350 bytes .../7/5_snake/pics.xcf | Bin 0 -> 7102 bytes 7 files changed, 597 insertions(+) create mode 100644 Занимательное программирование/7/5_snake/Snake.lpi create mode 100644 Занимательное программирование/7/5_snake/Snake.lpr create mode 100644 Занимательное программирование/7/5_snake/Snake.lps create mode 100644 Занимательное программирование/7/5_snake/Unit1.lfm create mode 100644 Занимательное программирование/7/5_snake/Unit1.pas create mode 100644 Занимательное программирование/7/5_snake/pics.bmp create mode 100644 Занимательное программирование/7/5_snake/pics.xcf diff --git a/Занимательное программирование/7/5_snake/Snake.lpi b/Занимательное программирование/7/5_snake/Snake.lpi new file mode 100644 index 0000000..3421e9e --- /dev/null +++ b/Занимательное программирование/7/5_snake/Snake.lpi @@ -0,0 +1,77 @@ + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="Snake.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="Unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="delphi"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/Занимательное программирование/7/5_snake/Snake.lpr b/Занимательное программирование/7/5_snake/Snake.lpr new file mode 100644 index 0000000..209b3a4 --- /dev/null +++ b/Занимательное программирование/7/5_snake/Snake.lpr @@ -0,0 +1,15 @@ +program Snake; + +{$MODE Delphi} + +uses + Forms, Interfaces, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/Занимательное программирование/7/5_snake/Snake.lps b/Занимательное программирование/7/5_snake/Snake.lps new file mode 100644 index 0000000..0c2f23c --- /dev/null +++ b/Занимательное программирование/7/5_snake/Snake.lps @@ -0,0 +1,155 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <Version Value="12"/> + <BuildModes Active="Default"/> + <Units> + <Unit> + <Filename Value="Snake.lpr"/> + <IsPartOfProject Value="True"/> + <UsageCount Value="25"/> + <Loaded Value="True"/> + </Unit> + <Unit> + <Filename Value="Unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <TopLine Value="106"/> + <CursorPos X="51" Y="123"/> + <UsageCount Value="25"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit> + </Units> + <JumpHistory HistoryIndex="29"> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="82" Column="19" TopLine="34"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="177" Column="91" TopLine="136"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="121" Column="20" TopLine="81"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="214" Column="88" TopLine="163"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="41" Column="13" TopLine="12"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="54" Column="13" TopLine="12"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="62" Column="43" TopLine="12"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="69" Column="13" TopLine="18"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="80" Column="45" TopLine="31"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="64" Column="26" TopLine="49"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="60" Column="36" TopLine="34"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="65" Column="33" TopLine="34"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="69" Column="69" TopLine="40"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="233" TopLine="182"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="234" TopLine="182"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="58" Column="46" TopLine="22"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="59" Column="39" TopLine="31"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="75" Column="7" TopLine="31"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="104" Column="38" TopLine="74"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="17" Column="13"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="41" Column="19"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="63" Column="12" TopLine="28"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="60" Column="6" TopLine="31"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="42" Column="31" TopLine="4"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="72" Column="40" TopLine="37"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="89" Column="8" TopLine="57"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="91" Column="12" TopLine="61"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="123" Column="52" TopLine="92"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="235" Column="85" TopLine="201"/> + </Position> + <Position> + <Filename Value="Unit1.pas"/> + <Caret Line="10" Column="14"/> + </Position> + </JumpHistory> + <RunParams> + <FormatVersion Value="2"/> + <Modes ActiveMode=""/> + </RunParams> + </ProjectSession> +</CONFIG> diff --git a/Занимательное программирование/7/5_snake/Unit1.lfm b/Занимательное программирование/7/5_snake/Unit1.lfm new file mode 100644 index 0000000..f3b34c2 --- /dev/null +++ b/Занимательное программирование/7/5_snake/Unit1.lfm @@ -0,0 +1,75 @@ +object Form1: TForm1 + Left = 526 + Height = 1083 + Top = 193 + Width = 1280 + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = 'Snake' + ClientHeight = 1083 + ClientWidth = 1280 + Color = clBtnFace + DesignTimePPI = 144 + Font.Color = clWindowText + Font.Height = -17 + Font.Name = 'MS Sans Serif' + LCLVersion = '4.6.0.0' + OnActivate = FormActivate + OnKeyDown = FormKeyDown + object Screen: TImage + Left = 0 + Height = 960 + Top = 0 + Width = 1280 + end + object Label1: TLabel + Left = 480 + Height = 28 + Top = 1008 + Width = 147 + Caption = 'Длина удава:' + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'MS Sans Serif' + ParentFont = False + end + object SnakeLenLabel: TLabel + Left = 656 + Height = 28 + Top = 1008 + Width = 13 + Caption = '3' + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'MS Sans Serif' + ParentFont = False + end + object ImageList: TImageList + Height = 32 + Width = 32 + Bitmap = { + 4C7A1200000020000000200000008D0200000000000078DAEDDC5D92DA400C45 + 612F9DA5B1B34EA8545EA642C08D6D89BEDF4C9D276638C2B87FA416DCEFF7ED + 0EE0BFFCFE19FF22C5FF2C1E7E7E7E7E7EFE15FDCFD6DDABD6E36A3F000089DC + 6EDB986115FF6CBCFCFC2BF8D3C7BFFB899FDFFA0F0040D6B9FF6DCCB08A7F36 + 5E7EFE15FCC6BFFB8FDFF837FE010048CAFFC77870D6DFF3F3F3F7F7EF6515FF + D9EF173F3FFF3A7E000096C8FF6FDB9861357FF5F5E7E737FEAFF7BB5FF893FD + C63F0000819FFFDFB631C36AFEEAEBCFCF6FFCF71FFFFCFC2BFA53C73F000091 + E7FFFA7FA7E24DF37BDD5EB7D7CDCFCFBFB21F008088FC5FFFFFAEE7E3E75FC9 + BF771C56CF436779DD7FFCC97EFDFF0000249DFF677FFFEFDEE7E3E75FD1EFFB + BF6BAE3F3F7FA5DFF807002430B631CE809F9F9F9F9F9F9F9F9FBFA31F0072F3 + FF3F1F307BF5F84F669FAF9BFFD9FFBDFBC1FB4FBD5DFC7BBDEFBE1FDFE29FF5 + 1E154795FF28EF6C1CFCFCFCFCFCFC157E0048CFFF8F9A5FAF9AFFABFD47E5DF + DFEEFFD6BCF7ACFD47BADFFE933FD99F3AFE53E7FFD4F57F95FD1F00C8FFEDFF + F8F9F9F9F9F3CEFFD2F360FD5F99FD7FFA3F0140EFFFD56B71B5FFD3B57715BF + 1EF8CC3340B927BFDC5F0F80F93F73FDB7FF0300BCE2F1452D8FDF44FF5F7755 + 0C95FE9FEEAB63A8F43F735F1543A5FF95FBEC182AFDEFBACF8AA1D2BFD77D74 + 0C95FE59F7513154FA3F757F1A43A5FF28F76C0C95FEA3DD7B63A8F60380FCBE + 477EDF25C7EE92E776C935BBE47B5D72AE2E794F97DCA3CBFEBFCB1EFCDBF6C1 + AB5CFFB4F19736FFA6ADBF69FB2F7B710040873A44623D3CF93CC47998F350E7 + E1FA21F4C3E887D20FA71F523F2C00A0F3BC9CB61F49DB87A7E59F6975177D07 + 6A8E5DEA7E5D6A6F5DEA5F5D6A505DEA405D6A315DEA215D6A12EA0278C52F04 + 2A6937 + } + end +end diff --git a/Занимательное программирование/7/5_snake/Unit1.pas b/Занимательное программирование/7/5_snake/Unit1.pas new file mode 100644 index 0000000..a26f200 --- /dev/null +++ b/Занимательное программирование/7/5_snake/Unit1.pas @@ -0,0 +1,275 @@ +unit Unit1; + +{$MODE objfpc}{$H+} + +interface + +uses + LCLType, SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + Screen: TImage; + ImageList: TImageList; + Label1: TLabel; + SnakeLenLabel: TLabel; + procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure FormActivate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +type Coords = record { Координаты клетки } + x, y: Integer +end; + +const + { Размеры поля } + FieldHeight = 30; + FieldWidth = 40; + { Скорость игры } + MSecsPerFrame = 150; + CellSize = 32; + +var + Form1: TForm1; + Snake: array[1..FieldHeight * FieldWidth] of Coords; { Удав } + SnakeLength: Integer; { Длина удава } + dx, dy: Integer; { Текущее направление } + Background, Body: TBitmap; { Элементы игрового поля } + Head, Tail: array[1..4] of TBitmap; + FirstRun: Boolean = true; { Индикатор первого запуска } + Number: Coords; { Положение текущей цифры } + CurNumber: Integer; { и ее значение } + +implementation + +{$R *.lfm} + +{-------------------------------------------------------------------} +{ Загрузка картинок (элементов игры) } +procedure LoadBitmaps; +var + i: Integer; +begin + Background := TBitmap.Create; + Body := TBitmap.Create; + + for i := 1 to 4 do + begin + Head[i] := TBitmap.Create; + Tail[i] := TBitmap.Create + end; + Form1.ImageList.GetBitmap(10, Head[1]); + Form1.ImageList.GetBitmap(11, Head[2]); + Form1.ImageList.GetBitmap(12, Head[3]); + Form1.ImageList.GetBitmap(13, Head[4]); + Form1.ImageList.GetBitmap(14, Tail[1]); + Form1.ImageList.GetBitmap(15, Tail[2]); + Form1.ImageList.GetBitmap(16, Tail[3]); + Form1.ImageList.GetBitmap(17, Tail[4]); + Form1.ImageList.GetBitmap(9, Body); + + Background.SetSize(CellSize, CellSize); + Background.Canvas.Brush.Color := clLtGray; + Background.Canvas.FillRect(0, 0, CellSize, CellSize) +end; + +{-------------------------------------------------------------------} +{ Освобождение памяти } +procedure FreeBitmaps; +var + i: Integer; +begin + Background.Free; + Body.Free; + for i := 1 to 4 do + begin + Head[i].Free; + Tail[i].Free + end +end; + +{-------------------------------------------------------------------} +{ Очистка экрана } +procedure ClearField; +var i, j: Integer; +begin + for i := 0 to FieldWidth do + for j := 0 to FieldHeight do + Form1.Screen.Canvas.Draw(i * CellSize, j * CellSize, Background) +end; + +{-------------------------------------------------------------------} +{ Инициализация удава } +procedure InitSnake; +begin + SnakeLength := 3; { Изначально длина равна трем (голова, тело и хвост) } + { Координаты сегментов } + Snake[1].x := 0; + Snake[2].x := 1; + Snake[3].x := 2; + Snake[1].y := 0; + Snake[2].y := 0; + Snake[3].y := 0; + { Изначально удав ползет вправо } + dx := 1; + dy := 0; + { Рисуем удава } + Form1.Screen.Canvas.Draw(0, 0, Tail[2]); + Form1.Screen.Canvas.Draw(CellSize, 0, Body); + Form1.Screen.Canvas.Draw(CellSize * 2, 0, Head[2]) +end; + +{-------------------------------------------------------------------} +{ Определение статуса клетки (удав/свободно) } +function IsSnake(X, Y: Integer) : Boolean; +var i: Integer; +begin + IsSnake := false; + for i := 1 to SnakeLength do + if (Snake[i].x = X) and (Snake[i].y = Y) then + IsSnake := true +end; + +{-------------------------------------------------------------------} +{ Разместить случайную цифру (на игровом поле) } +procedure PlaceNumber; +var Temp: TBitmap; +begin + Temp := TBitmap.Create; { Временыый объект для хранения картинки } + repeat + Number.x := Random(FieldWidth); { Выбираем случайные координаты } + Number.y := Random(FieldHeight) + until not isSnake(Number.x, Number.y); { пока они не окажутся допустимыми } + + CurNumber := 1 + Random(9); { Выбираем случайное значение цифры } + { Рисуем цифру на экране } + Form1.ImageList.GetBitmap(CurNumber - 1, Temp); + Form1.Screen.Canvas.Draw(CellSize * Number.x, CellSize * Number.y, Temp); + Temp.Free +end; + +{-------------------------------------------------------------------} +{ Обработка клавиш } +procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + case Key of + VK_LEFT: + begin + dx := -1; + dy := 0 + end; + VK_RIGHT: + begin + dx := 1; + dy := 0 + end; + VK_UP: + begin + dx := 0; + dy := -1 + end; + VK_DOWN: + begin + dx := 0; + dy := 1 + end + end +end; + +function GetDirectionIndex(dx, dy: Integer): Integer; +begin + if (dx = -1) and (dy = 0) then + Result := 4 + else if (dx = 1) and (dy = 0) then + Result := 2 + else if (dx = 0) and (dy = -1) then + Result := 1 + else if (dx = 0) and (dy = 1) then + Result := 3 + else + Result := 0 +end; + +{-------------------------------------------------------------------} +{ Главная процедура } +procedure TForm1.FormActivate(Sender: TObject); +var + oldtime: TDateTime; + NewX, NewY: Integer; { Координаты целевой клетки } + ToGrow, DirectionIndex: Integer; +begin + if not FirstRun then + Exit; { Процедура работает лишь при первом запуске } + + FirstRun := false; + Randomize; + LoadBitmaps; { Загрузка изображений } + + while ID_CANCEL <> Application.MessageBox('OK - запуск, Cancel - выход', 'Snake', MB_OKCANCEL) do + begin + ClearField; { Очистка игрового поля } + InitSnake; { Создание удава } + PlaceNumber; { Генерация случайной цифры } + ToGrow := 0; { Количество сегментов, на которое должен вырасти удав } + { Главный цикл } + while true do + begin + oldtime := Now; + { Определение целевой клетки } + NewX := Snake[SnakeLength].x + dx; + NewY := Snake[SnakeLength].y + dy; + + { Если сделан недопустимый ход, конец игры } + if (NewX < 0) or (NewX >= FieldWidth) or (NewY < 0) or + (NewY >= FieldHeight) or IsSnake(NewX, NewY) then + Break; { Конец игры } + + { Если текущая клетка содержит цифру программируем рост удава } + if (NewX = Number.x) and (NewY = Number.y) then + begin + ToGrow := ToGrow + CurNumber; + { Генерируем очередную цифру } + PlaceNumber + end; + + if ToGrow > 0 then { Если удав растет } + begin + ToGrow := ToGrow - 1; + SnakeLength := SnakeLength + 1 { Увеличиваем его длину } + end; + { Обновление координат удава } + Snake[SnakeLength + 1].x := NewX; + Snake[SnakeLength + 1].y := NewY; + + DirectionIndex := GetDirectionIndex(dx, dy); + + Form1.Screen.Canvas.Draw(CellSize * Snake[1].x, CellSize * Snake[1].y, Background); + Form1.Screen.Canvas.Draw(CellSize * Snake[2].x, CellSize * Snake[2].y, + Tail[DirectionIndex]); + + { Сдвиг массива } + Move(Snake[2], Snake[1], SizeOf(Coords) * SnakeLength); + + Form1.Screen.Canvas.Draw(CellSize * Snake[SnakeLength - 1].x, + CellSize * Snake[SnakeLength - 1].y, Body); + Form1.Screen.Canvas.Draw(CellSize * Snake[SnakeLength].x, + CellSize * Snake[SnakeLength].y, Head[DirectionIndex]); + + { Вывод на экран текущей длины удава } + Form1.SnakeLenLabel.Caption := IntToStr(SnakeLength); + + { Задержка перед следующим циклом } + Application.ProcessMessages; + while Round(MSecsPerFrame - (Now - oldtime) * MSecsPerDay) > 0 do + Application.ProcessMessages + end + end; + FreeBitmaps; { Освобождение выделенной памяти } + Application.Terminate { Выход из программы } +end; + +end. diff --git a/Занимательное программирование/7/5_snake/pics.bmp b/Занимательное программирование/7/5_snake/pics.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2ccc20fcfe1553f59ca04ecbdb5516fdab007587 GIT binary patch literal 55350 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 b4%h)ZU<d4g9k2s-zz)~}J75Psg#-Tq{km~u literal 0 HcmV?d00001 diff --git a/Занимательное программирование/7/5_snake/pics.xcf b/Занимательное программирование/7/5_snake/pics.xcf new file mode 100644 index 0000000000000000000000000000000000000000..cddec6048c9f30e1a302920b16b584aa72f4f632 GIT binary patch literal 7102 zcmd^DOK%%h6uy(xO>D<;jPsysi>9U}3Bq>FqogQFt5!S(qT(T7IkCsi2-{<gCnaGM zub^UqSRup@V8sgY1BO4qZ(+@5_`dtF$4y%&&4#KI9e-!eoO|ZG=bU?IGA*yuvk&S` z``$*aCWM%}g&!Nj<7Y?#Vp;epLS}DA_iMNR%4|blgq(wvA<J5)-xAFK0AG0*q3;HM z-EHg#?j66|^je?ncgsz$?Ur{ty|R1I^MkP5cKRXQ1;=i!?f2bs(01*vzn)q9Ch$VH zT=(04Q117fx;6)`-Ez|pI!<VpsBdm=mew<j@z{Izx~+%Y(|T#m>xOR7M)-!hZQbwm z0=M7y{H}ciG<Lsk=_`J-*;hWjy~DnJ==O0r^g6Cq`_4VL90pDoYy-C&Dqp_`7w=oQ z+;iG)80uLhW<dI2QE%@zTu}6yYMilny|6xRIY7~5hK!5KQ7`bB-SJD|-hOAd>v-*P zGbY&?GHjt#$g{GP?gXwAA{pO!;hz2O`ybua*<F-wUdL&<<&GOV4JUM%byRNZ`qs^Z zPTRic229)bYOS)dYP;RK-|)Jv?bXjed#Aj)dUGeUWd`nKY<nwoT6WjzxZ9<-G3(0v z3|+bHh5fs3@Tt@3wcXOrrj5U?DqJ5uL=ODW?Y6?b(#~tIp2YhLuR-TG-n>4+`{Tev zo}3WVD(%!JIDg{y{q{b6Kks^BX=f6ZFGmAPJ2&2Z^|fkkW70jo8XxoejmM6;yXS{~ z<qp@-r(8l~b71b(!a~D0y@Tyi=rx-qdp~Gzm-fQ2_g1yq?N^+Jzw1`eA5~tiqPEr2 z&Q^6e`hmiH+38j2Sb1pbwyL8RVD~H}x~dg;4c$@V_qBd_h-OAYy$04tvn89{UQ@k} zh40uK@~^heMf#A-HCz7i@&TubR<vsyI6E9W(<kM9l+4D8+LO!rfQ#J?ZRwxTl{)TB z&WR({N}OnQ>J}6m!Xw@D>ir5fL7q(U2gi8`H`Ew%h5F3_ezEC7XvZ=WC9MO*rG(Di zk3KwXh|yn8=-Grmm(X(wJrAAtGsg@R#^SxMX&oT0Qjc)}Urgxcp<w2OOFYgWC`|rN z-NKm-nTFsv|EI!>KWh9{<8K=OP{`k@TllddIA%B(9J7Bb%<$oZWA0yt`41HqzEilk zr*P#1g%{cig*dW)h*DxD%88=JmB<n=LQaDmPyZ2~JjUfHi+krpLF3U>CK|FDXjTKw z=2Qqa(tm{3K+kL<YE}cyYVdz%bszIAL{^-J6cYO7$Qs(uqN|uW9Xl5@7Uaap@$@&S zatYR`xh23FIMU%cw4X&+F&S40W1U7gPTgPO)6aU83+DYaxwx!zn9QZAoyw7_<7ssh z&)_h}18vbL`;CkTn)L+adXTe~$Z-j_Ppl*6Sll67F@8nnb^^oXOh!x@N9S;Wb#W#= znE}QfvgJA?V~MyMa9F*eei8PfwkP!qurFzQQpf%rUx?CzHljLLap4c!S@fJxF>+!! zi?N(PDraDhXNx6snbgS!5v4t;^C<)N1KNn{T={X<u*)$|rsoD~T%s17#ZdGt1b4)w zu9-`FQrFC-J*n$ikS%AyT1cI7HFG)U$#hu@#51+H8ZE`^kQ{m}H-;)#%61lgJT7a% zm?y;td66sS$odZN8DKAPCg250qUu*=JBvOZmo;I`lj4KC$dxi=Z*tG5tbxWMW7y83 zn|KN}Yq^?vze(pKK59JkPEqX7fmtd_LC7$t@whFE>lXUh0%oJUM9%6#TVBq-AlFka zDu_HJ8x@feg<0e+eQGHp2FDpJ$oi!blXXmMKFUXNQ@WWCeU$!;&pJk}A$(8GX|#^n zQ0o|Vg;+6aEfKXoW<#yf*#$nsB%;>vFG`(=8sI*s6*JCY0r42apyH!qCv`I)`YPSj zdP&TpQ&Z@G47w$$XJiNGr9G+7p|j{~FoVwHxxrbfGZt-+N5+`Lc!Trcu>hOFxx^|` zdLF)`m1S(?XIAQH4##ar*7w*`&q-F#;H+ch1|6M?QI|0t`9lZir9G*mF4ATYHP$`~ zQDYrzGBO5g4N-_1$EbB|5VahxBBkfyd)!8TW~GkibKItCJ&(@dd&D(~)1nkji$(0| zw!|5{$D~9Nd-p|&S@C={Bc4MSE=$bIYXx*<0X_wE>U@+%hqC(>X5pKMolg?(=kwTa zDGL($?!<kVUl53C+?(A#gZM;#*;o=;aJeAS!gKQ%bSPN!Ej9*g;B*YuF<8f74V=M$ zwkf>*rem-MW@E69!8!(OU|wFsow56*Aw}dki(D@up9;Y`25amdMAjfL1*~N~I2NoC zhnU7aS+^O)C#GVs#tt@(=PS{|^HQ@GPhYO@BlG5MX9bm*M`e~#86t8mtI7^xb@{c0 zm0du!RfY4g@!df^)%i4k4nExX403D^b`yg!Q6m|95o4ER7i1;!ZFm_RF3Ap=7B9$a zmbd~N-;()t=*T*c4gqVv-N^kPtWmWhs*{q)4q;W<Aw;l7_45#}I8|x$Tq5#$1h#S| z8{}B99>!oyb`}w=(Ut6itVFQJy{BWamI&6kX2oDF5v<W6n)OqcYkcIj@ilS*!s921 S`5OBkbn{i0Uti@H*8c$bpq#(} literal 0 HcmV?d00001