[r247]: / trunk / Library / POUs / FB_TestSuite / AssertEquals / svnobj  Maximize  Restore  History

Download this file

335 lines (335 with data), 36.9 kB

Gx_l
░!0┘jЭoCpc║МQ÷ц┬эNSystem.StringL{f8a58466-d7f6-439f-bbb8-d4600e41d099}ImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocumentL{f3878285-8e4f-490b-bb1b-9acbb7eb04db}TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}	Id
longTagText
HIF GVL_CfUnit.IgnoreCurrentTest THEN    RETURN;END_IFNAnyComparator(AnyValueOne := Expected, 4			AnyValueTwo := Actual);л(* First check whether the input data are any of the standard data types that are supported by TcUnit.т   In this case call the standard Assert-methods for that data. But before doing that we need to make sureJ   that both the expected and actual:B   - Have both the same data typeB   - Both have the same data size*)╗IF NOT AnyComparator.DataTypesNotEquals AND NOT AnyComparator.DataSizeNotEquals THEN    (* BOOL *)·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BOOL THEN╝		MEMCPY(destAddr := ADR(boolExpected), srcAddr := Expected.pValue, n := SIZEOF(BOOL));╡        MEMCPY(destAddr := ADR(boolActual), srcAddr := Actual.pValue, n := SIZEOF(BOOL));╪        AssertEquals_BOOL(Expected := boolExpected, Actual := boolActual, Message := Message);        RETURN;     END_IF!    (* BYTE *)"·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BYTE THEN#╨        MEMCPY(destAddr := ADR(byteExpected), srcAddr := Expected.pValue, n := SIZEOF(BYTE));$╡        MEMCPY(destAddr := ADR(byteActual), srcAddr := Actual.pValue, n := SIZEOF(BYTE));%╪        AssertEquals_BYTE(Expected := byteExpected, Actual := byteActual, Message := Message);&    (* DATE *)'·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATE THEN(╨        MEMCPY(destAddr := ADR(dateExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE));)╡        MEMCPY(destAddr := ADR(dateActual), srcAddr := Actual.pValue, n := SIZEOF(DATE));*╪        AssertEquals_DATE(Expected := dateExpected, Actual := dateActual, Message := Message);+.    (* DATE_AND_TIME *),╛    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATEANDTIME THEN-з        MEMCPY(destAddr := ADR(dateAndTimeExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE_AND_TIME));.р        MEMCPY(destAddr := ADR(dateAndTimeActual), srcAddr := Actual.pValue, n := SIZEOF(DATE_AND_TIME));/Й        AssertEquals_DATE_AND_TIME(Expected := dateAndTimeExpected, Actual := dateAndTimeActual, Message := Message);0    (* DINT *)1·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DINT THEN2╨        MEMCPY(destAddr := ADR(dintExpected), srcAddr := Expected.pValue, n := SIZEOF(DINT));3╡        MEMCPY(destAddr := ADR(dintActual), srcAddr := Actual.pValue, n := SIZEOF(DINT));4╪        AssertEquals_DINT(Expected := dintExpected, Actual := dintActual, Message := Message);5    (* DWORD *)6═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DWORD THEN7╬        MEMCPY(destAddr := ADR(dwordExpected), srcAddr := Expected.pValue, n := SIZEOF(DWORD));8І        MEMCPY(destAddr := ADR(dwordActual), srcAddr := Actual.pValue, n := SIZEOF(DWORD));9б        AssertEquals_DWORD(Expected := dwordExpected, Actual := dwordActual, Message := Message);:    (* INT *);°    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_INT THEN<І        MEMCPY(destAddr := ADR(intExpected), srcAddr := Expected.pValue, n := SIZEOF(INT));=╝        MEMCPY(destAddr := ADR(intActual), srcAddr := Actual.pValue, n := SIZEOF(INT));>І        AssertEquals_INT(Expected := intExpected, Actual := intActual, Message := Message);?    (* LINT *)@·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LINT THENA╨        MEMCPY(destAddr := ADR(lintExpected), srcAddr := Expected.pValue, n := SIZEOF(LINT));B╡        MEMCPY(destAddr := ADR(lintActual), srcAddr := Actual.pValue, n := SIZEOF(LINT));C╪        AssertEquals_LINT(Expected := lintExpected, Actual := lintActual, Message := Message);D    (* LREAL *)E═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LREAL THENF╬        MEMCPY(destAddr := ADR(lrealExpected), srcAddr := Expected.pValue, n := SIZEOF(LREAL));GІ        MEMCPY(destAddr := ADR(lrealActual), srcAddr := Actual.pValue, n := SIZEOF(LREAL));Hч        AssertEquals_LREAL(Expected := lrealExpected, Actual := lrealActual, Delta := 0.0, Message := Message);I    (* LTIME *)J═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LTIME THENK╬        MEMCPY(destAddr := ADR(ltimeExpected), srcAddr := Expected.pValue, n := SIZEOF(LTIME));LІ        MEMCPY(destAddr := ADR(ltimeActual), srcAddr := Actual.pValue, n := SIZEOF(LTIME));Mб        AssertEquals_LTIME(Expected := ltimeExpected, Actual := ltimeActual, Message := Message);N    (* LWORD *)O═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LWORD THENP╬        MEMCPY(destAddr := ADR(lwordExpected), srcAddr := Expected.pValue, n := SIZEOF(LWORD));QІ        MEMCPY(destAddr := ADR(lwordActual), srcAddr := Actual.pValue, n := SIZEOF(LWORD));Rб        AssertEquals_LWORD(Expected := lwordExpected, Actual := lwordActual, Message := Message);S    (* REAL *)T·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_REAL THENU╨        MEMCPY(destAddr := ADR(realExpected), srcAddr := Expected.pValue, n := SIZEOF(REAL));V╡        MEMCPY(destAddr := ADR(realActual), srcAddr := Actual.pValue, n := SIZEOF(REAL));Wь        AssertEquals_REAL(Expected := realExpected, Actual := realActual, Delta := 0.0, Message := Message);X    (* SINT *)Y·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_SINT THENZ╨        MEMCPY(destAddr := ADR(sintExpected), srcAddr := Expected.pValue, n := SIZEOF(SINT));[╡        MEMCPY(destAddr := ADR(sintActual), srcAddr := Actual.pValue, n := SIZEOF(SINT));\╪        AssertEquals_SINT(Expected := sintExpected, Actual := sintActual, Message := Message);]     (* STRING *)^╒    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING THEN_Б        MEMCPY(destAddr := ADR(stringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));`ж        MEMCPY(destAddr := ADR(stringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));aх        AssertEquals_STRING(Expected := stringExpected, Actual := stringActual, Message := Message);b    (* TIME *)c·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIME THENd╨        MEMCPY(destAddr := ADR(timeExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME));e╡        MEMCPY(destAddr := ADR(timeActual), srcAddr := Actual.pValue, n := SIZEOF(TIME));f╪        AssertEquals_TIME(Expected := timeExpected, Actual := timeActual, Message := Message);g*    (* TIME_OF_DAY *)h╗    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIMEOFDAY THENiр        MEMCPY(destAddr := ADR(timeOfDayExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME_OF_DAY));jй        MEMCPY(destAddr := ADR(timeOfDayActual), srcAddr := Actual.pValue, n := SIZEOF(TIME_OF_DAY));kч        AssertEquals_TIME_OF_DAY(Expected := timeOfDayExpected, Actual := timeOfDayActual, Message := Message);l    (* UDINT *)m═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UDINT THENn╬        MEMCPY(destAddr := ADR(udintExpected), srcAddr := Expected.pValue, n := SIZEOF(UDINT));oІ        MEMCPY(destAddr := ADR(udintActual), srcAddr := Actual.pValue, n := SIZEOF(UDINT));pб        AssertEquals_UDINT(Expected := udintExpected, Actual := udintActual, Message := Message);q    (* UINT *)r·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UINT THENs╨        MEMCPY(destAddr := ADR(uintExpected), srcAddr := Expected.pValue, n := SIZEOF(UINT));t╡        MEMCPY(destAddr := ADR(uintActual), srcAddr := Actual.pValue, n := SIZEOF(UINT));u╪        AssertEquals_UINT(Expected := uintExpected, Actual := uintActual, Message := Message);v    (* ULINT *)w═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_ULINT THENx╬        MEMCPY(destAddr := ADR(ulintExpected), srcAddr := Expected.pValue, n := SIZEOF(ULINT));yІ        MEMCPY(destAddr := ADR(ulintActual), srcAddr := Actual.pValue, n := SIZEOF(ULINT));zб        AssertEquals_ULINT(Expected := ulintExpected, Actual := ulintActual, Message := Message);{    (* USINT *)|═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_USINT THEN}╬        MEMCPY(destAddr := ADR(usintExpected), srcAddr := Expected.pValue, n := SIZEOF(USINT));~І        MEMCPY(destAddr := ADR(usintActual), srcAddr := Actual.pValue, n := SIZEOF(USINT));б        AssertEquals_USINT(Expected := usintExpected, Actual := usintActual, Message := Message);─    (* WORD *)│·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WORD THEN┌╨        MEMCPY(destAddr := ADR(wordExpected), srcAddr := Expected.pValue, n := SIZEOF(WORD));┐╡        MEMCPY(destAddr := ADR(wordActual), srcAddr := Actual.pValue, n := SIZEOF(WORD));└╪        AssertEquals_WORD(Expected := wordExpected, Actual := wordActual, Message := Message);┘Х(* If we've come to this row, it means that the data input is not any of the standard primitive data types, and thus├H   we need to do special handling *)┤╬TestInstancePath := AddTestNameToInstancePath(TestInstancePath := FINDTestSuiteInstancePath());┬PIF AnyComparator.DataTypesNotEquals THEN┴Б    ExpectedDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString((Expected.TypeClass)));┼■    ExpectedDataString := CONCAT(STR1 := ExpectedDataString, STR2 := ')');▀ж    ActualDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString(Actual.TypeClass));▄▄    ActualDataString := CONCAT(STR1 := ActualDataString, STR2 := ')');█TELSIF AnyComparator.DataSizeNotEquals THEN▌д    ExpectedDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Expected.diSize));▐╪    ActualDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Actual.diSize));░ZELSIF AnyComparator.DataContentNotEquals THEN▒Э    FOR Count := 0 TO MIN(Expected.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)▓─        ExpectedDataString := CONCAT(STR1 := ExpectedDataString,⌠л                                                  STR2 := BYTE_TO_HEXSTR(in := Expected.pValue[Count],■н                                                                                       iPrecision := 2,∙т                                                                                       bLoCase := FALSE));√    END_FOR≈√    ExpectedDataString := CONCAT(STR1 := '0x', STR2 := ExpectedDataString);≤Ь    FOR Count := 0 TO MIN(Actual.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)≥x        ActualDataString := CONCAT(STR1 := ActualDataString, д                                                STR2 := BYTE_TO_HEXSTR(in := Actual.pValue[Count],⌡й                                                                                     iPrecision := 2,°п                                                                                     bLoCase := FALSE));²▌    ActualDataString := CONCAT(STR1 := '0x', STR2 := ActualDataString);·ФIF (AnyComparator.DataTypesNotEquals OR AnyComparator.DataSizeNotEquals OR AnyComparator.DataContentNotEquals) THEN÷h    AssertResults.ReportResult(Expected := Expected,═`                               Actual := Actual,║d                               Message := Message,╒┬                               TestInstancePath := TestInstancePath,ё├                               AlreadyReported => AlreadyReported);є√IF NOT AlreadyReported AND (AnyComparator.DataTypesNotEquals OR AnyComparator.DataSizeNotEquals OR AnyComparator.DataContentNotEquals) THEN╔(    SetTestFailed();і√    AssertMessageFormatter.LogAssertFailure(Expected := ExpectedDataString,ї▌                                            Actual := ActualDataString,╗~                                            Message := Message,╘є                                            TestInstancePath := TestInstancePath);╙Interface╚L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}╛л// | Asserts that two objects (of any type) are equal. If they are not, an assertion error is created.ґр// | For REAL and LREAL it s recommended to use the AssertEquals_REAL or AssertEquals_LREAL respectively ╝╦// | as these give the possibility to specify a delta between the expected and actual value.╞//╟// Parameters:╠D//     | Expected   Expected value╡<//     | Actual   Actual valueЁ└//     | Message   The identifying message for the assertion errorЄ(// Positive example:╣4// .. code-block:: codesysІ//     VARЇ0//         a : INT := 5;╦0//         b : INT := 5;╧//     END_VAR╨>//     TEST('Test_ANY_Equals');╩D//     AssertEquals(Expected := a,╪@//                  Actual := b,Ґ`//                  Message := 'Values differ');╬.//     TEST_FINISHED();©&// Failing example:ю2//         b : UINT := 5;аP//     TEST('Test_ANY_Differ_DataType');б4METHOD PUBLIC AssertEqualsцVAR_INPUTдJ    Expected : ANY; // Expected valueеp    Actual : ANY; // The value to check against expectedф     Message : T_MaxString; // The identifying message for the assertion errorгEND_VARхVARи"    Count : DINT;йH    ExpectedDataString : STRING(80);кD    ActualDataString : STRING(80);лF    TestInstancePath : T_MaxString;м6    AlreadyReported : BOOL;нJ    AnyComparator : FB_AnyComparator;о0    boolExpected : BOOL;п,    boolActual : BOOL;я0    byteExpected : BYTE;р,    byteActual : BYTE;с0    dateExpected : DATE;т,    dateActual : DATE;уP    dateAndTimeExpected : DATE_AND_TIME;жL    dateAndTimeActual : DATE_AND_TIME;в0    dintExpected : DINT;ь,    dintActual : DINT;ы4    dwordExpected : DWORD;з0    dwordActual : DWORD;ш,    intExpected : INT;э(    intActual : INT;щ0    lintExpected : LINT;ч,    lintActual : LINT;ъ4    lrealExpected : LREAL;Ю0    lrealActual : LREAL;А4    ltimeExpected : LTIME;Б0    ltimeActual : LTIME;Ц4    lwordExpected : LWORD;Д0    lwordActual : LWORD;Е0    realExpected : REAL;Ф,    realActual : REAL;Г0    sintExpected : SINT;Х,    sintActual : SINT;ИB    stringExpected : T_MaxString;Й>    stringActual : T_MaxString;К0    timeExpected : TIME;Л,    timeActual : TIME;МH    timeOfDayExpected : TIME_OF_DAY;НD    timeOfDayActual : TIME_OF_DAY;О4    udintExpected : UDINT;П0    udintActual : UDINT;Я0    uintExpected : UINT;Р,    uintActual : UINT;С4    ulintExpected : ULINT;Т0    ulintActual : ULINT;У4    usintExpected : USINT;Ж0    usintActual : USINT;В0    wordExpected : WORD;Ь,    wordActual : WORD;пппEЙпп	
ґзп-
пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґ(зп-пп	
ґ	зп-пп	
ґ
зп-пп	
ґзп-пп	
ґзп-пп	
ґ
зп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґ)зп-пп	
ґ*зп-пп	
ґзп-пп	
ґзп-пп	
ґзп-пп	
ґзп- пп	
ґзп-пп	
ґзп-!пп	
ґзп-"пп	
ґзп-#пп	
ґзп-$пп	
ґзп-%пп	
ґзп-пп	
ґ зп- пп	
ґ!зп-пп	
ґ"зп-&пп	
ґ#зп-'пп	
ґ$зп-(пп	
ґ%зп-)пп	
ґ&зп-*пп	
ґ'зп-пп	
ґ(зп- пп	
ґ)зп-пп	
ґ*зп-+пп	
ґ+зп-,пп	
ґ,зп--пп	
ґ-зп-.пп	
ґ.зп-/пп	
ґ/зп-пп	
ґ0зп- пп	
ґ1зп-пп	
ґ2зп-0пп	
ґ3зп-1пп	
ґ4зп-2пп	
ґ5зп-3пп	
ґ6зп-4пп	
ґ7зп-пп	
ґ8зп- пп	
ґ9зп-пп	
ґ:зп-5пп	
ґ;зп-6пп	
ґ<зп-7пп	
ґ=зп-8пп	
ґ>зп-9пп	
ґ?зп-пп	
ґ@зп- пп	
ґAзп-пп	
ґBзп-:пп	
ґCзп-;пп	
ґDзп-<пп	
ґEзп-=пп	
ґFзп->пп	
ґGзп-пп	
ґHзп- пп	
ґIзп-пп	
ґJзп-?пп	
ґKзп-@пп	
ґLзп-Aпп	
ґMзп-Bпп	
ґNзп-Cпп	
ґOзп-пп	
ґPзп- пп	
ґQзп-пп	
ґRзп-Dпп	
ґSзп-Eпп	
ґTзп-Fпп	
ґUзп-Gпп	
ґVзп-Hпп	
ґWзп-пп	
ґXзп- пп	
ґYзп-пп	
ґZзп-Iпп	
ґ[зп-Jпп	
ґ\зп-Kпп	
ґ]зп-Lпп	
ґ^зп-Mпп	
ґ_зп-пп	
ґ`зп- пп	
ґaзп-пп	
ґbзп-Nпп	
ґcзп-Oпп	
ґdзп-Pпп	
ґeзп-Qпп	
ґfзп-Rпп	
ґgзп-пп	
ґhзп- пп	
ґiзп-пп	
ґjзп-Sпп	
ґkзп-Tпп	
ґlзп-Uпп	
ґmзп-Vпп	
ґnзп-Wпп	
ґoзп-пп	
ґpзп- пп	
ґqзп-пп	
ґrзп-Xпп	
ґsзп-Yпп	
ґtзп-Zпп	
ґuзп-[пп	
ґvзп-\пп	
ґwзп-пп	
ґxзп- пп	
ґyзп-пп	
ґzзп-]пп	
ґ{зп-^пп	
ґ|зп-_пп	
ґ}зп-`пп	
ґ~зп-aпп	
ґзп-пп	
ґ─зп- пп	
ґ│зп-пп	
ґ┌зп-bпп	
ґ┐зп-cпп	
ґ└зп-dпп	
ґ┘зп-eпп	
ґ├зп-fпп	
ґ┤зп-пп	
ґ┬зп- пп	
ґ┴зп-пп	
ґ┼зп-gпп	
ґ▀зп-hпп	
ґ▄зп-iпп	
ґ█зп-jпп	
ґ▌зп-kпп	
ґ▐зп-пп	
ґ░зп- пп	
ґ▒зп-пп	
ґ▓зп-lпп	
ґ⌠зп-mпп	
ґ■зп-nпп	
ґ∙зп-oпп	
ґ√зп-pпп	
ґ≈зп-пп	
ґ≤зп- пп	
ґ≥зп-пп	
ґ зп-qпп	
ґ⌡зп-rпп	
ґ°зп-sпп	
ґ²зп-tпп	
ґ·зп-uпп	
ґ÷зп-пп	
ґ═зп- пп	
ґ║зп-пп	
ґ╒зп-vпп	
ґёзп-wпп	
ґєзп-xпп	
ґ╔зп-yпп	
ґізп-zпп	
ґїзп-пп	
ґ╗зп- пп	
ґ╘зп-пп	
ґ╙зп-{пп	
ґ╚зп-|пп	
ґ╛зп-}пп	
ґґзп-~пп	
ґ╝зп-пп	
ґ╞зп-пп	
ґ╟зп- пп	
ґ╠зп-пп	
ґ╡зп-─пп	
ґЁзп-│пп	
ґЄзп-┌пп	
ґ╣зп-┐пп	
ґІзп-└пп	
ґЇзп-пп	
ґ╦зп- пп	
ґ╧зп-пп	
ґ╨зп-пп	
ґ╩зп-пп	
ґ╪зп-┘пп	
ґҐзп-├пп	
ґ╬зп-┤пп	
ґ©зп-пп	
ґюзп-┬пп	
ґазп-┴пп	
ґбзп-┼пп	
ґцзп-▀пп	
ґдзп-▄пп	
ґезп-█пп	
ґфзп-▌пп	
ґгзп-┼пп	
ґхзп-▐пп	
ґизп-▄пп	
ґйзп-░пп	
ґкзп-▒пп	
ґлзп-▓пп	
ґмзп-⌠пп	
ґнзп-■пп	
ґозп-∙пп	
ґпзп-√пп	
ґязп-≈пп	
ґрзп-пп	
ґсзп-≤пп	
ґтзп-≥пп	
ґузп- пп	
ґжзп-⌡пп	
ґвзп-°пп	
ґьзп-√пп	
ґызп-²пп	
ґззп-пп	
ґшзп-пп	
ґэзп-·пп	
ґщзп-÷пп	
ґчзп-═пп	
ґъзп-║пп	
ґЮзп-╒пп	
ґАзп-ёпп	
ґБзп-пп	
ґЦзп-пп	
ґДзп-єпп	
ґЕзп-╔пп	
ґФзп-пп	
ґГзп-іпп	
ґХзп-їпп	
ґИзп-╗пп	
ґЙзп-╘пп	
ґзп-п╙╚пE`пп	
ґ=зп-╛пп	
ґ>зп-ґпп	
ґ?зп-╝пп	
ґ@зп-╞пп	
ґAзп-╟пп	
ґBзп-╠пп	
ґCзп-╡пп	
ґDзп-Ёпп	
ґEзп-╞пп	
ґFзп-Єпп	
ґGзп-╞пп	
ґHзп-╣пп	
ґIзп-╞пп	
ґJзп-Іпп	
ґKзп-Їпп	
ґLзп-╦пп	
ґMзп-╧пп	
ґNзп-╞пп	
ґOзп-╨пп	
ґPзп-╩пп	
ґQзп-╪пп	
ґRзп-Ґпп	
ґSзп-╬пп	
ґTзп-╞пп	
ґUзп-©пп	
ґVзп-╞пп	
ґWзп-╣пп	
ґXзп-╞пп	
ґYзп-Іпп	
ґZзп-Їпп	
ґ[зп-юпп	
ґ\зп-╧пп	
ґ]зп-╞пп	
ґ^зп-апп	
ґ_зп-╩пп	
ґ`зп-╪пп	
ґaзп-Ґпп	
ґ<зп-╬пп	
ґbзп-пп	
ґПзп-бпп	
ґЯзп-цпп	
ґРзп-дпп	
ґСзп-епп	
ґТзп-фпп	
ґУзп-гпп	
ґЖзп-хпп	
ґВзп-ипп	
ґЬзп-йпп	
ґЫзп-кпп	
ґЗзп-лпп	
ґШзп-мпп	
ґЭзп-нпп	
ґЩзп-пп	
ґЧзп-опп	
ґЪзп-ппп	
ґзп-япп	
ґзп-рпп	
ґзп-спп	
ґзп-тпп	
ґзп-упп	
ґзп-жпп	
ґзп-впп	
ґзп-ьпп	
ґзп-ыпп	
ґ	зп-зпп	
ґ
зп-шпп	
ґзп-эпп	
ґзп-щпп	
ґ
зп-чпп	
ґзп-ъпп	
ґзп-Юпп	
ґзп-Апп	
ґзп-Бпп	
ґзп-Цпп	
ґзп-Дпп	
ґзп-Епп	
ґзп-Фпп	
ґзп-Гпп	
ґзп-Хпп	
ґзп-Ипп	
ґзп-Йпп	
ґзп-Кпп	
ґзп-Лпп	
ґзп-Мпп	
ґзп-Нпп	
ґзп-Опп	
ґзп-Ппп	
ґ зп-Япп	
ґ!зп-Рпп	
ґ"зп-Спп	
ґ#зп-Тпп	
ґ$зп-Упп	
ґ%зп-Жпп	
ґ&зп-Впп	
ґ'зп-Ьпп	
ґзп-г