crystcat/0000755001325400021140000000000015114265054012061 5ustar gaehlerusercrystcat/grp/0000755001325400021140000000000015114265054012651 5ustar gaehlerusercrystcat/grp/crystcat.grp0000644001325400021140000041650713232361444015233 0ustar gaehleruser############################################################################# ## #A crystcat.grp GAP group library Volkmar Felsch ## #Y Copyright (C) 1994, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions that allow to access most of the data which ## are listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## ## For each of the dimensions 2, 3, and 4, the tables of the book are ## arranged in the following hierarchical format: ## dimension, ## crystal family, ## crystal system, ## Q-class (geometric crystal class), ## Z-class (arithmetic crystal class), ## space-group type. ## ## The following conventions for local variables are used throughout in all ## functions of this library. ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## ## For most of the functions in this library there are two versions given, ## a public version and an internal version which are distinguished by the ## prefix "CR_" in the name of the internal version and by different ## parameter lists. The reason for that distinction is that in the public ## functions the arguments are checked for being in range whereas no ## argument checking is done in the internal functions. ## ############################################################################# ## ## GLZ2 . . . . . . . . . . . . . . . . . . . general linear group GL(2,Z) ## GLZ2 := Group( [ [0,1], [1,0] ], [ [1,0], [1,1], ], [ [-1,0], [0,1], ] ); # GLZ2.operations := GLZOps; SetName( GLZ2, "GLZ2" ); SetSize( GLZ2, "infinity" ); ############################################################################# ## ## GLZ3 . . . . . . . . . . . . . . . . . . . general linear group GL(3,Z) ## GLZ3 := Group( [ [0,1,0], [0,0,1], [1,0,0] ], [ [1,0,0], [1,1,0], [0,0,1] ], [ [-1,0,0], [0,1,0], [0,0,1] ] ); # GLZ3.operations := GLZOps; SetName( GLZ3, "GLZ3" ); SetSize( GLZ3, "infinity" ); ############################################################################# ## ## GLZ4 . . . . . . . . . . . . . . . . . . . general linear group GL(4,Z) ## GLZ4 := Group( [ [0,1,0,0], [0,0,1,0], [0,0,0,1], [1,0,0,0] ], [ [1,0,0,0], [1,1,0,0], [0,0,1,0], [0,0,0,1] ], [ [-1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1] ] ); # GLZ4.operations := GLZOps; SetName( GLZ4, "GLZ4" ); SetSize( GLZ4, "infinity" ); ############################################################################# ## #F CrystalGroupsCatalogue . . . . . . . . . . . . . . . . . . . . . . . . . ## ## The data listed in this catalogue are essentially the same as those ## listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## For each of the dimensions 2, 3, and 4 the catalogue contains a record ## 'CR', say, which consists of the folowing components. ## ## 'CR.bZClass' is a Boolean list containing the numbers of those Z-classes ## which are Bravais Z-classes. ## ## 'CR.codedConjugatorDadeGroup' is a list of matrices used to conjugate ## Z-class representative groups into subgroups of Dade groups. Each ## entry is of the form p1 + 140 * p2 + 140^2 * p3 + ... + 140^(dim-1) ## * p_dim, where dim is the given dimension, and the pi's are ## pointers to the list 'CR.rowConjugatorDadeGroup'. (It is addressed ## by pointers which are contained in entries of the list ## 'CR.codedDadeGroupsZClass'.) ## ## 'CR.codedDadeGroupsZClass' is a list which for each Z-class contains in ## form of a sublist of consecutive entries representatives of those ## conjugacy classes of subgroups of Dade groups which contain groups ## from that Z-class. Each entry is of the form d or p * 10 + d, where ## d is the number of a Dade group and p is a pointer to the list ## 'CR.codedConjugatorDadeGroup'. (See also list ## 'CR.nullDadeGroupsZClass'.) ## ## 'CR.codedDecompositionQClass' is a list which for each Q-class contains ## an entry of the form t1 or of the form 10 * t2 + t1, where t1 is a ## pointer to the text string list 'CR_TextStrings.QClass' and t2 is a ## pointer to the text string list 'CR_TextStrings.QConstituents'. ## ## 'CR.codedGeneratorsSpaceGroup' is a list which for each space-group type ## that is not the representative of its Z-Class contains an entry of ## the form p1 + m * p2 + m^2 * p3 + ... + m^(n-1) * pn, where m equals ## 'CR.modulSp', and n is the number of the given non-translation ## generators of the space group, and the pi's are pointers to the list ## 'CR.columnGeneratorSpaceGroup'. ## ## 'CR.codedGeneratorZClass' is a list which for each Z-class representative ## matrix group contains its generators in form of a sublist of ## consecutive entries. Each entry is of the form p1 + m * p2 + m^2 * p3 ## + ... + m^(dim-1) * p_dim, where m equals 'CR.modulZ', and dim is ## the given dimension, and the pi's are pointers to the list ## 'CR.rowGeneratorZClass'. (See also list 'CR.nullGeneratorsZClass'.) ## ## 'CR.codedIsomorphismTypeQClass' provides for each Q-class an entry of the ## form 100 * t + p, where t is the isomorphism type number of the ## respective representative group (with respect to all groups of the ## same order), and p is either zero or a pointer to the text string ## list 'CR_TextStrings.isomorphismType'. ## ## 'CR.codedNormalizerZClass' provides for each Z-class an entry of the form ## 1000 * n2 + n1, where each of n1 and n2 is either zero or a pointer ## to the list 'CR.GeneratorsZClass'. Let us abbreviate that list by ## "gens". Then the normalizer of the representative matrix group of the ## given Z-class can be computed from n1 and n2 as follows. If n1 = 0, ## then the normalizer is one of the Z-class represenative matrix ## groups, and n2 is a pointer to its generators. If n2 = 0, then the ## normalizer is infinite and will be generated by the given group ## together with the list of generators to which n1 points. If both, ## n1 and n2, are non-zero, then n1 point to the generators of some ## Z-class representative which has to be conjugated by the first ## matrix in the lisin pointed to by nin in order to get the normalizer. ## ## 'CR.codedPresentationQClass' provides for each Q-class an entry of the ## form 10 * p + n, where n is the number of generators of the ## representative group of the given Q-class, and p is a pointer to the ## corresponding list of relators in 'CR.relatorNumbersQClass'. ## ## 'CR.codedPropertiesFamily' provides for each crystal family an entry of ## the form 1000 * f + 100 * b + 10 * q + r, where f is the number of ## free parameters, b is the number of Bravais systems in the family, ## and q and r are pointers to appropriate text strings in the list ## 'CR_TextStrings.family' which describe the rational and the real ## decomposition pattern, respectively. ## ## 'CR.codedPropertiesZClass' provides for each Z-class an entry of the form ## 100 * c + 10 * b + d, where c is the order of the associated ## cohomology group, b is the Bravais type of the given Z-class, and ## d is a pointer to a text string in the list 'CR_TextStrings.ZClass' ## which describes the decomposition pattern. ## ## 'CR.columnGeneratorSpaceGroup' is a list of all different columns which ## occur as last column in at least one of the space group generators ## listed in the catalogue. Note that each column in the list has been ## multiplied by the common denominator of its entries. ## ## 'CR.crystalSystemQClass' provides for each Q-class the number of the ## crystal system to which it belongs. ## ## 'CR.dimension' is the given dimension, i.e. 2, 3, or 4. ## ## 'CR.familyCrystalSystem' provides for each crystal system the family to ## which it belongs. ## ## 'CR.fixedPointFreeSpaceGroup' is a Boolean list containing those ## space-group types for which the corresponding space groups are ## fixed-point-free. ## ## 'CR.GLZ is the group GL(dim,Z), where dim is the given dimension. ## ## 'CR.HermannMauguinSymbol' is a list of the Hermann-Mauguin associated to ## the given dimension in the order in which they are listed in the ## International Tables. (Only for dimensions 2 or 3.) ## ## 'CR.hQClass' is a Boolean list containing the numbers of those Q-classes ## which are holohedries. ## ## 'CR.internatTableSpaceGroupType' provides for each space-group type its ## number in the International Tables. If a space-group type splits into ## an enantiomorphic pair, then the corresponding entry of the list ## contains both numbers in the form 1000 * it1 + it2. (Only for ## dimension 3.) ## ## 'CR.modulSp' is an integer used to pack and unpack the entries of list ## CR.codedGeneratorsSpaceGroup. ## ## 'CR.modulZ is an integer used to pack and unpack the entries of list ## CR.codedGeneratorZClass. ## ## 'CR.nameCrystalFamily' provides for each crystal family its family name. ## ## 'CR.nullDadeGroupsZClass' contains for each Z-class a pointer p to the ## list 'CR.codedDadeGroupsZClass' such that, for some n, the entries ## p + 1 to p + n of that list provide representatives of those ## conjugacy classes of subgroups of Dade groups which contain groups ## from the respective Z-class. The last entry points just to the last ## generator in the list. ## ## 'CR.nullGeneratorsZClass' contains for each Z-class a pointer p to the ## list 'CR.codedGeneratorZClass' such that, for some n, the entries ## p + 1 to p + n of that list provide the generators of the ## representative matrix group of the respective Z-class. Additional ## entries point to sublists which represent generators of infinite ## normalizers or conjugating elements which are used to compute certain ## finite normalizers. The last entry points just to the last generator ## in the list. ## ## 'CR.nullQClass' provides for each crystal system the number of Q-classes ## in the preceding crystal systems. An additional entry gives the ## number of all Q-classes. ## ## 'CR.nullSpaceGroup' provides for each Z-class the number of space-group ## types in the preceding Z-classes. An additional entry gives the ## number of all space-group types. ## ## 'CR.nullZClass' provides for each Q-class the number of Z-classes in the ## preceding Q-classes. An additional entry gives the number of all ## Z-classes. ## ## 'CR.orbitLengthSpaceGroup' provides for each space-group type which is ## not the Z-class representative the orbit length associated with that ## space-group type. ## ## 'CR.orderQClass' provides for each Q-class the order of the groups in ## that Q-class. ## ## 'CR.parametersDadeGroup' is a list which for each Dade group of the given ## dimension contains its parameter list [ dim, sys, qcl, zcl ]. ## ## 'CR.QClassZClass' provides for each Z-class the number of the Q-class to ## which it belongs. ## ## 'CR.relatorNumbersQClass' is a list of lists of relators, where the ## relators in the lists are represented by pointers to the list ## 'CR.relatorWordsQClass'. ## ## 'CR.rowConjugatorDadeGroup' is a list of all different rows which occur ## in the matrices which are used to conjugate Z-class representative ## groups into subgroups of Dade groups. (It is addressed by pointers ## which are contained in entries of the list ## 'CR.codedConjugatorDadeGroup'.) ## ## 'CR.rowGeneratorZClass' is a list of all different rows which occur in ## the matrices which are used to generate the Z-class representative ## groups. (It is addressed by pointers which are contained in entries ## of the lists 'CR.nullGeneratorsZClass' and 'CR.codedGeneratorZClass'. ## ## 'CR.spaceGroupIdentity' is the identity matrix of the associated space ## groups. ## ## 'CR.spaceGroupTypeInternatTable' provides for each International Table ## number the corresponding "global parameters" z und t (cf. function ## 'CR_Parameters') in the form 100 * t + z. (Only for dimensions 2 and ## 3.) ## ## 'CR.splittingQClass' is a Boolean list containing the numbers of those ## Q-classes which split into enantiomorphic pairs. (Only for dimension ## 4.) ## ## 'CR.splittingSpaceGroupType' is a Boolean list containing those ## space-group types which split into enantiomorphic pairs. (Only for ## dimensions 3 and 4.) ## ## 'CR.splittingZClass' is a Boolean list containing the numbers of those ## Z-classes which split into enantiomorphic pairs. (Only for dimension ## 4.) ## ## 'CR_TextStrings.roman' is a list of the 23 smallest non-negative integers ## expressed by Roman numerals. ## CR_TextStrings := rec( ); CR_2 := rec( ); CR_3 := rec( ); CR_4 := rec( ); CrystGroupsCatalogue := [ CR_TextStrings, CR_2, CR_3, CR_4 ]; CR_TextStrings.crystalSystem := ["#I Crystal system "," Q-class"," Q-classes","; holohedry (",",",": ", ")"]; CR_TextStrings.family := ["irreducible","decomposition pattern ","1+1","1+1+1","1+1+1+1", "1+1+2","1+2","1+3","2+2","Q-","R-","#I Family ",": ","; ","s", " free parameter"," crystal system"," Bravais flock",";\n#I "]; CR_TextStrings.isomorphismType := ["C1","C2","C3","C2xC2","C4","C5","C6","D6","C2xC2xC2","C4xC2", "C8","D8","Q8","C3xC3","C10","D10","C6xC2","C12","D12","Q12", "A4","C2xC2xC2xC2","C4xC2xC2","C4xC4","D8xC2","<2,2,2>2","(4,4/2,2)", "<2,2/4;2>","<2,2/2>","D16","<-2,4/2>","C6xC3","D6xC3","D(C3xC3)", "D10xC2","C6xC2xC2","C12xC2","D8xC3","Q8xC3","D12xC2","D6xC4", "Q12xC2","<-2,2,3>","A4xC2","(4,6/2,2)","D24","<2,3,3>","S4", "D8xC2xC2","D8xC4","C4^S2","(C2xC2)^S2","D(C4xC4)","C6xC6","D6xC6", "Q12xC3","D(C3xC3)xC2","D6xD6","(3,4,4;3)","D8xC6","D12xC2xC2", "D12xC4","A4xC2xC2","(4,6/2,2)xC2","D24xC2","S4xC2","D8xD6","A5", "D8xD8","D12xC6","D(C6xC6)","(4,6/2,2)xC3","<2,3,3>xC3","D12xD6", "(3,4,4;3)xC2","D6^S2","S4xC2xC2","D12xD8","S5","A5xC2","(D6^S2)xC2", "D12xD12","S5xC2","D12^S2","C2^S4","[3,4,3]"]; CR_TextStrings.QClass := ["Q-constituents ","Q-irreducible; ","R-irreducible; ","C-irreducible; ", "; cc; ","; ncc; ","#I Q-class ","#I *Q-class ","): size ", "; isomorphism type "," Z-class"," Z-classes"," space group", " space grps",",","(",".","H ","; "," = ",";\n#I "]; CR_TextStrings.QConstituents := ["(2,1,1)+(2,1,2)","(4,1,1)+(4,1,2)+(4,3,1)","(4,1,1)+(4,1,2)+(4,3,2)", "(4,1,1)+(4,1,2)+(4,4,1)","(4,1,1)+(4,1,2)+(4,4,2)", "(4,1,1)+(4,1,2)+(4,4,3)","(4,1,1)+(4,1,2)+(4,4,4)","(3,1,1)+2*(3,1,2)", "(4,1,1)+3*(4,1,2)","(3,1,1)+(3,3,1)","(3,1,1)+(3,3,2)","(3,1,1)+(3,4,1)", "(3,1,1)+(3,4,2)","(3,1,1)+(3,4,3)","(3,1,1)+(3,4,4)","(4,1,1)+(4,7,1)", "(4,1,1)+(4,7,2)","(4,1,1)+(4,7,3)","(4,1,1)+(4,7,4)","(4,1,1)+(4,7,5)", "(3,1,2)+(3,3,1)","(3,1,2)+(3,3,2)","(3,1,2)+(3,4,1)","(3,1,2)+(3,4,2)", "(3,1,2)+(3,4,3)","(3,1,2)+(3,4,4)","(4,1,2)+(4,7,1)","(4,1,2)+(4,7,2)", "(4,1,2)+(4,7,3)","(4,1,2)+(4,7,4)","(4,1,2)+(4,7,5)","2*(2,1,1)", "2*(3,1,1)+(3,1,2)","2*(4,1,1)+2*(4,1,2)","2*(4,1,1)+(4,3,1)", "2*(4,1,1)+(4,3,2)","2*(4,1,1)+(4,4,1)","2*(4,1,1)+(4,4,2)", "2*(4,1,1)+(4,4,3)","2*(4,1,1)+(4,4,4)","2*(2,1,2)","2*(4,1,2)+(4,3,1)", "2*(4,1,2)+(4,3,2)","2*(4,1,2)+(4,4,1)","2*(4,1,2)+(4,4,2)", "2*(4,1,2)+(4,4,3)","2*(4,1,2)+(4,4,4)","2*(4,3,1)","2*(4,3,2)", "2*(4,4,1)","2*(4,4,2)","2*(4,4,3)","2*(4,4,4)","3*(3,1,1)", "3*(4,1,1)+(4,1,2)","3*(3,1,2)","(4,3,1)+(4,3,2)","(4,3,1)+(4,4,1)", "(4,3,1)+(4,4,2)","(4,3,1)+(4,4,3)","(4,3,1)+(4,4,4)","(4,3,2)+(4,4,1)", "(4,3,2)+(4,4,2)","(4,3,2)+(4,4,3)","(4,3,2)+(4,4,4)","4*(4,1,1)", "4*(4,1,2)","(4,4,1)+(4,4,2)","(4,4,1)+(4,4,3)","(4,4,1)+(4,4,4)", "(4,4,2)+(4,4,3)","(4,4,2)+(4,4,4)","(4,4,3)+(4,4,4)"]; CR_TextStrings.spaceGroup := ["#I Space-group type ","#I *Space-group type ","; IT(", "; fp-free","orbit size ","(",",",") = ",", IT(","; ",";\n#I ", ")","#I Non-translation generators of ","\n\n"]; CR_TextStrings.ZClass := ["; Z-irreducible","; Z-reducible","; Z-decomposable", "; fully Z-reducible","#I Z-class ","#I *Z-class ", ": Bravais type "," space group"," space groups", "; cohomology group size "," = Z(",")",",","(","B ","/",";\n#I "]; CR_TextStrings.roman := ["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII", "XIV","XV","XVI","XVII","XVIII","XIX","XX","XXI","XXII","XXIII"]; CR_2.bZClass := BlistList( [1..13], [2,5,6,8,13] ); CR_2.codedConjugatorDadeGroup := [142,421,563]; CR_2.codedDadeGroupsZClass := [2,1,2,1,21,12,32,21,1,12,1,1,1,2,2,2,2,2]; CR_2.codedDecompositionQClass := [325,415,16,416,3,4,3,4,3,4]; CR_2.codedGeneratorsSpaceGroup := [2,1,3,3]; CR_2.codedGeneratorZClass := [16,6,10,26,10,6,26,6,25,6,10,25,6,19,1,19,26,19,6,19,26,6,19,10,2,17]; CR_2.codedIsomorphismTypeQClass := [101,102,102,104,205,412,103,208,107,319]; CR_2.codedNormalizerZClass := [14000,14000,5,6,8,8,8,8,13,13,13,13,13]; CR_2.codedPresentationQClass := [11,21,21,202,212,243,401,462,452,433]; CR_2.codedPropertiesFamily := [3133,2233,1101,1101]; CR_2.codedPropertiesZClass := [114,114,214,122,414,122,111,211,111,111,111,111,111]; CR_2.columnGeneratorSpaceGroup := [[0,0,1],[0,1,2],[1,0,2],[1,1,2]]; CR_2.crystalSystemQClass := [1,1,2,2,3,3,4,4,4,4]; CR_2.dimension := 2; CR_2.familyCrystalSystem := [1..4]; CR_2.fixedPointFreeSpaceGroup := BlistList( [1..17], [1,4] ); CR_2.GLZ := GLZ2; CR_2.HermannMauguinSymbol := ["p1","p2","pm","pg","cm","p2mm","p2mg","p2gg","c2mm","p4","p4mm", "p4gm","p3","p3m1","p31m","p6","p6mm"]; CR_2.hQClass := BlistList( [1..10], [2,4,6,10] ); CR_2.modulSp := 4; CR_2.modulZ := 6; CR_2.nameCrystalFamily := ["oblique","rectangular","square","hexagonal"]; CR_2.nullDadeGroupsZClass := [0,2,4,5,8,9,11,12,13,14,15,16,17,18]; CR_2.nullGeneratorsZClass := [0,1,2,3,4,6,8,10,13,14,16,18,20,23,26]; CR_2.nullQClass := [0,2,4,6,10]; CR_2.nullSpaceGroup := [0,1,2,4,5,8,9,10,12,13,14,15,16,17]; CR_2.nullZClass := [0,1,2,4,6,7,8,9,11,12,13]; CR_2.orbitLengthSpaceGroup := [1,2,1,1]; CR_2.orderQClass := [1,2,2,4,4,8,3,6,6,12]; CR_2.parametersDadeGroup := [[2,3,2,1,0],[2,4,4,1,0]]; CR_2.QClassZClass := [1,2,3,3,4,4,5,6,7,8,8,9,10]; CR_2.relatorNumbersQClass := [[1], [2], [2,10,22,28,40,61,92,129,163,198], [2,10,22,31,34,40,61,92,116,129,166,186,199,228,247], [2,10,22,31,40,61,92,129,174,202], [2,10,22,40,61,129], [2,10,24,28,34,40,62,92,116,142,168,186,201,227,249], [2,10,24,28,40,62,92,142,163,198], [2,10,24,28,40,62,92,142,168,201], [2,10,24,28,40,62,92,142,168,214], [2,10,24,30,40,78,80,100,106,108,109,130,153,175,176,177,179,210,217,219, 220], [2,10,24,33,40,78,80,100,107,108,110,111,112,113,114,115,130,153,175,176, 178,180,181,182,183,184,185,211,218,219,221,222,223,224,225,226], [2,10,24,40,62,142], [2,10,26,28,40,62,104,142,163,209], [2,10,26,28,40,78,92,130,168,209], [2,10,26,28,40,78,92,130,168,216], [2,10,26,28,40,78,93,130,164,216], [2,10,26,40,62,142], [2,10,26,40,78,130], [2,10,40], [2,11,40], [2,11,22,28,40,61,92,142,163,198], [2,11,22,40,61,129], [2,11,22,40,61,142], [2,17,22,28,35,38,40,61,105,117,125,147,172,189,195,198,230,237,244,250, 256], [2,17,22,28,36,37,40,61,105,120,124,147,172,190,194,198,231,236,241,251, 259], [2,17,22,28,36,40,61,105,118,147,172,191,198,233,243], [2,17,22,32,34,40,79,99,116,129,172,192,205,228,248], [2,17,22,32,35,37,39,40,79,96,122,123,128,147,167,186,196,197,205,234,239, 240,245,252,255,260,261,262], [2,17,22,32,35,37,40,79,96,122,123,147,167,186,196,205,234,239,245,252, 260], [2,17,22,32,35,40,79,98,121,147,165,188,212,232,246], [2,17,22,32,40,79,95,129,172,199], [2,17,25,28,40,79,92,133,168,215], [2,17,25,40,79,133], [2,17,26,28,40,61,92,147,163,216], [2,19,26,28,40,61,92,136,173,216], [2,19,26,28,40,61,92,148,173,216], [2,19,26,40,61,136], [2,19,26,40,61,148], [3], [3,10,22,28,40,73,92,129,163,198], [3,10,22,40,61,129], [3,10,22,40,73,129], [3,10,22,41,61,129], [3,10,40], [3,10,41], [3,16,22,40,73,146], [3,16,25,28,40,66,101,143,169,215], [3,16,25,40,79,131], [3,16,40], [3,19,22,41,61,148], [3,19,22,41,73,137], [3,19,25,28,40,79,101,137,168,207], [3,19,25,28,40,79,105,137,173,215], [3,19,25,40,79,137], [3,19,41], [3,21,22,41,61,149], [3,21,22,41,73,136], [3,21,41], [4], [4,10,22,28,35,37,40,74,102,119,126,129,169,187,193,198,229,238,242,253, 257], [4,10,22,28,35,37,40,74,102,119,127,129,169,187,193,198,229,235,242,254, 258], [4,10,22,28,35,40,74,102,119,129,169,187,198,229,242], [4,10,22,28,40,63,102,129,163,200], [4,10,22,28,40,74,92,129,163,198], [4,10,22,28,40,74,102,129,169,198], [4,10,22,40,61,129], [4,10,22,40,63,129], [4,10,22,40,74,129], [4,10,22,40,74,143], [4,10,22,40,78,129], [4,10,22,42,61,129], [4,10,40], [4,10,42], [4,12,24,28,42,63,102,130,170,202], [4,12,24,28,42,78,102,132,168,214], [4,12,24,29,42,63,92,130,168,203], [4,12,24,42,63,130], [4,12,24,42,78,132], [4,12,27,28,42,62,102,144,170,208], [4,12,27,42,63,132], [4,12,42], [4,17,22,28,40,79,102,147,172,213], [4,17,22,40,67,129], [4,17,22,40,74,147], [4,17,22,42,74,147], [4,17,25,28,40,62,102,132,163,206], [4,17,25,40,67,144], [4,17,40], [4,17,42], [4,18,26,48,50,52,54,71,82,84,87,89,139,150,154,157,160], [4,18,26,48,50,52,54,72,81,85,86,90,140,151,156,159,161], [4,20,26,49,51,53,55,56,57,58,59,60,70,83,84,88,91,141,152,155,158,162], [5], [5,10,43], [5,17,42], [6], [6,10,22,28,44,61,92,129,163,198], [6,10,22,40,61,129], [6,10,22,40,62,132], [6,10,22,40,64,129], [6,10,22,40,75,129], [6,10,22,40,75,144], [6,10,22,44,61,129], [6,10,22,44,75,145], [6,10,40], [6,10,44], [6,13,44], [6,16,22,40,75,146], [6,16,40], [6,17,22,44,75,134], [6,17,44], [6,19,22,40,75,148], [6,19,22,44,61,148], [6,19,22,44,75,137], [6,19,22,44,75,148], [6,19,25,28,40,69,92,138,173,215], [6,19,25,40,68,135], [6,19,40], [6,19,44], [7], [7,10,22,28,44,64,97,129,163,212], [7,10,22,28,44,76,94,129,163,212], [7,10,22,44,64,129], [7,10,22,44,65,145], [7,10,22,44,76,129], [7,10,42], [7,10,44], [7,10,45], [8], [8,10,46], [8,17,42], [9], [9,10,22,40,76,129], [9,10,22,40,77,129], [9,10,22,44,61,129], [9,10,22,44,76,129], [9,10,22,44,77,145], [9,10,23,47,76,144], [9,10,40], [9,10,44], [9,10,45], [9,10,47], [9,14,24,28,45,65,103,132,171,204], [9,14,24,45,65,132], [9,14,45], [9,15,44]]; CR_2.rowConjugatorDadeGroup := [[0,-1],[1,-1],[1,0],[1,1]]; CR_2.rowGeneratorZClass := [[-1,0],[0,-1],[0,1],[1,-1],[1,0],[1,1]]; CR_2.spaceGroupIdentity := [[1,0,0],[0,1,0],[0,0,1]]; CR_2.spaceGroupTypeInternatTable := [101,202,303,403,504,605,705,805,906,1007,1108,1208,1309,1410, 1511,1612,1713]; CR_3.bZClass := BlistList( [1..73], [2,7,8,18,19,20,21,36,37,48,58,71,72,73] ); CR_3.codedConjugatorDadeGroup := [79395,118877,176683,176831,177111,177382,177535,178513,178786, 178792,196429,196575,217297,217709,256914,294149,296253,296396, 334898]; CR_3.codedDadeGroupsZClass := [1,2,3,4,1,2,3,4,141,142,191,51,142,123,23,144,134,141,42, 31,81,42,93,13,174,74,141,142,191,81,142,93,123,174,134,2, 61,2,3,184,13,4,2,61,2,51,61,142,143,184,104,113,13,144, 2,61,2,3,184,13,4,2,13,144,2,13,144,2,13,144,142,13,144, 2,13,144,142,2,13,144,13,144,142,13,144,42,163,154,1,42, 163,154,1,42,163,154,1,1,42,163,154,1,1,42,163,154,1,1,1, 1,1,1,1,1,1,1,2,3,4,2,3,4,2,3,4,2,3,4,2,3,4]; CR_3.codedDecompositionQClass := [545,565,85,335,565,566,86,566,106,216,216,226,116,226,226, 126,256,246,136,266,146,236,256,266,156,246,266,4,4,4,4,4]; CR_3.codedGeneratorsSpaceGroup := [4,1,1,14,56,70,14,84,88,102,14,112,56,1,57,62,63,14,70, 71,76,1,14,112,1,113,18,112,8,14,798,1666,1176,1190,1568, 1582,1232,1246,1624,1638,112,126,1428,1442,14,196,1568,1582, 1764,252,112,1568,1092,17,1,104,14,1624,1638,994,238,14,1656, 1922,1670,994,14,1,15,1658,1672,1659,1673,8,994,1002,14,1656, 1670,1,1658,1659,8,994,14,196,210,23212,23226,23408,23422, 23184,23198,23380,23394,112,126,308,322,112,20090,20062,2,28, 28,113,1,1,1582,14,14,28,1,29,14,392,14,406,1,14,15,1,14, 14,196,210,1092,1092,23324,15288,3528,15288,30156,23436,23436, 20194,23325,3536,20194,1582,326550,326648,126,49504,49406,282716]; CR_3.codedGeneratorZClass := [3092,2624,2719,2570,2997,3164,2624,2719,2624,2570,2719,2985, 2570,2985,5062,276,4433,2783,2997,2985,3164,2985,2931,2570, 1071,276,1643,2783,2624,2719,2985,2624,2570,2985,2624,5062,276, 2624,4433,2783,3159,2985,1625,2783,2575,2985,4451,2783,2624, 3159,2985,2624,1625,2783,2719,3159,2985,4433,1625,2783,2997, 3159,2985,1643,1625,2783,2719,2575,2985,2997,2575,2985,1643, 4451,2783,4433,4451,2783,2624,2719,3159,2985,2624,4433,1625, 2783,3884,3121,2624,3884,2624,3121,2570,3884,2570,3121,2803, 3121,3164,3884,2931,3121,3164,3121,2624,2570,3884,2624,2570, 3121,2624,2803,3121,2985,3121,2731,3121,2624,2985,3121,2803, 2985,3121,2931,2985,3121,2931,2731,3121,2803,2731,3121,2624, 2803,2985,3121,3884,2719,2985,3884,5062,276,3884,4433,2783, 2624,3884,2719,2985,2624,3884,5062,276,2624,3884,4433,2783, 2803,3884,2719,2985,6595,3884,5062,276,3005,3884,4433,2783, 2931,3884,2719,2985,204,3884,5062,276,2711,3884,4433,2783,2624, 2803,3884,2719,2985,2624,6595,3884,5062,276,2624,3005,3884, 4433,2783,979,3080,3884,3095,5252,3093,920,824,2636,3884,3095, 5980,3112,424,458,3093,824,2636,3093,5157,2985,2719,3112,458, 2783,3112,6052,3005,2570]; CR_3.codedIsomorphismTypeQClass := [101,102,102,102,104,104,104,109,205,205,210,412,412,412,625, 103,107,208,208,319,107,107,117,319,319,319,640,521,1044, 1548,1548,3666]; CR_3.codedNormalizerZClass := [75000,77000,76000,78000,80000,82000,79000,81000,71,36,72,73,36, 36,19,74037,37,71,36,72,73,36,37,36,37,36,37,36,37,36,37,36,36, 37,37,36,37,48,58,48,58,48,58,58,48,58,58,48,58,58,58,58,58,58, 58,58,58,58,71,72,73,71,72,73,71,72,73,71,72,73,71,72,73]; CR_3.codedPresentationQClass := [11,21,21,21,202,202,202,63,212,212,233,243,243,243,224,401, 452,462,462,443,452,452,423,433,433,433,414,133,84,94,94,75]; CR_3.codedPropertiesFamily := [6144,4244,3444,2277,2277,1301]; CR_3.codedPropertiesZClass := [114,114,214,123,414,223,814,223,814,223,132,242,1614,423,423, 232,442,6414,823,232,842,414,222,114,122,414,222,814,222,814, 422,414,414,222,222,1614,422,112,324,112,124,112,324,324,212, 224,224,212,224,224,624,124,224,624,424,224,224,424,211,121, 231,411,221,231,411,221,231,211,221,231,411,421,231]; CR_3.columnGeneratorSpaceGroup := [[0,0,0,1],[0,0,1,2],[0,0,1,3],[0,0,1,4],[0,1,0,2],[0,1,1,2], [1,0,0,2],[1,0,1,2],[1,1,0,2],[1,1,1,2],[1,1,2,4],[2,0,1,4], [3,1,0,4],[3,2,3,4]]; CR_3.crystalSystemQClass := [1,1,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7]; CR_3.dimension := 3; CR_3.familyCrystalSystem := [1,2,3,4,5,5,6]; CR_3.fixedPointFreeSpaceGroup := BlistList( [1..219], [1,4,7,9,19,33,34,76,142,165] ); CR_3.GLZ := GLZ3; CR_3.HermannMauguinSymbol := ["P1","P-1","P2","P21","C2","Pm","Pc","Cm","Cc","P2/m","P21/m", "C2/m","P2/c","P21/c","C2/c","P222","P2221","P21212","P212121", "C2221","C222","F222","I222","I212121","Pmm2","Pmc21","Pcc2", "Pma2","Pca21","Pnc2","Pmn21","Pba2","Pna21","Pnn2","Cmm2","Cmc21", "Ccc2","Amm2","Abm2","Ama2","Aba2","Fmm2","Fdd2","Imm2","Iba2", "Ima2","Pmmm","Pnnn","Pccm","Pban","Pmma","Pnna","Pmna","Pcca", "Pbam","Pccn","Pbcm","Pnnm","Pmmn","Pbcn","Pbca","Pnma","Cmcm", "Cmca","Cmmm","Cccm","Cmma","Ccca","Fmmm","Fddd","Immm","Ibam", "Ibca","Imma","P4","P41","P42","P43","I4","I41","P-4","I-4", "P4/m","P42/m","P4/n","P42/n","I4/m","I41/a","P422","P4212", "P4122","P41212","P4222","P42212","P4322","P43212","I422","I4122", "P4mm","P4bm","P42cm","P42nm","P4cc","P4nc","P42mc","P42bc","I4mm", "I4cm","I41md","I41cd","P-42m","P-42c","P-421m","P-421c","P-4m2", "P-4c2","P-4b2","P-4n2","I-4m2","I-4c2","I-42m","I-42d","P4/mmm", "P4/mcc","P4/nbm","P4/nnc","P4/mbm","P4/mnc","P4/nmm","P4/ncc", "P42/mmc","P42/mcm","P42/nbc","P42/nnm","P42/mbc","P42/mnm", "P42/nmc","P42/ncm","I4/mmm","I4/mcm","I41/amd","I41/acd","P3", "P31","P32","R3","P-3","R-3","P312","P321","P3112","P3121", "P3212","P3221","R32","P3m1","P31m","P3c1","P31c","R3m","R3c", "P-31m","P-31c","P-3m1","P-3c1","R-3m","R-3c","P6","P61","P65", "P62","P64","P63","P-6","P6/m","P63/m","P622","P6122","P6522", "P6222","P6422","P6322","P6mm","P6cc","P63cm","P63mc","P-6m2", "P-6c2","P-62m","P-62c","P6/mmm","P6/mcc","P63/mcm","P63/mmc","P23", "F23","I23","P213","I213","Pm-3","Pn-3","Fm-3","Fd-3","Im-3", "Pa-3","Ia-3","P432","P4232","F432","F4132","I432","P4332","P4132", "I4132","P-43m","F-43m","I-43m","P-43n","F-43c","I-43d","Pm-3m", "Pn-3n","Pm-3n","Pn-3m","Fm-3m","Fm-3c","Fd-3m","Fd-3c","Im-3m", "Ia-3d"]; CR_3.hQClass := BlistList( [1..32], [2,5,8,15,20,27,32] ); CR_3.internatTableSpaceGroupType := [1,2,3,4,5,6,7,8,9,10,13,11,14,12,15,16,17,18,19,21,20, 22,23,24,25,28,27,30,32,34,26,31,29,33,35,37,36,38,39,40, 41,42,43,44,46,45,47,49,50,48,51,54,53,52,57,60,59,56,55, 58,62,61,65,66,63,67,68,64,69,70,71,72,74,73,75,78076,77, 79,80,81,82,83,84,85,86,87,88,89,95091,93,90,96092,94,97, 98,99,105,103,101,100,106,104,102,107,108,109,110,111,112, 113,114,115,116,117,118,119,120,121,122,123,124,131,132,125, 126,133,134,129,130,137,138,127,128,135,136,139,140,141,142, 146,143,145144,148,147,155,149,153151,150,154152,160,161,156, 158,157,159,166,167,162,163,164,165,168,171172,173,170169,174, 175,176,177,180181,182,179178,183,184,186,185,187,188,189,190, 191,192,194,193,195,198,196,197,199,200,201,205,202,203,204, 206,207,213212,208,209,210,211,214,215,218,216,219,217,220, 221,223,222,224,225,226,228,227,229,230]; CR_3.modulSp := 14; CR_3.modulZ := 19; CR_3.nameCrystalFamily := ["triclinic","monoclinic","orthorhombic","tetragonal","hexagonal", "cubic"]; CR_3.nullDadeGroupsZClass := [0,4,8,10,17,19,26,28,35,36,38,40,42,43,45,48,51,54,55, 57,59,61,62,64,65,67,68,70,71,73,74,76,77,78,80,82,83,85, 88,89,92,93,96,97,98,101,102,103,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126, 127,128,129,130,131]; CR_3.nullGeneratorsZClass := [0,1,2,3,4,5,6,8,10,12,14,16,18,20,22,24,26,28,31,34,37, 40,42,44,46,48,51,54,57,60,63,66,69,72,75,78,82,86,87,88, 90,92,94,96,98,100,102,104,107,110,113,115,117,120,123,126, 129,132,136,139,142,145,149,153,157,161,165,169,173,177,181, 186,191,196,197,200,204,207,211,214,218,221,225]; CR_3.nullQClass := [0,2,5,8,15,20,27,32]; CR_3.nullSpaceGroup := [0,1,2,4,5,7,9,13,15,19,21,22,24,34,37,41,43,46,62,68, 70,74,77,79,80,81,85,87,93,95,103,107,111,115,117,119,135, 139,140,142,143,144,145,147,149,151,153,155,157,159,161,165, 166,168,172,176,178,180,184,186,187,189,192,194,196,199,201, 203,205,207,209,213,217,219]; CR_3.nullZClass := [0,1,2,4,6,8,12,17,21,23,25,27,29,31,35,37,39,41,44,47, 50,51,52,53,54,55,57,58,61,64,67,70,73]; CR_3.orbitLengthSpaceGroup := [1,3,1,3,1,3,1,3,3,1,1,1,2,1,2,1,1,2,2,2,2,1,2,1,1, 1,1,2,1,3,3,1,6,6,6,6,6,6,3,3,3,3,6,2,1,2,1,1,2,1, 3,3,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,2,2,1,1,1,1,1,1,2,1,2,1,2,1,2,1,1,1,1,1,1,1, 1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1]; CR_3.orderQClass := [1,2,2,2,4,4,4,8,4,4,8,8,8,8,16,3,6,6,6,12,6,6,12,12,12, 12,24,12,24,24,24,48]; CR_3.parametersDadeGroup := [[3,6,7,1,0],[3,7,5,1,0],[3,7,5,2,0],[3,7,5,3,0]]; CR_3.QClassZClass := [1,2,3,3,4,4,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8,9,9,10, 10,11,11,12,12,13,13,14,14,14,14,15,15,16,16,17,17,18,18, 18,19,19,19,20,20,20,21,22,23,24,25,26,26,27,28,28,28,29, 29,29,30,30,30,31,31,31,32,32,32]; CR_3.relatorNumbersQClass := CR_2.relatorNumbersQClass; CR_3.rowConjugatorDadeGroup := [[-1,-1,-1],[-1,-1,0],[-1,0,0],[-1,0,1],[-1,1,0], [0,-1,-1],[0,-1,0],[0,-1,1],[0,0,1],[0,1,-1], [0,1,0],[0,1,1],[1,-1,0],[1,0,-1],[1,0,0], [1,0,1],[1,1,1],[1,1,2]]; CR_3.rowGeneratorZClass := [[-1,-1,-1],[-1,-1,1],[-1,0,0],[-1,0,1],[-1,1,0],[0,-1,0], [0,-1,1],[0,0,-1],[0,0,1],[0,1,-1],[0,1,0],[0,1,1],[1,-1,0], [1,0,-1],[1,0,0],[1,0,1],[1,1,-1],[1,1,0],[1,1,1]]; CR_3.spaceGroupIdentity := [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]; CR_3.spaceGroupTypeInternatTable := [101,202,303,403,504,605,705,806,906,1007,1207,1408,1107,1307, 1508,1609,1709,1809,1909,2110,2010,2211,2312,2412,2513,3113, 2713,2613,3313,2813,3213,2913,3413,3013,3514,3714,3614,3815, 3915,4015,4115,4216,4316,4417,4617,4517,4718,5018,4818,4918, 5118,5418,5318,5218,5918,5818,5518,6018,5718,5618,6218,6118, 6519,6819,6319,6419,6619,6719,6920,7020,7121,7221,7421,7321, 7522,7622,7722,7622,7823,7923,8024,8125,8226,8326,8426,8526, 8627,8727,8828,9128,8928,9228,9028,9328,8928,9228,9429,9529, 9630,10030,9930,10330,9830,10230,9730,10130,10431,10531,10631, 10731,10832,10932,11032,11132,11233,11333,11433,11533,11634, 11734,11835,11935,12036,12136,12436,12536,13236,13336,12836, 12936,12236,12336,12636,12736,13436,13536,13036,13136,13637, 13737,13837,13937,14139,14239,14239,14038,14441,14340,14643, 14844,14743,14944,14743,14944,14542,15246,15447,15346,15547, 15045,15145,15849,15949,16050,16150,15648,15748,16251,16551, 16551,16351,16351,16451,16652,16753,16853,16954,17254,17254, 17054,17054,17154,17355,17455,17655,17555,17756,17856,17957, 18057,18158,18258,18458,18358,18559,18760,18861,18659,18961, 19062,19162,19363,19463,19564,19262,19664,19765,19965,20066, 20166,20267,19865,19865,20367,20468,20669,20870,20568,20769, 20970,21071,21271,21171,21371,21472,21572,21772,21672,21873,21973]; CR_3.splittingSpaceGroupType := BlistList( [ 1 .. 219 ], [76,89,92,142,147,149,163,165,170,172,198] ); CR_4.bZClass := BlistList( [1..710], [2,7,8,12,13,14,34,35,36,37,38,39,53,86,87,88,89,90,91, 92,93,108,109,120,130,131,133,173,242,243,244,245,246,295, 296,329,330,331,332,333,337,338,359,378,379,419,428,464,482, 507,563,564,565,566,567,569,574,576,604,621,636,637,691,710] ); CR_4.codedConjugatorDadeGroup := [4273681,6400667,8480660,9279532,11195122,12279467,12298451,12357446, 15623922,16613802,19260299,19325973,19338622,21004202,22465651, 25279713,26836042,28656840,31486984,33244423,33246395,36157062, 36697684,38833653,41968382,44304724,44306282,44363772,45130978, 45337662,45343783,45784833,46572214,47083975,47317495,47397622, 48109758,48237718,49885273,50081235,51253736,52059902,52533832, 55437104,55553703,55555115,55574723,55789055,56101272,56102655, 56162732,57492995,57493012,57494114,58023035,58431983,60708505, 60747994,60822328,60823741,60825332,60933786,61155935,61158054, 61216434,61217245,61274523,61389605,61588992,63349460,63376504, 63493248,63508795,63508934,63546728,63548155,63549675,63604695, 63605108,63605942,63663387,63664324,63804066,63804487,63804624, 63804626,63807003,63811766,63862367,63921812,63980875,64018544, 64021624,64137261,64137683,64137684,64137687,64137703,64140233, 64235684,64236099,64354121,64371353,64373855,64470184,64470461, 64470884,64604452,64604453,65725012,66724894,69053908,69054764, 69056855,69066244,69163383,69508195,69527678,69565344,69626658, 69722984,69800681,69843532,71449321,72153765,74193323,77232724, 77585524,78052841,78052983,78052987,78053401,78053406,78053680, 78053683,78053684,78873935,80453739,82383716,83069624,85693922, 88404015,88424440,89811601,90220655,91360562,93731575,93749676, 93990720,93991022,94000098,94049515,94144560,94145297,94167383, 94318062,94402300,94435083,94525188,96497283,96594861,96595283, 96595284,96646684,96709223,96715422,96849822,96889263,96944864, 97003944,97009124,97084602,97087783,97123763,97123802,97124043, 97160044,97165504,97199664,97204424,97223164,97261260,97261266, 97261401,97261683,97261687,97261824,97261826,97264204,97277358, 97283267,97303124,97318514,97398601,97398883,97426038,98124517, 99809001,101220593,102435678,104963063,105118346,105177144,105179776, 105179923,105391650,105491164,105501275,105515550,105531615, 107883357,108140112,110197006,110610142,110668942,110785343, 110950612,112021303,112270943,112962124,112972335,113058164, 113061524,113137486,113193264,113196183,113196222,113369253, 113375115,113376112,113529243,113686904,113726523,113736472, 113884749,113956684,114747111,115518080,116058522,117390613, 118450126,118684357,118686726,118745508,118778275,118783303, 118798855,118823915,118898424,118898523,118900903,118901264, 118901615,118902315,118918123,119074923,119074962,119075763, 119117465,119117591,119195194,119214521,120488549,121194121, 121542872,121544700,121546903,121646337,121662343,121664503, 121664542,121671914,121758723,121761702,121780558,121781453, 121957692,121958521,122114674,124330002,124488183,126679743, 126681704,126682123,126682124,126916222,126918720,126975403, 127074103,127074142,127095115,127152503,127152542,127187664, 127249422,127251923,127251924,127427176,127444143,127446519, 127486992,127487272,127487552,128465703,129424592,129716346, 129719250,129815762,129818103,129835323,129835362,129837703, 129838442,129874523,129874562,129876942,129879322,129995649, 130346222,131229342,132461757,132579328,132902595,133805883, 133931728,134659472,134896493,135145544,135160113,135482363, 135579684,139346101,140793123,140793722,142416874,143007661, 143007801,143008083,143088733,143245818,143301783,143478468, 143478502,143497783,143534066,143536563,143536602,143556902, 143595783,143596242,143598324,143615702,143623386,143691569, 143694068,143729623,143735822,143804284,143811261,143811401, 143811683,143811684,143889365,143906045,143908987,143909266, 143909401,143909407,143909687,143909824,143912169,143951124, 143984729,144043244,144043526,144046460,144046883,144047024, 144047026,144058224,144063553,144871043,145634912,145990618, 146009419,146120862,146136109,146454023,146459944,146460222, 146469882,146548284,146674135,146695115,146799706,147614890, 149198344,149610766,151966145,154716260,155552903,156808724, 156865704,156905324,156921385,157157744,157355695,157371664, 157433401,157433683,157628564,157629260,157629266,157629401, 157629683,157629684,157631644,158747155,160011634,164016851, 165317789,165958163,166020021,167790612,168410783,170524795, 170682584,170682861,170682866,170683006,170683284,170816844, 170820061,170820066,170820206,170823013,170876764,170918475, 170918492,170935564,170937655,170938232,170977292,170995346, 170996875,171035252,171035655,171035795,171035812,171039457, 171055692,171151980,171152020,171152983,171152984,171153261, 171153401,171153406,171153407,171153543,171153683,171153684, 171153826,171154684,171165583,171251266,171251687,171251824, 171255463,171388052,171389733,171389855,171391552,171485003, 171508026,172169252,172341709,172739034,172742693,173328575, 173628193,174092146,174096229,174136122,174190160,174195053, 175429162,176069896,176075689,176289703,176405792,176425795, 176425812,176525064,176662103,176683562,176835995,176836134, 176837248,176838533,176838672,176839093,176854112,176859549, 176860522,176977282,176978682,177049063,179054884,179267833, 181427494,182286904,182286927,182288714,182326550,182484449, 184815843,184893683,185030926,185090286,187628482,189698662, 190557687,190600682,190811390,192160007,193127686,193323518, 193442795,196026785,198446904,200706302,201673422,203352398, 203411195,204027793,204106189,204359435,204437275,207260107, 209678062,209685034,209708584,210904042,212461485,212461611, 214156126,214894765,214907506,215828706,216925333,220802872, 223509220,227338635,229114262,229133722,233222658,234926586, 236132345,236891767,237759067,237812967,241385693,243228437,244256273]; CR_4.codedDadeGroupsZClass := [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1321,2032,233, 2978,1341,2181,3091,4702,4732,2173,4513,3524,3165,3205,1166, 3537,3058,3509,2219,1321,2032,233,1698,1011,3251,3221,4182, 1372,3233,4073,3184,3215,2115,2026,1977,2128,899,3249,1321, 2032,233,1698,1341,2181,3091,4702,4732,2173,4513,3524,3165, 2155,1166,3537,3058,3509,2219,1,1321,5,2208,771,1021,3752, 3022,4822,692,623,1233,603,4803,678,4469,4261,4721,2384,1424, 5424,4944,1565,495,1535,4525,1036,4196,1567,47,458,3649,1,5, 3488,1021,3022,692,1233,603,988,4469,4261,5434,2404,1735,1725, 4645,746,3907,4958,3649,4091,1678,1291,2181,4635,4388,521,4931, 3742,3802,443,3723,4328,3012,4243,4913,4429,541,481,164,5015, 5025,3925,3906,3897,4958,3719,3032,5522,513,919,1361,2418,3091, 2181,1291,2155,2145,2878,521,4921,3742,3802,1273,3723,4328,531, 4931,1772,1782,263,1923,478,2342,4763,4393,4913,889,5501,5491, 5611,21,5644,5515,5475,5625,5605,1386,5657,5598,4029,19,2602, 152,5462,4203,1269,4101,1678,1311,3041,3655,3438,1101,4491, 1792,1802,713,1893,878,2342,4763,4393,4429,5501,5481,174,5585, 105,145,136,127,118,1489,2592,5452,4053,669,1321,2418,1291, 2181,3165,4388,521,4921,3742,3802,1273,3723,4328,3012,4243, 4913,4429,1571,1551,5434,1655,1045,3915,5016,5007,3948,3719, 3032,5522,513,4659,5634,2764,2374,305,325,5326,706,277,5247, 288,1698,961,2438,1841,1601,908,4172,4043,4172,1283,4043,3999, 4331,4571,1,4345,4155,3488,4112,1193,5122,2322,1703,1179,4239, 4509,1404,315,5076,5337,288,8,951,4498,4172,1283,4539,1,5, 2998,4112,3283,1179,4509,1698,1951,3601,4438,3621,2788,4172, 3283,4172,1283,1213,3999,3591,3361,2551,4355,4165,3488,4112, 3283,5122,2322,1703,1179,4239,4509,1698,1951,3601,4438,4301, 2338,4172,4403,4043,4172,1713,789,1941,3601,2481,955,4145,3488, 4112,2322,1703,4112,3283,4759,3429,639,8,3611,2968,4172,3283, 4539,3601,5,2998,4112,3283,1179,4509,1351,4488,612,5033,99, 1301,4488,432,5033,4879,1351,4488,612,5033,99,1321,4488,1321, 4488,612,5033,99,612,723,99,1331,4488,4992,5033,4879,1351, 4488,4992,723,4879,1321,4488,612,723,99,2792,333,5254,2366, 417,5118,5299,5579,1,4595,2882,3823,5384,1516,3267,3878,5409, 1599,1,2715,3192,423,1964,2196,297,5228,5299,189,1,4595,1, 4635,3192,423,1964,2196,297,5228,5299,189,1,4615,1,4595,3072, 3963,5394,1526,3837,3298,5409,2089,1,2715,1,2905,1,3685,1, 2935,1,3695,1,3675,1,3675,1,2715,1,2905,1,3695,4475,2318, 3009,2664,3155,3359,2664,4345,2249,5564,3404,1505,1645,3576, 2356,4717,1087,468,3458,1071,4271,2628,1132,4083,3512,1003, 1549,4699,5444,3905,3585,1666,747,468,928,4311,2648,1132,1003, 5109,3989,5554,3854,1665,4785,5006,2636,3907,1097,468,3458, 3458,1061,4311,2628,1051,4291,2628,1132,4033,1132,4033,3512, 2943,3512,3313,1549,1549,4699,4699,5554,3854,4975,4785,5006, 2636,3907,1097,468,3458,3458,1061,4291,2628,1051,4291,2628, 1132,933,1132,4033,3512,3313,3512,3313,1549,1549,4699,4699, 5414,3575,4795,4986,737,468,928,928,4281,2648,1071,2648,1132, 3313,1132,3313,5109,5109,3989,3989,3458,1071,4271,2628,1132, 4083,3512,1003,1939,3939,3458,1611,3371,2828,1132,4083,3512, 1003,1419,3979,4458,4561,961,1688,2032,2223,2032,2073,1439, 3979,4458,941,4541,1688,4062,2233,4062,4373,1479,5099,928,3371, 2858,1132,1003,1419,3979,3458,1061,4311,2628,1132,4033,3512, 2943,4969,5099,3458,3458,1631,3361,2828,3371,1621,2858,1132, 4033,1132,4033,3512,2943,3512,3313,589,1419,3979,769,3458,1051, 4291,2628,1132,4033,3512,2943,1939,3939,3498,4551,1688,2032, 2073,1439,3979,928,3381,2858,1132,2833,1419,3979,2392,2583, 2658,4854,1126,5357,2759,5369,1,3081,1835,4665,3332,1753,3448, 5194,646,77,259,4819,2911,3081,835,3795,2052,3413,2678,2052, 3413,2678,5154,3066,5267,5169,59,574,3066,377,5169,59,2911, 2911,3081,4345,4135,3081,3705,3785,2392,2563,2678,5284,796,87, 1499,2069,2911,3081,2505,2545,3302,1743,2298,364,806,387,1499, 819,2911,3081,3125,3135,2392,2583,2658,4224,796,5347,2759,5379, 1,1,3081,1835,4685,3081,1865,4675,2392,2583,2658,3734,596, 5347,2759,5379,1,1,3081,1875,4685,3081,1865,4665,3332,1753, 3448,344,656,197,259,4219,2911,2911,3081,835,3795,3081,845, 3795,2012,2573,3448,5134,1186,197,259,4219,2911,2911,3081,845, 3765,3081,855,3775,2802,1763,2678,5174,756,67,1499,3849,2911, 2911,3081,2465,2535,3081,3145,3175,2911,1,1885,4665,1,1,3145, 1,1,2895,1,1,1825,4155,1,1,1,3115,1,3105,2911,1,1835,4125, 1,1,1,2515,1,2465,1,1,3665,2911,1,3695,5235,1,1,1,2705,1, 2925,1,1,865,1,1,975,3485,2868,568,2619,1115,4258,4779,2694, 2455,2284,2455,5544,2524,2305,1445,1459,2494,1855,4744,2725, 225,2169,3885,3398,2268,2049,4975,4785,3398,4448,2268,2009, 2049,3865,4368,2268,3478,2258,2009,2009,2049,3565,3398,2268, 2268,2049,1589,505,3398,2268,4448,2268,2009,2009,1589,2848, 2109,2268,3959,2268,3329,3478,3478,2109,559,2268,3959,2268, 2009,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,204,34,995,4625, 4014,4905,4585,214,4004,995,3884,4004,995,4625,4625,1394,5085, 4605,5154,1209,5,3814,5539,5,4864,3279,1209,4585,4585,2094, 5279,1209,4585,4585,5144,1209,684,1209,5,5,4585,354,2139,5539, 5,4585,394,5539,5,5,1904,1209,5,4585,5,1914,5209,1209,4585, 4585,5,5,5184,1209,5,5,5,404,5539,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5046,4837,4888,8,2,3559,3,1259,5046,4837, 4898,8,2,1159,3,1249,5066,4847,4888,8,2,3559,3,1259,5066, 4847,4888,8,2,3559,3,1259,5056,5067,4898,8,2,1159,3,1249,8, 2,3559,3,1259,8,2,3349,3,1259,8,2,3559,3,1259,8,2,3559,3, 1259,8,2,1159,3,1249,8,2,1159,3,1249,8,2,3559,3,1259,8,2, 3559,3,1259,8,2,3349,3,1259,8,2,3349,3,1259,8,2,1159,3, 1249,4348,2989,2478,2989,826,1227,3546,2447,826,3637,826,1987, 3546,1817,2735,5219,1145,5219,4,2424,4585,4,4585,4,4,4,2685, 5,4,4,2685,5,4,5,4,5,5,4,4,5,2685,4,4,5,2685,4,5,5, 4585,2685,2685,4605,4585,4585,2685,4585,4585,5,5,5,5,5,5, 2816,2816,2777,2777,2956,7,6,7,6,7,6,7,6,7,6,7,3468,9, 3478,2749,3478,2749,2278,9,4418,9,1469,3478,2749,3468,9,3478, 2749,3468,8,2278,5319,5319,8,9,4418,1999,249,3468,9,3468, 3468,9,9,2278,8,1999,9,2278,5319,8,9,9,3468,9,8,1999,9,8, 9,9,8,9,9,8,1999,9,2749,5309,9,5309,9,9,2749,2749,9,9, 2749,2749,9,9,9,9,9]; CR_4.codedDecompositionQClass := [665,675,555,95,675,345,675,345,95,675,675,96,676,96,676,676, 425,355,425,435,435,365,435,375,465,385,455,475,395,445,465, 405,475,455,475,485,505,525,26,426,36,436,436,26,426,436,36, 426,36,436,436,436,436,66,46,56,466,476,76,476,56,456,476, 66,446,466,76,456,76,456,466,476,476,476,476,495,515,535, 486,576,496,496,496,576,486,576,496,496,496,586,606,596,596, 606,646,636,626,616,646,656,636,656,616,616,656,636,646,656, 656,656,656,696,526,726,536,506,526,686,716,516,736,536,516, 726,536,536,696,526,736,706,726,716,736,536,536,726,536,166, 286,196,296,316,176,276,186,306,286,316,206,316,306,296,316, 2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4, 4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4, 4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4]; CR_4.codedGeneratorsSpaceGroup := [4,42,1,1,4,6,15,1,15,1,19,4,23,1,15,19,401,415,419,1515, 1519,1542,1546,2319,2346,1500,1515,1542,1500,1,1501,15,1515, 19,1519,4200,4201,4215,4219,1500,1515,42,1542,1554,442,1500, 1542,401,15,419,1515,4,1,6,100,104,101,106,1500,1504,1501, 1506,1900,1904,1901,1906,4,1500,1504,1500,1,1501,100,1900,101, 1901,100,1500,1900,4200,4600,4,1500,1504,4200,4204,1500,1500, 104,15,1,19,401,419,15,1500,100,1900,15,400,15,1,401,4,6, 404,406,15,19,415,419,23,27,423,427,104,106,606,115,119,615, 619,123,127,623,627,1515,1519,2319,1523,1527,2323,2327,1542, 1546,2346,1549,1550,2349,2350,1923,1927,2727,1949,1950,2750,4, 15,23,1515,1523,1542,1549,1,15,19,42,46,100,101,115,119,142, 146,1500,1501,1515,1519,1542,1546,1900,1901,1915,1919,1942, 1946,400,42,442,15,415,1542,2342,1515,2315,1554,2354,4242, 4942,1500,1542,15,104,123,1515,15,1,19,54,58,119,154,454, 458,4,1,6,101,106,5400,1,5401,401,6101,5400,1,5401,100,54, 154,4954,5054,400,4200,4942,5400,1,100,442,642,5400,400,49,1, 19,115,119,419,619,6,27,123,623,154,458,654,658,63,1923, 2346,2358,1,5400,58,101,158,6,63,106,104,163,5804,606,663,1, 4900,58,158,49,50,150,2349,2350,2342,2300,4215,2349,4923,5400, 6300,1,4204,1506,5400,400,2715,23,42,1,46,49,50,142,101,146, 104,149,106,150,1542,1546,1504,1549,1506,1550,1942,1946,1949, 1906,1950,4242,4246,4249,4250,4646,4649,4650,5449,5450,5850, 10100,10142,10146,10149,10150,11542,11546,11504,11549,11506, 11550,11942,11946,11904,11949,11950,14242,14246,14249,14250, 14642,14649,14650,15449,15450,15849,41500,41542,41501,41546, 41549,41550,41900,41942,41901,41946,41950,44242,44201,44246, 44642,44601,44646,44650,45400,45442,45401,45446,45450,45800, 45842,45801,45846,45850,61900,61942,61946,61949,64642,64646, 65400,65442,65446,65800,65842,65846,235442,235446,235846,275842, 40000,40001,540000,610000,540001,610001,400,40400,401,40401, 540400,610400,540401,610401,545400,615400,615401,6100,46100,6101, 46101,546100,616100,546101,616101,10400,60400,10401,580400,630400, 580401,630401,586100,636100,586101,40000,1,40001,40100,101,40101, 40400,40401,40601,540000,610000,540001,610001,610100,540101, 610101,610400,610401,610601,10000,60000,10001,60001,10100,60100, 60101,60400,60401,60600,580000,630000,580001,630001,580100,630100, 630101,630400,630401,630600,490000,1,490001,490100,101,490101, 494900,494901,495001,540100,540101,230101,544900,544901,545001, 10100,500100,505000,585000,540000,540049,100,540100,149,540149, 5400,545400,5449,545449,5800,545800,5849,545849,490100,230100, 490149,230149,495400,235400,495449,495800,235800,495849,235849, 10100,580100,580149,15800,585800,15849,585849,505800,275800, 505849,54,42,540000,540042,540015,540400,540454,540415,420000, 420054,420400,420454,420415,150442,424200,540000,54,600,540600, 654,10000,1,10100,150404,190404,150406,190604,540000,10000, 580000,10100,580100,44204,614204,64204,634204,64604,634604,54, 540000,400,454,540400,540000,40000,610000,40400,610400,190004, 194649,10404,42,100,142,146,49,149,50,1549,1949,40000,40042, 40100,40142,40001,40046,40146,40004,40049,40104,40149,40006, 40050,40150,41542,41942,41546,41549,41949,41550,230000,230042, 230100,230142,230001,230046,230101,230146,230004,230049,230104, 230149,230106,230150,231500,231542,231900,231942,231901,231946, 610000,610042,610100,610142,610001,610046,610004,610104,611542, 611942,100,540000,540100,104,540104,40000,40100,610000,610100, 40004,40104,610004,610104,60000,60100,630000,630100,60004,630004, 100,40000,40100,1,40001,540000,540100,610000,610100,540001, 610001,400,600,40400,40600,401,40401,540400,540600,610400,610600, 540401,610401,100,230000,230100,230049,230149,540000,540100, 490000,490100,540049,540149,10000,10100,270000,270100,270049, 270149,580000,580100,500000,500100,580049,580149,4900,100,5000, 230000,234900,230100,235000,230101,235001,400,150000,150042,40000, 40400,230000,230400,230042,230442,60000,54,60054,100,10000,10100, 490404,490604,500404,500604,100,540000,540100,400,40000,40400, 540000,40000,610000,464242,15,42,54,115,142,154,420015,420100, 420115,420154,46,58,158,420119,23,61,123,161,420123,420161,63, 442,454,642,654,420415,420600,420615,401,419,446,458,619,646, 658,420401,420419,420446,420458,420619,449,461,623,649,661, 420449,420461,420623,420661,406,427,450,463,650,663,420406, 420427,420450,420463,420650,420663,2342,2354,2742,2754,422700, 2346,2358,2746,422301,2349,2749,2306,2350,422306,424200,424215, 424615,424201,424219,424619,424223,424623,424227,424901,424919, 425019,425023,424906,424927,426106,10415,10442,10454,10600,10615, 10642,10654,460415,460454,460600,460615,460654,10446,10458,460401, 460419,460619,10449,10461,10604,10623,10649,10661,460461,460604, 460623,460649,460661,10406,10427,10450,10463,10663,460406,460427, 460450,460463,460663,12342,12700,12715,12742,12754,462300,462342, 462700,462715,462742,12304,12349,12704,12749,462304,462349,462704, 12706,12750,462706,14654,464600,464615,14223,14261,14623,464261, 464623,464661,464663,15042,15054,464915,465000,465015,14923,14961, 15004,15023,15049,15061,464923,464961,465004,465023,465061,14927, 14950,14963,15063,464906,464927,464963,465027,16100,16300,16315, 16342,466100,466300,466315,466354,16104,16149,16304,466104,466304, 466349,466306,62342,62700,62742,62754,502342,502700,502742,502754, 62346,62358,62349,505000,505015,65400,65800,505800,66300,506300, 636300,1,400,401,10400,10401,6,100,600,601,10100,10101,10600, 10601,104,10104,10106,5400,5401,6100,6101,15400,16100,16101, 5404,5406,15404,5800,6300,6301,15800,15801,16300,16301,5804, 15804,15806,40100,40101,40600,60101,60600,60601,60606,45400, 45401,46100,46101,65400,65401,66100,46104,46106,66104,45800, 45801,46300,65800,65801,66300,66301,46304,66304,66306,545400, 545401,546100,546101,586100,586101,545406,545800,546300,546301, 585800,585801,586300,586301,545804,585804,585806,615800,615801, 616300,635801,636300,636301,636306,1,544900,58,4900,4901,540000, 4958,27,540049,4927,100,545000,158,5000,5001,540100,149,150, 545049,540149,5027,5400,5401,545400,2358,542349,5427,2350,5800, 545800,542749,10100,585000,10158,15000,15001,580100,580149,15027, 15400,15401,585400,12358,582349,15427,12350,15800,585800,582749, 495400,232358,235401,492349,235427,495800,232749,492749,505800, 502749,15,42,54,6142,23,5442,454,442,5404,5423,5449,2354, 45400,45442,40454,40442,44254,41554,60000,545400,635400,65400, 636300,1,54,58,100,154,44204,41506,44261,41563,44604,44661, 10100,10154,64604,64661,40000,4,40004,540000,540004,400,40400, 540400,10042,10149,17,15,17,15,4,100,1500,1900,100,1500,15, 404,423,400,1500,2300,1500,1542,100,1500,4400,4200,404,5204, 4904,1700,1500,404,4200,404,4904,15,4215,1515,423,4923,2323, 4200,406,15,4215,427,54,4254,463,6,15,27,40000,40006,40015, 40027,150015,150027,150000,150006,150054,150063,230015,230027, 230000,230006,230054,230063,15,54,10004,610049,610004,150015, 150000,150042,43,16,15,15,15,4300,1600,1600,15,15,15,18,16, 15,15,1500,15,1515,4215,1800,1600,1500,15,15,15,1500,1515, 1542,17,15,42,3,1,42,4,42,100,1500,2300,5400,6100,100,4200, 4600,100,400,600,600,400,100,4200,54,1500,42,1542,404,2304, 449,2349,15,1515,54,1554,423,2323,461,2361,1500,100,1900,42, 1542,142,1942,15,1515,115,1915,54,1554,154,1954,5400,401,6101, 1500,2301,100,54,154,4200,4600,100,454,654,1,101,458,658,100, 5400,5800,1,101,5401,5801,100,2354,2754,400,600,1554,1954,100, 5400,5800,1515,1915,4215,4615,650,606,42,406,100,42,15,54, 4600,100,4200,5400,2304,1500,404,6104,1700,1500,404,2904,2304, 42,1742,1542,449,2949,2349,1700,1500,100,2200,1900,42,1742, 1542,142,2242,1942,100,4200,4600,401,1500,2301,300,100,1554, 3454,1954,300,100,1515,3415,1915,1,1515,1519,1,1500,1501,15, 100,115,800,600,100,2346,1500,446,54,15,40001,40019,150015, 150000,230019,230001,420015,490001,490019,540015,540000,610019, 610001,40023,6,27,230023,150027,150006,490023,420027,610023, 540027,540006,54,40058,150054,230058,490058,540054,610058,63, 150063,540063,6,15,27,40000,10000,40015,40027,150015,150027, 150000,150006,230015,230027,230000,190000,420015,420027,490015, 490027,540015,540027,540000,540006,610015,610027,610000,580000,54, 63,40054,40063,150054,150063,230054,230063,540054,540063,610054, 610063,60000,54,60054,10000,40000,10054,40054,420000,500000, 460000,490000,540000,40004,40061,6,63,150000,230004,150006,1, 10001,10000,49,50,10050,10049,40054,150001,190001,60054,40023, 150050,190050,60023,1,490000,50,10001,10000,10050,500000,40015, 150019,420015,150063,190019,60015,190063,460015,15,150000,630063, 54,630027,40006,610027,40050,15,54,630054,630042,630000,10000, 420000,540000,610061,610004,10046,50,150000,150050,150027,1700, 1500,42,1742,1542,6,1706,1506,50,1750,1550,15,1715,1515,54, 1754,1554,27,1727,1527,63,1763,1563,5600,5400,6,5606,5406,300, 100,1,301,101,1554,3454,1954,1558,3458,1958,100,49,149,400, 600,449,649,117,15,42,184,54,406,4900,4206,100,1500,1900,42, 142,1542,1942,100,100,2300,2700,1,400,401,600,100,400,1500, 2300,42,442,1542,2342,401,100,1515,1915,100,1554,1954,15,401, 4400,4200,1500,6700,5400,400,5200,4900,2300,7100,6100,15,4415, 4215,1515,6715,5415,415,5215,4915,2315,7115,6115,5600,5400,401, 6501,6101,100,1,101,400,600,401,601,300,100,49,349,149,400, 1200,600,449,1249,649,2200,1500,15,2215,1515,4250,4949,401,15, 40000,40015,150015,150000,230015,230000,420015,490000,490015, 540015,540000,610015,610000,6,27,40027,150027,150006,230027, 420027,490027,540027,540006,610027,54,40054,150054,230054,490054, 540054,610054,63,150063,540063,54,40000,40054,6,63,1,10001, 10000,150000,610001,630001,190000,49,50,10050,10049,150049, 610050,630050,190049,15,630000,150000,54,630042,490006,420006, 150000,42,150042,600,150600,642,150642,420000,540000,420042, 540042,420600,540600,420642,540642,6,150006,50,150050,606,150606, 650,150650,420006,540006,420050,540050,420606,540606,420650, 540650,15,150015,54,150054,615,150615,654,150654,420015,540015, 420054,540054,420615,540615,420654,540654,27,150027,63,150063, 627,150627,663,150663,420027,540027,420063,540063,420627,540627, 420663,540663,1500,151500,1542,151542,2700,152700,2742,152742, 421500,541500,421542,541542,422700,542700,422742,542742,1506, 151506,1550,151550,2706,152706,2750,152750,421506,541506,421550, 541550,422706,542706,422750,542750,1515,151515,1554,151554,2715, 152715,2754,152754,421515,541515,421554,541554,422715,542715, 422754,542754,1527,151527,1563,151563,2727,152727,2763,152763, 421527,541527,421563,541563,422727,542727,422763,542763,54,600, 654,540000,540054,540600,540654,6,63,606,663,540006,540063, 540606,540663,10000,490000,500000,1,10001,490001,500001,41554, 61554,421554,461554,41558,61558,421558,461558,100,10100,490100, 500100,101,10101,490101,500101,41954,61954,421954,461954,41958, 61958,421958,461958,10100,100,10000,49,10149,149,10049,152300, 192700,152700,192300,152349,192749,152749,192349,4900,15000,5000, 14900,4949,15049,5049,14949,155400,195800,155800,195400,155449, 195849,155849,195449,421500,1500,420000,42,421542,1542,420042, 4200,425400,5400,424200,4242,425442,5442,424242,540000,40106, 610106,494900,234900,425006,155006,40100,150000,230100,420000, 490100,540000,610100,42,40142,150042,230142,420042,490142,540042, 610142,40400,600,230400,150600,490400,420600,610400,540600,40442, 642,230442,150642,490442,420642,610442,540642,1500,41900,151500, 231900,421500,491900,541500,611900,1542,41942,151542,231942, 421542,491942,541542,611942,42300,2700,232300,152700,492300, 422700,612300,542700,42342,2742,232342,152742,492342,422742, 612342,542742,40000,150000,230000,600,40600,150600,230600,4200, 44200,154200,234200,5000,45000,155000,235000,42,40042,150042, 230042,642,40642,150642,230642,4242,44242,154242,234242,5042, 45042,155042,235042,1500,41500,151500,231500,2700,42700,152700, 232700,5400,45400,155400,235400,6300,46300,156300,236300,1542, 41542,151542,231542,2742,42742,152742,232742,5442,45442,155442, 235442,6342,46342,156342,236342,40400,5400,46100,40100,600,45800, 6300,40000,600,40600,5400,45400,6300,46300,10000,235400,275400, 45454,65454,150054,190054,100,10100,235800,275800,45854,65854, 150154,190154,10000,230000,270000,4900,14900,234900,274900,100, 10100,230100,270100,5000,15000,235000,275000,100,1,101,152300, 152700,152301,152701,4900,5000,4901,5001,155400,155800,155401, 155801,100,4900,5000,1,101,4901,5001,151500,151900,156100, 156300,151501,151901,156101,156301,15,420000,420015,4200,4215, 424200,424215,15,420000,420015,1500,1515,421500,421515,5400, 40400,46100,460006,10000,420006,170000,150000,420000,840000, 540000,600,170600,150600,420600,840600,540600,6,170006,150006, 420006,840006,540006,606,170606,150606,420606,840606,540606,15, 170015,150015,420015,840015,540015,615,170615,150615,420615, 840615,540615,27,170027,150027,420027,840027,540027,627,170627, 150627,420627,840627,540627,4200,174200,154200,424200,844200, 544200,5000,175000,155000,425000,845000,545000,4206,174206,154206, 424206,844206,544206,5006,175006,155006,425006,845006,545006,4215, 174215,154215,424215,844215,544215,5015,175015,155015,425015, 845015,545015,4227,174227,154227,424227,844227,544227,5027,175027, 155027,425027,845027,545027,560000,540000,6,560006,540006,40100, 650100,610100,40106,650106,610106,30000,10000,4900,34900,14900,1, 30001,10001,4901,34901,14901,41554,121554,61554,46154,126154, 66154,41558,121558,61558,46158,126158,66158,10000,49,10049,100, 10100,149,10149,45400,65400,45449,65449,45800,65800,45849,65849, 440000,420000,42,440042,420042,1500,441500,421500,1542,441542, 421542,10006,460000,420006,60000,42,60042,10000,10042,40042, 150000,150006,150042,150050,230006,230000,230050,230042,420042, 420050,490050,490042,540042,540050,540000,540006,610050,610042, 610006,54,60054,10054,150054,150063,230063,230054,540054,540063, 610063,40004,540000,610004,6,540006,540000,10000,10049,150015, 420015,630061,630015,1,540001,10001,10050,150019,420019,630063, 630019,42,150000,150042,54,150054,40001,150050,15,600,615,1500, 1515,2700,2715,1000000,1000015,4000000,4000015,1001500,1001515, 4001500,4001515,15000000,15000015,15000600,15000615,15001500, 15001515,15002700,15002715,19000000,19000015,23000000,23000015, 19001500,19001515,23001500,23001515,42000015,42000615,42001500, 42001515,42002700,42002715,46000000,46000015,49000000,49000015, 46001500,46001515,49001500,49001515,54000000,54000015,54000600, 54000615,54001500,54001515,54002700,54002715,58000000,58000015, 61000000,61000015,58001500,58001515,61001500,61001515,6,27,606, 627,1506,1527,2706,2727,1000027,4000027,1001506,1001527,4001506, 4001527,15000006,15000027,15000606,15000627,15001506,15001527, 15002706,15002727,19000027,23000027,19001506,19001527,23001506, 23001527,42000027,42000627,42001506,42001527,42002706,42002727, 46000027,49000027,46001506,46001527,49001506,49001527,54000006, 54000027,54000606,54000627,54001506,54001527,54002706,54002727, 58000027,61000027,58001506,58001527,61001506,61001527,54,654,1542, 1554,2742,2754,1000054,4000054,1001542,1001554,4001542,4001554, 15000054,15000654,15001542,15001554,15002742,15002754,19000054, 23000054,19001542,19001554,23001542,23001554,42001542,42001554, 42002742,42002754,46000054,49000054,46001542,46001554,49001542, 49001554,54000054,54000654,54001542,54001554,54002742,54002754, 58000054,61000054,58001542,58001554,61001542,61001554,63,663,1550, 1563,2750,2763,1001550,1001563,4001550,4001563,15000063,15000663, 15001550,15001563,15002750,15002763,19001550,19001563,23001550, 23001563,42001550,42001563,42002750,42002763,46001550,46001563, 49001550,49001563,54000063,54000663,54001550,54001563,54002750, 54002763,58001550,58001563,61001550,61001563,5400,5415,6300,6315, 1005400,1005415,4005400,4005415,15005400,15005415,15006300,15006315, 19005400,19005415,23005400,23005415,42005415,42006315,46005400, 46005415,49005400,49005415,54005400,54005415,54006300,54006315, 58005400,58005415,61005400,61005415,5406,5427,6306,6327,1005427, 4005427,15005406,15005427,15006306,15006327,19005427,23005427, 42005427,42006327,46005427,49005427,54005406,54005427,54006306, 54006327,58005427,61005427,5454,6354,1005454,4005454,15005454, 15006354,19005454,23005454,46005454,49005454,54005454,54006354, 58005454,61005454,5463,6363,15005463,15006363,54005463,54006363, 54005400,600,54006300,5400,54000000,6300,54000600,4000000,61005400, 4000600,61006300,4005400,61000000,4006300,61000600,6,54005406,606, 54006306,5406,54000006,6306,54000606,1,100,101,4900,4901,5000, 5001,1000000,1000001,1000100,1000101,1004900,1004901,1005000, 1005001,49,50,149,150,4949,4950,5049,5050,1000049,1000050, 1000149,1000150,1004949,1004950,1005049,1005050,42001500,61006101, 42001900,61006301,42006100,61001501,42006300,61001901,46001500, 63006101,46001900,63006301,46006100,63001501,46006300,63001901, 42001549,61006150,42001949,61006350,42006149,61001550,42006349, 61001950,46001549,63006150,46001949,63006350,46006149,63001550, 46006349,63001950,50005000,1500,50006300,42000000,6005000,42001500, 6006300,50005042,1542,50006342,6005042,42001542,6006342,6002700, 42005400,50002700,5400,6002742,50002742,5400,49000606,49006306, 42000006,42005406,45,43,42,43,18,16,15,43,15,18,16,15,43, 4300,2301,9201,42,2800,1600,42,1642,4300,15,4315,5500,8300,42, 27,63,42,15,54,400,42,442,42,15,54,4200,404,4904,42,4242, 449,4949,54,1500,15,1515,42,1542,54,1554,1500,15,1515,42, 1542,54,1554,54,54,4500,4300,4200,1500,7300,9000,5400,1643, 1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842,1642, 1542,1643,1643,2304,42,2349,404,1500,449,1542,54,1500,15,1515, 42,1542,54,1554,1500,15,1515,42,1542,54,1554,54,54,42,100, 142,1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842, 1642,1542,3243,3243,4200,10001,14201,42,4242,10046,14246,2700, 6300,12701,16301,2742,6342,12746,16346,54,4200,15,4215,42,4242, 54,4254,1500,5400,1515,5415,1542,5442,1554,5454,4200,15,4215, 42,4242,54,4254,1500,5400,1515,5415,1542,5442,1554,5454,54,54, 1800,1600,1500,15,1815,1615,1515,42,1842,1642,1542,54,1854, 1654,1554,4300,54,4354,1500,1542,1500,1542,1800,1600,1500,4200, 9400,9500,5400,42,1842,1642,1542,4242,9442,9542,5442,5700,5500, 5400,42,54,1500,1542,150000,15,150015,42,150042,54,150054,1500, 151500,1515,151515,1542,151542,1554,151554,4200,154200,4215, 154215,4242,154242,4254,154254,5400,155400,5415,155415,5442, 155442,5454,155454,54,5400,5454,150000,540000,1500,151500,421500, 541500,5400,155400,545400,420000,420015,1500,421500,1515,421515, 5400,425400,425415,5400,5400,150000,540000,15,150015,420015, 540015,54,150054,420054,54,180000,160000,150000,42,180042,160042, 150042,1500,181500,161500,151500,1542,181542,161542,151542,4200, 184200,164200,154200,4242,184242,164242,154242,5400,185400,165400, 155400,5442,185442,165442,155442,160043,5400,165443,150000,150042, 1500,151500,1542,151542,5400,155400,155442,420000,420015,1500, 421500,1515,421515,5400,425400,425415,5400,5400,42,54,1500,1542, 1515,1554,5400,5442,5415,5400,15000000,54000000,15,15000015, 42000015,54000015,54,15000054,42000054,150000,15150000,42150000, 54150000,150015,15150015,42150015,54150015,150042,15150042,42150042, 54150042,150054,15150054,42150054,54150054,540000,15540000,54540000, 540015,15540015,42540015,54540015,540054,15540054,42540054,540000, 54,540054,404,4200,4901,4200,4206,600,442,54,6,40004,540054, 540063,610061,6,10004,150015,150027,230023,420042,150050,460049, 54,63,40061,630006,610004,27,54,270000,60015,60063,54,54,60054, 540000,40000,610000,6,63,10000,190000,6,230006,150006,63,40000, 60050,60000,60000,54,270000,150027,64215,40600,490600,40000, 490000,45400,6300,540000,150000,580004,190004,150600,5400,490600, 500000,10600,60042,420042,14200,505000,425042,54000000,5454,600, 54000600,606,6,54006306,54005406,663,63,54005463,5400,6000000, 5406,1000400,1006100,5454,54,5463,6000054,1006154,1000454,1000100, 1005800,600,6300,6000600,6306,1005854,1000154,6354,654,6363, 6000654,6000000,54,6000054,6005400,5454,6005454,42001500,42001506, 42001554,42001563,1000454,1006154,46002300,46002306,46002354, 46002363,1000154,1005854,46001900,46001906,654,663,6363,46000400, 42000600,61000450,54,63000650,5400,6006300,6000600,42000600, 42001500,2700,5454,2727,2750,50,5427,6006350,6006327,6000627, 6004254,6004200,600,1500,2700,5000,600,2700,615,40400,150000, 230400,5400,46100,155400,236100,40100,600,230100,150600,45800, 6300,235800,156300,501506,420000,61506,60000,5400,65400,404, 60404,6104,66104,424215,504215,421515,501515,424923,504923,422323, 502323,541500,600,542700,1500,540000,2700,540600,40104,611904, 40404,612304,41904,610104,42304,610404,606,64200,65006,54,150650, 150627,40600,40000,600,45015,44215,5015,45042,5042,40654,150042, 61500,271542,54000000,6060000,63060000,54005400,6065400,63065400, 6000000,63000000,60000,54060000,6005400,63005400,65400,54065400, 15000000,27060000,15005400,27065400,50000000,27000000,42060000, 15060000,50005400,27005400,15065400,58040001,61010001,61015401, 61040001,58010001,61045401,58015401,23040001,19010001,23045401, 540000,50060600,50630600,42420015,6500615,54,54,4200,4215,4200, 54,4242,54,54,4215,4200,54,4200,425400,425400,54,5442,421500, 421500,5442,5415,42,420000,5400,425400,150015,5400,155415,150000, 5400,155400,5400,150042,155442,150000,5400,155400,420042,420015, 54,54,420054,420000,5400,150015,155415,54,5400,5454,5400,150015, 155415,420000,5400,425400,5400,4200,1500,1542,1515,54,5400, 421500,424200,54,5454,421554,424254,8000,8300,8700,1005,743, 6600,205,6805,6600,78316,110000,118300,8300,667655,1111,71616, 830000,870202,110202,900,900,90000,1005,90000,96216,43,62300, 62343,43,61900,61943,43,585000,585043,43,43,190600,62300,61923, 582300,40100,61900,42,1904,42,1949,23191901,42,23191946,42, 23500004,27001915,42,27001954,42,27,59853210,27232517,2315,4300, 27239717,9215,4300,23190015,23194315,69623300,23500004,88983304, 4300,15011500,15019000,42006115,4300,42009915,42,6190000,1501, 6191501,42,6190042,1546,6191546,19230004,42,19230049,58230054,42, 1150600,270404,1060104,42,1150642,270449,1060149,42420100,421515, 42001915,42,42420142,45,43,42,230600,230645,230643,230642,192300, 192345,192343,192342,45,43,42,62300,62345,62343,62342,45,43,42, 235800,235845,45,43,42,41500,41545,41543,41542,202416,196100, 419616,231900,15,231915,192300,585000,61915,39312100,19231900,42, 39312142,19231942,23190004,42,23190049,23500052,42,15011500,42, 15011542,6580006,4300,2301,9201,4300,23191901,23199101,133300, 4300,6230015,6234315,4300,42,192300,192342,15,63,192315,192363, 61900,61942,61915,61963,42,62300,62342,235000,505800,42,190600, 190642,191501,191546,2701,2746,196100,42,100,142,1504,1549,1904, 1949,4200,19061915,19065815,600,42,4151500,4151542,19152301, 19152346,27000401,27000446,19230000,4200,23060000,23064200,1501, 5401,23061501,23065401,42,4242,23060042,23064242,1546,5446, 23061546,23065446,4200,19230001,19234201,42,4242,19230046,19234246, 58500000,42,58500042,4200,23190000,23194200,1040423,1044923, 27270423,27274923,42,4242,23190042,23194242,1040461,1044961, 27270461,27274961,6610000,42,6610042,4500,4300,4200,19061500, 19067300,19069000,19065400,100,4800,7800,4600,19061900,19067400, 19069100,19065800,4500,4300,4200,19232315,19237515,19239215, 19236115,4500,4300,4200,4500,4300,4200,271500,277300,279000, 275400,1040400,1045300,1048200,1044900,1192300,1197500,1199200, 1196100,93263832,9240516,50232300,2301,42,2346,1501,400,1546,442, 19230615,42,19230654,42,23041900,1041523,27000123,42,23041942, 1041561,27000161,42,40302100,23191900,42,40302142,23191942,1500, 40303700,23190100,1542,40303742,23190142,42,19060015,19060054, 61231404,600,4200,19232300,19236100,19230100,19234600,2700,6300, 58061900,4200,400,4900,6190406,6194906,6190006,6194206,427,4927, 27,4227,6190015,6194215,6190415,6194915,42,4242,442,4942,6190450, 6194950,6190050,6194250,463,4963,63,4263,6190054,6194254,6190454, 6194954,4200,19230001,19234201,42,4242,19230046,19234246,600,42, 642,4200,2700,6300,1061900,1065800,1060400,1064900,23060001, 23064201,23062701,23066301,27001901,27005801,27000401,27004901,42, 4242,2742,6342,1061942,1065842,1060442,1064942,23060046,23064246, 23062746,23066346,27001946,27005846,27000446,27004946,6190600,42, 6190642,4200,900,8500,3300,97983,817000,96677,35095100,83720000, 47896043,86003600,201164,361143,6100,4254,1500,401,100,6300, 542300,42300,420015,492315,494215,6300,10642,10000,100,10100, 60000,425400,150100,161,150061,540000,40015,40149,161,544946, 192300,495400,635400,62342,6100,14200,12300,610042,616142,425000, 424900,100,235042,610142,6194600,54231900,54231500,100,54421500, 610100,23610115,49542315,15540419,19000600,1540119,42012300, 54000000,42002361,10061,54010061,15542306,15544600,6306,1060001, 6000006,42540042,46630046,50540050,15006300,1,15006301,16342, 15010042,1000000,16142,1016142,541900,544900,6300,6490404,63060049, 54460442,41900,1001515,1040115,1001915,425000,23151500,6300, 23540000,23155000,23495000,616300,23546100,610100,6300,231500, 235000,14642,142,14200,6163000000,27044200,15614206,6540006, 15611500,6545400,5406,27041506,100,42234200,42234600,1,101, 42234201,42234601,4954545401,6101630000,490049060019,163010142,1, 192346194604,163016100,230654544249,2300540400,231954004949, 42319614242,610163000042,610015,16300,636100,11501,1006300,10600, 11961,61001923]; CR_4.codedGeneratorZClass := [109593899,107544718,107687275,107702651,109451342,109420590, 107687275,107544718,107702651,107544718,109589726,107548892, 109589599,107548891,107544718,107548892,107544718,107549018, 107544718,109455515,107687275,109424763,107702651,109455518, 107687275,109424763,107702650,107687399,109455518,109455518, 107687276,109451342,109455515,109420590,109424763,109451342, 109455518,107683099,107687275,109420591,109424763,109451218, 109455518,109451341,109455518,109451342,107683102,109420590, 107698478,107683099,109451342,109420591,107698478,107683099, 109451218,109451341,107683099,107687275,109455515,107544718, 107702651,109424763,107544718,107687275,109455518,107544718, 107702650,109424763,107544718,107687399,109455518,107544718, 107687276,109455518,107544718,109424673,109589599,109451423, 109589726,109448144,109458221,109448144,107679904,109958779, 109457598,107133714,107680279,109420547,107549016,113369024, 107548891,109590101,109448144,107548514,107689981,107705482, 107549016,107705482,107695280,101960407,107549016,107549018, 107698569,107544718,107683183,107548891,107544718,107689981, 107679904,107544718,107680279,107133714,107544718,109589601, 107702694,107544718,113379101,109589726,107544718,107689981, 107548514,107544718,107705482,107549016,107544718,109589601, 120897342,107544718,109589726,109455515,109593818,109458221, 107687275,109455515,109458221,109586528,109455515,109457598, 109586903,109040338,107680279,109040338,109586903,107549016, 109589683,107702776,107548891,109586528,113376395,109448144, 109596605,109455138,107689981,109455138,109596605,107549016, 109596605,107702776,107695280,109596605,109586403,107549016, 109586403,120894882,109589726,107548810,107687275,107679904, 107551597,109596605,109458221,107683102,107687275,107680279, 107550974,109965031,109457598,108052155,107687275,107549016, 109420465,109589683,107548891,113372222,109596605,107689981, 107541520,109586903,109448144,107683477,107687275,109427469, 107541520,107702776,107695280,109420465,109596605,107549016, 120890586,109586403,109589726,107687275,109593818,107544718, 107689981,109455515,107687275,107544718,107680279,109040338, 109586903,107544718,109589601,107702776,109593817,107544718, 113379101,109586528,109596605,107544718,107689981,109455138, 109596605,107544718,107549016,109596605,107702776,107544718, 109589601,120894882,109596605,107544718,113356846,96212481,113361019, 113361144,107544718,113356846,107544718,96212481,107683102,96212606, 113372222,96212606,109451217,96212481,96197230,96212481,107683102, 96216779,109451217,113361144,107687275,96216779,113376395,113361144, 113372222,107544718,96212606,109451217,107544718,96212481,113237639, 113238011,96259106,96258734,96201403,113237639,109424763,92403531, 107702651,92403531,113372222,113237639,109420590,92403531,107698478, 92403531,96201403,96259106,109424763,115263470,96201403,115263470, 115267643,92399358,107548891,115263470,109424763,115267643,109420590, 115267643,109424763,92399358,96201403,92399358,107548891,109424763, 115263470,113363692,92395077,115271556,113353276,113360938,113363725, 108894963,108242907,96212566,96219860,107544718,96219857,107544718, 113356927,107544718,113353648,107544718,108242907,107544718,96212566, 107544718,113353273,113368651,96209407,107687194,96216698,96201322, 96216698,109458221,96219485,96204109,96219485,109457598,109765098, 108897842,109765098,108058407,107434279,108240775,107434279,96197315, 96212566,109451302,96212566,113379101,113363850,107690106,113363850, 96204482,96209407,107683183,96216698,96197311,96216698,96194032, 96219485,109448144,96219485,108058407,109765098,108240775,109765098, 108897842,107434279,109457598,107434279,113376310,96212566,107687315, 96212566,96194032,113363850,109448019,113363850,96204482,107544718, 113363726,107683183,107544718,96212687,96197311,107544718,96212687, 96204109,107544718,113363725,109448144,107544718,96209408,107680279, 107544718,107434279,108240775,107544718,107434279,96197315,107544718, 96212566,107687315,107544718,113361059,96194032,107544718,96209283, 109448019,107544718,96209283,109593818,113360938,109596605,113363725, 109040338,108894963,107687275,108242907,109589311,96212566,109586028, 96209283,107544799,113360938,107541520,113363725,108052155,108894963, 109451342,108242907,107549306,96212566,107541520,113363850,113372303, 96212606,109458221,96212606,108240775,107858474,108058407,107858474, 96201818,96212481,109458596,113356471,113376314,96216779,109448144, 96216779,109457598,110149531,107680279,110149531,96201818,113361144, 107679529,96217154,109589807,107544718,113356927,109596605,107544718, 113363725,107687275,107544718,108242907,109589311,107544718,96212566, 109596605,107544718,113363850,109593818,96201322,96216698,109596605, 96204109,96219485,109040338,108897842,109765098,107687275,108058407, 107434279,109589311,96197315,96212566,109586028,107679529,113353273, 107544799,107687194,96216698,107544799,96201322,96216698,107541520, 109458221,96219485,107551597,96194032,96209408,108052155,109457598, 109765098,108052155,108897842,109765098,109451342,108058407, 107434279,109451342,108240775,107434279,107549306,96197315,96212566, 107549306,109451302,96212566,107541520,107690106,96219860,107541520, 96204609,96219860,109593818,96197311,96216698,109596605,109448144, 96219485,109040338,108240775,109765098,107687275,109457598,107434279, 109589311,113376310,96212566,109586028,96204609,113353273,113376314, 107544718,96212606,109448144,107544718,96212606,108897842,107544718, 107858474,96201818,107544718,96212481,107679529,107544718,113356471, 109589807,96197311,107544718,96212687,109596605,96204109,107544718, 96219485,107687275,108240775,107544718,108242907,109589311,96197315, 107544718,96212566,109596605,96204609,107544718,96219860,77132311, 115260147,96262826,96255536,140067314,92406362,113237930,113240717, 109807346,140067395,107392279,140067395,96204109,92403656,113369024, 92403656,107698559,92403531,109424682,92403531,96194032,113238011, 113379101,113238011,109593818,95953198,109596605,115263345,109593818, 115263470,109596605,115263470,96197311,77132230,96204109,115263345, 113376314,115263470,109427469,96258734,140097899,95953279,96201403, 115260147,109424763,115267562,96201403,115267562,109424763,115260272, 107702651,115260272,77040718,95953279,113372222,115260147,109420590, 115267562,107698478,115267562,109420590,115260272,107698478, 115260272,140097899,113620346,96201403,92406362,109424763,92403450, 96201403,92403450,109424763,92406237,107702651,92406237,96197230, 113620346,113372222,92406362,109420590,92403450,107698478,92403450, 115171214,92406237,109420590,92406237,109807427,109593818,77132230, 96201403,109596605,115263345,109424763,109593818,115263470,107702651, 109593818,115263470,109424763,109596605,115263470,107702651, 109596605,115263470,107548891,92403450,107548891,113230640,109589726, 92403450,109589726,113230640,107544799,115267562,107551597,96255536, 113372303,115267643,96194032,96262907,96201322,92399358,113372303, 92399358,96194032,113233838,109417392,113233838,107548891,109424763, 92403450,107548891,107702651,92396160,109589726,109424763,92403450, 109589726,107702651,113233919,109589726,109424763,92396160,109589726, 115175387,92396160,107548891,107544718,92403450,107548891,107544718, 113230640,109420590,107548891,92403450,107698478,107548891,113230640, 107544799,109424763,115267562,107548810,96201403,115263551,107551597, 109424763,115260272,107551597,107702651,96255536,96201322,107548891, 115263470,96194032,107548891,96258734,107548891,107544718,109424763, 92403450,107548891,107544718,107702651,92396160,107683183,113363692, 109448144,113363692,96194153,113363692,109424673,92395077,115179274, 92395077,107702561,113240649,115179274,96255601,107702561,96255601, 109589599,96219823,109589726,96209441,107548645,113353310,107544802, 107544718,96209407,107541520,107544718,96216698,107544799,107544718, 113363725,107551597,107544718,113360567,113372222,107544718, 107690319,109451302,107544718,96204448,96194032,107544718,109458188, 107689981,107544718,96194065,107683183,107544718,113353648,109458098, 107544718,113360567,113368778,107544718,107690319,113372305, 107544718,113363602,109455434,109589599,113353310,96194032,107548891, 113363692,107679904,109589726,113363692,113379101,107548645, 113353310,96197559,107548645,113363571,96194032,109451218,107544718, 96204448,109451423,107541520,107544718,113356927,113376314,109451342, 107544718,113379068,113369024,109451342,107544718,113369057, 113376066,107551597,107544718,113360567,107687315,113372222, 107544718,107690319,107680027,113372222,107544718,107690319, 113363725,107551564,113360567,107541305,96212606,107551564,113356723, 107541305,107551597,96216779,96219452,107551597,113360650,113353310, 107687194,96216698,107541553,107689981,107689948,96212606,113376066, 113360567,107541305,107690350,107690319,96212975,96197311,107541553, 113356846,113372305,113356723,107541305,109448144,113372222,96212606, 113353681,113376066,107551597,107541305,113363571,113240684,96255569, 109417425,113233838,107695313,113233838,92434283,113240684,107702651, 113230673,107544718,113240684,107548810,113240684,107695280, 113240684,113379101,92406204,109589807,113240684,92434283,96255569, 107702651,96265580,107548810,96255569,107551597,115260305,107695280, 96255569,113379101,115260305,107695280,109589726,113233919,109427469, 109589726,92399439,115175306,109589726,113240717,92430191,109589726, 113240717,107695280,107548810,96258815,109427469,107548810,96258815, 96197311,107541520,96265613,113376314,107541520,96265613,109417425, 96258734,107544718,92434283,113240684,107548810,92434283,113240684, 107551597,107702651,113240684,109589807,92434283,113240684,109596605, 107702651,113240684,107548810,107544718,113240684,107695280, 107544718,113240684,107548810,92434283,96255569,107551597,92434283, 96255569,107548810,107702651,96255569,107551597,107702651,96255569, 107695280,115178060,96258734,92434202,109427436,115263470,92434283, 113233919,109586561,107544718,115258570,111448173,109589599, 115271556,109589726,113394487,92425851,115258570,92438787,115258570, 111503229,96127239,107671827,96127239,113368651,92425851,96255601, 96197299,109472131,98117181,113229430,109585693,96117135,109586511, 113229430,107552556,111447007,98119230,113240094,109585693,98008383, 111454395,96194015,111454395,96255911,109585693,111503239,111454395, 107674615,111454395,115166826,113229430,109585693,92438297,113240028, 113237634,109472131,111455580,109595084,113379101,111455580, 109595084,109466787,111455580,109595084,113240094,107552556, 107664511,113387598,111447024,107542669,115166826,113229430, 107552556,113372291,96125708,107542669,113369024,96125708,107542669, 115175010,92406362,109585693,107671899,96118242,109595084,107671899, 96124451,109595084,111500523,96124451,109595084,92430485,92406362, 109585693,107541520,113369007,111454395,107542610,113369007, 111454395,96197230,111447024,109595084,107544787,109463503,96124523, 92430485,115260147,109585693,107541520,109473607,111454395,107542610, 109473607,111454395,98011598,113387667,109595084,115175010,115263434, 107552556,98015771,113384400,107542669,109586528,107665677,98119230, 113376395,98126109,107551607,111454395,109596615,98119230,109596615, 98124643,109596615,111457101,109596615,109472131,111454395,109596615, 113376323,111454395,109596615,113379111,96120350,111494301,96120350, 98124643,109596615,107544718,109472131,98119230,109596615,109472131, 113385490,109596615,113372291,98123331,109587677,109472131,96117152, 109596615,113372291,111448114,109596615,109472131,96125763,109596615, 107544718,111454272,134238902,82620313,95953403,107683183,109451423, 140067395,107885303,134238899,78792039,134238885,107885303,140067395, 69768323,139744251,77133431,107683172,107548895,98119353,134238902, 82620313,113620222,107548891,107683183,77132230,107885303,134238899, 140268822,134238885,82620289,77132230,69768323,139744251,77148730, 107683172,107548895,78837817,78792061,107885304,82620313,140097899, 140067395,109451423,107683183,78837807,138175775,107885303,82620303, 78837795,76931296,134238885,82620289,113376395,113620427,69768323, 113371807,96201407,77133431,107683172,107548895,138362305,96124154, 107885304,82620313,96197230,140050903,107683183,107548891,111496722, 113620427,82620303,134238899,138362323,140067384,134238885,82620289, 96197230,140095295,69768323,113371807,96197230,77133431,107683172, 107548895,98015402,138408061,82620313,107885304,109807427,113112938, 107683183,107548891,140097899,78962842,82620303,107885303,98015394, 113387972,82620289,107885303,140097899,77043322,113371807,69768323, 113376395,95953206,109451414,107683172,113620303,107548891,109451423, 77132311,82620303,134238899,140268890,82620289,134238885,77132311, 113371807,139744251,113620291,109451414,107683172,113112814, 107548891,107683183,140067314,134238899,82620303,96124079,134238885, 107885303,140067314,139744251,113371807,95953331,107548895,107683172, 77040799,77147687,109451423,107683183,138362395,113620427,107885303, 82620303,138362391,140067384,134238885,82620289,96197311,140095295, 69768323,113371807,96197303,77133431,107683172,107548895,109807346, 140050903,107548891,109451423,78837726,113620427,107885303,82620303, 78837728,140067384,134238885,82620289,113376314,140095295,69768323, 113371807,113376319,77133431,107683172,107548895,113112814,109451423, 109455434,107544718,140067314,82620303,82899222,107544718,78791972, 82620289,109314322,107544718,109804494,113371807,77455870,107544718, 95953331,109451414,109455442,107544718,77179102,140051938,109451423, 107548891,98015318,111252690,107885303,82620303,107671705,140268822, 82620289,134238885,109807346,107395546,113371807,139744251,113376319, 95953206,109451414,107683172,109807427,113113019,107548891,109451423, 109807427,138408151,82620303,107885303,140097888,77132306,82620289, 134238885,69554795,96520207,139744251,69768323,96201407,77148806, 109451414,107548895,139959434,77148803,107548891,107683183,109466842, 138408151,82620303,107885303,111496725,77132306,82620289,134238885, 107392198,96520207,139744251,69768323,96197230,77148806,109451414, 107548895,109807427,113112814,107548891,109451423,107671775,78791970, 82620303,107885303,109807427,111454198,134238885,107885303,69554795, 109804494,139744251,69768323,96201407,113620343,107683172,107548895, 77040718,113112814,107683183,109451423,109466842,78791970,107885303, 82620303,77040726,96124079,134238885,107885303,147583822,109804494, 69768323,139744251,113372218,113620343,107548895,107683172,96201403, 140052019,107683183,109589726,107544718,109807427,140268895,82620303, 109314322,107544718,109807427,140268890,82620289,109314322,107544718, 109807427,147585887,113371807,147431302,107544718,96201407,140052011, 107683172,109589722,107544718,27576557,96204109,27576557,158869959, 182585867,108225274,158869959,108913343,111702976,182259101, 182585867,181755521,113369397,181755521,47934243,111455580,44981181, 138667762,158871959,96125708,155826758,98117181,159716768,98117181, 77548170,159720646,96117135,33044800,111448420,138667762,113369397, 47934243,111455580,109472131,27053511,96125708,98011667,140650523, 111447007,107884306,155073341,111455580,109315317,155073341, 111455580,159717639,111454395,96125708,140651645,111454395,96117135, 137670403,79424159,113394487,109472131,44074618,98117181,112759425, 98117181,32804382,182258855,98117181,111454395,140651523,113385549, 96124523,33322950,27464439,138667762,32804382,109807427,95553448, 111455580,44977972,113376395,182258855,96125708,111454395,109470891, 27315024,96125708,111454395,107392198,77127802,138667762,32804382, 27466552,26959129,138667762,155073341,111496350,159717506,96125708, 111454395,113372222,77548542,96125708,111454395,107667795,107393259, 113394487,155073341,159717763,159716893,98117181,111454395,76487218, 76487226,98126119,111454395,44074867,98117181,96202643,159717885, 139544319,159717885,109466787,140651399,98117181,159717763,107548891, 98117181,44073872,96117135,140651399,96202643,159717885,140651520, 98116015,107544718,159717763,44982048,111447007,109472131,77547424, 96117135,109472131,139544451,113384383,107544718,182258855,98119230, 109596615,113376395,44073997,98117181,111454395,109470891,27053757, 113385549,96124523,113376395,182258855,98123403,109596615,182585006, 180336730,26926245,180336730,1129611,113625044,106992518,113625044, 140071823,182585867,108684957,27560102,180336730,140067395,140651399, 182259101,112502653,110145677,110138347,108689421,138729274, 158885580,140651645,181136653,113951609,181138391,182416742,76905711, 182524859,210345466,181136407,107399674,29236895,140067395,140651399, 182259101,95553518,109811855,113379101,140651399,159706391,113154150, 76486480,210345466,27560102,27314770,27315149,139405819,73912854, 12062103,107548891,76486481,73225567,3861162,109448144,181751447, 179843991,3861162,182259101,109589726,96209441,106999650,73225567, 12062103,108899105,139405819,96209441,114137949,73912854,12062103, 108731107,143225515,12062103,113372303,107548891,181751447,205138627, 73225567,3861162,113379101,107548891,27822178,185854767,73225567, 3861162,76487218,107548891,27822178,106999650,73225567,3861162, 109448177,27315149,96194032,113117692,139405819,107683183,77732807, 96209441,107548891,199402399,72509660,109807335,24008150,143225515, 109807335,27314032,107687194,109455434,140651266,106999650,185854767, 73225567,12062103,113376314,140067395,27315149,96209441,179843991, 114137949,73912854,12062103,180004943,108731107,22927425,143225515, 109455434,109458221,109589726,76487596,185854767,205138627,73225567, 3861162,109596605,109451423,109589726,27822178,109589807,113379101, 109589726,140650529,109807427,185854767,73225567,3861162,79083823, 107392292,73225567,3861162,107551597,107689948,181751692,113369024, 107544799,139405943,96219452,109589726,109466843,185839514,199417652, 108433328,144126578,23095197,185564992,73225567,181751438,109596572, 113363692,199402399,110324711,144659217,182043605,27314032,113379101, 107548891,96209441,114137949,106999650,185854767,73225567,12062103, 144666519,11487648,144126672,73225567,12062103,109586528,139405943, 96212606,109586561,109807427,3861152,179996524,78794035,109811846, 109589726,113379101,181751692,76487218,109463711,110138719,23657354, 72509660,199066843,140830695,143913050,199066843,143225515,199961357, 108901934,27606937,96194032,76487218,109455434,139405819,79083823, 114137949,106999650,185854767,73225567,12062103,109596605,24003722, 143913050,12351902,108735549,199763058,27604936,27607028,77732683, 27822556,109451423,27821441,205138627,114137949,106999650,185854767, 73225567,12062103,205138627,199424831,11487648,144126672,143913050, 199417652,77179183,140050822,109589726,96204109,76487351,27822556, 109807427,107663072,106999650,185854767,72509660,199066843,109314415, 111454554,143913050,23657354,72509660,23095174,73912854,139420588, 138939322,139420588,180826528,73912854,12062103,73912854,179843991, 139420588,110685804,73912854,12062103,205138627,180826528,73912854, 12062103,182786209,73912854,139420588,96782940,23095174,12062103, 73225567,205138627,113123150,73912854,12062103,29515599,180826528, 73912854,12062103,179843991,182786209,73912854,139420588,205138627, 3912460,23095174,12062103,73225567,114137949,138139576,106999650, 12062103,73225567,199740636,114137949,106999650,185854767,12062103, 73225567,180826569,22934718,12351902,143913050,199763058,73072955, 205138627,207368000,5756963,106999650,12062103,73225567,109807427, 205138627,207368000,5756963,106999650,12062103,73225567,109593804, 76856198,28365006,140097940,219263013,160405546,179629517,132440821, 82765556,138362323,153690461,181703188,181873564,200523788,50162752, 174171184,44448336,107689948,143613617,41658462,79670051,39631319, 210471581,70783101,182259101,182045573,26743634,182258731,140651399, 181797699,153692231,31588701,115178093,87498568,86161352,51024595, 110148670,234995099,73225567,113356927,110944135,109807427,98015771, 107671899,96202643,83119279,111362264,58517558,109593818,109597867, 109593918,109417392,109416331,109420671,113369024,113372303, 113367963,107679904,107678843,107683183,96212606,107679904,107683183, 107678843,107695280,107694219,107698559,107695280,107694219, 107698559,120860334,88208556,109594026,107549262,209084286,113625101, 109593909,109593818,76487351,78440103,82191847,113361019,113379101, 76487351,78440103,84098471,115267643,107698569,140651399,142601998, 109589726,109586065,109593917,109455805,109586065,109593917,96201818, 109586065,109593917,113371807,110145677,109597867,107687194, 110145677,109597867,109451423,109427469,109428650,109424682, 109427469,109428650,109424682,101982779,109458221,109459402, 109455434,109458221,109459402,109455434,113361019,96204109,96205290, 96201322,107689981,107687194,107691162,107689981,107691162,107687194, 96216779,109596605,109586593,109596572,113379101,115178093,107689981, 109596605,109586593,109596572,113379101,115178093,107689981, 140651399,182259101,109596605,109586593,109586561,107705357, 107706538,107702570,107705357,107706538,107702570,120864507,17686571, 174188104,109594513,53210107,107548891,109589726,109594513,53210107, 107548891,140651399,138145270,174785400,32821756,138145270,174785400, 82620291,32821756,109589311,109593917,109586065,109589683,115179274, 107683183,109593915,113379101,109624650,107544718,115168734, 113368651,109589683,115179274,107683183,109593915,113379101,90066506, 115168734,113368651,139959515,35516804,47444107,109594397,107548891, 140650529,109599231,109593909,107702570,120858726,109599231, 109593909,107698558,120869842,109599231,109593909,109420671, 109589116,109430715,109599975,109599231,109593909,109420671, 101988104,109599479,109593909,109455434,109599479,109593909, 107683183,109599479,109593909,109451426,109599603,109593909, 107687191,96212605,109599603,109593909,107683184,96216782,109599603, 109593909,109451426,109599603,109593909,109451426,113361020, 107687276,109609275,121033638,109599355,109593909,107683184, 230601192,55191886,107687276,109609275,121033638,109599355,109593909, 107683184,107687194,109589725,128752393,103766397,105888288, 119117005,130397624,122786500,101988148,109593905,110193563, 109594519,109855291,109417392,109416331,109420671,109589726, 109593905,110193563,109594519,109855291,107705357,107706538, 107702570,107548891,109593915,109599479,109455434,113379101, 109593915,109599479,109451302,109455434,109593915,109599479, 109451302,113379101,109593918,109597867,96201322,109593918,109597867, 113372303]; CR_4.codedIsomorphismTypeQClass := [101,102,102,102,104,102,104,104,104,104,109,104,109,109,109, 122,205,205,210,412,412,412,625,103,107,208,208,319,107,107, 117,319,319,319,640,205,103,107,205,210,412,412,625,210,210, 412,412,223,625,625,625,625,849,107,107,208,117,319,319,319, 319,319,640,117,117,117,319,319,640,640,136,640,640,640,1561, 412,208,319,210,927,927,625,3352,1028,324,1450,3600,3453, 15469,218,218,420,741,237,438,1246,438,741,438,1246,1145,1145, 842,1662,3867,3867,660,2565,3867,2464,678,107,117,319,640,114, 132,333,333,434,555,957,1358,1358,1358,3174,132,154,555,555, 957,555,1170,1771,3174,3174,682,521,1044,1548,1548,3666,1044, 1044,1548,1548,2263,3666,3666,3666,3666,3666,577,311,1230,106, 115,216,335,218,1246,333,555,1358,1459,3174,3475,4776,4776, 481,420,741,438,1145,656,3867,2572,4300,3300,200,300,500,284, 500,1000,1368,179,179,280,183,513,1129,1331,826,1447,4400, 4700,3151,4600,4200,4900,26100,25000,25900,25200,100,100,100, 200,300,185,539,943,1447,4700,3500,4900,2873,200,300,400,100, 400,100,100,200,186]; CR_4.codedNormalizerZClass := [767000,767000,774000,812000,775000,811000,774000,812000,783000, 810000,794000,784000,809000,795000,782000,787000,803000,799000, 815000,806000,778000,776000,804000,803000,800000,814000,807000, 762000,765000,802000,798000,813000,805000,779000,777000,804000, 801000,815000,808000,748507,738563,739242,243,740564,747244, 718565,243,722566,752244,757246,745245,719567,733685,691,378, 740564,734693,680,723566,758379,727692,738563,243,735242,740564, 747244,718565,243,723566,752244,757246,744245,719567,738563,243, 739242,747244,740564,729565,243,752244,723566,715245,743246, 756567,691,378,740564,734693,680,723566,758379,727692,785000, 793000,785000,793000,785000,793000,763000,761000,771000,772000, 763000,771000,781000,773000,761000,771000,759000,785000,759000, 785000,816000,776000,786000,817000,760000,764000,816000,776000, 780000,785000,785000,785000,776000,760000,776000,780000,776000, 768000,769000,769000,173,242,243,244,244,245,246,359,378,378, 244,728379,750379,173,242,242,243,243,244,244,244,244,245,245, 246,246,173,242,242,243,243,244,244,244,244,245,245,246,246, 359,378,378,378,378,244,244,728379,728379,750379,750379,242, 243,244,244,245,246,242,243,244,244,245,246,242,243,244,244, 245,246,242,243,244,244,245,246,378,378,244,728379,724379,242, 243,244,244,245,246,242,242,243,243,244,244,244,244,245,245, 246,246,242,243,244,244,245,246,378,378,244,730379,724379,378, 378,244,728379,724379,295,296,329,330,295,296,329,330,295,295, 296,296,329,329,330,330,295,296,329,330,295,296,329,330,295, 296,329,329,330,330,295,296,329,329,330,330,295,296,329,329, 330,330,295,296,329,329,330,330,295,296,329,329,330,330,329, 330,419,419,419,419,329,330,419,419,419,419,329,330,419,419, 419,419,419,419,329,330,419,419,419,419,419,419,419,419, 770000,797000,766000,770000,770000,789000,770000,790000,751671, 680,714681,359,378,378,379,379,751671,680,378,680,713681,379, 714681,751671,680,680,714681,713681,751671,680,378,680,713681, 379,713681,378,379,680,737681,378,379,378,378,379,379,680, 737681,680,713681,419,419,419,419,419,419,419,419,419,419,419, 419,419,419,419,419,419,419,419,419,419,419,419,419,419,419, 419,419,419,419,419,419,419,419,419,419,419,419,419,419,428, 477,731613,617,428,428,429,755429,732613,753613,741604,621, 717604,621,464,482,482,464,482,482,742604,721604,621,621,482, 464,482,482,726604,621,621,746604,621,482,621,464,482,482,482, 482,716604,621,482,621,725604,621,621,482,482,621,482,482,482, 482,482,482,482,621,482,482,482,482,621,507,563,564,565,566, 567,507,563,564,565,566,567,507,563,564,565,566,567,507,563, 564,565,566,567,507,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,796000,796000,792000,792000,791000,792000, 791000,788000,788000,591,591,592,591,617,604,604,591,606,605, 604,604,606,605,604,621,604,621,621,604,604,605,606,604,604, 605,606,604,621,621,617,613,613,754613,617,617,613,617,617, 621,621,621,621,621,621,720626,720626,711627,711627,626,627, 636,637,636,637,636,637,636,637,636,637,688,709,665,666,649, 650,665,752705,662,749704,749704,665,666,680,681,665,666,671, 736680,680,712681,712681,691,710,662,663,664,680,681,680,680, 681,681,680,691,692,693,680,712681,691,710,710,680,681,691,692, 693,691,710,710,691,693,712692,691,692,693,704,697,709,697, 752705,702,704,709,752705,752705,704,705,710,710,710,710,710]; CR_4.codedPresentationQClass := [11,21,21,21,202,21,202,202,202,202,63,202,63,63,63,34,601, 601,732,742,742,742,693,401,971,462,462,1072,971,971,1062, 1072,1072,1072,1043,601,401,971,601,732,742,742,693,732,732, 742,742,673,723,723,723,693,654,971,971,462,1062,1072,1072, 1072,1072,1072,1023,1062,1062,1062,1072,1072,1043,1043,993, 1023,1043,1023,984,742,462,1072,732,683,713,693,644,902,892, 843,863,853,834,1331,1331,1082,1412,1402,1422,1432,1422,1412, 1422,1432,1013,1003,1122,1363,1373,1373,1343,1353,1373,1113, 354,971,1062,1072,1053,502,1102,562,562,473,1202,1093,513,513, 513,1143,1102,1192,1202,1202,1093,1202,393,1133,1163,1153,374, 133,183,104,94,174,193,183,94,94,54,174,164,154,154,144,45, 1211,1292,941,1301,952,1312,1331,1432,562,1202,523,493,1163, 553,484,484,544,1082,1412,1422,1033,592,1383,383,573,583,364, 1183,534,1174,962,1322,114,923,913,124,933,822,1282,1272,703, 793,1263,1243,1253,343,664,764,1234,1224,334,883,635,874,275, 626,616,266,1462,1472,783,1393,813,754,1453,324,804,774,1444, 285,315,256,306,297]; CR_4.codedPropertiesFamily := [10155,7255,6355,5655,4955,4266,4266,4199,4199,3666,3466,3399, 3299,2399,2199,2399,2688,2119,2119,2119,1201,1201,1201]; CR_4.codedPropertiesZClass := [114,114,814,423,214,123,1614,423,414,223,132,1614,423,132, 6414,1623,1633,1643,452,863,3214,823,833,833,843,252,463,1614, 423,433,443,152,263,25614,3223,3233,3243,452,863,112,3224,833, 833,843,843,852,263,473,473,282,282,492,112,25624,3233,3243, 3252,463,873,482,892,51224,6433,6433,6443,6443,6452,863,1673, 1673,882,882,892,25624,3233,3233,3243,3243,3252,463,873,873, 482,482,492,409624,25633,25643,25652,1663,3273,1682,892,114, 122,1614,822,814,422,814,814,422,422,3214,822,3214,1622,6414, 1622,313,924,113,124,413,424,424,313,924,924,413,424,424, 3624,124,424,1624,3624,424,424,1624,114,114,114,112,424,233, 443,243,252,262,112,824,433,443,452,462,212,1624,1624,833, 833,843,843,843,843,852,452,462,862,112,1624,1624,433,433, 843,843,443,443,452,452,262,462,212,6424,6424,1633,1633,1643, 1643,1652,852,462,1662,3224,833,1643,843,852,462,824,233,443, 443,252,262,824,233,443,443,252,262,3224,833,843,1643,852, 462,6424,833,1643,852,462,12824,1633,3243,3243,1652,862,6424, 6424,833,833,1643,1643,1643,1643,852,852,462,462,12824,1633, 3243,1643,1652,462,6424,833,1643,852,462,51224,3233,6443,3252, 862,613,322,634,343,213,122,634,343,613,213,322,122,634,634, 343,343,413,122,434,143,413,122,434,143,813,222,834,834,243, 243,1213,322,1234,1234,343,343,813,222,834,834,243,243,413, 122,1234,1234,343,343,1613,222,1634,1634,243,243,2434,643,434, 143,434,143,2434,643,434,434,143,143,3234,443,1634,1634,243, 243,1634,243,4834,643,1634,1634,243,243,1634,243,6434,443,414, 424,132,114,114,124,114,124,112,424,432,212,824,1624,432,832, 212,424,824,1624,432,232,832,212,1624,1624,232,1632,412,1624, 3224,6424,832,432,3232,424,232,424,232,1624,432,1624,1624,432, 432,1624,432,6424,832,114,114,114,114,214,214,214,214,214, 214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, 214,214,414,414,414,414,414,414,414,414,414,414,414,414,414, 814,112,134,112,134,112,112,134,134,112,134,322,934,122,134, 122,134,334,322,934,334,322,122,134,934,334,122,134,134,122, 134,134,122,134,134,134,122,134,134,334,334,322,934,334,134, 122,134,134,134,334,134,334,134,134,334,134,334,134,134,134, 334,134,134,134,312,624,634,642,354,362,112,424,234,242,254, 262,212,424,434,442,454,462,312,1224,634,642,654,662,212,824, 434,442,854,862,2424,1234,1242,1254,662,424,234,242,254,162, 824,434,442,454,262,624,634,342,654,362,1624,434,442,854,262, 824,434,242,854,262,1624,834,442,1654,462,2424,1234,642,2454, 662,824,434,242,854,262,1624,434,442,854,262,3224,834,442, 3254,462,111,211,111,111,111,111,111,111,111,111,311,321,111, 121,111,311,111,121,321,311,111,121,321,111,121,111,121,121, 111,111,121,121,111,311,321,121,111,121,121,121,121,121,121, 121,121,121,121,121,121,121,121,121,121,121,111,111,121,121, 111,121,311,321,111,121,311,321,111,121,111,121,111,421,211, 221,211,221,211,1621,111,121,121,411,421,411,421,211,421,211, 411,411,821,821,411,6421,211,121,121,411,821,411,811,821,421, 411,811,1621,3221,411,421,111,421,121,811,821,211,121,221, 211,421,421,211,221,121,411,221,221,121,121,421,121,421,221, 121,421,221,221,121,221,121,121,121,121,121]; CR_4.columnGeneratorSpaceGroup := [[0,0,0,0,1],[0,0,0,1,2],[0,0,0,1,3],[0,0,0,1,4],[0,0,1,0,2], [0,0,1,0,3],[0,0,1,1,2],[0,0,1,1,3],[0,0,1,1,4],[0,0,1,2,3], [0,0,2,0,3],[0,0,2,1,3],[0,0,2,1,4],[0,0,2,2,3],[0,0,3,1,4], [0,1,0,0,2],[0,1,0,0,3],[0,1,0,0,4],[0,1,0,0,6],[0,1,0,1,2], [0,1,0,1,3],[0,1,0,1,4],[0,1,0,2,4],[0,1,1,0,2],[0,1,1,0,3], [0,1,1,0,4],[0,1,1,0,6],[0,1,1,1,2],[0,1,1,1,3],[0,1,2,0,4], [0,1,2,3,4],[0,1,3,2,4],[0,2,0,0,3],[0,2,0,1,3],[0,2,0,1,4], [0,2,1,0,3],[0,2,1,2,3],[0,3,0,1,4],[0,3,1,0,6],[0,3,2,1,4], [0,3,3,2,4],[0,5,0,5,6],[1,0,0,0,2],[1,0,0,0,3],[1,0,0,0,4], [1,0,0,0,6],[1,0,0,1,2],[1,0,0,2,3],[1,0,0,3,6],[1,0,1,0,2], [1,0,1,1,2],[1,0,2,0,3],[1,0,2,0,4],[1,0,3,0,6],[1,1,0,0,2], [1,1,0,0,3],[1,1,0,0,4],[1,1,0,0,6],[1,1,0,1,2],[1,1,0,1,3], [1,1,0,2,3],[1,1,1,0,2],[1,1,1,0,3],[1,1,1,1,2],[1,1,2,0,3], [1,1,2,0,4],[1,2,0,0,3],[1,2,0,0,4],[1,2,0,1,3],[1,2,1,1,3], [1,2,1,2,3],[1,2,2,0,4],[1,2,2,1,3],[1,3,0,0,6],[1,3,0,3,6], [1,3,3,0,6],[2,0,0,0,3],[2,0,0,1,3],[2,0,0,3,6],[2,0,1,0,3], [2,0,1,1,3],[2,0,2,2,3],[2,0,3,0,6],[2,1,0,0,3],[2,1,0,0,4], [2,1,1,2,3],[2,1,2,0,3],[2,1,2,1,3],[2,1,5,2,6],[2,2,1,1,3], [2,3,0,0,6],[2,3,0,3,6],[2,3,3,0,6],[3,0,1,5,6],[3,1,0,0,6], [3,2,0,0,6],[3,5,5,0,6],[4,3,3,0,12],[5,2,5,3,6],[5,3,3,0,6]]; CR_4.crystalSystemQClass := [1,1,2,2,2,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,8,8, 8,8,8,9,9,9,9,9,9,9,10,11,11,12,12,12,12,12,13,13,13, 13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,15,15, 15,15,15,15,15,15,15,15,15,15,16,17,17,18,18,18,18,18,19, 19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22, 22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24, 24,25,25,25,25,25,25,25,25,25,25,25,26,26,27,27,27,27,28, 28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30, 30,30,30,30,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,33,33,33,33,33,33, 33,33,33,33,33,33,33,33,33,33]; CR_4.dimension := 4; CR_4.familyCrystalSystem := [1,2,3,4,5,5,6,7,7,8,9,10,10,11,11,12,13,14,14,15,16, 16,16,17,17,18,19,20,21,21,22,23,23]; CR_4.fixedPointFreeSpaceGroup := BlistList( [ 1 .. 4783 ], [1,4,6,8,17,19,33,34,37,38,40,44,48,55,56,61,70,79,82,83, 87,95,122,242,243,244,245,251,257,267,271,279,389,393,397, 411,412,414,429,430,431,440,669,692,1239,1242,1325,1327,1349, 1378,1381,1383,1388,1451,1494,1533,1741,1744,1771,1851,1857, 1860,1886,3047,3053,3062,3070,3079,3083,3286,3314,4030,4038,4139] ); CR_4.GLZ := GLZ4; CR_4.hQClass := BlistList( [1..227], [2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89, 111,115,126,137,142,153,155,159,161,170,183,190,211,227] ); CR_4.modulSp := 100; CR_4.modulZ := 124; CR_4.nameCrystalFamily := ["hexaclinic","triclinic","diclinic","monoclinic","orthogonal", "tetragonal monoclinic","hexagonal monoclinic","ditetragonal diclinic", "dihexagonal diclinic","tetragonal orthogonal","hexagonal orthogonal", "ditetragonal monoclinic","dihexagonal monoclinic", "ditetragonal orthogonal","hexagonal tetragonal","dihexagonal orthogonal", "cubic orthogonal","octagonal","decagonal","dodecagonal", "di-isohexagonal orthogonal","icosahedral","hypercubic"]; CR_4.nullDadeGroupsZClass := [0,9,18,22,37,41,56,60,75,79,91,107,110,117,127,129,133, 140,144,154,158,160,166,173,180,185,199,204,206,210,217,221, 231,235,237,241,248,252,262,266,276,277,279,282,284,287,288, 294,296,299,300,301,302,307,308,310,312,313,316,318,319,320, 321,324,326,328,331,332,338,340,343,344,345,346,347,350,352, 355,357,358,364,367,369,370,371,372,373,375,377,378,381,383, 384,385,387,390,392,395,397,400,402,404,407,410,412,415,417, 420,422,425,433,435,443,445,453,455,457,465,467,469,477,479, 481,483,485,487,489,491,493,495,497,500,503,506,515,516,519, 521,523,524,525,531,532,534,536,537,538,547,548,549,552,555, 557,559,561,563,564,565,566,567,576,577,578,581,584,586,588, 590,592,593,594,595,596,602,603,604,606,608,610,612,613,614, 615,616,617,620,622,624,625,626,627,630,632,634,635,636,637, 640,642,644,645,646,647,650,652,654,655,656,657,659,661,662, 663,664,667,669,671,672,673,674,675,678,681,683,685,687,689, 690,691,692,693,694,697,699,701,702,703,704,706,708,709,710, 711,713,715,716,717,720,725,726,729,732,737,738,741,744,747, 752,757,758,759,762,765,768,773,774,777,780,785,786,789,792, 797,798,799,802,805,808,813,814,815,818,821,824,829,830,831, 834,837,840,845,846,847,850,853,856,861,862,863,866,869,870, 873,874,876,877,879,880,883,884,885,887,889,890,893,894,895, 897,899,900,902,903,906,907,908,910,912,913,915,916,918,920, 922,925,927,929,934,936,940,942,943,944,947,948,949,950,951, 953,954,955,956,957,958,959,961,962,963,964,965,967,968,969, 970,971,972,973,974,975,976,977,978,979,980,981,982,983,984, 985,986,987,988,989,990,991,992,993,994,995,996,997,998,999, 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011, 1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023, 1024,1025,1026,1027,1030,1031,1033,1034,1037,1040,1041,1042, 1044,1045,1047,1048,1050,1051,1054,1055,1056,1059,1060,1061, 1063,1065,1066,1067,1068,1071,1072,1073,1075,1076,1077,1079, 1080,1081,1082,1085,1086,1087,1088,1089,1091,1092,1093,1094, 1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107, 1108,1109,1110,1111,1112,1113,1114,1117,1118,1119,1120,1121, 1122,1125,1126,1127,1128,1129,1130,1133,1134,1135,1136,1137, 1138,1141,1142,1143,1144,1145,1146,1149,1150,1151,1152,1153, 1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165, 1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177, 1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189, 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201, 1202,1203,1204,1205,1206,1207,1208,1209,1211,1213,1215,1217, 1219,1221,1223,1225,1227,1228,1229,1230,1231,1232,1233,1234, 1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246, 1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258, 1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270, 1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282, 1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294, 1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306, 1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318, 1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330, 1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342, 1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354, 1355,1356,1357,1358,1359,1360,1361]; CR_4.nullGeneratorsZClass := [0,1,2,3,4,5,6,8,10,11,12,13,15,17,19,21,23,25,27,29,31, 33,35,37,39,41,43,45,47,49,51,53,55,57,60,63,66,69,72,75, 77,79,81,83,85,87,89,91,93,95,97,99,101,104,107,110,113, 116,119,122,125,128,131,134,137,140,143,146,149,152,155,158, 161,164,167,170,173,176,179,182,185,188,191,194,197,200,204, 208,212,216,220,224,228,232,233,234,235,236,238,240,242,244, 246,248,250,252,254,256,259,262,263,264,265,266,268,270,272, 274,276,278,280,282,284,285,286,288,290,292,294,296,299,300, 301,302,303,304,305,306,307,308,309,311,313,315,317,319,321, 323,325,327,329,331,333,335,337,339,341,343,345,347,349,351, 353,355,357,359,361,363,365,367,369,371,373,376,379,382,385, 388,391,394,397,400,403,406,408,410,412,414,416,418,420,422, 424,426,428,430,432,434,436,438,440,442,444,446,448,450,452, 454,457,460,463,466,469,472,475,478,481,484,487,490,493,496, 499,502,505,508,511,514,517,520,523,526,529,532,535,538,541, 544,547,550,553,556,560,564,568,572,576,577,578,579,580,581, 582,583,584,586,588,590,592,594,596,598,600,602,604,606,608, 610,612,614,616,618,620,622,624,626,628,630,632,634,636,638, 640,642,644,646,648,650,652,654,656,658,660,662,664,667,670, 673,676,679,682,684,686,688,690,692,694,696,698,700,702,704, 706,709,712,715,718,721,724,727,730,733,736,739,742,745,748, 751,754,758,762,764,766,768,770,772,774,776,778,780,782,784, 787,790,793,796,799,802,805,808,811,814,817,820,823,826,829, 832,835,839,843,847,851,855,859,863,865,867,869,871,874,877, 880,883,886,889,892,895,899,903,904,905,907,909,911,913,915, 917,919,921,923,925,927,929,931,933,935,938,941,944,947,950, 953,956,959,961,964,967,970,973,976,979,982,985,988,991,994, 997,1000,1004,1005,1006,1008,1010,1012,1014,1016,1018,1021, 1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1047, 1050,1053,1056,1059,1061,1063,1065,1068,1071,1074,1077,1080, 1083,1086,1089,1092,1095,1098,1101,1104,1107,1110,1113,1116, 1119,1122,1125,1127,1129,1131,1133,1136,1139,1141,1143,1146, 1149,1152,1155,1158,1161,1165,1168,1171,1174,1177,1180,1183, 1186,1189,1192,1195,1198,1201,1205,1209,1213,1217,1221,1225, 1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273, 1276,1279,1282,1285,1288,1291,1294,1297,1300,1303,1307,1311, 1315,1319,1323,1327,1331,1335,1339,1343,1347,1351,1355,1359, 1363,1367,1371,1375,1379,1383,1387,1391,1395,1399,1403,1407, 1411,1415,1419,1423,1427,1431,1435,1439,1443,1447,1451,1455, 1459,1463,1468,1473,1478,1483,1488,1489,1491,1492,1493,1495, 1497,1499,1500,1502,1504,1506,1508,1510,1512,1515,1518,1521, 1524,1527,1530,1533,1536,1539,1542,1545,1548,1551,1554,1558, 1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1600,1602, 1604,1607,1610,1612,1615,1618,1621,1624,1628,1631,1635,1639, 1643,1645,1647,1649,1651,1653,1655,1659,1663,1666,1669,1672, 1675,1679,1683,1686,1689,1691,1693,1695,1697,1699,1701,1704, 1707,1710,1713,1716,1719,1722,1725,1728,1731,1734,1737,1740, 1743,1746,1749,1753,1757,1761,1765,1769,1773,1777,1781,1785, 1789,1793,1797,1801,1805,1809,1812,1815,1820,1825,1830,1834, 1838,1843,1848,1853,1859,1865,1871,1877,1883,1889,1895,1901, 1907,1909,1911,1914,1917,1920,1924,1927,1931,1935,1939,1943, 1948,1953,1959,1965,1971,1978,1979,1980,1981,1982,1983,1984, 1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996, 1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008, 2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020, 2021,2022,2023,2024,2025,2026,2029,2032,2035,2039,2042,2045, 2049,2053,2056,2061,2066,2069,2072,2075,2078,2081,2084,2087, 2091,2094,2098,2101,2104,2108,2114,2122,2125,2128,2132,2134, 2138,2142,2145,2149,2152,2161,2169,2171,2175,2179,2183,2189, 2193,2196,2199,2202,2206,2210,2213,2217,2225,2240,2248,2256, 2260,2264,2268,2271,2274]; CR_4.nullQClass := [0,2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89, 111,115,126,137,142,153,155,159,161,170,183,190,211,227]; CR_4.nullSpaceGroup := [0,1,2,4,6,8,9,13,15,17,19,20,23,26,27,40,44,56,63,66, 71,87,91,99,105,111,113,116,122,124,128,131,132,134,180,188, 212,226,229,234,235,245,251,257,261,267,271,273,275,279,281, 283,285,286,305,319,329,335,338,342,345,348,452,488,528,548, 584,600,606,614,626,632,638,642,702,722,746,770,780,790,794, 802,806,810,814,816,1034,1122,1182,1201,1207,1223,1232,1235, 1236,1237,1240,1244,1248,1251,1255,1259,1262,1265,1271,1275, 1285,1294,1314,1323,1325,1327,1328,1329,1331,1333,1335,1337, 1339,1341,1343,1345,1347,1351,1352,1354,1359,1363,1365,1367, 1372,1373,1374,1375,1376,1379,1381,1384,1386,1388,1390,1391, 1397,1401,1405,1408,1411,1413,1429,1445,1451,1457,1465,1473, 1481,1489,1495,1499,1503,1509,1510,1522,1534,1538,1542,1548, 1554,1558,1562,1566,1569,1571,1575,1577,1613,1653,1665,1674, 1690,1706,1715,1721,1724,1733,1757,1763,1775,1783,1789,1793, 1801,1803,1807,1811,1813,1815,1823,1825,1829,1833,1835,1837, 1861,1867,1875,1887,1893,1897,1933,1939,1955,1961,1964,2092, 2108,2140,2172,2188,2196,2260,2324,2332,2340,2356,2372,2388, 2404,2412,2420,2424,2428,2524,2536,2560,2576,2588,2592,2628, 2634,2650,2656,2659,2931,2955,3019,3039,3045,3049,3051,3055, 3057,3059,3060,3064,3066,3070,3072,3074,3075,3079,3083,3085, 3087,3091,3092,3096,3097,3101,3102,3106,3107,3115,3117,3125, 3133,3135,3137,3145,3147,3155,3163,3165,3167,3175,3177,3185, 3193,3195,3197,3201,3202,3210,3218,3220,3222,3238,3240,3256, 3272,3274,3276,3292,3296,3299,3300,3303,3304,3320,3324,3327, 3330,3331,3332,3364,3368,3378,3388,3390,3392,3402,3404,3436, 3440,3450,3460,3462,3464,3474,3476,3512,3516,3518,3521,3522, 3523,3524,3525,3526,3527,3528,3531,3534,3536,3542,3554,3557, 3563,3565,3568,3574,3581,3584,3586,3591,3593,3600,3606,3608, 3617,3620,3630,3654,3678,3684,3688,3702,3706,3708,3711,3713, 3729,3733,3749,3765,3769,3773,3783,3787,3823,3829,3830,3831, 3832,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853, 3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877, 3881,3885,3889,3893,3897,3901,3905,3909,3913,3917,3921,3925, 3929,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947, 3949,3952,3953,3954,3955,3956,3958,3960,3964,3966,3968,3969, 3970,3973,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984, 3985,3986,3987,3988,3990,3992,3994,3997,3999,4000,4001,4002, 4003,4004,4006,4007,4009,4010,4011,4013,4014,4016,4017,4018, 4019,4021,4022,4023,4024,4026,4030,4034,4038,4040,4042,4043, 4046,4048,4050,4052,4054,4056,4060,4064,4067,4071,4074,4076, 4082,4086,4090,4094,4098,4100,4108,4112,4115,4123,4129,4141, 4149,4155,4163,4167,4171,4173,4175,4177,4178,4184,4188,4191, 4195,4197,4201,4205,4207,4211,4213,4225,4229,4232,4240,4242, 4250,4254,4256,4264,4266,4282,4290,4294,4310,4314,4330,4338, 4342,4358,4362,4370,4374,4376,4384,4386,4398,4402,4405,4413, 4415,4447,4455,4459,4491,4495,4496,4498,4499,4500,4501,4502, 4503,4504,4505,4506,4508,4510,4511,4512,4513,4515,4516,4517, 4519,4521,4522,4523,4525,4526,4527,4528,4529,4530,4531,4532, 4533,4534,4535,4537,4539,4540,4541,4542,4543,4544,4545,4546, 4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558, 4559,4560,4561,4562,4563,4564,4566,4568,4569,4570,4572,4574, 4575,4576,4577,4578,4579,4581,4583,4585,4587,4589,4591,4597, 4598,4599,4600,4603,4607,4610,4614,4616,4620,4622,4625,4628, 4634,4640,4642,4649,4651,4652,4653,4657,4663,4667,4673,4679, 4683,4687,4691,4696,4706,4710,4714,4715,4717,4718,4726,4734, 4736,4737,4739,4741,4743,4745,4747,4749,4750,4754,4756,4758, 4759,4760,4762,4763,4766,4768,4769,4771,4773,4775,4776,4778, 4779,4780,4781,4782,4783]; CR_4.nullZClass := [0,1,2,4,6,8,11,14,20,27,33,39,52,61,73,85,93,95,97,99, 103,105,107,109,111,113,116,119,122,123,124,125,126,127,129, 130,131,132,133,140,146,159,172,183,189,195,201,207,212,218, 230,236,241,246,250,254,262,266,270,276,282,288,294,300,302, 304,306,308,312,314,318,320,322,326,328,330,333,336,338,341, 346,353,358,365,367,369,371,375,377,379,380,381,383,385,386, 387,389,390,392,394,396,400,404,405,406,408,410,411,412,416, 418,419,421,423,427,429,431,433,436,439,444,447,450,454,459, 463,467,468,469,470,471,473,475,476,477,479,481,482,488,494, 500,506,512,517,522,527,532,537,542,547,552,557,562,567,568, 569,570,571,573,574,575,576,579,581,586,590,592,595,599,603, 606,607,608,609,611,612,613,614,615,616,617,618,620,621,625, 627,629,631,633,635,637,639,641,643,645,648,650,652,654,659, 661,664,666,670,674,676,679,681,684,687,690,693,694,695,696, 697,698,699,700,701,702,703,704,705,706,708,709,710]; CR_4.orbitLengthSpaceGroup := [7,3,1,1,7,7,3,3,1,6,9,2,1,2,6,6,1,6,6,3,6,6,12,3,6, 6,3,6,2,1,2,1,2,1,2,1,1,1,1,4,2,2,4,2,1,2,1,2,2,2, 1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,3,3,1,1,1,1,1,1, 1,1,2,2,1,1,1,2,2,1,1,1,1,2,3,2,6,1,3,3,1,1,1,2,1, 1,2,1,2,2,2,2,6,6,6,6,6,6,6,6,1,2,1,6,6,6,6,6,6,6, 6,3,6,3,6,6,6,6,6,12,6,12,12,12,12,3,6,3,6,12,6,1,6, 6,3,3,6,6,1,2,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,1,2, 2,1,1,1,2,2,4,4,4,4,2,2,2,2,1,1,2,1,2,2,2,1,3,3,6, 3,3,3,6,1,3,1,2,2,1,1,1,2,2,1,1,1,3,3,1,2,2,1,1,3, 3,1,1,3,1,1,1,1,1,3,12,12,24,12,24,4,6,12,24,12,24,24, 12,12,3,8,6,24,4,1,4,2,2,2,2,4,2,4,2,1,1,3,3,6,3,3, 3,6,1,3,12,3,12,3,1,2,1,3,1,3,1,2,4,3,6,3,6,3,3,6, 3,6,6,6,6,6,6,6,3,6,6,6,6,6,6,3,6,3,6,6,6,3,6,6,3, 6,3,1,6,6,3,3,6,6,6,6,3,6,6,6,3,6,6,6,3,6,6,3,6,6, 6,3,3,6,6,6,6,2,6,6,6,6,6,6,3,6,3,6,6,6,6,3,6,6,6, 6,3,6,6,6,6,6,6,6,2,3,3,3,6,6,3,6,6,1,3,3,1,2,1,2, 2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,1,1, 2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,2,2,1,2,1,2, 1,2,2,1,2,1,2,2,2,1,1,2,2,1,2,1,2,2,2,1,1,3,3,3,6, 3,6,3,6,3,3,6,3,1,3,3,1,3,3,1,2,1,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,1, 6,3,3,6,6,6,3,3,3,6,6,3,6,2,1,1,2,1,1,2,3,3,1,1,3, 3,1,1,2,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,2,2,1,1,3,3, 1,3,3,6,3,3,6,3,1,3,3,6,3,6,6,6,6,3,6,3,6,6,6,6,3, 3,6,3,3,6,6,6,6,6,6,6,6,6,3,3,6,6,3,3,3,3,6,6,3,3, 3,3,3,6,6,3,1,3,1,3,2,1,2,1,1,2,2,2,2,2,2,2,2,2,1, 2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2, 1,1,1,2,2,1,1,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,1,1, 1,3,3,3,3,6,6,3,3,3,3,1,3,3,6,6,3,3,1,1,1,1,1,1,1, 1,1,1,3,1,3,1,1,1,1,1,1,3,12,12,24,12,24,24,24,12,24, 4,6,12,24,12,6,12,24,24,12,12,6,24,24,24,24,24,12,24,24, 24,24,24,8,24,24,24,24,24,24,24,24,24,12,24,24,12,24,24, 12,12,24,24,24,24,24,12,24,24,24,24,24,24,12,24,24,12,24, 12,24,24,12,24,4,12,12,4,24,12,12,24,24,12,24,12,24,24, 8,12,12,24,4,24,24,24,12,24,24,24,24,12,24,24,12,24,24, 24,24,6,8,24,24,24,24,24,24,24,24,24,24,12,24,24,24,24, 24,24,24,24,24,24,24,12,24,12,12,24,24,24,24,24,24,12,12, 24,24,24,12,12,24,24,6,12,12,12,24,24,6,12,3,24,24,24, 24,24,24,24,24,24,12,24,24,24,24,24,24,24,12,24,12,24,24, 12,24,12,12,24,24,24,24,12,4,24,12,24,24,12,12,12,24,12, 24,24,24,12,24,12,8,24,6,4,12,3,12,12,6,12,1,2,4,4,2, 2,1,4,4,4,2,2,4,4,4,2,2,2,2,4,4,4,4,4,2,2,4,4,4,4, 2,2,4,4,4,2,2,2,2,4,4,1,2,1,4,4,2,2,4,4,4,2,2,4,4, 4,4,4,4,2,2,4,2,2,1,2,4,4,2,2,1,4,4,4,2,2,4,4,4,2, 2,2,2,4,4,1,2,1,3,6,6,3,3,3,6,3,3,3,3,6,6,6,6,3,6, 6,6,6,6,3,6,3,6,6,6,6,3,3,6,1,6,6,3,3,3,3,3,3,6,3, 6,6,6,6,3,3,6,3,6,3,1,3,6,3,3,3,1,12,12,12,24,6,24, 12,24,24,12,8,4,12,24,12,24,6,3,4,2,4,4,1,3,1,3,3,3, 1,3,1,3,3,3,1,1,1,1,2,2,4,1,2,1,2,1,4,3,12,3,4,1,2, 1,3,3,2,1,3,1,3,1,3,3,2,1,2,1,12,3,1,12,3,4,1,2,3, 1,3,3,6,3,3,6,3,1,2,2,2,4,1,1,2,1,3,3,1,1,3,3,3,3, 3,3,6,6,3,3,3,3,6,6,2,1,2,4,2,1,2,1,2,8,3,3,3,2,8, 8,3,3,3,24,8,3,3,3,3,3,6,24,8,3,3,3,3,3,3,6,2,1,1, 2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1, 1,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1, 2,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1, 1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1, 2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,1,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2, 4,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,1,2,1,1,4,2,2,2,1,1,2,1,2,1,1,2,2, 4,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1, 1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1, 1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1, 1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,2,2,2,2,2, 2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2, 1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1, 1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1, 1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,1,1,2,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,2,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2, 2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2, 2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,2,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2, 2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,1, 1,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1, 1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,1,2,2,2,1,2,1,1,1,1, 2,2,1,1,2,2,1,2,2,2,1,2,1,2,2,1,2,2,1,2,1,2,2,1,2, 2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2, 2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2, 2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2, 1,2,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,2,1,2,1,2,2,2,2,1, 2,1,1,1,2,1,2,2,2,2,2,1,1,1,2,2,1,1,2,2,1,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2,1, 2,2,2,2,1,2,1,2,1,2,2,2,2,1,2,1,1,1,2,1,2,2,2,2,2, 1,1,1,2,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,1,2,1,2,2,2,2,2,1,1,1,1,1,3,2,1,2,1,1,2,1,1, 2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,2,1,1,2,1,1,2,1, 1,2,2,1,1,4,2,2,2,4,1,2,1,1,4,1,1,1,1,2,1,4,4,2,2, 2,4,1,4,4,1,2,1,2,1,1,4,2,2,2,1,2,1,2,2,2,2,1,2,1, 1,1,1,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,1,1,1,1,2,2, 2,1,2,2,4,4,4,4,4,4,4,4,2,2,4,4,2,2,1,2,1,2,1,2,1, 1,1,1,1,2,4,4,1,2,2,4,4,1,2,1,2,2,1,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,2,1,2,2,2,2,2,1,1, 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4, 4,2,2,2,2,4,2,2,4,4,2,2,2,2,4,4,2,2,2,2,2,2,2,2,1, 2,2,1,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1, 1,1,1,2,2,2,1,2,4,2,2,1,2,2,1,2,2,1,2,1,2,2,1,1,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1, 1,2,2,1,2,4,4,2,2,2,1,1,2,2,1,2,2,1,2,4,2,2,1,1,2, 2,1,2,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,1,1, 2,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1, 1,1,6,1,3,3,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2, 1,1,2,2,1,1,2,1,2,1,1,3,9,9,18,3,18,6,1,1,1,1,2,1, 2,1,1,1,1,1,2,1,1,2,1,1,1,1,2,2,1,1,1,1,1,1,3,3,1, 3,3,6,3,3,6,3,3,6,3,3,3,1,1,1,1,1,1,1,3,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,3,1,2,1, 3,1,1,1]; CR_4.orderQClass := [1,2,2,2,4,2,4,4,4,4,8,4,8,8,8,16,4,4,8,8,8,8,16,3, 6,6,6,12,6,6,12,12,12,12,24,4,3,6,4,8,8,8,16,8,8, 8,8,16,16,16,16,16,32,6,6,6,12,12,12,12,12,12,24,12, 12,12,12,12,24,24,24,24,24,24,48,8,6,12,8,16,16,16, 32,16,16,32,32,32,64,12,12,12,24,24,24,24,24,24,24,24, 24,24,24,48,48,48,48,48,48,48,96,6,12,12,24,9,18,18, 18,18,36,36,36,36,36,72,18,36,36,36,36,36,72,72,72,72, 144,12,24,24,24,48,24,24,24,24,48,48,48,48,48,48,96,8, 16,5,10,10,20,12,24,18,36,36,36,72,72,72,72,144,12,24, 24,24,36,48,72,72,72,144,144,144,288,20,40,60,120,120, 120,240,8,16,16,16,24,32,32,32,32,32,48,64,64,64,64, 96,128,192,192,192,384,24,24,24,48,48,48,72,96,96,96, 144,192,288,576,576,1152]; CR_4.parametersDadeGroup := [[4,20,22,1,0],[4,25,11,2,0],[4,25,11,4,0],[4,29,9,1,0],[4,30,13,1,0], [4,31,7,1,0],[4,31,7,2,0],[4,32,21,1,0],[4,33,16,1,0]]; CR_4.QClassZClass := [1,2,3,3,4,4,5,5,6,6,6,7,7,7,8,8,8,8,8,8,9,9,9,9,9, 9,9,10,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12, 12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,14,14, 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15, 15,15,15,16,16,16,16,16,16,16,16,17,17,18,18,19,19,20,20, 20,20,21,21,22,22,23,23,24,24,25,25,26,26,26,27,27,27,28, 28,28,29,30,31,32,33,34,34,35,36,37,38,39,39,39,39,39,39, 39,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41, 41,42,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43, 43,43,43,43,43,43,44,44,44,44,44,44,45,45,45,45,45,45,46, 46,46,46,46,46,47,47,47,47,47,47,48,48,48,48,48,49,49,49, 49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51, 51,51,52,52,52,52,52,53,53,53,53,53,54,54,54,54,55,55,55, 55,56,56,56,56,56,56,56,56,57,57,57,57,58,58,58,58,59,59, 59,59,59,59,60,60,60,60,60,60,61,61,61,61,61,61,62,62,62, 62,62,62,63,63,63,63,63,63,64,64,65,65,66,66,67,67,68,68, 68,68,69,69,70,70,70,70,71,71,72,72,73,73,73,73,74,74,75, 75,76,76,76,77,77,77,78,78,79,79,79,80,80,80,80,80,81,81, 81,81,81,81,81,82,82,82,82,82,83,83,83,83,83,83,83,84,84, 85,85,86,86,87,87,87,87,88,88,89,89,90,91,92,92,93,93,94, 95,96,96,97,98,98,99,99,100,100,101,101,101,101,102,102, 102,102,103,104,105,105,106,106,107,108,109,109,109,109,110, 110,111,112,112,113,113,114,114,114,114,115,115,116,116,117, 117,118,118,118,119,119,119,120,120,120,120,120,121,121,121, 122,122,122,123,123,123,123,124,124,124,124,124,125,125,125, 125,126,126,126,126,127,128,129,130,131,131,132,132,133,134, 135,135,136,136,137,138,138,138,138,138,138,139,139,139,139, 139,139,140,140,140,140,140,140,141,141,141,141,141,141,142, 142,142,142,142,142,143,143,143,143,143,144,144,144,144,144, 145,145,145,145,145,146,146,146,146,146,147,147,147,147,147, 148,148,148,148,148,149,149,149,149,149,150,150,150,150,150, 151,151,151,151,151,152,152,152,152,152,153,153,153,153,153, 154,155,156,157,158,158,159,160,161,162,162,162,163,163,164, 164,164,164,164,165,165,165,165,166,166,167,167,167,168,168, 168,168,169,169,169,169,170,170,170,171,172,173,174,174,175, 176,177,178,179,180,181,182,182,183,184,184,184,184,185,185, 186,186,187,187,188,188,189,189,190,190,191,191,192,192,193, 193,194,194,195,195,195,196,196,197,197,198,198,199,199,199, 199,199,200,200,201,201,201,202,202,203,203,203,203,204,204, 204,204,205,205,206,206,206,207,207,208,208,208,209,209,209, 210,210,210,211,211,211,212,213,214,215,216,217,218,219,220, 221,222,223,224,225,225,226,227]; CR_4.relatorNumbersQClass := CR_2.relatorNumbersQClass; CR_4.rowConjugatorDadeGroup := [[-5,3,-3,1],[-3,2,-2,1],[-2,-2,-1,-1],[-2,-1,1,-1], [-2,1,-1,-1],[-2,1,-1,0],[-2,1,-1,1],[-2,2,-1,-1], [-2,2,-1,1],[-1,-3,1,-1],[-1,-2,1,-1],[-1,-1,-1,-1], [-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,0,-1],[-1,-1,0,0], [-1,-1,1,-1],[-1,-1,1,0],[-1,0,-1,-1],[-1,0,-1,0], [-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0],[-1,0,0,1], [-1,0,1,0],[-1,1,-1,0],[-1,1,0,-1],[-1,1,0,0], [-1,1,0,1],[0,-2,0,-1],[0,-1,-1,-1],[0,-1,-1,0], [0,-1,-1,1],[0,-1,0,-1],[0,-1,0,0],[0,-1,0,1], [0,-1,1,-1],[0,-1,1,0],[0,-1,1,1],[0,0,-1,-1], [0,0,-1,0],[0,0,-1,1],[0,0,0,-1],[0,0,0,1], [0,0,1,-1],[0,0,1,0],[0,0,1,1],[0,1,-1,-1], [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0], [0,1,0,1],[0,1,1,0],[0,1,1,1],[0,2,0,1], [1,-1,0,0],[1,-1,1,-1],[1,-1,1,0],[1,0,-1,0], [1,0,0,-1],[1,0,0,0],[1,0,0,1],[1,0,1,0], [1,0,1,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1], [1,1,0,0],[1,1,0,1],[1,1,1,-2],[1,1,1,-1], [1,1,1,1],[1,2,-1,1],[1,2,0,1],[2,-2,1,-1], [2,-2,1,1],[2,-1,1,-1],[2,-1,1,0],[2,0,1,1], [2,1,-1,1],[2,2,1,-1],[2,2,1,1],[2,3,-1,1], [3,-2,1,-1],[3,-2,2,-1],[4,2,2,1],[5,-3,2,-2], [10,-6,5,-3],[-6,4,-3,2],[-4,2,-2,1],[-3,1,-1,-1], [-3,2,-1,1],[-2,-3,1,-1],[-2,-1,-1,0],[-2,0,-1,0], [-2,1,0,-1],[-2,1,0,1],[-1,-2,0,-1],[-1,-2,1,0], [-1,-1,-2,-1],[-1,-1,0,1],[-1,-1,1,1],[-1,0,1,1], [-1,0,1,2],[-1,0,2,1],[-1,1,-2,-1],[-1,1,-1,-1], [-1,1,-1,1],[-1,1,1,-1],[0,-3,1,-1],[0,-2,-1,0], [0,-2,2,1],[0,0,-2,-1],[0,0,2,1],[0,1,-2,-1], [0,1,1,-1],[0,2,2,1],[1,-2,1,0],[1,-1,0,-1], [1,-1,0,1],[1,-1,1,1],[1,0,-1,-1],[1,0,1,-1], [1,1,-2,-1],[1,1,-1,-1],[1,1,1,0],[1,2,-1,0], [1,3,-1,1],[2,-1,0,1],[2,-1,1,1],[2,0,0,-1], [2,0,1,0],[2,1,1,1],[2,1,2,1],[3,3,-1,1], [5,-3,2,-1],[5,6,-2,2],[7,9,-3,3]]; CR_4.rowGeneratorZClass := [[-1,-1,-1,-1],[-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,-1,2],[-1,-1,0,-1], [-1,-1,0,0],[-1,-1,0,1],[-1,-1,1,-1],[-1,-1,1,0],[-1,-2,2,0], [-1,0,-1,-1],[-1,0,-1,0],[-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0], [-1,0,0,1],[-1,0,1,-1],[-1,0,1,0],[-1,0,1,1],[-1,1,-1,-1], [-1,1,-1,0],[-1,1,-1,1],[-1,1,0,-1],[-1,1,0,0],[-1,1,0,1], [-1,1,1,-1],[-1,1,1,0],[-2,-1,0,1],[-2,-2,0,-1],[-2,0,-1,0], [-2,0,-1,1],[-2,0,0,-1],[-2,0,0,1],[-2,0,1,-2],[-2,1,0,-2], [-4,3,0,2],[0,-1,-1,-1],[0,-1,-1,0],[0,-1,-1,1],[0,-1,0,-1], [0,-1,0,0],[0,-1,0,1],[0,-1,1,-1],[0,-1,1,0],[0,-1,1,1], [0,-2,-1,-1],[0,-2,-1,0],[0,-2,0,-1],[0,0,-1,-1],[0,0,-1,-2], [0,0,-1,0],[0,0,-1,1],[0,0,-1,2],[0,0,-2,-1],[0,0,-2,3], [0,0,-4,3],[0,0,0,-1],[0,0,0,1],[0,0,1,-1],[0,0,1,0], [0,0,1,1],[0,0,1,2],[0,0,2,-1],[0,0,2,1],[0,0,2,3], [0,0,3,-1],[0,0,3,-2],[0,0,4,-1],[0,0,4,3],[0,1,-1,-1], [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0],[0,1,0,1], [0,1,1,-1],[0,1,1,0],[0,1,1,1],[0,1,2,1],[0,2,-2,-1], [1,-1,-1,0],[1,-1,-1,1],[1,-1,0,-1],[1,-1,0,0],[1,-1,0,1], [1,-1,1,-1],[1,-1,1,0],[1,-1,1,1],[1,0,-1,-1],[1,0,-1,-2], [1,0,-1,0],[1,0,-1,1],[1,0,-2,-1],[1,0,-2,1],[1,0,0,-1], [1,0,0,0],[1,0,0,1],[1,0,1,-1],[1,0,1,0],[1,0,1,1], [1,0,2,-1],[1,0,2,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1], [1,1,0,0],[1,1,0,1],[1,1,1,-1],[1,1,1,-2],[1,1,1,0], [1,1,1,1],[1,2,0,1],[1,2,1,0],[1,2,1,1],[1,3,-1,1], [2,0,1,1],[2,1,0,-1],[2,1,0,1],[2,1,1,0],[2,1,1,1], [2,2,0,1],[4,-1,0,-2],[4,1,0,-2],[4,1,1,1]]; CR_4.spaceGroupIdentity := [[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]; CR_4.splittingQClass := BlistList( [1..227], [36,37,38,76,77,78,112,113,114,115,154,155,160,161,162,163, 171,172,173,174,175,176,177,178,191,192,193,194,195,196,198, 201,212,213,214,215,216,217,218,219,220,221,222,223] ); CR_4.splittingSpaceGroupType := BlistList( [ 1 .. 4783 ], [1373,1374,1375,3517,3518,3519,3520,3521,3522,3523,3524, 3525,3526,3527,3606,3615,3938,3939,3940,3941,3942,3943,3944, 3945,3946,3947,4496,4497,4498,4504,4505,4506,4507,4508,4509, 4510,4511,4512,4516,4544,4545,4546,4547,4548,4549,4550,4551, 4552,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589, 4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601, 4602,4603,4604,4605,4606,4607,4615,4616,4617,4618,4619,4620, 4646,4649,4650,4651,4652,4653,4659,4661,4759,4760,4761,4762, 4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774, 4775,4776,4777,4778] ); CR_4.splittingZClass := BlistList( [1..710], [131,132,133,331,332,333,334,335,336,337,338,420,421,422,423, 424,425,426,427,428,429,568,569,575,576,577,578,579,580,581, 584,607,608,609,610,611,612,613,614,615,638,639,640,641,642, 643,644,645,646,647,648,649,650,653,654,662,663,664,694,695, 696,697,698,699,700,701,702,703,704,705] ); crystcat/tst/0000755001325400021140000000000015114265054012673 5ustar gaehlerusercrystcat/tst/testall.g0000644001325400021140000000037213236036170014513 0ustar gaehleruserLoadPackage( "crystcat" ); TestDirectory( DirectoriesPackageLibrary( "crystcat", "tst" ), rec( exitGAP := true, testOptions := rec( compareFunction := "uptowhitespace") ) ); FORCE_QUIT_GAP(1); # if we ever get here, there was an error crystcat/tst/manual.tst0000644001325400021140000002013715114254377014715 0ustar gaehlerusergap> START_TEST( "Crystcat: manual.tst" ); gap> SetAssertionLevel(1); gap> n := NrCrystalFamilies( 4 ); 23 gap> DisplayCrystalFamily( 4, 17 ); #I Family XVII: cubic orthogonal; 2 free parameters; #I Q-decomposition pattern 1+3; R-decomposition pattern 1+3; #I 2 crystal systems; 6 Bravais flocks gap> DisplayCrystalFamily( 4, 18 ); #I Family XVIII: octagonal; 2 free parameters; #I Q-irreducible; R-decomposition pattern 2+2; #I 1 crystal system; 1 Bravais flock gap> DisplayCrystalFamily( 4, 21 ); #I Family XXI: di-isohexagonal orthogonal; 1 free parameter; #I R-irreducible; 2 crystal systems; 2 Bravais flocks gap> n := NrCrystalSystems( 2 ); 4 gap> for sys in [ 1 .. 4 ] do DisplayCrystalSystem( 2, sys ); od; #I Crystal system 1: 2 Q-classes; holohedry (2,1,2) #I Crystal system 2: 2 Q-classes; holohedry (2,2,2) #I Crystal system 3: 2 Q-classes; holohedry (2,3,2) #I Crystal system 4: 4 Q-classes; holohedry (2,4,4) gap> DisplayQClass( "p2" ); #I Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2; #I Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group gap> DisplayQClass( "R-3" ); #I Q-class (3,5,2): size 6; isomorphism type 6.1 = C6; #I Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps gap> DisplayQClass( 3, 195 ); #I Q-class (3,7,1): size 12; isomorphism type 12.5 = A4; #I C-irreducible; 3 Z-classes; 5 space grps gap> DisplayQClass( 4, 27, 4 ); #I Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2; #I Q-irreducible; 1 Z-class; 1 space group gap> DisplayQClass( 4, 29, 1 ); #I *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3; #I R-irreducible; 3 Z-classes; 5 space grps gap> F := FpGroupQClass( 4, 20, 3 ); FpGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( F ); [ f1, f2 ] gap> RelatorsOfFpGroup( F ); [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ] gap> Size( F ); 12 gap> CrystCatRecord( F ).parameters; [ 4, 20, 3 ] gap> P := PcGroupQClass( 4, 31, 3 ); #I Warning: a non-solvable group can't be represented as a pc group fail gap> P := PcGroupQClass( 4, 20, 3 ); #I Warning: the presentation has been extended to get a prime order pcgs PcGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( P ); [ f1, f2, f3 ] gap> Size( P ); 12 gap> CrystCatRecord( P ).parameters; [ 4, 20, 3 ] gap> T := CharTableQClass( 4, 20, 3 );; gap> CharacterDegrees( T ); [ [ 1, 4 ], [ 2, 2 ] ] gap> DisplayZClass( 2, 3 ); #I Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( "F-43m" ); #I Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( 4, 2, 3, 2 ); #I Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable; #I 2 space groups; cohomology group size 4 gap> DisplayZClass( 4, 21, 3, 1 ); #I *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible; #I 1 space group; cohomology group size 1 gap> M := MatGroupZClass( 4, 20, 3, 1 ); MatGroupZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( M ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] gap> Size( M ); 12 gap> CrystCatRecord( M ).parameters; [ 4, 20, 3, 1 ] gap> N := NormalizerZClass( 4, 20, 3, 1 ); NormalizerZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( N ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, -1, -1 ] ] [ [ 1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 0, 0, -1 ] ] gap> Size( N ); 96 gap> CrystCatRecord( N ).parameters; [ 4, 20, 22, 1 ] gap> CrystCatRecord( N ).conjugator = One( N ); true gap> L := NormalizerZClass( 3, 42 ); NormalizerZClass( 3, 3, 2, 4 ) gap> Size( L ); 16 gap> CrystCatRecord( L ).parameters; [ 3, 4, 7, 2 ] gap> CrystCatRecord( L ).conjugator; [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ] gap> M := NormalizerZClass( "C2/m" ); gap> Size( M ); infinity gap> HasCrystCatRecord( M ); false gap> NrDadeGroups( 4 ); 9 gap> D := DadeGroup( 4, 7 ); MatGroupZClass( 4, 31, 7, 2 ) gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 ); [ 1, 5, 8 ] gap> for d in dadeNums do > D := DadeGroup( 4, d ); > Print( D, " of size ", Size( D ), "\n" ); > od; MatGroupZClass( 4, 20, 22, 1 ) of size 96 MatGroupZClass( 4, 30, 13, 1 ) of size 288 MatGroupZClass( 4, 32, 21, 1 ) of size 384 gap> DadeGroupNumbersZClass( 2, 2, 1, 2 ); [ 1, 2 ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ] gap> R := last[2];; gap> CrystCatRecord( R ).parameters; [ 2, 2, 1, 2 ] gap> CrystCatRecord( R ).conjugator; [ [ 1, 0 ], [ -1, 1 ] ] gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 ); 13 gap> DisplaySpaceGroupType( 2, 17 ); #I Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1 gap> DisplaySpaceGroupType( "Pm-3" ); #I Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1 gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 ); #I *Space-group type (4,32,10,2,4); orbit size 18 gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 ); #I *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65; #I orbit size 2; fp-free gap> DisplaySpaceGroupGenerators( "P61" ); #I Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] gap> S := SpaceGroupOnLeftBBNWZ( "P61" ); SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for s in GeneratorsOfGroup( S ) do > Print( "\n" ); PrintArray( s ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 1 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 1 ], [ 0, 0, 0, 1 ] ] gap> CrystCatRecord( S ).parameters; [ 3, 6, 1, 1, 4 ] gap> T := SpaceGroupOnRightBBNWZ( S ); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> for m in GeneratorsOfGroup( T ) do > Print( "\n" ); PrintArray( m ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/2, 1 ] ] [ [ 0, 1, 0, 0 ], [ -1, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/3, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1, 1 ] ] gap> G := FpGroupSpaceGroupBBNWZ( S ); FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od; g1^2*g5^-1 g2^3*g5^-1 g2^-1*g1^-1*g2*g1 g3^-1*g1^-1*g3*g1*g3^2 g3^-1*g2^-1*g3*g2*g4*g3^2 g4^-1*g1^-1*g4*g1*g4^2 g4^-1*g2^-1*g4*g2*g4*g3^-1 g4^-1*g3^-1*g4*g3 g5^-1*g1^-1*g5*g1 g5^-1*g2^-1*g5*g2 g5^-1*g3^-1*g5*g3 g5^-1*g4^-1*g5*g4 gap> # Verify that the matrix generators of S satisfy the relators of G. gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) = > MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) ); true gap> STOP_TEST( "manual.tst" ); crystcat/README0000644001325400021140000000271015114265054012741 0ustar gaehleruserThe GAP 4 package CrystCat provides a catalog of crystallographic groups of dimensions 2, 3, and 4 which covers most of the data contained in the book "Crystallographic groups of four-dimensional space" by H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and H. Zassenhaus (John Wiley, New York, 1978). This catalog was previously available in the library of GAP 3. The present version for GAP 4 has been moved into a separate package, because it requires the package Cryst, which is loaded automatically. The benefit of this is that space groups extracted from the catalog now have the rich set of methods provided by Cryst at their disposal, and are no longer dumb lists of generators. Moreover, space groups are now fully supported in both the representation acting from the left and the representation acting from the right. CrystCat is distributed together with GAP, and does not require any installation. It is loaded with the GAP command gap> LoadPackage( "crystcat" ); The catalog was brought into GAP format, and ported later to GAP 4 by Volkmar Felsch, Lehrstuhl D für Mathematik, RWTH Aachen, volkmar.felsch@math.rwth-aachen.de The integration with Cryst is done by Franz Gähler, Fakultät für Mathematik, Universität Bielefeld, gaehler@math.uni-bielefeld.de For bug reports, suggestions and other comments please use the issue tracker on the GitHub page of the package: https://github.com/gap-packages/crystcat/issues crystcat/htm/0000755001325400021140000000000015114265054012651 5ustar gaehlerusercrystcat/htm/biblio.htm0000644001325400021140000000176415114265054014633 0ustar gaehlerusercrystcat : a GAP 4 package - References

crystcat : a GAP 4 package - References

[BBNWZ78]
H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and H. Zassenhaus.
Crystallographic Groups of Four-Dimensional Space.
John Wiley, New York, 1978.
[Hah95]
T. Hahn, editor.
International Tables for Crystallography, Volume A, Space-group Symmetry, 4th Edition.
Kluwer, Dordrecht, 1995.
[NPW81]
J. Neubüser, W. Plesken, and H. Wondratschek.
An emendatory discursion on defining crystal systems.
Match, 10:77--96, 1981.

[Up]

crystcat manual
Dezember 2025
crystcat/htm/chapters.htm0000644001325400021140000000103115114265054015167 0ustar gaehlerusercrystcat : a GAP 4 package - Chapters

crystcat : a GAP 4 package - Chapters

  1. The Crystallographic Groups Catalog

crystcat manual
Dezember 2025
crystcat/htm/theindex.htm0000644001325400021140000000652415114265054015202 0ustar gaehlerusercrystcat : a GAP 4 package - Index

crystcat : a GAP 4 package - Index

C D F H M N P Q R S T Z

C

CharTableQClass 1.5.5
Crystal Families 1.3
Crystal Systems 1.4
crystallographic groups 1.0
crystcat 1.0

D

Dade groups 1.7
DadeGroup 1.7.2
DadeGroupNumbersZClass 1.7.3
DisplayCrystalFamily 1.3.2
DisplayCrystalSystem 1.4.2
DisplayQClass 1.5.2
DisplaySpaceGroupGenerators 1.8.3
DisplaySpaceGroupType 1.8.2
DisplayZClass 1.6.2

F

FpGroupQClass 1.5.3
FpGroupSpaceGroupBBNWZ 1.8.7

H

How to access the data of the book 1.1

M

MatGroupZClass 1.6.3

N

NormalizerZClass 1.6.4
NrCrystalFamilies 1.3.1
NrCrystalSystems 1.4.1
NrDadeGroups 1.7.1
NrQClassesCrystalSystem 1.5.1
NrSpaceGroupTypesZClass 1.8.1
NrZClassesQClass 1.6.1

P

PcGroupQClass 1.5.4

Q

Q-Classes 1.5

R

Representation of space groups 1.2

S

Space groups and space group types 1.8
SpaceGroupBBNWZ 1.8.6
SpaceGroupOnLeftBBNWZ 1.8.4
SpaceGroupOnRightBBNWZ 1.8.5

T

The Crystallographic Groups Catalog 1.0

Z

Z-Classes 1.6
ZClassRepsDadeGroup 1.7.4

[Up]

crystcat manual
Dezember 2025
crystcat/htm/CHAP001.htm0000644001325400021140000014645415114265054014335 0ustar gaehleruser[crystcat] 1 The Crystallographic Groups Catalog [Up] [Index]

1 The Crystallographic Groups Catalog

Sections

  1. How to access the data of the book
  2. Representation of space groups
  3. Crystal Families
  4. Crystal Systems
  5. Q-Classes
  6. Z-Classes
  7. Dade groups
  8. Space groups and space group types

The package CrystCat provides a catalog of crystallographic groups of dimensions 2, 3, and 4 which covers most of the data contained in the book ``Crystallographic groups of four-dimensional space'' BBNWZ78. It has been brought into GAP format by Volkmar Felsch.

The GAP 4 version of the catalog requires the package Cryst, which is loaded automatically. The benefit of this is that space groups extracted from the catalog now have the rich set of methods provided by Cryst at their disposal, and are no longer dumb lists of generators. Moreover, space groups are now fully supported in both the representation acting from the left and the representation acting from the right.

In 2001, Bernd Souvignier has discovered an error in the above mentioned book: On page 118, in the tabulation of enantiomorphic space-group types, it is wrongly claimed that the (affine) four-dimensional space-group type 08/01/01/002 splits into an enantiomorphic pair of (proper) space-group types. This is indicated by an asterisk preceding the space-group number. This asterisk has to be removed. As a consequence, the number of four-dimensional space-group types splitting into enantiomorphic pairs (given on page 11 and page 52 of the book) reduces from 112 to 111. An erratum has been submitted to Acta Cryst..

The only implication of this correction for the package CrystCat is that the output of the function

DisplaySpaceGroupType( 4, 8, 1, 1, 2 );
had to be changed from
#I    *Space-group type (4,8,1,1,2); orbit size 2; fp-free
to
#I     Space-group type (4,8,1,1,2); orbit size 2; fp-free
This has been done in the release GAP 4.3.

1.1 How to access the data of the book

Among others, the catalog offers functions which provide access to the data listed in the Tables 1, 5, and 6 of BBNWZ78:

The display functions mentioned in the above list print their output with different indentation. So, calling them in a suitably nested loop, you may produce a listing in which the information about the objects of different type will be properly indented as has been done in Table 1 of BBNWZ78.

1.2 Representation of space groups

Probably the most important function in the catalog is the SpaceGroupBBNWZ function which provides representatives of the affine classes of space groups. A space group of dimension n is represented by an (n+1)-dimensional rational matrix group as follows.

If S is an n-dimensional space group, then each element s in S is an affine mapping s: VV of an n-dimensional R-vector space V onto itself. Hence s can be written as the product of an appropriate invertible linear mapping g: VV and a translation by some translation vector tV such that, if we write mappings from the left, we have s(v) = g(v) + t for all vV.

If we fix a basis of V and then replace each vV by the column vector of its coefficients with respect to that basis (and hence V by the isomorphic column vector space Rn ×1), we can describe the linear mapping g involved in s by an n ×n matrix MgGLn(R) which acts by multiplication from the left on the column vectors in Rn ×1. Hence, if we identify V with Rn ×1, we have s(v) = Mg v + t for all vRn ×1.

Moreover, if we extend each column vector vRn ×1 to a column [ [ v ], [ 1 ] ] of length n+1 by adding an entry 1 in the last position and if we define an (n+1) ×(n+1) matrix Ms = [ [ Mg, t ], [ 0, 1 ] ], we have [ [ s(v) ], [ 1 ] ] = Ms [ [ v ], [ 1 ] ] for all vRn ×1. This means that we can represent the space group S by the isomorphic group M(S) = { Ms | sS }. The submatrices Mg occurring in the elements of M(S) form an n ×n matrix group P(S), the ``point group'' of M(S). In fact, we can choose the basis of Rn ×1 such that MgGLn(Z) and tQn ×1 for all MsM(S). In particular, the space group representatives that are normally used by the crystallographers are of this form, and the book BBNWZ78 uses the same convention.

The representation described above is the one usually used by crystallographers. There is, however, an alternative to the representation of the space group elements by matrices of the form [ [ Mg, t ], [ 0, 1 ] ] as described above. Instead of considering the coefficient vectors as columns we may consider them as rows. Then we can associate to each affine mapping sS an (n+1) ×(n+1) matrix Ms = [ [ Mg, 0 ], [ t′, 1 ] ] with MgGLn(R) and t′ ∈ R1 ×n such that [s(v′),1] = [v′,1] Ms for all v′ ∈ R1 ×n, and we may represent S by the matrix group M′(S) = { Ms | sS }. Again, we can choose the basis of R1 ×n such that MgGLn(Z) and t′ ∈ Q1 ×n for all MsM′(S).

From the mathematical point of view, both approaches are equivalent. In particular, M(S) and M′(S) are isomorphic, for instance via the isomorphism τ mapping MsM(S) to (Mstr)−1. Unfortunately, however, neither of the two is a good choice for our GAP catalog.

The first convention, using matrices which act on column vectors from the left, is not consistent with the fact that actions in GAP are usually from the right.

On the other hand, if we choose the second convention, we run into a problem with the names of the space groups as introduced in BBNWZ78. Any such name does not just describe the abstract isomorphism type of the respective space group S, but reflects properties of the matrix group M(S). In particular, it contains as a leading part the name of the Z-class of the associated point group P(S). Since the classification of space groups by affine equivalence is tantamount to their classification by abstract isomorphism, M′(S) lies in the same affine class as M(S) and hence should get the same name as M(S). But the point group P(S) that occurs in that name is not always Z-equivalent to the point group P′(S) of M′(S). For example, the isomorphism τ: M(S) → M′(S) defined above maps the Z-class representative with the parameters [3,7,3,2] (in the notation described below) to the Z-class representative with the parameters [3,7,3,3]. In other words: The space group names introduced for the groups M(S) in BBNWZ78 lead to confusing inconsistencies if assigned to the groups M′(S).

In order to avoid this confusion we decided that the first convention is the lesser evil, and so the GAP catalog follows the book. In particular, all functions listed in section How to access the data of the book use the convention of the book. The space groups, however, can be constructed in both representations, so that the user can choose the one that seems more appropriate in the particular situation. The function SpaceGroupOnLeftBBNWZ constructs a space group in the ``crystallographic'' representation acting on the left, whereas SpaceGroupOnRightBBNWZ constructs a space group in the representation acting on the right, as preferred by GAP. In order to avoid long function names (and in order to avoid mixing groups in different representations), one can set one's own default with the function SetCrystGroupDefaultAction (see SetCrystGroupDefaultAction), which takes as argument either LeftAction of RightAction. SpaceGroupBBNWZ then constructs a space group in this default representation. Initially, the default is RightAction.

The space groups constructed from the catalog are matrix groups, which in addition have the property IsAffineCrystGroupOnLeft (or IsAffineCrystGroupOnRight, respectively). The package Cryst provides methods to compute with such groups. Cryst is necessary for any serious computation with space groups, because the support of plain GAP for infinite matrix groups (such as space groups) is very limited.

Before we describe all available catalog functions in detail, we have to add two remarks.

Remark 1: The concepts used in this section are defined in chapter 1 (Basic definitions) of BBNWZ78. However, note that the definition of the concept of a crystal system given on page 16 of that book relies on the following statement about Q-classes:

For a Q-class C there is a unique holohedry H such that each f.u. group in C is a subgroup of some f.u. group in H, but is not a subgroup of any f.u. group belonging to a holohedry of smaller order.

This statement is correct for dimensions 1, 2, 3, and 4, and hence the definition of ``crystal system'' given on page 16 of BBNWZ78 is known to be unambiguous for these dimensions. However, there is a counterexample to this statement in seven-dimensional space so that the definition breaks down for some higher dimensions.

Therefore, the authors of the book have since proposed to replace this definition of ``crystal system'' by the following much simpler one, which has been discussed in more detail in NPW81. To formulate it, we use the intersections of Q-classes and Bravais flocks as introduced on page 17 of BBNWZ78, and we define the classification of the set of all Z-classes into crystal systems as follows:

Definition: A crystal system (introduced as an equivalence class of Z-classes) consists of full geometric crystal classes. The Z-classes of two (geometric) crystal classes belong to the same crystal system if and only if these geometric crystal classes intersect the same set of Bravais flocks of Z-classes.

From this definition of a crystal system of Z-classes one then obtains crystal systems of f.u. groups, of space-group types, and of space groups in the same manner as with the preceding definitions in the book.

The new definition is unambiguous for all dimensions. Moreover, it can be checked from the tables in the book that it defines the same classification as the old one for dimensions 1, 2, 3, and 4.

It should be noted that the concept of crystal family is well-defined independently of the dimension if one uses the ``more natural'' second definition of it at the end of page 17. Moreover, the first definition of crystal family on page 17 defines the same concept as the second one if the now proposed definition of crystal system is used.

Remark 2: The second remark just concerns a different terminology in the tables of BBNWZ78 and in the current catalog. In group theory, the number of elements of a finite group usually is called the ``order'' of the group. This notation has been used throughout in the book. Here, however, we will follow the GAP conventions and use the term ``size'' instead.

1.3 Crystal Families

  • NrCrystalFamilies( dim )

    returns the number of crystal families in case of dimension dim. It can be used to formulate loops over the crystal families.

    There are 4, 6, and 23 crystal families of dimension 2, 3, and 4, respectively.

    gap> n := NrCrystalFamilies( 4 );
    23
    

  • DisplayCrystalFamily( dim, family )

    displays for the specified crystal family essentially the same information as is provided for that family in Table 1 of BBNWZ78, namely

    For details see BBNWZ78.

    gap> DisplayCrystalFamily( 4, 17 );
    #I Family XVII: cubic orthogonal; 2 free parameters;
    #I  Q-decomposition pattern 1+3; R-decomposition pattern 1+3;
    #I  2 crystal systems; 6 Bravais flocks
    gap> DisplayCrystalFamily( 4, 18 );
    #I Family XVIII: octagonal; 2 free parameters;
    #I  Q-irreducible; R-decomposition pattern 2+2;
    #I  1 crystal system; 1 Bravais flock
    gap> DisplayCrystalFamily( 4, 21 );
    #I Family XXI: di-isohexagonal orthogonal; 1 free parameter;
    #I  R-irreducible; 2 crystal systems; 2 Bravais flocks
    

    1.4 Crystal Systems

  • NrCrystalSystems( dim )

    returns the number of crystal systems in case of dimension dim. It can be used to formulate loops over the crystal systems.

    There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4, respectively.

    gap> n := NrCrystalSystems( 2 );
    4
    

    The following two functions are functions of crystal systems.

    Each crystal system is characterized by a pair (dim, system) where dim is the associated dimension, and system is the number of the crystal system.

  • DisplayCrystalSystem( dim, system )

    displays for the specified crystal system essentially the same information as is provided for that system in Table 1 of BBNWZ78, namely

    For details see BBNWZ78.

    gap> for sys in [ 1 .. 4 ] do  DisplayCrystalSystem( 2, sys );  od;
    #I  Crystal system 1: 2 Q-classes; holohedry (2,1,2)
    #I  Crystal system 2: 2 Q-classes; holohedry (2,2,2)
    #I  Crystal system 3: 2 Q-classes; holohedry (2,3,2)
    #I  Crystal system 4: 4 Q-classes; holohedry (2,4,4)
    

    1.5 Q-Classes

  • NrQClassesCrystalSystem( dim, system )

    returns the number of Q-classes within the given crystal system. It can be used to formulate loops over the Q-classes.

    The following five functions are functions of Q-classes.

    In general, the parameters characterizing a Q-class will form a triple (dim, system, q-class) where dim is the associated dimension, system is the number of the associated crystal system, and q-class is the number of the Q-class within the crystal system. However, in case of dimensions 2 or 3, a Q-class may also be characterized by a pair (dim, IT-number) where IT-number is the number in the International Tables for Crystallography Hah95 of any space-group type lying in (a Z-class of) that Q-class, or just by the Hermann-Mauguin symbol of any space-group type lying in (a Z-class of) that Q-class.

    The Hermann-Mauguin symbols indexHermann-Mauguin symbol which we use in GAP are the short Hermann-Mauguin symbols defined in the 1983 edition of the International Tables Hah95, but any occurring indices are expressed by ordinary integers, and bars are replaced by minus signs. For example, the Hermann-Mauguin symbol P421m will be represented by the string "P-421m".

  • DisplayQClass( dim, system, q-class )
  • DisplayQClass( dim, IT-number )
  • DisplayQClass( Hermann-Mauguin-symbol )

    displays for the specified Q-class essentially the same information as is provided for that Q-class in Table 1 of BBNWZ78 (except for the defining relations given there), namely

    For details see BBNWZ78.

    gap> DisplayQClass( "p2" );
    #I   Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2;
    #I    Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group
    gap> DisplayQClass( "R-3" );
    #I   Q-class (3,5,2): size 6; isomorphism type 6.1 = C6;
    #I    Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps
    gap> DisplayQClass( 3, 195 );
    #I   Q-class (3,7,1): size 12; isomorphism type 12.5 = A4;
    #I    C-irreducible; 3 Z-classes; 5 space grps
    gap> DisplayQClass( 4, 27, 4 );
    #I   Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2;
    #I    Q-irreducible; 1 Z-class; 1 space group
    gap> DisplayQClass( 4, 29, 1 );
    #I  *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3;
    #I    R-irreducible; 3 Z-classes; 5 space grps
    

    Note in the preceding examples that, as pointed out above, the term ``size'' denotes the order of a representative group of the specified Q-class and, of course, not the (infinite) class length.

  • FpGroupQClass( dim, system, q-class )
  • FpGroupQClass( dim, IT-number )
  • FpGroupQClass( Hermann-Mauguin-symbol )

    returns a finitely presented group F, say, which is isomorphic to the groups in the specified Q-class.

    The presentation of that group is the same as the corresponding presentation given in Table 1 of BBNWZ78 except for the fact that its generators are listed in reverse order. The reason for this change is that, whenever the group in question is solvable, the resulting generators form a pcgs (as defined in section Polycyclic Groups in the reference manual of GAP) if they are numbered ``from the top to the bottom'', and the presentation is a power-commutator presentation. The PcGroupQClass function described next will make use of this fact in order to construct a pc group isomorphic to F.

    Note that, for any Z-class in the specified Q-class, the matrix group returned by the MatGroupZClass function (see below) not only is isomorphic to F, but also its generators satisfy the defining relators of F.

    Besides of the usual components, F will have an attribute CrystCatRecord, which is a record with component parameters, which keeps a list of the parameters that specify the given Q-class.

    gap> F := FpGroupQClass( 4, 20, 3 );
    FpGroupQClass( 4, 20, 3 )
    gap> GeneratorsOfGroup( F );
    [ f1, f2 ]
    gap> RelatorsOfFpGroup( F );
    [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ]
    gap> Size( F );
    12
    gap> CrystCatRecord( F ).parameters;
    [ 4, 20, 3 ]
    

  • PcGroupQClass( dim, system, q-class )
  • PcGroupQClass( dim, IT-number )
  • PcGroupQClass( Hermann-Mauguin-symbol )

    returns a pc group P, say, isomorphic to the groups in the specified Q-class, if these groups are solvable, or the value fail (together with an appropriate warning), otherwise.

    P is constructed by first establishing a finitely presented group (as it would be returned by the FpGroupQClass function described above) and then constructing from it an isomorphic pc group. If the underlying pcgs is not a prime orders pcgs (see section Polycyclic Groups), then it will be refined appropriately (and a warning will be displayed).

    Besides of the usual components, P will have an attribute CrystCatRecord, which is a record with component parameters, which saves a list of the parameters that specify the given Q-class.

    gap> P := PcGroupQClass( 4, 31, 3 );
    #I  Warning: a non-solvable group can't be represented as a pc group
    fail
    gap> P := PcGroupQClass( 4, 20, 3 );
    #I  Warning: the presentation has been extended to get a prime order pcgs
    PcGroupQClass( 4, 20, 3 )
    gap> GeneratorsOfGroup( P );
    [ f1, f2, f3 ]
    gap> Size( P );
    12
    gap> CrystCatRecord( P ).parameters;
    [ 4, 20, 3 ]
    

  • CharTableQClass( dim, system, q-class )
  • CharTableQClass( dim, IT-number )
  • CharTableQClass( Hermann-Mauguin-symbol )

    returns the character table T, say, of a representative group of (a Z-class of) the specified Q-class.

    Although the set of characters can be considered as an invariant of the specified Q-class, the resulting table will depend on the order in which GAP sorts the conjugacy classes of elements and the irreducible characters and hence, in general, will not coincide with the corresponding table presented in BBNWZ78.

    CharTableQClass proceeds as follows. If the groups in the given Q-class are solvable, then it first calls the PcGroupQClass and RefinedPcGroup functions to get a suitable isomorphic pc group, and then it calls the CharacterTable function to compute the character table of that pc group. In the case of the five Q-classes of dimension 4 whose groups are not solvable, it first calls the FpGroupQClass function to get an isomorphic finitely presented group, then it constructs a specially chosen faithful permutation representation of low degree for that group, and finally it determines the character table of the resulting permutation group again by calling the CharacterTable function.

    In general, the above strategy will be much more efficient than the alternative possibilities of calling the CharacterTable function for a finitely presented group provided by the FpGroupQClass function or for a matrix group provided by the MatGroupZClass function.

    gap> T := CharTableQClass( 4, 20, 3 );;
    gap> CharacterDegrees( T );
    [ [ 1, 4 ], [ 2, 2 ] ]
    

    1.6 Z-Classes

  • NrZClassesQClass( dim, system, q-class )
  • NrZClassesQClass( dim, IT-number )
  • NrZClassesQClass( Hermann-Mauguin-symbol )

    returns the number of Z-classes within the given Q-class. It can be used to formulate loops over the Z-classes.

    The following functions are functions of Z-classes.

    In general, the parameters characterizing a Z-class will form a quadruple (dim, system, q-class, z-class) where dim is the associated dimension, system is the number of the associated crystal system, q-class is the number of the associated Q-class within the crystal system, and z-class is the number of the Z-class within the Q-class. However, in case of dimensions 2 or 3, a Z-class may also be characterized by a pair (dim, IT-number) where IT-number is the number in the International Tables Hah95 of any space-group type lying in that Z-class, or just by the Hermann-Mauguin symbol of any space-group type lying in that Z-class.

  • DisplayZClass( dim, system, q-class, z-class )
  • DisplayZClass( dim, IT-number )
  • DisplayZClass( Hermann-Mauguin-symbol )

    displays for the specified Z-class essentially the same information as is provided for that Z-class in Table 1 of BBNWZ78 (except for the generating matrices of a class representative group given there), namely

    For details see BBNWZ78.

    gap> DisplayZClass( 2, 3 );
    #I    Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible;
    #I     2 space groups; cohomology group size 2
    gap> DisplayZClass( "F-43m" );
    #I    Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible;
    #I     2 space groups; cohomology group size 2
    gap> DisplayZClass( 4, 2, 3, 2 );
    #I    Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable;
    #I     2 space groups; cohomology group size 4
    gap> DisplayZClass( 4, 21, 3, 1 );
    #I   *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible;
    #I     1 space group; cohomology group size 1
    

  • MatGroupZClass( dim, system, q-class, z-class )
  • MatGroupZClass( dim, IT-number )
  • MatGroupZClass( Hermann-Mauguin-symbol )

    returns a dim ×dim matrix group M, say, which is a representative of the specified Z-class. Its generators satisfy the defining relators of the finitely presented group which may be computed by calling the FpGroupQClass function (see above) for the Q-class which contains the given Z-class.

    The generators of M are the same matrices as those given in Table 1 of BBNWZ78. Note, however, that they will be listed in reverse order to keep them in parallel to the abstract generators provided by the FpGroupQClass function (see above).

    Besides of the usual components, M will have an attribute CrystCatRecord, which is a record with two components. The first component is parameters, which saves a list of the parameters that specify the given Z-class. The second component is conjugator, whose value is the identity element of M. Its purpose is to make the resulting record consistent with those returned by the NormalizerZClass or ZClassRepsDadeGroup functions described below.

    gap> M := MatGroupZClass( 4, 20, 3, 1 );
    MatGroupZClass( 4, 20, 3, 1 )
    gap> for g in GeneratorsOfGroup( M ) do
    >  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
    
    [ [   0,   1,   0,   0 ],
      [  -1,   0,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   0,   1 ] ]
    
    [ [  -1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   1,   0 ] ]
    
    gap> Size( M );
    12
    gap> CrystCatRecord( M ).parameters;
    [ 4, 20, 3, 1 ]
    

  • NormalizerZClass( dim, system, q-class, z-class )
  • NormalizerZClass( dim, IT-number )
  • NormalizerZClass( Hermann-Mauguin-symbol )

    returns the normalizer N, say, in GL(dim,Z) of the representative dim ×dim matrix group which is constructed by the MatGroupZClass function (see above).

    If the size of N is finite, then N again lies in some Z-class. In this case, N will have an attribute CrystCatRecord, which is a record with two components, parameters and conjugator. These contain, respectively, the list of parameters of that Z-class, and a matrix gGL(dim,Z), such that N = g−1 R g, where R is the representative group of that Z-class.

    gap> N := NormalizerZClass( 4, 20, 3, 1 );
    NormalizerZClass( 4, 20, 3, 1 )
    gap> for g in GeneratorsOfGroup( N ) do
    >  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
    
    [ [   1,   0,   0,   0 ],
      [   0,   1,   0,   0 ],
      [   0,   0,   1,   0 ],
      [   0,   0,  -1,  -1 ] ]
    
    [ [   1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   1,   0 ] ]
    
    [ [   0,   1,   0,   0 ],
      [  -1,   0,   0,   0 ],
      [   0,   0,   1,   0 ],
      [   0,   0,   0,   1 ] ]
    
    [ [  -1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,   0 ],
      [   0,   0,   0,  -1 ] ]
    
    gap> Size( N );
    96
    gap> CrystCatRecord( N ).parameters;
    [ 4, 20, 22, 1 ]
    gap> CrystCatRecord( N ).conjugator = One( N );
    true
    gap> L := NormalizerZClass( 3, 42 );
    NormalizerZClass( 3, 3, 2, 4 )
    gap> Size( L );
    16
    gap> CrystCatRecord( L ).parameters;
    [ 3, 4, 7, 2 ]
    gap> CrystCatRecord( L ).conjugator;
    [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ]
    gap> M := NormalizerZClass( "C2/m" );
    <matrix group of size infinity with 5 generators>
    gap> Size( M );
    infinity
    gap> HasCrystCatRecord( M );
    false
    

    1.7 Dade groups

    Some of the Z-classes of dimension d, say, are ``maximal'' in the sense that the groups in these classes are maximal finite subgroups of GL(d,Z). Generalizing a term which is being used for dimension 4, we call the representatives of these maximal Z-classes the Dade groups of dimension d.

  • NrDadeGroups( dim )

    returns the number of Dade groups of dimension dim. It can be used to formulate loops over the Dade groups.

    There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively.

    gap> NrDadeGroups( 4 );
    9
    

  • DadeGroup( dim, n )

    returns the nth Dade group of dimension dim.

    gap> D := DadeGroup( 4, 7 );
    MatGroupZClass( 4, 31, 7, 2 )
    

  • DadeGroupNumbersZClass( dim, system, q-class, z-class )
  • DadeGroupNumbersZClass( dim, IT-number )
  • DadeGroupNumbersZClass( Hermann-Mauguin-symbol )

    returns the set of all those integers ni for which the nith Dade group of dimension dim contains a subgroup which, in GL(dim,Z), is conjugate to the representative group of the given Z-class.

    gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 );
    [ 1, 5, 8 ]
    gap> for d in dadeNums do
    >     D := DadeGroup( 4, d );
    >     Print( D, " of size ", Size( D ), "\n" );
    > od;
    MatGroupZClass( 4, 20, 22, 1 ) of size 96
    MatGroupZClass( 4, 30, 13, 1 ) of size 288
    MatGroupZClass( 4, 32, 21, 1 ) of size 384
    

  • ZClassRepsDadeGroup( dim, system, q-class, z-class, n )
  • ZClassRepsDadeGroup( dim, IT-number, n )
  • ZClassRepsDadeGroup( Hermann-Mauguin-symbol, n )

    determines in the nth Dade group of dimension dim all those conjugacy classes whose groups are, in GL(dim,Z), conjugate to the Z-class representative group R, say, of the given Z-class. It returns a list of representative groups of these conjugacy classes.

    Let M be any group in the resulting list. M then has an attribute CrystCatRecord, which is a record with two components. The component parameters is the list of parameters of the Z-class of R, and conjugator is a suitable matrix g from GL(dim,Z), respectively, such that M equals g−1 R g.

    gap> DadeGroupNumbersZClass( 2, 2, 1, 2 );
    [ 1, 2 ]
    gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 );
    [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ]
    gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 );
    [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], 
      MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ]
    gap> R := last[2];;
    gap> CrystCatRecord( R ).parameters;
    [ 2, 2, 1, 2 ]
    gap> CrystCatRecord( R ).conjugator;
    [ [ 1, 0 ], [ -1, 1 ] ]
    

    1.8 Space groups and space group types

  • NrSpaceGroupTypesZClass( dim, system, q-class, z-class )
  • NrSpaceGroupTypesZClass( dim, IT-number )
  • NrSpaceGroupTypesZClass( Hermann-Mauguin-symbol )

    returns the number of space-group types within the given Z-class. It can be used to formulate loops over the space-group types.

    gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 );
    13
    

    The following functions are functions of space-group types.

    In general, the parameters characterizing a space-group type will form a quintuple (dim, system, q-class, z-class, sg-type) where dim is the associated dimension, system is the number of the associated crystal system, q-class is the number of the associated Q-class within the crystal system, z-class is the number of the Z-class within the Q-class, and sg-type is the space-group type within the Z-class. However, in case of dimensions 2 or 3, you may instead specify a Z-class by a pair (dim, IT-number) or by its Hermann-Mauguin symbol (as described above). Then the function will handle the first space-group type within that Z-class, i.e., sg-type = 1, that is, the corresponding symmorphic space group (split extension).

  • DisplaySpaceGroupType( dim, system, q-class, z-class, sg-type )
  • DisplaySpaceGroupType( dim, IT-number )
  • DisplaySpaceGroupType( Hermann-Mauguin-symbol )

    displays for the specified space-group type some of the information which is provided for that space-group type in Table 1 of BBNWZ78, namely

    For details see BBNWZ78.

    gap> DisplaySpaceGroupType( 2, 17 );
    #I     Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1
    gap> DisplaySpaceGroupType( "Pm-3" );
    #I     Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1
    gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 );
    #I    *Space-group type (4,32,10,2,4); orbit size 18
    gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 );
    #I    *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65;
    #I      orbit size 2; fp-free
    

  • DisplaySpaceGroupGenerators( dim, system, q-class, z-class, sg-type)
  • DisplaySpaceGroupGenerators( dim, IT-number )
  • DisplaySpaceGroupGenerators( Hermann-Mauguin-symbol )

    displays the non-translation generators of a representative space group of the specified space-group type without actually constructing that matrix group. The generators are given in the representation acting from the left on column vectors.

    In more details: Let n = dim be the given dimension, and let M1, …, Mr be the generators of the representative n ×n matrix group of the given Z-class (this is the group which you will get if you call the MatGroupZClass function (see above) for that Z-class). Then, for the given space-group type, the SpaceGroupOnLeftBBNWZ function described below will construct as representative of that space-group type an (n+1) ×(n+1) matrix group which is generated by the n translations which are induced by the (standard) basis vectors of the n-dimensional Euclidian space, and r additional matrices S1, …, Sr of the form Si = [
    Mi
    ti
    0
    1
    ], where the n ×n submatrices Mi are as defined above, and the ti are n-columns with rational entries. The DisplaySpaceGroupGenerators function saves time by not constructing the group, but just displaying the r matrices S1,…, Sr.

    gap> DisplaySpaceGroupGenerators( "P61" );
    #I  Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,  1/2 ],
      [    0,    0,    0,    1 ] ]
    
    [ [    0,   -1,    0,    0 ],
      [    1,   -1,    0,    0 ],
      [    0,    0,    1,  1/3 ],
      [    0,    0,    0,    1 ] ]
    
    

  • SpaceGroupOnLeftBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupOnLeftBBNWZ( dim, IT-number )
  • SpaceGroupOnLeftBBNWZ( Hermann-Mauguin-symbol )

    returns a representative, S, of the space group type specified by the arguments. S is returned in the form of an AffineCrystGroupOnLeft, which acts from the left on column vectors (see also the description of the DisplaySpaceGroupGenerators function above). The package Cryst provides methods for the computation with space groups.

    gap> S := SpaceGroupOnLeftBBNWZ( "P61" );
    SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    gap> for s in GeneratorsOfGroup( S ) do
    >  Print( "\n" ); PrintArray( s ); od; Print( "\n" );
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,  1/2 ],
      [    0,    0,    0,    1 ] ]
    
    [ [    0,   -1,    0,    0 ],
      [    1,   -1,    0,    0 ],
      [    0,    0,    1,  1/3 ],
      [    0,    0,    0,    1 ] ]
    
    [ [  1,  0,  0,  1 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  1 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  1 ],
      [  0,  0,  0,  1 ] ]
    
    gap> CrystCatRecord( S ).parameters;
    [ 3, 6, 1, 1, 4 ]
    

    The resulting group has an attribute CrystCatRecord, whose component parameters specifies the given space-group type.

  • SpaceGroupOnRightBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupOnRightBBNWZ( dim, IT-number )
  • SpaceGroupOnRightBBNWZ( Hermann-Mauguin-symbol )
  • SpaceGroupOnRightBBNWZ( S )

    returns a representative, T, of the space group type specified by the arguments. T is returned in the form of an AffineCrystGroupOnRight, which acts from the right on row vectors. The generators of T are the transposed generators (in the same order) of the corresponding SpaceGroupOnLeftBBNWZ, S, specified by the same arguments. The space group S is also accepted as argument. The package Cryst provides methods for the computation with space groups.

    gap> T := SpaceGroupOnRightBBNWZ( S );
    SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )
    gap> for m in GeneratorsOfGroup( T ) do
    >  Print( "\n" ); PrintArray( m ); od; Print( "\n" );
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,    0 ],
      [    0,    0,  1/2,    1 ] ]
    
    [ [    0,    1,    0,    0 ],
      [   -1,   -1,    0,    0 ],
      [    0,    0,    1,    0 ],
      [    0,    0,  1/3,    1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  1,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  1,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  1,  1 ] ]
    
    

  • SpaceGroupBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupBBNWZ( dim, IT-number )
  • SpaceGroupBBNWZ( Hermann-Mauguin-symbol )

    calls either SpaceGroupOnLeftBBNWZ or SpaceGroupOnRightBBNWZ with the same arguments, depending on the value of the variable CrystGroupDefaultAction.

  • FpGroupSpaceGroupBBNWZ( S )

    returns a finitely presented group G, say, which is isomorphic to S, where S is expected to be a space group from the BBNWZ catalog (acting from the left or from the right). It is chosen such that there is an isomorphism from G to S which maps each generator of G onto the corresponding generator of S. This means, in particular, that the matrix generators of S satisfy the relators of G. If the factor group of S by its translation normal subgroup is solvable, then the presentation returned is a polycyclic power commutator presentation.

    gap> G := FpGroupSpaceGroupBBNWZ( S );    
    FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od;
    g1^2*g5^-1
    g2^3*g5^-1
    g2^-1*g1^-1*g2*g1
    g3^-1*g1^-1*g3*g1*g3^2
    g3^-1*g2^-1*g3*g2*g4*g3^2
    g4^-1*g1^-1*g4*g1*g4^2
    g4^-1*g2^-1*g4*g2*g4*g3^-1
    g4^-1*g3^-1*g4*g3
    g5^-1*g1^-1*g5*g1
    g5^-1*g2^-1*g5*g2
    g5^-1*g3^-1*g5*g3
    g5^-1*g4^-1*g5*g4
    gap> # Verify that the matrix generators of S satisfy the relators of G.
    gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) =
    >  MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) );
    true
    

    [Up] [Index]

    crystcat manual
    Dezember 2025
    crystcat/GPL0000644001325400021140000004311013232361444012424 0ustar gaehleruser GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. crystcat/doc/0000755001325400021140000000000015114265054012626 5ustar gaehlerusercrystcat/doc/manual.tex0000644001325400021140000000301215114264242014617 0ustar gaehleruser\input ../../../doc/gapmacro.tex \Package{Cryst} \Package{CrystCat} \BeginningOfBook{crystcat} \UseReferences{../../../doc/ref} \UseReferences{../../cryst/doc} \TitlePage{ \centerline{\titlefont CrystCat} \medskip \centerline{\titlefont ---} \medskip \centerline{\subtitlefont The Crystallographic Groups Catalog} \medskip \centerline{\titlefont ---} \medskip \centerline{\subtitlefont A GAP4 Package} \bigskip\bigskip \centerline{\secfont Version 1.1.11} \bigskip\bigskip \vfill \centerline{\secfont Volkmar Felsch} \medskip \centerline{Lehrstuhl D f\accent127ur Mathematik} \medskip \centerline{RWTH-Aachen, Templergraben 55, D-52056 Aachen} \medskip \centerline{\tt volkmar.felsch@math.rwth-aachen.de} \vfill \centerline{\secfont Franz G\accent127ahler} \medskip \centerline{Fakult\accent127at f\accent127ur Mathematik, Universit\accent127at Bielefeld} \medskip \centerline{Postfach 10 01 31, D-33501 Bielefeld} \medskip \centerline{\tt gaehler@math.uni-bielefeld.de} \vfill \centerline{\secfont{\Month} \Year} \vfill \centerline{Copyright {\copyright} 1999 by Lehrstuhl D f{\accent127 u}r Mathematik, RWTH Aachen} \bigskip \centerline{This software is released under the GPL version 2 or later (at your preference).} \centerline{For the text of the GPL, please see https://www.gnu.org/licenses/.} } \OneColumnTableOfContents \FrontMatter \Chapters \Input{crystcat} \Appendices \Bibliography \Index \EndOfBook crystcat/doc/manual.mst0000644001325400021140000000046413232361444014633 0ustar gaehleruserpreamble "" postamble "\n" group_skip "\n" headings_flag 1 heading_prefix "\\letter " numhead_positive "{}" symhead_positive "{}" item_0 "\n " item_1 "\n \\sub " item_01 "\n \\sub " item_x1 ", " item_2 "\n \\subsub " item_12 "\n \\subsub " item_x2 ", " page_compositor "--" line_max 1000 crystcat/doc/manual.pdf0000644001325400021140000054773415114265053014621 0ustar gaehleruser%PDF-1.5 % 3 0 obj << /Length 817 /Filter /FlateDecode >> stream xڝUMo8W(+"iiQ@PƦ-!dHrw۵wJ7oW;S$BJ櫄 J8gX2tYh7nȾ'J[$h"ǔ˕)s QZ7#0=/}$wuݮ;)viՁO9ZC ҌU5%>gn < G5#'V12 Tͅ!Lw1U`RFPȒc,4\?=|/BZ@XA/~ؖ5C[|뵍 ǣ$їvgӁ:,<UD2Blk{c] 3Ni3vMl2Rn rVW _l]i endstream endobj 27 0 obj << /Length 609 /Filter /FlateDecode >> stream xݗ;0F{ PpͣK*;)X2$pfh 0|c]#$o!BJJC e #<P ş#N4`('4)/g^hyn i-: ?da8AW4XJv|[$l}_cgW \]~R:1N+= v]hgVTgCrl*本io|c#'Xo؉ &6rG'^#/Ԥ endstream endobj 50 0 obj << /Length 2475 /Filter /FlateDecode >> stream x]۸=@_f%J>%iF rLBdɥm}g8,%) XCp8}ym,-b_R,L1ns$l URH(D̲V,U6G\ˌGor-xvyU5RDnHuXWsKɣrnk%M+"cEfHbm8F9Yt΋OhaLPy -=5KG;4*i,nL+On˦nF˜;v;&$.,?5m70@M32eqPuU%u *6 X,;;(k5ۦDG)8),9,L}sF^+QQ FF_eBB,4badM]^if0Э{5Ԧ7yu!Ic'̀Mτq 㛭,rtvdo0lwlvAQ C%8:cfk$+=7m^BeiPrU2&7Q5:wӖfZBq-#gljy9 e}vjKF髽ύCJm#a(=8 ߜ@Lm@e! g4w9Qv90S9cD'<C*Ss<%Z|rD:G%(--5aM8"v"³?gVt`.b\jG sxj]NAleƖ?*tVl@%#yG$&43?fH<}ɅC5UٵC40q,B^dHgHXw$"+hd\JwX+OAgs+ۄ'M:gjࣱ it^ [KW7 6[vu#R#}Zqָ3g'Ijem!s"tkFġ:ߡDD=%BB3XҔ?Onr0>- R7sCJ$Ua3R *j/̸0Cyu/!YjXj*)$H9M>6uJ)Fy^}|&o>l"F;ʟЋߡo}OhL(nFIӟfߙj_ xI1a7O1P҆xKۋ*] $7nm@,;kdW?X$6,f"b*l[M)6F vXh^|HsS&,tQdWKRr%Yp^Z /)Ҟ$"^3`ú?hlT{_,쩣}LϾਨ' >teh'{dJYXU6A8tW`h!9ƏޚJ& qǠ'\(uxkC_ewMPi2M#{n\#Wi0(ΰed7HfC[Ӎ5oYScn@؇ B>KSYނ7 -Fy` x|n4xÇ嗖>[) vxCErKX5zgsJ%MMnS dןyX<;DчG.V T ])_PQ HG׆"yѩKw+C>#294G@uBd?SV]-yBW>|ZT wYIuvi endstream endobj 66 0 obj << /Length 5630 /Filter /FlateDecode >> stream xxؙT=ڤy)N7K-+_8 HyRS5  .~6O/$T^](z2dL]ܬ.>.姛>CepN.RCtAy(Mz\tq^([k/X4mg{ĄyCYeP`INp_R"[^.$KH>Zuua[,ZXӶ LM^]9IrEg˶蛶aPe_5u-ZĊ]Wo-m-.Y*/ I!ovSmzң۸-u*z;Ze,\f颸] E'oFf]Ϻ#+­j?}r몾TuX߬.LRSI"@۪?]Js6xR gמ&Y6]:NX|l6]_b- ^,z=O[eCٖEvllk$ BUg4 `RfK H1"ğM"OsU$QrKf҄g"8*Z)M2gPہMYl{mqdn }a㶭~jXXX47Ur05+=޸/0Nv+'K.X (4+~jvXgR8jj [4?V躀޻n(ȯw:UK(ʐ-Jm-X GEW-jAx_WZ+H/9F\HFr4$Мȋ~w:^{=%̦>{Ye3&ϟu:IáRmsKcP4ܠTmM|9n'-uo[5Š(l923@@$ 袧"t@,p#J%Ynʕc@r~ISZۚf(PR%Uӻ)41n*= :AiPXb-=Tb/d$XErڐ%"Hd ܊ݵ!  7϶ Qtc E@')0 G$<LӠhgX[dti]jY6'2bs svTh"<\/!D"@QD"/M0!ڟyWpk<鰷A򁶭bˁlb!]ѩy,&A  : V}W::"pqk@6.>UߗP>ZYFt/TVڪmo@}@MKW@=hea44\ 7 O@%yۢNGI@ `3X3tzy8YȆDg>Zq\N;baEUwX4]m6vw]޹aV֬A tPd\>bF"DBFqJa|P&&(| PkQ;bV"&dI-$M՞qM ͔cU5EgfY#j&DDReNWȌFu002vf)9?ᴍ*9,s٬w+ mcws9h  B=0z+Sjh*tajGXr3"bGL ̝feP5@x Հ,!Nu X+PV݀%Pg^'3 R:lh#e>%ڛJ+UQCy˶-'.?$w P\>e~k6[{Q͗(ϊO6 ^l|qQ*Шm<:X[)j8t>5`ڛ Ed̀^ElFtuLbH(,ݟb-2Q"ghءf[v]-mVȝ Uk*G·8 vL(7#{}{1=xOA!{]SLK=oNT2?lW<'{P tǦ)q (t Y,e GVy*qQrt\J9ю%Rq*Tk$ Ç7mtZ-C4ϐyn:薺`:ejc5?Wy\Q}f(nu!;QD9*! }=&~ H~! ە|\Ϗy?>5f@OzRcV =w$^( N[(V+ - }Uwe[l\NW$Ǝׅ H6]euɬyՆvIj0Γ~:"V Bڌ|@:eavt<3c3S"iIOզF7EGuY@ 7>+.Alx _:Mg7"%~埣qTUr|fU?_x:Gb%}|~qc|-Jٶv3PI&D/K$ʼ 39b4DAu(F -vfEe$YAE[~&G7ˌ~qEL&~H@cCNWϔi]H:_"amr./,p a"0A (IQԚFBhK,h {FԺΨ |tbWm|P&-lz 7Ns.M9*O,w' %~rĂ$ &u.4fyUllixkxcW;TKCwQv*sZʝ Tag1j 1"}1Ǎ}}0g1rseSJ/:@\&v旈C效3 a\ x|(`;27:z{3N}sWOhƫG_;UE@}?H}ey/oLN@]*!EGMy/ ')e됑4&3ӊ l¯!-T`0Jk6CV| VۘvGn0~V$ Dq0ٌ90g*$իH׳)C@1ᔌG)*e/|Ls:OJ(Z#0naש'_UԬcl`:_p).c+S',+cOG64Ie gCOcQF|^>330 IO\t1~#dw'Wg'"Ge~̏ZxӘurPHC G qZ3Waax$j/XV~xy~4/&{9wfD<|&:9ٜ:QZ5ӫ[J|W"og!ITNO#]I7Tۧ\bU.8D"G6/*^HP.LbP @dԤϝ$Τ B!Q|M*=;ٱJ$;,EY|r)r?{\kkv\u*A܃G5ZA.I4Tؘ=Rɔ:MI< A~b lFc_Nx?˟j~Ghrfrg7f];T6IC6:]_K[bL\" 4&&v Mdx ._ݥx蹤ta N9meFϡ8&\OO f-xj@z/2O^?RAh.r|ln☇G8d _&r4AY{Pfn-u+5!bOmY@pʏ2ƌou~ v>?bl{M 3WW`clAIWV]j+zqq~ms+QgmA|yn<5 ! ƈ>YAV=mOn{kFD@]|sE}G>^ >Jv7B3W]*Z@Bݟ.6[80䭋Y@:{m PǷO%'IyI1H34\k~t$'Iʳ ē\]k}LOkJK5*د;<{ ],ۮo qz4k97.,t ؞xg0:x 0%`3} ":9( [dڛEq#{iZ`*ϿZ.}EȠ+@˙M2+k?ϼ6GfH 6XDg$_JrP-9ؤ@e3{,-[PiPn3C4//.fg+%Lz,SSu))1r'R-[%Vً{PX)sjr4^pߛݧ9[$(ґ=F8C[0m $r Jq(,Q~PR^tc:q2^y؊}6md/{C*u\ٴm⩋>Qi0Q4n_G#,@% x PG <=H3FI}3|T}&.'$~iA'߲?*P=eqz&Lz Ӣ"2H@2Y- ZpiEe683N$~<*y1CWgA endstream endobj 80 0 obj << /Length 4018 /Filter /FlateDecode >> stream xڭ[Y~_1oTyƱUJHד_GvR[5DͻWʨtvp뻼0Qawm~nN㍎{{Mmjo_Swv?+0fI"*E4nJ=v fcD1npQ0AvZf|{ߛ #4-1v8ڎ>+8n߿wG8QrwGsk ]wv]VwNBy_}}"J/#?i2 l9H8SjeH^)^+,SwIEYVF% :"莲m6|Cz6;p,o|OKi\F:)_f*K'[ZBS4e]ƾnXlIQl@SC5.$1{a|D(S'z IGљ_u70S $C{IH;ս7Kױ$,[O] $?Ʊq nlW l_N 7[/?v0(L׮SģөEz8XlRyl516x:\wVƆ[Jij׷E]U-_B q1-JEj&ʵY0]#yu2g9zUZ]<_b0+G>ѭhIi&ei#tYlJЍ;:5lx4nLHlNZXq6Ƕ팮ܴoqc֞{=tWK^#<^beBz_#=:^xYLx*UQ2$3{7{hR&?3J&$ E8hQk{Pg箺%rYE Ȯ&߸69`lկm|m+7"2]M<=(b=Re `; ɯ6fn(t8.W8ҶH)*AX MK>I dO\W9AF.oCfJE+S^0Cv]蹓-wx?lf_ĵ|r s(mS5,%?!5gd$ݻBRa*9UcQ3 =sipz4s5t\Q"'}lvk` *aJgCXRԭCY?OqVTwgq^Fq\u;V3V2VE!=kfLN0vMCSr`6ЕZ8 Q tGap/=yF1GP_=a{RW Li gڽfIQK\v8{(ܝ/ $p6wRbyV&Oo GơꞹJ c0H+Ǻ ^lf,(O{˜.B~/nVU1o֋W:y/Nِ5èL"ANerY[Hrހѯg3ڻ43Fo5Pֱu(c3̀>U'K_hv8 mN$ 5sf\u`cYT"(Qڳz+""+J %4-⃠-T"glw.7z7طeLܥeB (Wen'ʒ2!H=gG/SXW #UpZ!oZ(S5rIDN~ދqY6sfLTOtc;Tꦈ=:{$_8ݔAx!)1DylG1un1Lw+-^m;U}o*HImkNӾqr-q8ej-ϊTfG?cSo%[C4F\rV _1@WFڞDdcȮĵفU6D  8=O3.< “j6>D?ܚu:Ԟɂ%d# thNb:p \a({ɄBƎH~,$ j"<3:]4i 9Ĥl(?DK6Lz<4.d-A[e_$tۀ#,TRHRz;h) c 6? |X? vt Dcl c n>ÿc3ΗϏ rny `BϺ:]7UUd&gg.tDyBux˩eoN,atGa]!$ MMvشğuĨe_Y v Y 3aX0p*I3z^,̾&w9l+YL#g4 4~7 (u$ {%jʕb8VoGd*ʊE || >a 9`#@op/8K\p Pb%רƻ -i~2"D. t c344H*i=&vXhg-*ks,$hea6\+w4,/^>x1*C鸕 jڹK Y*Ir|;A3 CkQ:JR/"ޮAFyZ! ~\ୄ:kI"O>M|(҉8C;۟G/('F8* Dnh.߼ć~#z㕋?6tQjï>q흻M!>bEg*ɬ̌+ cB_`ZfŘlmyE}z T³d3#kI7o;`V O d\d<xU&J lQr{*t6m#U!-\l+4sdWB2Ά2Ahr6wx#tt%it6Q*.ٽ4g)x&a16 쬡=_ QzZfa| x/>pXj>:iw; ^ʼj?oxMMT=XXe'?hON,JF˯Y QjŰ>.7)_> stream xXo6_!`/2sD5CP`kJL̖ IN;HY%;)Rlxݗf_(D,fwA‚Dqx0|4qŚAI.M)QH e宪ժ(/'Tfis92,Q@(X%eDK*=eh)ᓩN6] tmV&E !:hÎDFXܱCBL$ (\" (%,RlOt׿vJ|d4`Q OboЅYg47M)DJ0_m9Kھ}6;/pzξ*>a&wiςY^"`~tÞT-!['v[e T.p(UZ;UQlܝ _1!kF{Ď*E rpҡ=qc4_q[K]bjǽQczyeVmym&_x2$C(G} N8a(7[ 7}:+J5fΕ Oڬ]W݈Q*I'!6q882O:r8}G^,FxIfth|"f]Q:YUeym 8 Ln*:BMe^fGlr<<(X]9a>3 J1`5;$d 4Pj1?]]D}9F H$uy2Y94=@(ᄑ`'4I3X}ۉ1} C!k *H"zaGE{2u/7i ^x襖 e4 $NRRLm`Ujx1i:cFlB\(ԩY9U9=#e &J3pڡpvg"P_aqDgrqjE.?>1_?cd \hdyֶvZw%> stream xZm6_a_l`8^ @Jr^M6V9gΐ~sok1H "fw_f̤HQ9[>?eEBx:??$oM|0H Y?DZR$L*D%"=!Re 9R0b{[OD0K,3wEvx[&+>%iE(|fI̻#-h#K$ bnJ5_/e zg/iJʏ,èWȵa6&ϊz6-daa(@aW +'rUL;n}Db?Z~xW֌ ;O$ Ig+C0ĬzHIDo;wΎ޼񧟥< CH$ ŵDO˜ ^"g et u,#.Z{S&|sIg 18:q:C;ۮbz@k'Vi/;Y,l,FI57(tt *} 9B}p_"`l~`JUW^VN=7E | @XepJZVBeQ&,p'XUuV'ENNK (#80aw=DNO(?gXCގȰ:|Z^Mm:C@i]Z0{߭' "SroH'wť3gH!D n d7Os$b)q4E RHRHtBVW[~8F5@;5(s`7k8 %>v c=3a{mEH}66˸O EY>Qu^RJs (ùk/e|l*ӛ" TV+UZٚ*+lڀYXJe䳍j\C?,8i*4hʯO+@c^]pߗG` </O,qa& T& B%I`ڰfu].sUpJ.Ic'S:6FC5x4L-]ĄSD [b#dji9f<[C/H:7]\9-rd*_Zcnim~UvhlǢZ۬:GuAnS07vUu(7$.vev{n]uq!}fn`3/R#9܉)E߷`'b\F1#0ks:[4T٣#@{1Ct&`P FGc ɀ(ߤ0/hȳ``4dY#M" k߼ěob F? Ac"z|\yTq O\sv|h4qf]+uMGD3}yO0(DE2g00W{mq8'R/bt[!>PS֣N&okrղLWb8hE \>Ke/-nKslOd&c䟲ko-1Qpظ$:qUɆ`OKԺ`wץ5f5 \wY"\NO}@(ɱUwu9q ew$>0]\E&d(QϽ妬v*z쵩87EubX`UaBwYc6;a_%;]3m7{8fj\Ǝ3j?a<{/bX^]p$kk{ӿ&h.5X_<-xªOЭP endstream endobj 115 0 obj << /Length 2280 /Filter /FlateDecode >> stream xZ6}s6O|hih(i[8YREJdr| g̏㼼z$%$ Y8"6bNbֳͮx_@hX!,@]/VLsJi\ԷQy^.h0 *e)BCe<Z$EH:$oUJ29>3Un^ʘ p}=ZRH1QhI'MJ90wQ/VY]!ͮsiCɯg( "OrEK%or>4r}>~a;%O| l--rQn[QAh!{0G?Tϳf'Zz[j}kRf]姪2+AyhlGui7fH =>Vִ Y3evv7^>6 =d Jĵ;}ߴ9T:>83J3c YN:"[֙,cUke6OYGX J5zvbHFD({1 (qp"6 ǖP(g.Gzemڻz`)C{ckA!ZvSXH ǧ%S>ҝBV[X)tBCEɟlWHWa W蔟ޓǝ??@xPEQXuOJ$ V0ժuswo]~cY\p1!&:DbQPx!찛 ?r+B-qq2/%Øbl#J$F+>'dc<.NٰbДN&/%HSQҀw/x2tcC~!ԃc=3k`FgBFQ>1%ėt ,pVo;UKQ?^Oħ'1xDa%2$T GEmH'$ y9WM}~cȃ!p}{5B h;qN甀  6} n̵_:ݛ,Z vM19k{^ʍ[.9Տ5܎Pa\뼷 2 cRlm_.]bN_Ú]T=bZqL/oOSuڣw>$y}^N]@aubJ[V e o$_rs~*qH_2q_W, K`)Y%0;."hzZ=;qo&JϢ^ nR(=a[,Z,{P4cKadݳAԩ0zÔ{HD'sgf3\KwΠ)`kmUeUgƽjJ?HX7Ѥ@!W endstream endobj 125 0 obj << /Length 2794 /Filter /FlateDecode >> stream xZ6}8Xć^)fK[,kdɕ_3RwE"pͫ}F"8,b[Q]QWe~}[fmՇ@0""DX-k!Yi;%#TLe^WmלNp"]n/KE]-PT4 兾>5Օ%,|r; Lv\`YK{T֒%LJL[dѧGk&L,΍:WseoE&jm[.m7O)8*r{]Z-}Si ޢus:9͟r7c4h\tS^zuh;+29)@JnTKc"#V# X`+$/BF_6.yFv( MfpǢ,ir4ژQ6N132)'Q6dNTF{N+S]c ewm7b`Ĺ=g%TW`,T#~En ,J̈XɺWϝRΒx\6~9\,} !ĶJ!:3-xYKH$3˚;2Xd°hea;RNKS= *u4Kç48څnmO:/b%W$dFB 1wO,V۰1 1D" bJI?VDxG(;дn@4|N՚˟u^U]ۺ qg_;njGi'0 T<쳢DpMѓz0v`$sepζN; ؞au7UE\TsN|Zou{Cz L{g\{YX|ƅjӠw@)Cqm cd* ?e6'/x;}J{_qJNdhυs8tpd>ouSig}dڷ&8 2Bf& Or(:iOI.Y $`D:} `> ;d2iLLԪ! R2әa~ '9U"̳6BS&)O:CәA*lm iHf,ﭓ0CИ,Vbe<ې;G({`)p: m[mgdzinޯL_"y bp՜e f .-EYtJÔ1)MM&]8TqY)JA2$U{Y!];<^cʟg8/ Hpy̺},-bSXŏK^oΈQѲ#eϱ (>KL{.WOzG6y^>\Qٖd5 k؍vIrEJQ^ԓ$=F'QEj2#m/yo?ټ՗i[/R=?VD}_ÿ'bS}?*'$auՄ> X֟4\?#sr=.  OH-suvCY'F3KJ9drHVC?Ahg!85 e~5%bF{#0\Y9<2,t"wlKo'7L/VDKrd495Ԩ (?~җťEA}Bfԧt&8&zЍ) +ʊh]n0#2&A:ǿ0{_]s8^6xUHC(ISZ Ns8zEK H4h)? endstream endobj 133 0 obj << /Length 2794 /Filter /FlateDecode >> stream xێ_!/B̝d:6"-6%q%7̜D m\G׷/~YLb~Y pv8gq)ٌ"̫mo*vUu$+Fꊩyf+|j^NA=pAbs =*Oj/?d6+̜âY\!Z<-MR'gƥ8eCPp[{y*x- Rhɟ#)rЩ֡$my!5?y$/'uڊ gP!ZHb^g9ǡXs2 Mh'9S.9:y]"e+mR%+8٧tKK>wj"b 1IbٞETrs{y): -40ƐهmZ ]NGCw@2JB 5e{(v_p~SFn":Oyjo_qXDIDY(`Y8[^ U.AߍY|lcӘ4m 4zr x@ֺ>)!Q9>Yv;ǬbӤ8;LX Nk~@CvPߦ.)]r4q*fpnY덼fl5ykfN^35ڗg5z$-XHBE!;ġ@01"tf@bpAց}<9޽2,!aD$(pBe.lQv1M ($~0,&-軳SRƍ79݄ W;'C" -_HΞ Rq CRR%k2)a2nxHWz ]+ i]EAzLv).e0 q}U1[|ܓ`]q⿊qFL$pӭ~S,"3 &i y}@jDҏ}F'ѕQjah"`ٕ_V؁b 0H+Ye`l֣pVJɁoD"٦_Xs Ξ&!-I+ 'Ίrs4JCL#[g̮#E'ABmd0j vY zZpeהQwv4s.C5!̈́o#Ms{STduLCHM=Z]u*wNY5G>귤 ׾YL&nN|֮`k[ÛZq7`5T~C9W@\eIcqܕy9,F>ZMN]uxGHh?R89#G>#Hf*KLA c,]ҚMUN38 g}9p#4(X)_[0,_p3/; nП7/qz!4 ~Y YCW2q &pFDawR,:9^i\eNѡmlA3#nL+ /Z7!Wc v%%fKV`!Ȗ{D4]_nRN6ɇ׾U+$tXL>Ȍ$/{][ՙ P\W hSsuĄb%bv9O / WleE=n :$ c5XLòxx;g^:PӞT{ɸ>"z%xJjXګRz.>xd}v8xX] :mQ2E"Gy&]t{4S fSq,:i}9>!p Ӻun St/jsOO.Ey6 9O2TxOBiժ^PEac,95H\PuCڒ#=WְYNtXAiTn|mf1繑ֳ]q#$Y/^zڐ  8]8%2&qՌꪈtI{<ϡrHA9U[߾g">&M/~Hɻ8V4ǨgR' ]w߸6D6 5MQmL;zl=y|3WM5L1hک[U%vsUbuYK\ endstream endobj 139 0 obj << /Length 1371 /Filter /FlateDecode >> stream xXKs6WhrfDo$3uݩݎh ؑH: O 8mӞvӓo~(Br4):R!h: ޚYd8&<[Ea{\HDu4{B ˄SD8wPPa"𤞐 v&zD0⒌BBP$DE0(z>}:H7;ahY}3X1̾ko<}!MkS8=`7R\OX=qU))L a^$MNPБA@JA՛^x XX'vxo\ tzAIysqL<(ujk|@T"!igVqFЧH"u#gc Q#MhO"s"b:V<<c)G3'ixo$ mnȐl߀A )VHsjq'r;FriiGK S"ݮ<[)D9SaX D$ n;ʼn)ُϋԥc:H:ڼO pD'-Q-f¤e\&cDmtӚCXS@ebʬ2Otz/lq/ҭ&[eiQYi{ac1l"qynwqcww۴w`T(qmf\Z/UkEyEl`"Q&AwK}/ z]}K`ؤ116><0+΃J$+J-gW6q8\N}Y料[o4_J#3L<ʼ3_qK endstream endobj 8 0 obj << /Type /ObjStm /N 100 /First 819 /Length 2192 /Filter /FlateDecode >> stream xZo7_GC ($p+$@ j"ԕ\%7+k-lIrH7%Qd&$ذ+G#I%ڔ( {[02 vd,t?I$o| 03".E ,%gl=7)aNLD|O@YOLh33F,%ngƘ%l3ƔM.% R0$ eg؃B&*X:0F`䒒+51_3AEG|,x #,`%O0 @?& bT)9IbJ"C)\0)@9IR}ɘD&U a@"ޫ4J$A A' )@!<%G(@2('19l";"AtmR)U`P*aOV+6%N QT`Q(`D}vJ)0cϞ oNd0|1MfwKC׃ry1,XՋM/ËX 0`ao\ M{gc)#6Sbb>~33AK3|;rg]8;7×bPXnBd/0ͱ{-JY5;f&P  -!CJp5wٟztWSpV}f|)Q>)O3^|]ލnnOӱ]o+"4lI'=1ws3C!K] 3MNN,"`vR.&Kh{t7ϔhq!;^"D'޶UmF(VlΩ7:}폗-*Vcԉx:|ic|iއ&/wZ !# 盛Ǔ9Lt}c[|?= ;FdY$Y$i5Rd.ڪ^ :*&_غmieg#!0A](UR,;--,#ك_XJQΒuXu<[h-$]٫0mCJqt@s(ֻ^f-Ua?9㘋_};iM׮CZw_-|%7ug틲h6VT]S35Wі6*l+ Ż}ivmmDdt0JXPQ]ƈN{[axY~ .Вa]\X7x=\<MDaxqV7#D-i*(ir0OֵAgLQ2g,MֻV> 0vjVba%g]G eґ ))C۩]N~L?˶c|-衅Gk -#ͫ endstream endobj 147 0 obj << /Length 1516 /Filter /FlateDecode >> stream xXKs6Whrf,xhN:;itI*IA妝}~~?{'hd~7$9y4N>M?"!bJ!$D󕹯b:c2 (uJps^ycC1pgeu4&*BJ:I6H0xmnuf!glj #1.Է4k4.ES5Ɗ(lQG>)YpnLӞbM$oӭG4!uep,w9mzQ:Y ^7UDz*aO}Ba3'з8#\yՋjG'x;F"٦ODs6Pє|0klvemʇM$ XdVI>J 27t}oC(͠\>kx.`Y1դC#;(f|E);UA*TVsRc:nᥑP(DɍC\t> stream xے۶_ɓ4Bq%z҇:mLig;Õ;)T7xkǓ'pWgLR&ICӗc*cꡄ3A8w86%5|!؉KSۛyv}%xT?6+lyU H-.v!(Pu I  1:oѢ>"uLH<ˆDuIdZ!U: ioƶ)S-ԑc$F&lOuQݯfj-fLME@<4;::B"66ac841߁-9Reyٓ$l8G-CeoPhkDLʮz𛀷$总tOq6kY H )Iқ:JQwq(|?dk/jD gHiyK/y˦hڐ*IzLh& }*>+1CY| UNԠ;pJ .,`@-[͐R1EN2b<{RARڶ.fNmɼ7541o:_T2B|Q9bFER#wPtj0ct MĄ7EU%xs0ŧ7ΉNMW]Vg[[b=%ɐ36EBs[xrn Gx`sbXE4yVNTJi0~O(Pf_&:{M X1DXA_羮1, ' %|c$ Icg Ciގ:6hcŲZ?bfz٦Z5 ĨS=$aҞ'YOE͑B6a^I$6^hj!3˦3̩^iN!ԅAQoyv MA㚠=e/ʼ5ic o߾~}6cz )w>/c(Oyӗ-(PReGc0U9'> \;߆kCp>A|+Wнιo,#=tOLu7ұ tk'B! ӡ?AΎ4 j&.1qI0niwOkm. ];x{73.$ÀSO"d<}/=#Wvi loj,o`=(HJN2}#quyBSYw}N?AlCʼnn2ƭg)^0g GE:ϧٿ:rV>t$\5k@4,Iv3}XulC[R90X84MS- H K<a| bY&NC}.lm Fk85;F#b$܍55K겤3RQcwt ez4Jը갻OBwjk)@N$ǒ㸈)a4jA!(|v (CA 'G:(M/l^͢.\ݨsku,yA`ݯ#oOQq7@ =T>gArr# w#RvŰ #-Nr3Ӷwb8!vj-քhI@7> stream xێ}BؾȭN)Ad3E6- fd[QaK$g:dI/LӢ(4ytn[uqP0фJĩ C4R (RiDgY 6Dq%?~?}]l-ŏXňfº܅hpqa!4qZUC%*Hyۆ<"IogO:Pfc@$p Z"-Ǫ2qwqRvKSt\!Ʈj(+]^Up(}-m,C S1F\W72sfDFd=Qq^iṲ̄X$ע8Pm\vvؕMY]ޕue!!==G|:HT--x*R8LȲ8Η[A}P"GG :iڽuHF}8d$OF>y> e%tBFdTKU+O0F*3gQ#23ohO5u,;;m˟"DzU>L̞2i>,n՘ qZChON3Y\B@&م2bs$+nN)ϑ1(xJƇ^˭-bs&e;d0 +rjB|j *CaA͸ʼgBD6tnG0)3hU(T.Ј'ֈǘ99BeBY{9Tzjpf^uϓ՜)Xzx>>N~i_ρc)UB1Ǻ2Mͥ>Ǒ@Bevz38pRec:ڛ}i"ԇ@!¦*I].!>)U]ݴ6A3`IÈeJپPG?^_-+A[6&U]%]WַxoMo:d']<|֟k)z&(v!v!0en}B/_u| 58j$^A 5UWVv$N)irdֿo dRYyfm>6M}mqV v\J3A~g0x, U__"vTI!A:E8TPpgfs Y@sJ}o]w99.c3:RK"@%R_"*tHr!/rtʠ&-df8j(q&f0j fw0 YvіH[H_ym;&㴏05;1{#+rB 1@_"Dt`nMdVlK> XnL`Vq栙Oz$oU-AڻPL1 .g a.j"V6|ii2mmGY6OU@X>S=!o%m&(@'9CN{Cj$xuxkzP"T])vYFM<֚Gg"OIg\{Ƌat fc=-{zgմ J2B%CSy<}e-"*.%(H0TvVȄLz,,5Y++e2Wh_n ΅=-) ޛrUI7ynРgX^ )²wAZ>V=zև)`uHLL4 %C9X삉8;'ʠ.02s̷7ն\ye-]9RD\!zk"> u9s{ԫ P ɣT,H> S. #6L " ϡa5舁 D5>QBP@{=$; =uBo(Z  H0q"dmp >4eZ4Q`eA͏:MH邉3 !G&YMFirc$y}->/w_aSm!6v i4ǟOv"yh ܋|E72ytFdTGA #*۬'g uI5٪P eʽ/V endstream endobj 170 0 obj << /Length 1529 /Filter /FlateDecode >> stream xYێ6}WyU-mmMi[-;Ȓlzmw}XpH_M<1OF9&QJGiPd6]iS8GrզJ'.Ԙn]T3'耎n q5 Y>3;)&F')C42ɝYfJlDg)uJDq6{j67 }W"ͫW',`q1mmјa؏,I9Ӛַqʣڮ )b$>6?I.*.eu e(0:k@x9)+lU',*FI-h1ї1 M*V 3秞;GR~2X-[PII$Al̽K[1ɢv hR]IwYU뷬kpVɊvb\|^VmW,1f}@Y,҉ŴNıQ+Ōz]{󴩕`TKmSUnIeh4 NvRF N.`٬n񼑕T, lFv۪=< ڤr3KGQ o.X֯6((K|sͲi*=m\ faٚF}S6K'aa)q륭U8Ǚߎq,`Q_oϣ}}B:`01#yg>dgȻ }ճmY|WeD[ѪTtV=iՇd{,d}ta "QlЂ>gQM OX cbGg3o[m:al..l {|l6| sډIRXlX VKr6,`ۙ.rZY`ABpK_csoOt }0A=USV }y,!Qhۄ5"0bwO?@`דg7ZKϴ7uxWFQX@Nwڍ7][K.w,|Xu(A!0K|Cw <6PeQ ALy0< p,H8jx(ǃ\<`{[qra(z! >`b.cnpWB1p`/\27xw׎e5} g5 P-he cO:F8kl1ɉgǜar e (kՊj37GAȤtQ&yۄ LؒBɽUTzg9A${^04q̒#; G͐&!PSL8pSD0sǾ*y׀y`WÓ&OL endstream endobj 175 0 obj << /Length 1598 /Filter /FlateDecode >> stream xXY6~ϯ0$+E $iݢm@&Y+ӶP$'q}.>C"pf/=.%! g,(f(flH8 d ͋ضc .6t^y^ pOl7Yjfoyjm,ZCj;>e(!ĈlEC0BQ!B, ;1"o*+TKA[ YLY2.Ҳ#V$"arQG+eRZ ngUo Vv׊6J3!k7f 8M#0p A 熗dLl, PG(ıۯ>[拯LZUX/Wz>󯿽yOŸݘ6-9hʭ:iҴhyr #l[V.5/uVo cuW=kh#j9&?jEݜ7f#X`!}waFAH-9 7Ar~}xf8yJ{(5w8MsJO`k~4z aU,!@k֟Q?m3{.5PaØpFqX8 Z!(`!s=Qx~Xq,ǰE} }r@ћ4H /~qň4PY~+H,@ӎ0+bB`(a~-Qx.p]T(Ϧ.DY?z~/ɏcrLQH+F@$ҧ3q\ ަ݆ }ݡ:79@ ӈ)MsQo)\fڐ\[m8AcS~NP; V+Ӷ]zhL<h!GUF.o:qJ1I1!@4A?Vz!&qzNY(J$tz\kRa ӼUfj@V)mZ:hhF!F6Y1l3+UTEURr.^g'kcR|= \'TǭL{cQANLU$zs C_Wc܍*@ cz"C'cz*u%^͉B$d~UJSwS0f Ǫt(ϦIpA#;NӇy.Ljc2] ̢ޟc0 JP SOߺ|]_yΣ(<Xgj{۪sײ&/2XMf5-(sΡڭ,ػ1v:hSA/YO[>//`{fjo`pn%>1 aE 0RIzR'6aqrzVm,6(v0SVF3~SI7Ti7g6б>qZaɫ|*OO󮜻]18Bço%3U%ţ"ii=/WV*r* >Y{-=ggg}PDlD`{Oo endstream endobj 180 0 obj << /Length 365 /Filter /FlateDecode >> stream x}_k0){Ѳ806` 1=l+Щoث%s.luG>ȧ> P Y}ZꪩmLkԴ[ TǭfvЋ:0C+;;{6$CL`ؔGB|)s"d6Kz<3bC{c q";bx?I:-& 4iv'܈Y'>5]!o9wZ=* WhU.e-Ѝo )N;[ Jf^IF=v_.w\^MΏ(f@O Z˞O{&ws`֋h[4*?=VR&X(,1ENdKu;wZe?_=e2As endstream endobj 186 0 obj << /Length 639 /Filter /FlateDecode >> stream xڕKo0m)8~Wo&iYu<Ȁf==㿇̰X])0MWpЍOCTsyLޚ6o=[^#ry'$T&D;K_|EBn5_ tɻTf#>(eT"w 5} :-)+|psJf*R^ޮ(dXGA 3ߣ5PSnW[0mNa1MB?x|k\.˺/F[7g[Gi[/a_2B|w[=>m)s\:=H(G ͬ')wL\NmP endstream endobj 237 0 obj << /Length 1130 /Filter /FlateDecode >> stream xڕW˒6WUm Be'c:pUd!c&<6 suϹoa~i3_;{ )E;SNi=#S? Ӏ!f|ϙ{ew#Z$t,=Um'HY`{-;얲h,+aE|8ǎg$H^rmY).y CS^ʸJ,$Z&v2h\uՅn5Ǯl)a}1uiOJ[+ddVhZt`TJER̋|LyE)`hދX& 7+6ȾIow{*e;TBq+ W*Nݎ=Re&KVL}/iF3x{XE \0ոr8E^h5<y}m\,SJ0B4hSXJFn#(vIHPyTV`0#4b22.7.w -eMZVK}p>MhPEۿ&ҩU?\\KU*wqy @ m mer L'i -k44Ø| ZLj#[IHnuL 0Tk/MAcmi/Aq8 + ->5A5y[2gÕ9~,pYgO><<_ 4\[Z/lݪI$l!Ө-}`꣈[߆MTׯ&:J0 4#f0\9=MUX.Y`(ɬh6Q5!qtQ+k-cm`MhXVB)oY⩣n4j X ~Ӽ1A$jazP^qڠt y83'Կ>2^(a[Bp_q_徐̺՗s&\e*iQY Jng߲_庺:#B0zM6@fdFnh/@Hu 2p{FY- b87Ӝ"푃7#D.o]O8W}B^ endstream endobj 254 0 obj << /Length1 1415 /Length2 5949 /Length3 0 /Length 6914 /Filter /FlateDecode >> stream xڍuT-UtA){BP;4E:(һқ UA Ϲɷלk +# !y|%s@@@O@@t'd5 pb(! $: B:p@E%bAp$@ u407!3uvA%$x~< (耐.`;B*!DzJ<gYN0xCG ȟY.P#w(F!zw6@p@>?d*NpO, s8A!=Um>?9"ܽ|/r@~*@ F@=|P_3*>fCzOr`p?k GO~' AD$DE/kOo+! 8ǀC B7@"| {E`$ :: qk`% ϓ Zap{迯BMnjpWP+(!* .i%kE=p]K.[ _oNW#Uw8_y@0AmGT3_Ձ8B}<@vP9sPoU?Q&A_o/P@0n77Z!?R;2(@׌^P@#! z`AN ~ :!οa>ڊUnoC 0 ,qVpߏw}LY'/j/igĩBpª ljG+Nk^l#KsԃKw x7Lݰ[15Y |I)^7T|z3nQ+ub7$:kC4 -$/=>o5r& ,SΧ{hZc`C)nfiޝE-L18yިY#|PFj3wLjR% vT)8jaǰY[X|=TDB>qGY E?Kȣd-Q\#Є. %AǏfɩ-Q`c.2s_'ǜ9$V\Sr+W) ,jdأ_*aAɗ.cݤe,8;Gf}yɜR7}o՗k*` "Ms{n8)["@*%AfpOU[)Ii+=Rrj0'[fWa_kPMe&/x^?dQB9 e;e^pjRǽrxnKc 3.jJa4Z'AlT/t.yblR#J@7Lǎ y9pk}UAZ[/d?@5ݟw%;"({o݉,s^(sѷkhx})?+އ$3mKrlGfa\˦RGORl_ YeYW1zsd,A<(1Q뾜Ө g4@fqG:BaLG̸A1oc)^;2dyy/?j4lB4.xq牢ak_qN5};6zrGGtY4k1%/k=S_owBwq8b:MRyh%0|&8;'^ gmB՝πW;NV];.n n#Hfk-(  T1Tc;_=} 6w6Vtujң,5M%s9"{\5:m6rۙb7+?۴ͯ_V8L[x!ifbqU$ic}G!J?\\VjI*V5uݞFWv{hT+B(CŴ0 jEnl̑QrEZiz-AӬ5 1*4ƤRo6wsaev{ H6*D䰌~ eO,YiWڲ.9M5),m/)!R2Ė`?kE h NxT Fp~#Q$ksO%8ҫ}Qn a{hw;.-/:ZL"u4N#*~K;M_*62&J0Kߖd*mTHNnJxV5Y I21f^܆za|$טpI'N(dlvLK'J 6E2Zq* 2cou@ܦVx=@\ 4飢ٖ u6#qA #(G~scAqzx5Ul=z^6ى71CbPLoK-1N)|H!E{-!#}uUqADP-.]ÐzJ$|Bn >0  nwKo0j=FQw ^I]7ʩ'}Zv_0m: h|tw t67j /{OyK@1+2IDh|ZYu[izyUS/Kq VR7 ݧҽyx/V2Sb*Z#fF<h,UOIWLVٽڑZ_mh3h1oz-_BD6S66૤WL6|3w`mafl*MSIi) <f DNy#⴦IrT:R&v١]můOruw>odQ6bm7;Ç+GfHo:1ЏE?y{Zڈ/n۩۝y5r|vC}o_ v 1r)3Hk‡(Iũ3沣C=v@S] BQ[m8w D@C=Wܳhjs9`?@<W)Y-&LLJϭw*tw6מQUi8a'$xϩv`h6 =Ji, :a;tk=㶆-9ܦg3gy [c7C6q}F7-# 3v{Wf' Z ny/+hWH\VZ4o Om-Ιb-j|:}<Ψ: ȧg6$AJ:fҤ'mz'~o#1qmC ײ528"hMdAv.bsIs5m0軤՝R ?@XP874}O$!%<3A+|Ppgo'0f!x˒4Bt"?"Sֳ>WDލ v+X),JϲDRozJ$%"yZP*RA<8ߎ8wy\Df8R=v*Cb[XFֳl>[8^cҒ͵d+|BG7Qk\֏6R85սvZr b ?Y~Nwuj~ $%azˏ4Iz5l_sEeQ֍IEKoP>BNU x%=[QNB!@Xb 'owp<e54%d6fȧ*NVwZuYUSZl]X1^)YJ ʹFGUtJ#M)˚ 2"xL}7K\n9Qm}ZנTŬc\Y!pB;2P j1^b0w$k,#4?7lġJ7^P4Et:9!\9r)Gw!i-T$_W) 5EHׁJ9ob3G _WߛRclƯ3pYQ|gQ08|S8Ś38X~܉Y1}G>dO{"①$j-MgVԠx3D޻l^pSW\+F-< ;eL W?)QgƲMr(hZzdkO߾L`t]{Ƙ; $xD"SEvv` ۫Hn[yػ&h8.a׆c}hipG% r/v-(73wJ%E;eg{eoXqpW\ ]XҌG6WmNDvuίK`{"wi]Q*;,!dp -j,}rwDZMqH17r`Z7r}7!o^ύ 0R`odԩH;lkN6ANLڸ[_ђ%TLNFFι%1keZ ,WZH:$۠4~oβޮI^NfW 4>$K|GYq"#o ޵*Bw\s}3lEN1/D77QX_ת|/o޸~(m}_ɠo q(G =޸oYRhcWy{GH}?Atz뙂eO`L=۝@Qj b2[S㥝Y- (K}#SϥRZVd2#iBycz k柫/zFsMqɐaʎ'VPÄeY]BΗ2޲\G@̄[PgmDw3gϡ=^Q n}dwrBCۦV'77#xOܵ |Y %׭{ #ߟ aF>y8Niw+Z\1%RD_J{]0i&3U(rzdQjPaޛ.j12qb#Unr "JI4iYv f3k3HY+P6> stream xڍwT6Ҥ8$4W R $$ޔ*;R*)RTzZ߷V3g<ϻp޾g(`UQHX$ P $Di9Sp1X )% ۔!8t`1I]I I Da$7-@GB±J('aß %$ (1 Ё.ag! <[CK c/pGp,\ Ѕ&H 0r@`; Qv8w08yc=4s9 _D_$B C`0 D vg8@OU[@@3A(t@UAw?, @㰂XE4kVA*\\H>e߻'p(w;; ۇh17QfDAwEpW8 _=zQh /B!?Q[ HgǛvc ~`%a(F 43Q1򿜊(@@HDw A?b5v(EzwnHG!<&E p@  /LT:;s?~ O݇8 tPx1 j ]-{5pxJ EA"*n{9oH=qG@ë ``?PAP@0'~(-@A$ {ء0v\[@4~^(_{E|) (>`RAUA K$)fByVdNa8̌ b`U+V]E׃ދl5"{l+lИK,T LoIb: FRwrRU)ޝHfpnK[EQ6=ɷ/Fhђ__\.D=OMcגn9s/홢`}xi#G"â,rdB4ZouuΗg.ysw𨩐xClDPU7DJ5`{^"gϷ[Z&\#ѴQ^sS>iyώ6w5(%/w=ryKnToW4OPkA M쥓 aJcl ts^пB5SD{t)5^$nH ڋu?$S)Y_SEj \7KiVf>piP'aQOW${WF5+4fGT2~\$@&(k=3v56ks9Ʀ"IQu[l 2AVQUz^@ǭ):ELVWspj^B/DS`D?ϓt'XOrqi^}dʾ`kE҅$S]G KTLkzѨ ㌗D-vի,,T8D)i)^fSq誝L&SulES}_8rz;5.5xYT9U'Xc=md^"V:qE޴{5ߠP&[9#6qbCDϛ!D=&jζ+O3eG9%/\PKgɛ_Ed#h#.[+lwluACVsrd+a)FV+DCZek ٓw'F!<^ sPZbO"~*HF=09xAR Uцq o+m/]yc$b&U M&DQUAIo=;}K hB U&hzjxo/$oL.9*ڮȔy}h3k^j=9u9C#1WtLL^7VV ye '6Ák;m^AӖ#4Xy2nZéUDW|V~ߪQS@;{]Dz2w~dNx$b*xpEj/G [*/JN^[ , zSFB67̑XLM*٠H Ɯ5<~(P$5sWҋdrn*V 85jJrʟ9~u%rZ~:OmFh9 .DmhͲpJRxSqϻ_3m[tSHZг{7 ~Ȯx1#кCMavfQHIx~S3N#1'b{זEqKۺVq|DYfhV(q~g&vż)19Ń8uRKWx•Tg-k>oa'a܅R~gi`| I )P)SUv!9'LR5XB;s8=n*JK~x=${۫}j2V/>87"š#Xj炱!dT z!i#8/M5d28%}zs*/QY nD+ns]_MM!Ƽ~0Y/p[|&ZhYyݘ ㍦${m'= 9lܟ-u?PSMX%V:O~a)U `8{>s2@?}IPR!|د0ʵ"w#0{}&1sA^"v ꁼv<(Gʫ/&7R!*CLKWF/ӭ'Zd_~pnϟ{g+d-M_3d3 /+_ޔ !d5ΗfU-L럮*YiƪZy/  Ogm&g-Qũ}#rၚ x^Z=Vr״ݍm%n g4r)GS} #ˢEXnf)uUrέ5U0:3{;dk8O@&`w,T:$1~=K:Jȹ}·|q5Np@z#Gӷ0CufqYMĈ/GK]yl|K̚mV!c<&`Zpeehkfz|y8wBپ"⮚Ɣw̒T2v3p֋8`voKVv TR fub+ /J_t/{ZΎ?Ș 8Uw'彻k(:-Bs-Nsso4Td -,16߫M?4Of,s5?8lӂ"b,Գ i(FR}@kHOٽםܫ^3Ck.nx S+(pN3k"u$EWW1]"R. :F(O q#(6*¡ ;·el&$q+KKU;Vt~X:ұ>=VQk=i ^;JI1g>rNf3dEZ-d9ݚ gZIU~+FRZEl]AcsMFk\NpY9=o;<Ccc-BYk I-/Mb_4XË^a9TGmKF!…<C>zI(KqDd{of 2>]Fcw5Pf]Lj QC&euƵϠBXߛFz+ ! ]=Z5gRO}^ϒ\1bZO 7:kݹ5Nj%^;4k=%]u[r*w~ LghR? f&Ov3SKڰK?j3̪ڇn7$iF+:{i"@V;26bL]$$ĝzo!JC3/Q,d3ݒN6著8]C +#iwYmAJ$D?mM;Uph[WpڡC0[<UqIzل2UM$W?X/wʜS%I,(3<{@9iE/a1ɫmB'傾.)&ex㩜i8h$<ǝFf@53= \˞y $% &lKB↘(=(wymZK0ݰzF'DmͰGIO*mLw\= o{Pd V7 rh%-GtVRrU|U,6 ?-4di5WK .4D+ʥ `) U[du6ńJZ3YVz,I8!+o> 65qN1M/Œsf#j|*g#Zdx{s'ex98ۍ: orXs;FCxe|pQxm'ȹ~=Vڤɝ<*cV@Qd!#/h`Oj"jGǽ\t?v|c/w1u'EE g̖XDxm]k?_xn%DvlKckuZhSx6(q+zt}b HF]Fϡ?/'&0,KggӒoV9DV,"!!LaXH?fN>cykK{$:IMYvOEM5 }Rm=^^.(0*yrXHE߹zk vTr~},ٙgZ -We]$fw+ EWA'Wh艫`YdkЛ &»FW8^LPCid̘k_M=AJLtڏUnu9',RiQ,EJpO\7.et!!r:*Vv(C87x,zwAcx#/r-jT?{RJCv畬i:{|ty02xriHLû1Kx -+z\-q6LAo-pƐk nT"Pw.C<+С\v7BMW̑/¾Mh(Ϊ]$}KHݭ sd> stream xڍtT>H( R3tww30 /!ҭ04ҡtҠt|ck}ߚ~sγgVc~E'D GRe]# B&P &0 =8(#!`S0~8@  @bR q)  J@JTP'@ xs(#PW昿nGHRRW8@ :]09 #?Rp˸PR>>>`7OEE 7 0@L` #Q>`$`PGw ƚ:}wo>@J'g"(W0A.g( W@`OG0{0W`!!#~Rs˪p'e$Y  q\>#|6PON^pDS "7AD@0: Loe1 g H#{C($(? @'# q‰C1GB}V@@߿V6y9!0ꯠ!o))!|"@()2q"i ?eG&]- B5PRS, 5/엙1ݠ0?z0]!Vro& E _TB (Gj21@xB>+~Lkˆ-LJ#_&fry*sĄD`$Gi2f' af KA8 `H`LJi bQ#e c? uyy F_/ q$G8J? o WnW)Iv! 4 l?"͸5#cm]SocXˬ`֯E:jҢq8DN։吴Y+ySŪiƊ.VO]&a +c^z<9KBlu<YKlhoDkbϳ}s %wbWϲX'uh+n_. asxLq;kYf2!e߈@X55_6ūAśZxSZXZ(4g{8S ⻡f-ccwc?TpaS}oX~0XxAB2dL&3XHz-mt2cuo>'|kau۷)4$v}9xVϛ%| dD@cL'XdbuAHm/W4Se, }Z֦%W4SJ0Wb Z7y;k3 kDASKSԠߍn2h =}Egg5`a}aN9ﰜSbG$i0dkYm8{^X1x30Ƃ{ȟ޴mv?U=Jwx=+J_I'[*+i^qw_z %ub9Qղٍdj lٺ/{_CIa5C; Y /C/ޝ)C9=`ު!bDCB/N= 5;/.Wnվf~?oeD⵻A+Y&SdbdgRI/vjxr2vR{\$5P/j4V-vΈt~˷dX7>da+l/NWoηJo],kz|2JRZ=LY>kbSoaZ! civX0;iېp㱁xO(l.Rf-޳­ϑjXH3l"8D|(a$kB滔>s][l)?S|e3 }fm=,Ԅf?~VpdkViaN^[<(u| Y~crX1HZ{SĄ'jD ~6#oJ_$dzO7jbԞ=&[8)V][E?v>1 шȡF`~Q%=T4U&ܘa}RL4~T`ǘȯ09v.A>Ae{@ o2z.MXebjE[U_7lIB']7g/JxͲ#R{;9z=bqf:ATf4>|Dz\4(.UpuTQkJR꫐󇒚ߓ3p?_RNPzrG֖v{Z37[- 7v̐1qO)nhEk .]i`by3te:/E^˧c}::n? Vu2S]~~Uh+X[QՎ{I>pb1"-={CwRAncD^/m3AC1=]&==$t7^'=3Ƌai>;hSsSzv4D:%@ź1רصaKLCi߻OXYnopԢ >_d0!C}m7,fVۄ2OqDͷsդoqqQBc+ [54FțHm+LҮ][+d4.68שԸ&L3ck7 #WJ=Ē$R6z'8lM~}ueE>V]ok|iV`,ERuwT-1Mk# ^3rc$ihF& wM{V2q "~,}Q}-A´0̇lυ2ǨԢӃuѮ$2:$bmue@kUA:cUƔ1R!1m» {$BVj&/2g028nMӅ\B5? u+#bZʮY">?74Eax켌i#yG# mY%cQȓw,w.&_Vl; g+|ߜlP%/GR"K- e #9i/4 F?`[]dh0槟3/4^5/SDsut̞ѾS0o-g޶\1T+mRjYt;&Ui9]W '+wb;#{|UqPv_h6.~/V IRwu:4P4lתjs^&\?u?F,RnѕPKJ Hħ>ÑGj؀ϣ}_O*F!|=]/b:t9M9hN64c'˅i^qKGcJnhT [Q5fB<b]iIM3A9]쁱Â5c{,m_^s[D.7[*\xcܒPrDC3_U/q_j;v4?Ī7|<l佷X=p7m0e_}2)wb\;ǦZ+-iChg@fi/snNN0cl'2*_ wtGrc M.FRF83T7.Ney,Ay RpJR9l0Grԥ +Vv4I@opw:-e.ҝgρʥX{օX6&ǝCZUFe> stream xڍT64E){U B!PwwE@7 H. EtϽ_VJ3<V&c^E'#H C Hu-|B&$7NjaR`({hL&a-/(@P (&%(.% 8xC|-8 I G< .H>?8AIIqEw: ]@P1!Q !D"}||=r<`yxR9G 0qxe0> B ' wk _dvs +, G{}j;:xB@'O?h]z? 4BA_?:ꯙ!0/ݽHߘA<<~]׿/$$X]_w\)~Y]IE=wQzЩz$`"rr6嘯͛ $joз7 '8xfa!=CklkTtynYILt']{qL,kaKr,/Mq xo yEڽb54~ZL#)4TyZ͞lJI4%l+XWO ' {5:)ɫ.:+߳r|~3?uKJ O]&kpa0.kFw^V~a8L'9ɂBPϕ L:@Kuk~Hc*tmpO =THEg^nr{23.U1d۞31?q:Ȩ ۠K]JAr~9LЄlDg #KR*B1xKjwdC[d%/MR1O$߸c]vA2=v-Hi/z[r*H|v@i=Ec g[ VИ ;gdOh:>pVd/V5%)/PŘZ8ty7~# Am7"W>RRGH oIcFI9L4 0\MPyŻE{,q-d WꈣmX%j߽ ?|{RwyekN%T'Rd$2q] {;5pt{S4C^4p+s=Fzմ҃iliYPF6A:dF./֌rGA/m%K=x30n8ucCT>k%K]QgJMpJ&;/_~ߢ>3"i6~5kKA%]gyggŸʡX]'tS suEDmÔaf%4F鴼zّr<eU]6UߚsM6RN/3Tq!!V;GF~#yi`YِCQ9;og+jSW)F~)NN;Qvd*.Ne6וGvg^,{ ٕOP+u/_($Rah>ҎqӗwJaRʳlW[ }68#,E&ix{K3[c[2 hzfg+[xu;&O}D'k_&t3J'n_{a(g)ɒ-yÖM6j;#&/*(lqFy' 3@o:!`CK?WUbz~9`έ Tm96Pc{-?Cyp,f%G{ؗkL2a0".$]z]t.igt#D%mHA!iU64yRGF˹~̬Q'#%F,[n:su&>.qbMDV5!0j.~=BZkھ"bק O#'p\mNO9ps--Q%(uxȫЀ+@n4o~i\>TL$\oAMfwgh@m^f[)!cǭawcqfNhTSǾ{x;F4= >vBSUMx!)E@j7#!4F` X){s5wXW;z_ K6 *KzUDZj6u5V* 3[(?^)2i (M<д7kra@ۚ)Dqp-/|fZN$~LG5In}A ׫g PEb) m1RCS<d0E~gȫ^3yH79yɖ@@wӍ+$IHo5GeiO_ܒ$Zy%-?+v S2~c|F3Zkz}NZƇσ3z(X7+af.TE K8ɀ?8d\ _s>tZ OUc4ކ1}5=ђDbDq(llӱzBǧoo/݉(cD|̥+_6Cn"^'0 z`,O~IF鹓vA[UջX堪"<:߽Jkb* wX§^[#5Q}][>(Sy>4U*?_>ПvMa%øj-κ;rFWtOz%SR\9'S{봹vC,{0̚N)/rþi1H#NZ[%;<ޱS.=yE+iU@.Fof{IG!S793=8۞9_7?rs;#yxV )f6f' W+j(@孵b1t?mκ#hE_)կg*N Rt+1>f9T-j*Kg+~s֞DTDtwS}*G/ǏFHW_L42D'M||a~_}3k_ vq327?v4r;B妀.dw/uλ{ƻFӀu9ɡ5oLn1rtVoIq(,,[:z43Y0uO}V%6a2Sؾ|*LmeCnIyg?_!&RUI_4T%im=K&7 F'88ى3l\v @ ukձ̋.Iڃ:݅J4 qMpLcLN$ɾ ̰clT/W,9b׮a'rZ~ *z:aDOsc^ڎu+G _c/1>Ob46zU|[/m ;钨P ,ЬePm"XXlEj«Zvel 㑓O3Pgcʩ'O7I}ԥ6)msF,Ga];OZf;'x"n_ٹxdlr vw;Ǔr]pl>d]#-c0d`\m=o)UqWxZ#'?1|rRc\0V6xw +n^읒|iekY<4u? hIuue6'v 9<{"֫ܒ;m Dٚj/W? a4Xy6x'h4ȏ}ZSQhYvfziܮ=]1eH?ǃ8輒vvÕ|Caɛ}ϊxR^<[ԠwLm\oo 4̡!!xƢV>CCe،Vql4XaUmP9_8/Tמ7pixʺ[s~7:X _f:#-:C{ǏeF8$A6dzBn" WkݧAKy+sO*tmIHSy3&EfݶXĘSfAg)-_dR ywvEXE;?RD_ Eʡdk#6Bu"= M'lN/ `#$^~"'O8w>gxw])?n kOQc3R]MV\]^<34ljp_*IA赺)N;ĨxXꕛD8ޟV9\!6VD_Nj`_rml 1ߙSG'F?O977דq}'{V_` 叢34}.ĉ֛&32'Aq͔gT\MN=j@"~\Ü9U)iXSi%;DTo\Jw¼`X,ͫĻ780f^}+IeWI/?fphw&mlQ7*]!ьnl}:hŸ Ŭɚ+;DyoV~Ǎc]35aћ1n7OBrfe_ө02ꦭе27/ICT:. T pQq7՟Xp5Rl0x}N=k=}J4eԴ66oipYt15"O$Ӣfo-iR*R_t`3ܧ~"FU I{E8fb7G?%fٟ`_^F,{ɇ)Y-b3(c=uĭ0lwIeӢ䖻Y>J#ZVro=fTM h~MOq8c{ ŒeV4u}Z=BzHy9&BS4qbN|ȽF?vZ]xC2i6>.͛(p.-,{z7^ڷ;Eaju\MB >\,,S:>8ϽeOa V/͈f:)?PO2>ޔJB)|i5]B ?H(^ebMl;P0ש{ksg3sVח*&%xn7"s&׿Y?NJԨ=ۭbV;y_릱 I6/6J_1>(a7tWpܟU$XOtz =ĩ_yFM܁o #vE)ZK:[y3nZ>ˆg1l.§x58[ywko%zBM{,fY0y";$c!&E E~:av.Evzvֆ^t0K6Xb+MYe qT!p1b!Gn}4TeSq=3fR6ܜ瘨*7/(8ܧDwruB%?bOj+N #@M4U/UO <厱 7$իt| Mz;`תOdӑuߍo-KƠ%>z vMM~6g6&&.Y fJh* esSD)34~= yH\Zȱ:}:5#uK>z¸⿐h\P5mMe\iUzbu7|^j3-ۜ, WUxНH I5CY[s8U^9Vi  yD2>ك713~9S߾!B g|/CX5k\ou\Ͼ& rzpLK˺ք2LDu<$TqGZX?|@񂀛q =e_=Wuo8em;=utm?y v~(%S印X{o]G}# \LpiPc'M ؟s jNh'PmN;̋c)ar[My+e>8P&he47:2nPR 7aEiw_ddv),DuijSeO ظI]3kwE[q"O"XS xZg~jXr1\/* /&O`/b^Fdv+`&ѤO~F|%OJd9ln2c,o_GsZ)Þ* #e&DqsUG~d ae-\&vsa)$ X/>r*܃saC닉zG[Okg)!ٱ!q$&({@KЬ]=S[ ([Pq[*6a,~8vS[ lG"S9JvI0SUTRĮ{M`vK!pWo}k!jOy}oԝGj[7=Nj̀Q.u/%ޔ*D* MnJM[1#q21DfrQ/kՖ=^עb&0y[ ,k\na{$NJwSңkb r7+)>έ ? endstream endobj 262 0 obj << /Length1 2619 /Length2 18588 /Length3 0 /Length 20106 /Filter /FlateDecode >> stream xڌT Vܝ@qw{q +.;)+.E>]Y+3;J5MqKGs + @RYKΉBCvWBrq;:BtȤnCeG +'dg @ (@(4N.`k7-|A.` @f0Z`qssdcdڻ:X20`d  `lA0(A?HA>?§A4 na ]$3 ?j[],ssCFO~񅰘As[W;):sy*Y˗U dIO G_B &0;C $w?.ܬ[/g%&D26N6 Y@dAHsz/ğy!%ޥ?zHdC\jw{߷R\ltP?j?'ϕRd7Nv diT.bvs@* y x A\!R4Zȵfp@/H Ay B29!^~I9-] wVy,PV-l:jIE'`-;B*[H,|_c2}b銥Q šsj!-=/E˶ 'HVk^|05X֥2L;ʤnm[ mߕ? ^e5}[h\w؋39SncoYӯJÝ=YCcuũHpe}S{-d|Ve7=zW!mFq>dVw- f}ؗ^fxG9YvCZ7B(Wb<~g7Z|kʏjѬBbƘz9Burpl):> ;}M(ʏ*sRfK_>w7]HOEmv¢A'jܯ \y㈬^:ѬK׎bv.KOht uϚ{L:~Yz驞=[ ǹS޴3\W+/t) Ъ2[#wBc>dZSDqhyU$jhdI~3yxStIlXzm͇:bz]=fgA2T"Z) 80 ٰ%ST+f?DfMȡS*^)a(nϡщbeIo0 *Fkrrj5c9_0׋ zp(lV$.XV9R4YlVYs;CY)sO4ԉׁ1/PR=!ΔƁ|$R8X>M>T-xr(o̰ow?,Jȝ"7E9Znʣg+JNTPhhOH} Y%O^r,8ҿ湽Ly#wV~Eg 0)ܶ37_wfNa&n!8 ^#:O7.*'t~GPB!Yّwh&JS3?IxSڔQ2RU%ZPs`%jr_U"lYrt]aQ+PSq 0'"C" mV+9}a:x;vXK[eƷ݅WE@,wq^j=[`Ut̑ȹk-p+k;5^_RX/VO]w=%޾UlEB mwWNA]yi&Z adb9]3 nC LGl~gĒ5ҏ*L/|X1޲}h%h}=T>c莪}~Ϥ>{o )ֻ7?RwIER_F{8Z$:*hY~9R6t2{ ?4eܛ7"\?hz!'[RX}L/Ar| k8AQ )E zh^C-SnʬYo}(3:'zWHէc8j⯇Hc@izŴ4_p*@¡^0NI1BoR( #0c`ء}:96yu78lw|O]ܵ 蚆z~.Tcȅ?Ytx $;kRw{o ,cB__#L `w6^k@w?:HieNN 1ȝUv:#69T- ȍj/ )<J1M-]L|b4)aњ C\$;؆ Cڃ *-;0^k„71`u3ش.=h'GD񫭦XHhG?wޙ1U^. Gu`6zuikm#dJ/һ<5v&ɹ(~`ɡɇI cm^ǪonrIZkOKU`c{j\fHG% _ j:ݠ?u(=c :Cكk~$ES{Fcldr_KpC6oYN clC="; o(K&dBy)qQ ׺|Lă/jwhUq_I^AW} Ȝ-V#13CH4\-8(P4=L_?T{U٥j۝I\Ԁ "^q-U^Ia(zջXps1p`ZA_ GaD j0ӼxBGWE\KCg+aki<Պ"ǖ(o" Ly\7C.b&ꐮYL~ʏYkm߼$gބ 'ɕ2n߰w}W=$f2o4Zh 2)h8#Ch 8'/i<:BGG+u WH{Kۍk@v4# c&L^P"[1ٕkQykL=\tT#A'X!熔لnX{ר̞is]ZKvBחGT4 dCCmQ-XVW z70m,mJ5PD/֫Ir<<:1x4'gdZoR@]Q`0KR{ˮ}jz,ހSŵ^"?s}LPW!j,9Jͤڈfnq!2}:me&/:}9𬷛 :IB_#*B?VTdHdn4^unQ^)[2G>'"FݏХ5F4%]KF};SxsшR\NwbXBR BϦ"l?ݭ~n\#o8ۖ]3?Θci%q)n/奕IXwsþTpynF_n-k7PPv`mwSAx]K25U3yjƆ?V\趙ށrd>,"%RpQ&~|L @a}x'sbaԋ O-9b8K^Bu X5$D'#}I*7Qa8!&ܰKUbP/W3buXU_BR{Δ-uS ̋~ZaP+ЬHf 9:s|^'h ZiC Je A_ad$hi a0XE5^Gl ܎φ9ԓm9R.3v-U!G򔹕Gfk=)-BbUx(lSaջ<ڤRZylŒx=xZށ`? Atnָ!_Σ[/9Cr76YB6PRP5O}+⹶Q0eeu3x/xZEi֋*K]g )ZIqx=rNlnELDZmf90 <*#Wfy /y}j\%CEu0b ' s^5Yaj*tk?.}z1s5X([V=aާ?fA>W] #jĹ9KU<_u{|1?WMO6gϲojV+"YBta#z|Qc W6TTªY/Cryk,/z Ǔc&Cv;hexOOE;)kz_Ӝ8v(Nw,`@v,4?F{mi$on9C/{b=+23QC4ԊmOڎrV&*\20q},Upރ.HeM){SZS-‘H}ucnmZ~R (gƜ>7Q0d +7׌+iG*FB{}]$$O7Xaە7Inh5/|؎L۠*?✺Sje,<}'$K;ҵvœ ƳӁua%ΩD{8j?(wf:sUPĚbo_q?ɺBα7d 'kyvպS\à:[5N7ཿkQhí3 0lk[+ԩ^u˸%k2 fI…Ei+`j1ǽ\D=c1 $ly{k݆.p AEu6h.ffI??rיdQNS(@xpUhM86 ޳5@'4WsI5wIW#h>:X2qL{`LԿKѩ2lQΩ C];}6pҰhȖ|,ȁbIy E}9)q-yUC e+w/[OXs݅eֲǹ v$}aM #܍n[m Y_1e%2=җxu5n(w/8f5k0$OHG'h)2T_c82~mp1 >ɓ)% W]sag ER2K>Ê8d;5$2d녮Y1a8x ƒw/9 AlJ`aG. nk_e;o%A_#-DdKҳ:^ںIzV__M6/p`b(?WgOx6=UӰuw~ѹͨ [@Q?s6εMp>+1_+ʊ(9nfcT,I? pwj_c_W"Q`[KZ-XvY9vS;&H)ާƠiU|}sQ3toF}e mI#,kQJ$ 8 +-X4b>@g;Ch'"<և8’P]R*?>Zcb-Dmgop8CC11DrI(\=}v WR-cc|A{e+.S2 c7aTإAݲ-#GeC,uN=ٝWŅ:*;OfSe9NR OGDKp'' c6";[?u_&hy^~-JLI~TTkt']u?|mr l.Lp#D3g%B򶚘K.e *Kݵ=<~[ќ3ޘݸ5p+s%ZåэZBmӀb$@?'}})9&NdU*ZC:5Z =7 gUH"s۫BntÙ{(R^sӻp0biN{;w)KDΨyi}M:5^yLrPGC%'7pR(Օkm5LHĎtSZ [謞$J|{4?>9O| çsVO&&5l@|}o;3oU9mWPXnD wG3(ѡqeY ]^ @\Аkym/J!85$N/K'޺i %tdAL}r 5MnYRƊI:;*wz+rhkOxL(AEq0%*x1'ucDHC>JFNң3~ , $>'R<^Q&9&`W}^`UُN'a6TG%hB6s5pgC9 v8;DgЙ'ct4h:HAJ8Gk)pebQKyҎFiB.wާ eW'g"M%,e!EDf0> Ipxƺ,RO 9d l8kZ=O7%lɩa +bT[uisD\ڌsy0-r7?"p.jG TJJIח65YQˮŶ81[XERpWM\*=z!ޫ xO3q'3k>v`NS<}6Y؋4}׫n=gK9i~KlQI.,ڗl[C.I喞gH/KPt1ʾg pm=ЩfKI&R]_#hHng~rNi_ۡeISC8e܍-'aҨn e$n֨?Y,쎃Q>ޢn{d.EU xOw,C7&NjRx91hZ,ꈝ3kKG|4D53&铳!L E8yMR+i.v"H0lW6̱#;d0p΢Wڈʻg)r?$>*͂zaFzHEVkwUrk 79,Jפmn,uteqz|yEcywJ^*]2٪a[R-@D.L!>6Aws&_ܵؠv{͹ t0M5jUs֌+n% Y.gʴ>8oJ=Fj|cR#fS>EWLT]ZUn4Gr WbPЏ"2 6hˎPhI.Og7LGVŕl կmCaMЦ%y.5 /'ZTo;Rk>J:7S]swxK^hj7̖b6OT/xޤ× :#zp6U89K١`Yqmt% x+B6Ȏ̷<҇xn霂]NQ,7Ҋ,bq |f?9dn@ Gm&#]Ϧ/s@?ڇR[-6s#JUk萏pkwzϺ'?DUIMpuu6Ɓ*}榜`sjڭ~-99bQVDHd oIhZ3cdWhq$gmS=[\G>!;9Hz ,Da\MqR`_։̺^Y z:I%e![c^XKRF~:t*x<0T.yg>Z=  ׺l] aW3N:B-kȚlG;49d@0x7EQW".l$a;_ZƬL-tEH! dT~B1A{&^詔\,O;4.ٶf| @KI/V^WyYK YG`{E;#m_qu͢+jdpdYg) ?BO,v}` PB=C:QQXkע/`XU ZfZ.ο-,zƕ=n}5-o%r?e+NT!H[J yq;}d8׾}ȠZC,NqG$ Ot{fkB{UlMhʧ- qJ#Ql^Hc@qBč-٥͌`'2rZ!ly3 3jӋގhIхVt ;R_wz.x4vK+!]/Sh N$<@<AUvqq|N|'oo㬕%("7Z0ŹJȺw`z\c2%b-gYVN83*@8ꆃ *I]igb{0ϫ]sղlR I?eS) UU Bep2[{R]ӽCKG_<إw1m:^عT)85-!8}htZ UϿVnH]gphQ1a[I L9axbm[淪8@}-v mW;hO7E䲚X" :ZO5ֺwkI KΈUzR9H 'q^Be yz5&ԼSߙntN`54YS=[&^\Fc-]hR"d 1*ٿ 3{&$UwILuK.*LjF2CXr?E~/@N:$xkѫH$D"O8")}<w˧Xnᣁqge4}߶Qe[ ܙ}X3Jz2<ذc' !|v靣R7GRdȰgOZx6.=Fʜ6VKl0zH|;؟:6t÷D0>\lj- $0U}F)!q(Vۉl֜k%6cmP}.#2GEq {oD:%|cOG]` O ]%sumytւfcr޴~UĚbVVZ'@!L;^#x>ڇNG8t咶 ɦ1ಒBC kG8/uڸW y{h#sQ_;dtEece{/)тD7:P4z;i_Z6(C89kS6@^_c`Q g(&.-'6z\a3' /jsk_jEA1~4(:|Q|V>k z*{tWE섓 ^׫KVmgV2UUqApI^g.^b*SU|ԍRJa!cYoJ pޢ:9LnZr2,z]|'$_ aW`MV1_ GD!@3U ' ^D|ݛڇY6Η\P aЇu=+EdkBzk9y#Z#O U~8`q >T$-(dܙg(.

    )bou_ B ̀vZVh#jJ6ǝ)!+u=PdQÕRau+nڈ6 [ZwH0rXQ:]'Fvl%: qN'aE:2gĞL/JQN7︖piU47\v_OCE2T">jO-حw20EpL'pmiX V}] )u ՜Ŏ̡hyKaezBHw|5y'$Mj`$wTN&"ihRJƕ(uS>~VWRlZ[<%v c@w8&ٛ|&h6;uz&azh'Ul:ADouN4n'0-ih^Jp.Dd}, {p">[f#y | G ôZcR5D|^ b,^OP:zŁjFVGmワhoj`𽃵2"*[K?6mI279dv(id Db|%KG۶}wE/b7܇feXfw&tju%(ӓ;(]>!Q? AmmhXgatyak^L`uz;x7OM =2-^x ,N# {b%fPIR zLp! IF=ToT ~ܲގ"@^ct7_C<`s3òndzޞ/ Y^Gjtj\Z"fؕ5A1Vte"$ 9C,K, /9]KEỢs~bY_* mu'%p]-:S,tX]BT?O.{Yoru3 U4ZezuJטL3ޝ~ͦ/_I?LR }KU"k0^c;Ga;hާQ&Z9s{`>G;C,)M[{s[}1xڈ}*}Oں3SM4Ĉ(ܨ8A=tӕVTZ;pHj#}?)q-;h>@1p5A(3&HP[1q}iZ9_hOTdSpDLwi_j35GqTA/JO$m}2K#I,@_JO5KLXA:_OAPU6KVaUob*0p_oq2CeAAI>bI2v58r⹡I;cʪq mw1ng WB?N-pRաLd,T:h_ 3qY8R,i lPz2UqUy뢏m` #:B=KZr&ϩMf@g1b.ؘh%cZ'DnCPIR S][h,@xLgMn ,6&dt] ,wFDt ~?ig%.p@BE;eɽ 2jhRE50)G5e,S6}Αhzj"Eﺗt^.w]x*ڂ@įy5_hQ`Q+@x]uDbR۱[9-nA 5W)Ü`wZ֕@okNR+d &uaB aY~SgQn%M|/+!`J=Kmjk3KB3~?nQvR'1 MK]ÔҌ PfRKghѱЛȋo̳(UcʆB^H릹rA@?;7|$uXHEzϐ=Rl$EVL ?QGzeO G(SɈ-#pz)  =fx`eYY<.}ݽD̾,Ʋ̆xKr&(˟,ƈ/b6g̑,,׽ΩmMNDsH^7PrgqۈR$\Y\}u ySVzbө?ݕo\ 6☳vG֞ ={hp+ 'g/ٽ~,p8{odx݇ҧg{,J&o~֩q3CY$"{h]B><2 (3"ApX#N9le_!܉JuK ~W1:Ӯy~WX*%TCa,#JőHtn|3IճiRA-B_fT^| /޵admTMY/^&~G591<\N/~,v(F/dt1NƤ C,Z~Wjc[r<.\8V+n:wm6G$ Ms l$BN`ݍTl@^2Ţ'[ZslFur|-/D"ƹ&݄ OZLA5Z_ uVPp~q e`W>Itވ-7麷 ^GGvLi$:(YMjE5~I;cbn]r84a)*cc{gK!r%sKݫ ai{^s{k9=Qڃ{DD8鵮es3x*Me endstream endobj 264 0 obj << /Length1 1313 /Length2 6528 /Length3 0 /Length 7434 /Filter /FlateDecode >> stream xڍwTT{6%- 000t7"ҡ t7 *H#Hw}k}:ks޿>k]y!yx%ZZb~~!^~~A\C Kb FA0PD; 4ܡ!$??@_?@8BZ 8 ˢwF@_ 1yg0b H݉@(n #]t:2Ov#< @gxqY?zP-v0XWoW 3yC`; QEz!@u=(;s @E^+lD_a )0 ]۽L %A` _E]`Ww_;?:{0 /$/ ^|z~*uCw\_7D}El?`?/9,àϗOQW^WŐO^_A @@X /w] 4Ubk2-߱w!M]o ENH mfm?@g@ F7gU [Ց;7t!H[?߾0[8׆n>wWn@`;;`G)_g Sl==ƻ#^J0 l;5 sk:/Y~e$w ~y+UT>eik߭*ȆDƟ~WV/Vq'GɻGr+hqhx V]Q[5X޸}Kz٩UU831Z*3 ,96)1<؜$^_ONdk~!`Ÿ\[3%- z7߂ݓ^unMSwSCR=lGbb֪GCQ dCnE;, Ws͋c]R-NA gľ 6fx=5߶ׅGnp^ 57qR^>b_dY<2)U 8yk콺'|>oy@SĠ=LB* @dz; uyo2$(r]II_\yg'[9 KQqf% cߣ5izkrQeaam:Z|k=JޙLUԬ!DfhPjFS2ag0yQ^G>4-H}ښֱ# |9"#7^펳O+ F =ꁨoV":.^dd;|s;*Cr|Y Ϋj`ޤw O.ԪJZOxu0|ﻗd1-U4&1txG \=[G_uxi ߳WETs>x/K;7p8 P_%aY_oj| H%{"~%]t.V*Lecw22f '{Jcsk !E3 ߇YTf*M>ɉQcoZ5}hզNCΫ|Ŝ roƽV[bOifӽ:hauݻ\\imy[C' &rpwk0~eAon*OfK}2+0LxI#8+rPڟ mc`^F޻9j8>y-Z3aDa(:C)Sb34=h c߂pFg^%홨e,$ ̙qL1 ~Srw?&e< aJ$멏L܄;DاG+[ҾIǘͽ79syS!9BVV}HE.r_EE|7F|! })1<&(nA0](2MMj:Ll#ij.IO?V,H5n3lg<{y!om. aa +CFi~&t8pQ)h۵|,1M]]PíI޿IjVq?Fxǖ',ɔt^ݢU,|ʼvt攍yICբe+^;K(۩KΦDNדSnh-Nj: hd["fkFϾ涱jC~I8l }y9\f7?q37W?zVim{d!flPZkL/ͷPes_,Əy,*(oozKL^nd?ph!B84WMsqd#Y*'A?i|?AͲ ڨQ|Ka%{Jã}<-gMzK2m?iqQĿ}rN/LjQķXSGj/]j^x%}AGJfE%a*#.1GLhd7k!&_y~uk9)ZۙWװԇKx؇γyB]=f+3 5q#Ih_nt ^Lpw̾:hW\0%N1 2Qf0,v\ O'8'/FZ6+Uŕ3 :$̮ra1Ir EEuȚrR'qg5z9.JeC^O?5V!ÖS+灷PGͧ9urdsb}]4wZ0o{INlՉ.]VcO^"|#Y 6^|Ѐ39݀:O8(k(}LJGlµFH5:hen~m lD]ucjP ;Ȃ]=X Ba刨U# XY9a?O:lq1+lʪF~O|i@]eq+N;݇xc"Eb DrfT1qr)wDClAHĭz9ƙ77quAcgV_~!ikyܡ|BS\?vO^ ~$ӹi  ^ΕMuWH%΃ CeG|[zBODd6߬WpaIG:gхE+(S5&kf$ Ikbyn-(.LD79IM-i/ 9;  )E(imMcXеøTꒉ&w9zC} ub/n2_>+Z©Ȟ֫T"U=AM ZKla!TSO&!C.e/qi1]]e^PgdjF~16v 8]&ڥv;1SeU+򀫝X\_9L VFayصx,֦W-ͻ0'5d!/FTȭp2d+\o0h`%db>RW<%~Fg)h:Ì>)z{(86^JsLQq,%Svz[}~=\Ū"Z|9uگbPkϗ X11NcjRD\⓺uFS +-ݬ8޳E/WI>Qʈ0T<xr;O,'zFfwQ|Dv-'qvUp.QU(9]e LUDAfElνeS/%wIyvɈԄbʽAw {tG.^'9<ɩ/V&URRk)lRh>./b8B۲ {y!Oao~Zmn\bR`.l\⦆n'r+zGB H/4Æ v>wёs.x|=3Ytuf0i/[-4ģL Au/<Ԟa0Q@gfAua|]3ζN8SΫ Aåay(D$ |&T"ʤ;y1+{)gǨ2rdWU pF޸+{k;@,M2NЊR'kyBʄnK4 *yn-SqSx=z{e7ȣ54 SR;<w$kx]4s=N}oqVʛ^LHF>_`fxI\A~"s=fez2\ ӛKP,,V9;_(-mg1z< pvQ~hk[;hu؂aĸdW,N#+n򄾤.E*; 57ӏ_!u>fZYd#ؚl{q;#m$T]3`&SbGiʔȕMLm34iٞaAfit3B2*[@7|NQIdž5lc CcQwOh4iUkO0qSM0g[MoVi,D*3_BbKa?gj_ZXnbՎaM$$={4iQ{H9Lk<B@/eJUozE PůVF-㗋FPlj?XG}F-e{ -@m7`E!{%Vq-_ +圗SRm[M-jk JBWG80ccUK Cmn GkDXdmQd==)7ȁ᳠@כEDIRS3Dtg V*b))ags`Fm7nLCo!=qYSAX Pr2AN`| S+t5vnD-8Mٿ]F|q,1s4U!q]wdO"Z :ܦ:*8Uȶd d>` QQƃ85RdH֧2?"16ךD19P;^ʣr&2Y Xt@B\aM b _>Uf@h ~UThѳK2"OX_RUs:ӡ3e۷\{Q)KlVPYc:,?>~BADOS\3-[蛮/#sھ!~;e%dg$" B?2H=殙0)@yrJFG{| YKTT8@AsBSf8 7VGNƍK{mo\!ǭI3n o/9*ۻoGUj-c yԫi U! M'¿9,^~1ieMF8cvSkbK[.ɩl'| ,n*D1A x=uF:ڷ5 TGyEؓҙo/+QH~.T3wƖ'qMo-vԲUr&tJ߬(e3'st.|H,=iJ`ywA dwmc`bd3KxDLR:8-W+/ )˲PĆ5=e٭;qG`ȂW͠W3c?OC}2u˨I!QdqJ}-' OmXKQ endstream endobj 266 0 obj << /Length1 1334 /Length2 2781 /Length3 0 /Length 3660 /Filter /FlateDecode >> stream xڍV 4ɒBY,:v3vً$c0 X%oDd+BRDJd)"Kޔ䵓!Kows{HUS@ LWA @ 璖#ЉO=H(d b@ 0ehT5PR!֏, ) Ҹ (>T']udpL]]Ua#TK,tOļ%BIh()C$BЖU tOT? XbIVi.iΓ@4RX*0D$Ә. 2[sHo0W-@3|@p'A(B+X2~%(L@ĺ1c5eVU G%i^zfdDtz~*c=Pikd?9N 3|_hbayt E 8O } #l]ͬ!$ȇ3C DCi]<G@L5)3O%'Lt0%RD"Ee8e< K&dw .O?SւDz0 2/L Q+A$ne6ǎ%4R 8n.'0Hб#{@@ܤɆdw_4G `Tl 8s`A0> J2t|BZ9uզl~IP@iCJJenT7@?)8Hzbcpe1 F& P+}zu+홆>. v N~]^mD!si9>nV[ =?=i_ݫ;72kuAmOGb툏QSCb˪)/}l"E1,ZIol#)l# c^dk'#=ڀY P&Fk2{vk˯=a#nsDMyn[JXj k#|{(q?\[YyW[#TW g (WJLς{;V9!HNRnElYvO>xKs\ eS!2/8mly`t|MPճO[%J`Zs#Ǐr̕NW\p{ffo3,zߏpMꭁlifќsPQc7mȝ@T׀׼l]zKO܉_+aDR˖r% |=)yԵeW*ᲈVYl_Z>d詗kkL׀+Og9Lk;]JQ,|l=Guy8j'E5OrT(qxr#zZ~/doV_ 4HgYtP!wsxúocE/1烏._|.,KM_aڟ??5xpLcgg?vUqeB max/d,(F\U8,g7 ky_ c}٦>ehu4nSږ{]J,9i#>a;75C䑢BO*LT>_+&?`3ÂL!xJ6ZL6՝=9_!!|JlxLJ6ZXg`gu8C(^+>QX۱תmæy/@e_qg.iў/o:(\R>g6f|O0zF;7Bb.N@*D`:"rvnδEKQJHksBԲ֓to]+d9rPuΗ;$xlXT Bh+vp@Jh!3эUĴ:v̞i|װ6 NRGjoP3-FWd7>6BC1%b{oͬ$Y*#V&l^h ]9JRW 8铨Ȟ`1YEAnv Lg U>efxYdFվL3U*|LO q8(,[7Q{QZ&1UFDB -.$ު^P_hﺮ$3:5F6P$MԼ/eirߋ9` Tse=pszX+2o6"q ]ʑ W4@'ؐBBXxyJ; XkWeYo $QHg},RyS%n?ޭVa!yS>B{RN?tQza{(֫%E@̡e~ޭ~yM~.;xQ (qc&VEI=$>K=<;Mu}xg;Ei24ֱ[&RoR#Rm^Cv}ΒǏ"M^<hLqdX.G? <ÌSm7GFlxսܥEͦװOq:{9hY|țaMa`MNx,W_*6 |ר姕WdfSXJ% EK}R=qS\;ך;3жnWoQ`wAףçJeT5.񻿞WhȿD#mT/BS&vs3С2Gɘ1[ ~70[4Ȱj }Jun)fJx)5X^+-v!۩O(de|q^8` n;*V9.uOh/WlptZTW8~ܼzJ/D[jQ*]mZ_ϾɮTȵ0qYe9o;aR{=wYc~V;4E[Ig~\\: iQ+V mWC|G@?'|#'!mmժw!UL7쭲(o-{ro42Fw0V2JӽĚ-5~Dx`1aY%]C\ZrM!㏜3{ endstream endobj 268 0 obj << /Length1 1608 /Length2 10196 /Length3 0 /Length 11022 /Filter /FlateDecode >> stream xڭveTݒ558!X5.%;܂x;3wk=ή]j*ruO`c։1vvT7U`[ލ\HTT@#'V $&vv@l2pji100W?=7A5h񿾨,35 #$ VHmFgck @du&`[S_92c}r&k@7_.F 9l{lMM"n7Ma{S;:98YU$܎w7li 6q}0^'## W.c hgm7 gG?0F@Gww쿺:z#;;ko/ 'G3{N [$E `c?}.@Dн02ZLfH,J`> [_5oZZ}`kF6 k!_`?:ᓭ̬0@n@SG5lM [໖/ +ۿ hk7ÿnӿTUwnN?P/ 11X9||CyV4rrދfe_`$mM͉h/ûn@K` Ԍ4 6`y~Un԰Mr`)V#]9\kdY.7%]ou;^A1jڱV.7քA3T;=K;;4X5G w4CݗD YTFx>IGN7&/LU'MFTDHKFIӊςoC9)/XMA &Wu1ΧcDs#*".8{pSihsh9ND4ʃgdbDs *id6OWŬ .d&tFVFHZSӨ\ڷڦ#ڗ N$*% pSҸ!E5DɌX9-ɜ9s6A)),i#'أcHdJSP5q? ⓰Q[?`/ ɯ١$؟-% mr@-8*7 a93 ),4Ax󴠌9 E6VWa+:ma(kW e kJ@0zHT B贬^Cwo,96Qm 5+:"#m?XŲDGa!f?&) +w2 v3y4x꺲(o݉s]OE,9jH4WVB`F GX vb׸<,m[6jZmLjO f ČXX"T޹X(hfNB]ЦX2jVuj>fzι} SXBl[׸7yXP/7,%{^bbuB\A_̮A}SFmdâ\[lzɾ|霯0q`D Or<'S[fRh]<1S$^ҦnM1?k+S+(WUrpѻU|/y4y7;yMLYt>.TP?X]M;5DX DSQ o~T8'cW5\0wg30֜:R"M/wl4LӾk藄ͳrLJfN}rC -K7ZZ7n95X6nC)G-=)U)xߒ,E2{KUdIlp0wu\qҳUJ8pQl{.b】_`)NJ ͐C Бj2ʧq4ܪdf.t} qӒ){-e&s5]ϔuB:z$9MLV=sGuզ L_:itr8HK v0}BllӧgJA)if7ɯ㗿|%G _a.4Mc# +se7u`i|zĒCN,t3:5PZaOޖ-.tm(D0v{C<@cóۜVq7Vq,QwFz8oL<)<,K,wO=\h`V=]0'Qꓡ"B? `@'+lF ec3!l&t>)U( 86a}BJm}. %4iX\4\qFTps.P.bʫ7"0k(BZ}Mw$\<u /DKn}56rIy&UM!dnAr&xF lvcH7!!2&nP*ӝu}!q$$mlt$!6!fwē*z] |'|"!&Q^mYx-AF e=Uc$'GJkTfePʏ61bԏ W&, A?Ck lHt/Y8\0GU~,Jz' }!amٳ"(r#{$ZaW*y -Ic+  J"ԎOՅv>M[ke.=Ε=fQ{|#UI͸wTR`i@r/()&3bx7s2[GqpS9.QǞLiVl#&TabnJnOaz ?7Wz/Ku =M>1R1T D0ƪ׺Ae*dTi6ϝH}N~ܗJ5>Մ xgW7tscSfZfDdb=F@̂9[%nWƑx<&*iP~z)_[Sھ yd`AkQWNt-/<~>Am műښF֑ O`Bѫ-oVfog$Ղ-!DD21퓱?vK:s,".˪(3p,PU{1]$>& ]qt5r/ƹc#ĭ |az1qck|6q=ѶV8'n Qc%=1H{~> 0i^b5Aj//jw}s6hQ&/7Na<>KzaE g/IÊyHbF?ylc\/<ݮ0:"գ)f޲~^Fv~>"Wck!X$cr=9NoR #0qٌ}]ZъhÁX{.|^A"i#:Nh_ _{N& Yq'帡WYB鐥<[vف^!@RngγRVYBao>w-vS_%zCPIQO,4>CߩORC0l++Gxw*{@BpzSp"F^.i'N?ZWbToSA0Iұ oi7%K0~HsaN ^ujbطo=>گG Yy /?69R=Kqz{ &7(Ȩ+à<$XJ?"]戃8_ Mp"F\u@jٿ,?- T([M$ȦZGLdlrP<ښGQ!XZa 97Mjɫc\иMцzAKLQEQ{Nؕ[냷O灧՜ypq +v8פULg8~-iW0?4St9d>t|b:ڕzT'2L-?Q fB%ueLr>C寍"dWbxY H ^exUr'FGVŜk5 vmR4L2Qi5;q'i@0Sޏ|cRH|~p?#7-W$tEo FC'_UgҸBKI]DUXJ_z tr7ZSjFҭq,hx O*UOr_sv/I*Y=( yTӴU*(`,D[q (}"6IϖeE [:-#~NF:4Q"^7j|NXzii*m=?G2//Q_!"ð|D$IG,x Kffx+яRk3~9Ֆyx6 Л3FCEӮ1+:cjsge4|'dϵqYob4hnӴ o.n<ݒ+>7?_קwCvCX>,Y'kaŔ%3 f=Qp@s%n팖6,݇EIL?mcF&i 1fEO=fvdTK,aohvS:$$fo6a86O QO}[3.9ͮ5R 1W/Dŝ D l%.UpBЁvׅuIʇy>slGrid\,f}=Fh~HCy4݃,cI/US;~V L,]Ec> PRZ *\A15k`" p&kzkWܷgT[k7l-sa1e9oƚ@, 7n B3Ԫlj=kl˝Q5_'ec:"nmJz>"Q^DnU2u8fF  7B'Jrgͼf ҕρC5SQ٨?fgϖ )H:I1p^yq SVu iFߪ*fvJd2^'鶮7Xkrp ИVF?# Zϭ7O:lPG Q5'˜.jzg?aC=x,JN48D #g)2Ex#:q Mn+u7{n`ȏEyĜo)NYA^ˋK|.h+e|-Ӎ(Clvp6XU<~puƬb,xQLH];~"m0DW KF_/\k{nI ў^H)K<ڡPY$KOQM{\tk?_)rn'E*%H7t(>9b> n*R vAaD]A*fG4͡Ζ*(hB#ku`q9wZs[0mݲhr~ƿ {zÞ!bGL NVN Jcacؑ^yo1ǪAXSRazxdW䥣.k{桡X:|cg4UE3sa4 xE턼Q{t^O =7w2)Q}+1&0h (s`L_ʪ9`jJE*:-imP# &[Z9)/ݴk/1Pzha%i_*%(Z+;*}(H' ׮$g_s6RC6&ݕsLa"6u[<@M,Vy,haneb,_/xb>,zߢut\^qXݚ {zEk&w3N Z%_[0b.#L%Au}=z4w"F&,W:B83:Y5+eIF (ƲۻJVxƝN^yidl]#Qrj4)ː"YW&6a_L}ZlF dErCrsMk5d}ƻ`βHJ9 :"|;K?""9MSk֕~oj^3 "rۡ]e]&j4#$C:iv?rm%Fa~~bw т$a c>^%yA? endstream endobj 270 0 obj << /Length1 1144 /Length2 3114 /Length3 0 /Length 3861 /Filter /FlateDecode >> stream xuSy<['Yb$ȄYgƾ%513c3̂Y%RK"dP]K%YMR+zG}?9|C6 hL"Rp- Eأ v 0@U4JA3DS$|h% RE0p?Id-'6 $DeDD=- 1v D#{-˨Y)N| ;#rr?&E@ G @ Đ0 Q4f'>Swd|-%,d`"*azAw(;33“AoFSt_G$O≘-ahJ'@hf`ÁT@k‘!>J;)w&Pp<d8OSA @%K}lj@7qk΀A쏽%JƇnpE8wV Őp+?(7rr I I Pe8 ߊ?$@GጉY|H0\|7JV$*d~$\WW ØF |_Gs `N@r@'M{qƄC@ ?Dڐ(7 ( Tp>xo?"H0_R#z0x"2&cvho bs3 Лsx[ӸqG#khb*ӊZ TW5.t蕻X0ǥŽ]P4lRd2MWc!H8P9tP隋>$!:6К &ZZXM gl6}㳸{)}ܕ:s`͐[5?΄Z R݂d*[bRS~41^!gQ+mMeB4^*={UN-YLNlu!;^8168 w B=l6=TyR`bt.޻03{j&) *7t=Ԝtw"N}:%*oSvzHxk&FL7S!+`m |«VC1$Qz=+\jҐZ}I\s;(A{tSjq$M1R9 uE5cxD0 n䙚 L%m|I?WP<0"ΟcH[1ݨ(2]0BP!rl$LwA6!+A|w=ke(]5L ?i"8R#Zc{͟V/ݛ8R޽tSQ* }onށp1r$L%" h.Z8A;|ٝuG5 Bp,Pt_%B}lbn|Mlm;Q/|MZ3_=K/,o"i}嵛3Gn˖K,=KiurJЖh} 6hu+nv9Ru_#3ge~/}-I?{~BI[/ٝMY"gK(nM򉞜_vѺfA%|be)4a5ewL9O4[[}]Q2ʍwh ?*ӣ^Q.{U\#~4_{Է{,g!u 14Sv3xj.JtG)]`X'[n;#T$&f/gG"~ wK0:e*\ : +""|h^NJy2&R cq]B?U$%INjT˗YN$7&!ŹoccIgڞL_-a3;3x`؏QpM2GtLʽzop dduL=32q+ׇE[Co ;c5// #͘S_PM,:.*|RMXl.z`#̈́hc$majTŷu]Kl0SIBj89xx 䃬.]]MTo4M dV"^15IrUEKyׄtTjy*m‚NI ^hn?Rjel~Гy:T&v!(anVF{_F LΠ:+l䁊ffTߜW{!;]4ZtvYZAw"R#;2W@\鹩 v)T EWVR 3[4%>ŭY.}b#A.O%Gj7x ?$YXX3AY_IAbC[|ىsS+M2֯Vlsks{SCN37ޯG\ʭUq#<͚߂:i.x1TW8T@>rFSZ׶ym+yleTlMT+88 dQCʖތ=Yh/{\h^1T| qqqwj:\}Khʲ+l\] ^7ыo?;Ywƅa0]5lU2ctZrY\ Xnf#0boX`sJUQNFۚ~АS]C.& >Eж[o6b{? Ntz<ʾհwyú'AkjZ= f7!GAMrxOa<jE.Mϲ~3rTio;ܮ}qd|2zܬX66'lJw6k _yfX<07KzꀕV䅨XA O3 J> 58P4Mzx:Go{"YBZTn~xB~ *䉓QǙSP%/Ohoj̽@Q;za)> stream xڭTiXSWE Z#%BBb"K4QtP%.{{sfl.Em #>*jdZEYDX`E[;'.|woyΖ+84 BQ Ppc,0hHly(&1 &<Qbѐ1/54㏁<0HKs(*xUoOԷ [9\W6s8TGI]aHI-_LC7C-:cQjQoH2Z)T)@9R ,IPhHaBFg b[!Ƅ=_ RYTU˃*,փt8@E%(ĵ0_c0% AvNX_9KX5f!qbN@M9MIB .oәcVX e@]{q,z]oUASw.MW{!"LxdLqrQ*kg-Iώ~(|wÕ.flNg]^>rz tVWtf?ѲΟ/,^3Oem{]eOzwuޟNNr8UWVs8_[S;i{Ƹa3u }ߏS5@6boR-}mKYO ESLuV yTc .LhP4Xdl8Hy{;Obj[1))L??K;moŦ{wQo\mv>36ޛt;BδC3䤜jR|gjZeuV9N} nYɂQM|Aw%lB!\7Ÿ9M;{L*7k5QmG+tS~O ,O_tdjW:)Yv}-|5pU.Oa65e۪.;zg{ܻANmXgiKfnwܲ,0w#߂goYWJdeJY~ؗwI|*ޫ|Ǥt> Ԭrʷ#\zpP}R7#$SZbgXj zb'fgjdz꜓S=6Yd ž?~~DUC`A(л֫:Ex"_?*KBٰ-q AgWw(KyuS T׍C6?*.ͪ[t~zkI$pQz]Sh) N;ۯFvxn*MƉ7+6cX]E̖zqz &66z ,,?#5SM.j]5:glV#7^zxߞzm; /=_cܴ*1DpCE<͕^ XkS3Weƙ/.vh]uu^s(> stream xZYoG~篘GZe;YƶcAQckTx$V~~sH} 잩VτhU3a2h(a2Yddt|#Ϭru!s&sX.Vz d *UG؀'h\XAzzsH7HaqqL""3)/@Q{GԚgP\j F%GCa8D: 2NA&`?aGv`$tsIIGEaA(b9"HkHc8As  9(b" /J&Rb@HG)V\bfT#*bYT O1Z#ЫS4Pš=&2z l9#u@Ԅ!KjZ Í B4М(!"T+rv1v>+d1l" FfVCg:jb˜$  R>". …A<yvؿʳdq7E;_v0||`)`yavA}|!@NjKQK҆wep]{C^՘n˹57W!Gtz5Km1Iԯt.t]'dz]#^!+q%骒9k1v8ѕע!{*a=»H^Hp@N.$QbK~ǖ+K#_hZ9&-6.WLޯ;y ȍE/U EK"BWNO$5i Ʉp+Z,U)BS䦶UȭD.J_Lm":_ɂrjtjiEWJ:UQkQWylb?YѤCiizLc-%M*ݬQUUx˿_UN}/'ZdbzǗxa,V_cXjy'MkX -i=8&q/QY˭ѭչe]R\auAz.ۀǪ(u?DX"Jq'XDRjVgdiYA[愧YIk W[cC[&$$"9Mhcq 6mBKvhm]k27\q WOMeVp&Km0} ˊ7d џ9>[D{H"QI4] / ==i #I#  ➚U\:VZ F(U<)rRjq"Uݫ$JOX زc@2.<7&~q٪e5UC)Fm`P4R|b|6iv ϯ?>?8~Ip0FY eOlO61'/}irп{ohbYh8x9aZ Lpӟ3v9Qu~9$K?z 1,n`"<~f3*4iJ,L-V[>˧U.]zg`iYWf#fa6?su7Z̚8_^z[_sfi%?N*LO!yXF (Lp(źv8^b4ލtx7d(^}v֊j D)B4Cw;>^}v{ް;fo}`#Yg<=fX[foh2.,Op}Ŕ]ic6de؈l<ļMw-x)aXL , ?lflׄ-؟/ݳtD'/OΞ^ 1F(QxR’XAko"'٨YNECݫ#X܆mc=-9Kgd+/laVVfϛT?Y?~?]m6Ի© $riU|\p- -%JZJ4a)Y/qWjOpL+u3ߒ<,ȝ"EhD{Bmr[zn>~O9רݢntjq7jz~>O sv0T{> stream xڭxeT.5@h]kqwנ`wܝgΜY3w~Z[T=Vݔ*ꌢ 3K)#t0ssU9(x--w9'"%)r0[--66+///"%@h4մi%`Oͻ+@nirrt;[Z6+%@\YEWVI@# tt1 @sKGWKZ`h4WXS9/ ]L=@Gs{7˭@rr[8ރ\.@'0=?pmLv wK _%{]`KO_,@W'{S\ps:Z ={쿺:zS''{A[' ފ =9=5YuXY!ps53 L-@^ K+Df%=%2 BCK+:?v }ɘ: @עqs\L^/ֶZ1ſd-u~BB6Xڿo=׿[ `dea7 /8twT YJB]^MYX_a@FV.#;{ߤ;Ί`'@nֿϿNFdبM-'?\\ W3oiii2KvB 94hV2"7y+Lk˜'^x9wSwY`Qq3dю9S؀bWU3*~%hcw? $w/ĦuB7OOiGov-u@L!}N%)i ѝ BsIOnY){E5,>*+T`X1b U:igyb/e0wq#{S,̵0r앵-4QXQ$Х#ނlAufJBf_vc,;{?@~^:F3US.A'ض: "#O!7PT&5R2N|զp-ٷ\>ꩃ_^x_ ؙi:֕koo!Lc抦OH^-+؂oX$A(Nct+}xFͰS{ps>l g䝤g~c?)r(0SW4:%S3.{vL"-\"׍6nXA]Q'LD:I"3j">@v iCD[) qLZ&3Κ7=!+L<pįGmV]BsOzI}k66+% /blŒ_+G_7ܨ~X;ecTx7Jz0% %ekրA׋7ꉖfHkBvRlK((LWr#HK/CNq^/c[uM ǵ`]0}z/o۽]F~I&WZ,Po6`]RP7R'Lg!MD2NO |M8 =6 ?!a9zNǘϣ0\uw0^ȢQc,ZbkGT?`}k's>[P6k!s m#v0Dbx^7KRūvN* 3Bը4 N"ƅ*2 p*ХEqPUmxҲF7--%% X6Xb@Ovqk --ϗ9 W@+/]AnG.n$Go\ѲW˱5LP쌛6as# V_)_4(nz@U8xjA/Cԍ{,FCUbwxw7s~˰6oe7*xpq@0CԆtހcb zN1VþE-_C 䮻-Ui6v-q m79Mӽj]$I#D#>?;PhZ]La/wZ̻kf/啺۶3lzM;7}Tґ#"D ђIu,8+^,cȶg=?䳘˻iU ~h5-)d25w'a6'66q³VxxC:'Hi"ɥHmLd%R&qi_1զ0l6'2$!QA9TyiÂ{\qg:,$?y|wS0 #4` q J߮Fڻ :`/_ P ՇZ+/6!eVFRnS1/C~2N_6s Y) #v.-jYǜ 08DOٚ*xDQ0[I1]fȁ #o?uUbrRzC=٬-`hUu_D U\?$BTNZr7)nӬȾBpV/ qSa䝘x_>ltd4?@4!ŽCIiM8y/097cJMOpjJF M''bnegdudEP]/nG.&llvmE:]&e@ 뺊FܥK(E;V=։UȓFG \`;9/LXC5 `͚ ,{K3K6wñs$o?]C{2æ k\a^'ɗ9Qb9hxN7"gϟVݺݺQO^n?=Lӆvqiǻ~L>6 tZ"9Ψ +hU,U*(FJUMӯtʑ\2nm;qn&WgghiwOHe^nf>Λ0v*Hþu 6`"ۺ 5#\Ø- / ~/Fj"!3H!Nz 1ug!GY_oR)OEQb?m8f8@|c=q{ *vl.q s[?>Cɋh\ :U5XKb9ބQ%>/v@k;oVw 9x\OTװU‹N z䉻 @MhTG +K@.l `ĔQ*aȾkoq(|O>-TIG]p"D~\'ĺ/%SB2gI2I/oLl)OS 254na.*zμI Ws7ʨ)vt.̀}WyұN/ ڃf&cZp@VMb?!A5@%C*je{Øuꎠ;Aj8oNb[+"qn T BTtPF(Q9뱡% m^ɪ_14x}o](†"tLYht.ʲ?SꪭJoQOmG'(2u"Xj6pqkP_a̧`.B9ntfIh{FK\Hfۑ9D u26$dCfKf/%ÅPẃW!Ә݇MrvCoj\TTZvgCXAԛ2g @/Dt42ifηN۵iK 酓wK{9tmoY Jha߯K>r_VσPC8Z^>杆fp&"W/PfUl"˜<"ad$hH*> [OBBLWg -Q^4//'}uu:sR]½!s޷ɑb;qLʆ5.N^SctacVYHyBamB딇xvel ߺuJ>$ jGٯqٽRiuh׌ _IᾟK4R\;Q;3;W3>g 7c {1W &AHb,٫~S0^wbƢȋ}+W^4@SCT\twIq. t \ݴ]*?`9Hb2f}Y6Ӥ""}*XdʔDYҹl%CVd4}bD8]s)ΖC ʣۺLKMwK]U0kHDGum;$lk˶Y$yt!wWt&RΓLz+,9Ka/M/bq#+-&ߌH +UTf$h=E<ȶ/u$%x. 5 ITzL?h?bLsg؄ :32 dsEC4M?*̽?,.uWEl*xJ]l>Va٧ dmLVF?B,ջj q59>F# ~F]SLc%:aXys3ZJ"aXv2vͳ5sF.5*ډzz ¦eUŸaNwl4nx2+r[7|ˍ6ۈSmɑ|2S)_9.YA4(} ``h":2e_bh7YBQ)u"PhsDFㅄnEP흡~)"fqo0f2Qk5Zq6uqBK Pv>͜F 2IS kj֜3CyXbFJxN!5N#2 AU@ QG'6-ߠR#K"@dCGZ }4ߣ~|tZ}聲cE$ s2`V$iBSy0mRN͑ݻQ_>VPQ9}s-4<,NhTj ?vv4"`V!K[3Fhk$S,'(q/! +㪶 zї!M<-N&M!3,U 7(AOCNY|T: ˨t'\/ŔպfdTw8z}ߜ\r#v=d__ (&pGNC1RxA琅~?[ fU8=J~$bHE~h&I- ٨g#W !'=td,U|4x|fF8A>*v>8Π[[D(Tknd31/"t 7,?8S2 %Px.u&I O F#$`>&{-zTyTu{A2Iy|Wm%5;w.q[_??w!~d>lW{TJkڿTLT eBѵJ7Fm&Фn'[ v`( D[>EP)WIEn'sR) 1SC%H%1'^oR.1WMZ1(yU~ȏrx}^U󮌪A{ÿep55;Rn5$U_b(L8JߣI Z=l>Ķ$tT_/IO0߭(^9hcw;g(}aW胝B|zV'S[9F>h 5gWϔC0%)4QG>fc~%"Iukn\LeF?Nj5} SG8D3tˠ5 3e'i!|}+ԾP3Isu** Kbru`ȤmU`Rer1?`q7iHyVÉf&tL;TZkʯMS|RL ts t9pdpiJyגI%>@_VL_|vhB%'n̅u5$ި/T1cUoWqHw?Hy>M+!v'Zeٹ__c};fnY,LCH^NO"* ! B.~?6R2 Ym8Yj{rnumj ԌSImD + $ܲHy-iȓR GGܿZ2 _2гfnbv-z.4!p?Ӳ[3cG ' quH5ty6:t5U=ddG mF䈲;乇YVZVٞ!12 21;Yt_:s̟'ntsgVk0IV`^/ |bLdoǟh,0ԂpʚU+(fVv:ʼnI,u섭F^9*˓K9N{{og%|QQYXkrk /1k he9;ɜQW{vt\(5 KlI *u*m$5mھj$(]22-ְlgÁmq)ד{GMG"E4ͼ42NיAoЯ$ ;~ dun'tFfs/yh扺C8!2~Saa!^vKe [:B'z^d.@qNp.cj+XoZlBWɯG?誴/KL;ۀN|Rb"a)2mT5&} .hп&E 29:O-"ɈhQ =^Gs}DJEѕS؊ihӊ/h 5,(b!RjKbrkgfakFYG*] ߻]rY&^ۦ3I- n$hGu:Xwwʼn>DdoAn(fEI=%^E3U@( V{zkdʿ} Q@Ebくm&>Ax@B8jͤs -ט{Elb|+V͟l3;7K(*J~u0ζKnXuȇ ?.7E"6Z_;5:JjHQ\:H"U+** s~XyH4I67>jh+Fj䋞LAmԣ?d8ְԴ,'!eݙbXSN4Ay` b;&%ss_$1tC6ltH|WjZ=PEdwU*mo^Tm!ԝjP6vjͪCABQ´IDAs{[Ao-(XO'LTONGi& j5J6m^EtJ SPyjSYh""h2*D:BDɞys֢͉eX|%]uh @^Ze9A-«4Ln'ELؿ}ޞ?Lfq`tK"T~"erѰ%(S/30C*U@BӴ9TQkdb0#?EV\'{I<#]Qlxzˡ1N '\ 樆W> stream xڬctem&VT1+qR͊m;mUXm۶m۶z޷Ow~1=qM\k16)"# -='@he`c%c!E`l+g%%eow4 XR/[7{#BYA?% Chj llickelQhf 0Z~ʩˈ(De9'K!@ hhl`L 0X06S_,>5 t[;큣 hmhdO&6J毅__09GC{#oT9!hOl_5䯥?%KQhp4vu'1`k7_0[{prZg{cS}{#Kc0 _׷tͿg@GcKZXƿ1 6Z3+&6ˍlCllQ337t8 c[oZRF{.}k=h,7}+Z; ߶XBHhh0ѷ۳ɕ-W[4 Ed4kWt"bJT/Cf7Q<#(h a`e03`d?큮Ϳu3ϓ61gtN6tKߪ76v56]Y1 4ONKqf -SI({ lq[8ؗy0܍aIޕh|ELٓAFuOSrq5/Jr3.S oҗ906:,鑼dhpg*3K;}'3CBzj%r;ۢC6*C=AeH0\c~/5)% EeZ^de( a}Ģh2q>' X|Fp =;RJs 60/BH:m^< J}5gr4<@p .v?"^Jv71K'gW :\$/H^ mXpFgy%4uivt& MK@ u^KFd{3'h} T SkFkmᤷ &uK<^1c9)$[ E TH>ҙ[HT4"4Mjs… w|'֡~)sYn #݃tvN[Ϊ@'_tnHT)вK]rco`1lX4! Sd(.?fc,E%IU!jD\6#V[ !Tbd\Z㠂`+$"hWCBW} B g)`f3ʖYhxɮxڿdfrеvb0D FS#[V@‎hgHi4d-k˴PBKN֑b(91b YWل[6= `?;{P0B) %,ǒSM׊$/vx`UU^$PHMXPnT}|+?ˆe,Q+z5E,oہ amԫV*l$zrt5 e|>`jh0?7 *Ǥf;@iok ]ZkOw9G i2G=EPyG= ǖZ\rƛAp؎Yp$M1@sƓʙX\oGfIu@e]|(CK?s6ޜAƟi*F:(7q"?di .Dy|v~/<_IWi5F7Oe%yѰ)4*I*  d f`]cieNg]`}\X$j~z0*cP)5VUo HPϜQd1}[wKDG E_A^o//oSQ̲BeѢ2 6/O={6[ S~5x9h R߉{-`.ì#'$`e hTր'6]< *m~X-o*by eW{.t'; JG#+nv\Z܆TW,fCg]U(Ni#h`:BΞT!S7 7!nĮ njx-%]Dre`7V6Zk]&$_b ?=$GD54w B:4ռAysp{w_58<h~-SǛI{uď6Yx  !0Kh2be zKIp3Q,osGj􀭻C"0li|С]8댰K#FytiҾ\Vp(Pv kQ9>VM:C 5BN;4Hqk|#M0=UԐܹ֕=SrX9qp7{uAnGov-lt@CdSm!(kݝg>_XLyalB؀+v_‰s躨TU ON17$#}{R(ݞ76NO2~kyƎF`@w!H|tU;8ڛ%]fSĦKaI)o:Dl{Sѥ߬7 :y8<'}cPױKx<߅ry6Sfi|{6Q*#o]flW( =PNG PsTXy4 6Slf8K9Eޏo~;UOE~k%ןЦP} (8%ZTB4rɆ {? QR 5ՒDpFD +̑*w^~9pSyAmރT]3A0b*:m*ĘJ4b! [+N=L!/d'o[@mVoR'\CgU`pnǼ RJ9Q~j-/΀wLƕ~Z&B> vUEƍ3$v;jϝ9ʙ_Gm2&ɔӶ=aa&1gd`يM`TXЗFܞ!0)1$yk0ӷWö'#p24(RJfȾb[pZ}WQjb g d%^lUqX@$j)"ldv㩞= BV"kPA\[`r -{ߨ-/Q/ӘC\(PT?U D-*;keȹTW{- H6׵3[<3B5==G0ܧ#+UQ:R7(>$tM1u݆1t J]VZd*v3~vuXB.D0"ie8".L|xh*'@̥g"NO8*aEYcy#UdGj|ܯ2H{Pۢo3ONC 'yq7,1cW;" 8~9kS0 UCL1q7ܫFCj*xmF"'$E7j^WOAu }6#{+b0ϜǸmemK$ѥ9к cr6NrJ KNnG kB1Uk"L7R!I^٤nB/}MG<*h\Թ) Zs%o!>mًZ5C%YϚnLHb1Q#EU*r:PS0Cknm~dӌe*L<׶ snQ&P쐒Ms<ꃙ*}u~RxTi4𘷝Q5, F3ߵP!*vWe*8_yt+`'bwWIR!l/@"t6 Ԯh~vO ;bjM4峪1o";}yףuUtdolQ[i0A\^/F٢Z$v:V>B~) "(4Cb5a-Xu(Fg.^FD>IЋǹOLZ:Ag=RBI*I#D.š=ܾW)l짔T-fʸ09ѣ͠,xjVxY.v-]-:rȘ b- P2#"#+nOuS$r[͊9A+F-qϰ1@4vj!5舗nXx6nd~];nfM+ƍ^_)יt )1$Bz{qmh/G-QeO}[E SPB(|YO⹆FSc8r<"ɧ5Ic/̄QE3=^P!\{?R_ZocK|>һ!D/ \M,uʡ%Y X#"á=NiJ!?6OF(DV4U;)6#j},v~ P_ Fj4^_r 4-b~[_P ˗-WL!}:';"1;|BeiAuL1>:CV]Ι^8ymvc,]U!g[9 ZVѴ(8U AC+`>TӪKUXHW$gTf ͊ eWwc6]2Q҈±X|U2P*#Ó7()!2u3zCRȣ`)h  W#yHq|!ЖSeDBXuwc%^HM@8(#P-gnXwq6=6׎e9R.s%AJ#O6~1##)5q : +CԆ]t7CҀNd[kH|o"/,PjRFCI505hLqcaӁDu8*KXjLY倥H|d|mXEWO<PIDlT蛾ІdX%/ 72.akȋC %JSf(Z2[nC*iّ!?̢5/ )$I0öL+~صRcw$eԥٝd4!Jj_/ ^!tfqoM.Ss ]ƘG蒞,U![33 WԱd4xw\S+“k^m3NzfSt7'a AFSZSulZW@.}a3ƶ/y25ϻHr1`5YC,,?53Y]iOq.inXDY| mDE-&LuI+Έ!֩\p RC *䗞D Fwwn>/Hc'xK#ґ>YtQsX-kh:GЋ~jZ k~b GJ#=77'uE4|;לJ%!B匟E6ޛ?LخIt6V(+;)9b?g J_*~S+Wd><;ĉ`e]WuTJ=s/ʨ+%海4#nc&̿ $\V6ml .g{Hמ=cH.Vl4e&_fdBbaukAo\iCCFnYRht2-m"9LXE)zn36jd-g#mY}~[὜T~5sp#^lկ&<]blwZ cFE^\CM*v:I !٪\J]FR>vm ad,% "(Ʀ׮ZDW;maœ`krLγ\5dr]P۩*مu} ^{,Z=~hK]j>.=NA1YZ'\̕+ I[5{<~)]y j^?tf5;Q1[d~n h~z <dzUq(uǁWiN.,O\BGR/;}d#%I5z^1ܻNKmԆ-yJPj^uF 7$l?i|'b~Q;\h hFH8u/[7<>Z:fߌ1>'o3 GHV(v,q^&*Uc׌nhmHIJ+\QOwvDKpsԎO#2˘Q5=,T9,&X:{0S []*) X>ݏZA [Ìڡl3Bx)G1u!FZGқg`cǼHr;-U :1;qДX|E##y0aΈrq # T=òó,Rlq,뙰fj _~#")+Ge\ThI{4rpZ#}%Yo6a德z0*g!5`^:^+F=Rp,j! aIPBs0zJpK54SJVQ,h!Q EfsbY'Ǜ.Y^2%w{9 (G7E5Ѕ Q&+C[ru4r19]IUqQB-u4r'q74Mi?c)4!6s p(j>&dhgr:Jkzo_zLrno} O"7_KxH.4ofS6PeL@Iu|_l܋W/z0+2˸WV0?FJ> Ż14gD-ۃ ~fItsTt#h/wNaW] ?BY(4zKenSnRU2;vѿ֑# 7K3kI@wpLe\Hx s;+Lg]N9[N%J7͉Os H ( /3W)Y,&xhqbW#(#"یĆ;4@< =4 Zmj@-1 39yTY\&eFv Nڔ US}רnwcu7D:sڪ_kn%\BW`U̱lr{^C1c?7 i}3oJo2VI8裂p@AՑ^_T/NKh1c/ T@%GHroŃ4> k|3xq.8s y}(hHߌ+cJp8Ӏ#-l1cӵЦoa`]O9^)U̔(;^(83("nqD渧,AD ցT"я\Hcda *O%CVg ~n)67:*%]?@˰__$BiPdyUC\\sꨖD>-{HcDj)t" q}ES̸ۙ[FLaxJA`Z;ַӔ:L!. Vk]bYxc>=~n(VON>bNݜ{MF 7tT08& V(" Ӹ<␙M׮#UN+Wv.4LSk{G Ż^:M@{;aXaCȣY<6i4uoI(AD@m|ךI*75U]oR"nƙFre̝ 3aHQ5K 6Kvwɦt>#=p$S%O|GDz7ՍhviYqmYP'`v77 ҴJh5T5i:$|4VbOݦF{ ;[MvH\Gl8Y|-y*(6cCZ^6LMQpHYdޕK*|HMQ닟iGGN!75MS`MO_}>{2`=tW^5)DGW:R whڸat"؆Sv:5Wa^fUJfQc-*[4llvQE%heܴJ*#H[-ud$ʧᚠ-lYNw:EcV/\`u >=X&]&+<im\fL=dZnhcH_i{Mr\K=+ NyKJ#v=,7h`rt _ܫrP1R@W)Ͷnwϋ] cj5m[?QS~{Vď?++rO ^4F{ Ш͋tb)=Çtjᅤ OЫ3qoyW# $GtCں}"Ƈs5Uqu},ƞ$]f#4,uG#?eƭX@7 )N_mu:wXɳ̼3:]Twja~E% +-jRk.A~73S-7&|P?dւj^^Uǧ'uWZ5qU'D5~t2;/DeMGbkGig ߤ>Nࣾqk7 Ȟ~R([ժM3-KYSm`(I}z+LF3WI]*m5Pvl%48fiv_UG#7 ΕBȎfROC0~Lia99.WLY|y^"b-ElTU8Խj|`z-:7RHQ8G <$fkbRODž9}ܼO0n^ɠK[N+3v) Z[҆\TCo7&NBҮrÌu\ to](`/H9o8 u}T:[؞H;[SEi [*]dzTwB4uaf~;ϗ5[!.}AoeKTi/ѥ3rswws"]̪ I^ |VR.u 5h g` "պKP%B:6 tȴOwWd[J%at0L~iNn|j2۟fnMjn;i7(߁;|-'oC:$+}8ÊRiu"Jj,] yCL+ ڡ뾌#$|%"~P;ߠwkwBW-tuD b)ēxl-M?VYGߓP8 4&)xCGcփP+8hCV{"[o7y :ZtUwȲU]~ 1UH"_펖#\W_3 sy/%Pf ${jZY=| %t񅓍,u!0^CaV6lH6E}\ڷ;km{wjLq]*kfDWH- r۩&zh]6ˆϣ( H8R^+e_)+ꤠcm]ZQ)K{>ߝ5 ptz6R9_0}"Rү.~x6Vxሉ@ifiYzt$D6"3_qD݄zjae/9(@AS :\?4 .l$bKH- ZSe'#ejkD?+b߄8!2 m]R&}hؓHٻz̙/pX:)܍!BTR̐қ|$^? #4mF™c"r9QҠވ!âɸadZ푱H[ kپlL`)UW+~OUO;ڐ伪NBBR6ͥH9Y'ٟ DW.a1 $ut%'('pN*@~s{FՐ^}qh|&cy9Hw ?>V$fn/ ,gA  R0TV2} Y{&oLH4?4T<3=TTmNؐ iodEmm3(X*a y6ݑ}kQ^lpşsR>Vߛy)UrGZ{/A$0#i2ɦwOjE}דy%v4':ʠ!^CѰNqS,Zy<ÐZ\6q2_7Kuy〫7$(#R8OG2k]`CL ΀j7SO&G*hNȸu0GVчcCޮ3GZJY EuUGֈNvm_,b~EW̏RuHWQgbuf=x.)ќ:w2íб 4A}L, 1Omt QApLQ\re!zoPAR$K(5"Q[t$rKwњ"4AHL_!lrGUľ2%:UYt)#]أ(w~. lK&4gDY_3Vgf[ę~7{PXBi`T Yc,Kpg+obW~3__KjIw B[a~-ӹU;p3m{L\9]Y`Kd}Yl} AzC BשFƒ[ !ͩjb@]6\}I{u$L#v{I^%h}*.)E 2wYΐ-'4 ^R%YB* F', ^^. [ _H4a I)ĄTؐɵ`cǘ#}[+3e $]YS\ldzm^,,aT21*HӠWlFx0O q{BVMzJk2A9]ʆu)*j-z .{}!][oa4-(ä=>K_%w",;%ЍB k.e=#Ll a{_~7$vIXOedA2Ձe4}%[@}LXW/)}Jo:Ɵʝ'm Y:oI,n#kP]iDG}ny柛ʽĆU]龊;w#l Ap~+zՠq^(9HȽip?6RF ޾OgQa!*pa5QχT,#6s򒶁X,)dxoZR|?>FR\)mQWcۢU`fKa&FW%T@U*6{ey[䱹mwuNm{FjStY+j, 'o.8؝:kQȰ s #ԅNOܓqb'd6X0(*oG|mǰϝ |"9GH=:3X.cAQf*p2lj+[/Q/;{Q+sn1&ƕksʷP ˂==}Y"}.Ț` -tg^1Ђ̡]-Uz 1Hv%YF8ݖ7֏JqekzаR>FfY}V<'+O(M]ԁݧ72%%$Z ))+xz"ʰ70P" <^~Խv{m|akF:I7>94APO"R=hTd:}QXFȭAD(ʏ+p+]-x%/tvE J^~9H;3̈ 7>)pդA%wi.%m%̟D" e 82Yc+FM%^ygP1k _JPt\׃bKxc%SycX# }yj928WObWu#S&]X,*B8-gpT#RդUGYW\>[Ό2R2 ދa%EA[:wyٕGSEm mDD+n~ 6_PDY&c h:0$Qɐ4c,-X[I6o')wSڣοkìwτ;y/zho1lXB_|(phʇJc6f^\wbu8p:hN_k %aAr_>K(%u/wkp/T~bpKz mR(bM7zA&ߍ\=u" f–ț#L]gNRK Cҷok͟?ig6 )̧KfýwcINjcHэ[4T },u}x(܂W8>{?^K.bOiݐPbZ|IasA$)DPhTH5h<58|<V*b!dP{j_.ZhMu@%ua<*: Zf) Xu_o f{ҐWQl,JD~Oi:$ٌl%Gl&A3TH./d%2m@d`Jbߟ)GBrQ%;D}qLVO :˭i*Ԛ;'sCSIxt[_k0(3LV$)TR{feC7Y E/E6 8lhJl]Կ(lQ1PA\ȘL_7[[u)VqVq6& S6tNRa3(e.O״4EŢ<@.rmb_~4m{^/K2vXf%^ G]ţ@o|p:)V8-\n1>bg%5=\=MwT8DX\܎ ἄFN$>z_o7 q0'ɓF7./G'ʦEjUȄ:դY۠{WfsuP!2 endstream endobj 279 0 obj << /Length1 1644 /Length2 11200 /Length3 0 /Length 12059 /Filter /FlateDecode >> stream xڭyeT\ݶ%N5] (NpnA \C&^߯sdF8 4إ,NP7vn.ahtRe۸^od\ 7T聭`K[HH ucfee/_h^=]!6P u{vn`5 QgTQP b PX`f _ 4WW,)W ,Ulg#qظn=ps@Vx[;ӫ읓 t yU_-,U@]n`/,+5+ 4]!Pʀ X9]]_a^v/Ճv?s9иy^cZƶ@8Ί /<.4ߙa~MduX8Nn!oX#[#9_.}whyw ucK*qo> G߭Jzmv!>A.) /;-ڷ:P+ ~عMm %T`տWJ?5piK]u̸u,ܴOO?vA!?@uV@F\\\ܯ\c`o0rPK'Z -]\^)gnD[^p Kp#5 s.m.*PC6iR{iWeoȁ'|OOW)iZqkNuKwok\CӴr :Xi _p` OoF{vY?ǣ2Riݼ]-=\[jpt<}ܩKe"%`yS(FM滶i%qt%8~SB:]ۍg\7sY៬uq24 tž ՓI0ȉcEK}Hޒ,5tB놩NZs}H ˽u^KR.$^/Nb[ .uHb®jfhY"9 Sl4WqݱZ8F)2ŴǨ;]m0欄&-!0e*qÓ'9&6CҩY=Q"Y_|Dی:0ýfGaqp9)6D: In-U'֐et+=ڝwP<<r vB{}S` 3׾{ e&Y؏XP"kOwi4+{zxio\fk9UbDTX{*Usd:8yջ\{x8p)x+"t#})Hﶚ1kIby[C *V:Q=NvjmHy_įڈٱjp^Ո䰣@GaƗm{KsvftSecA vW!#+n5 %_J!Ou*E?fozst ズ#iIeM>hA9k`d7KJX~0bW)qѮB3\eYv2G[_ZǓ}IV3,3y+/!ڱj&5`ky *pgIkɅ6mܼWsT-/FǶme&%ˈjo|0jW>Q|6R_cG5)Yw|yV;TS^rb~:G9-*c{v_b$WoUYPIٗ =tݿ]POmSq'qNqQ3ؔT{!rS}^ I. "kvqp6'rGfeU@2a{67ge7<["1*#MoG5A#bKF&Fԉ<^E1$ -cT5bEd YSeSh){ mȗ]KW)0kt:&3zC#cxx" 3gD nl-͍%l}!o;֔Q V0ad0h2_e(%qY}+ 똨jF.CbQ,E0Z<9x>`QaD^Cfh=V&^ ߮Yg1y;ZӔ{ū%x2V~RbԼ&AoB.uQLuPBC#сԴ:dg!$ = 6HiI.![(4} ?͟hl3Klt>ueg Be 7, >[eetg@@v0PyyÀc/IOR$r ֠ Ult yJO,7Gw c'MU9CDsF_L G`uNG߻.`f/ ԌZa/i߰~.k?l~Q(Ҥ3 LvJ9-!ڦxSð]#}oWMQ&BrꖹoeYʶa@MH℅!3V;dSk SXzlk4~"3O5\̇MTU>@̄t%tcZx?TPBʊL3;$?Yj#5E谍i>!' Xu(8 M\m 젊/>&jt79xӟrR_V)yM| ,1of%Þ⹅#"60`پgHl:4:!{9-3E@iƯVeσKC;?CfPxn?U)[}7THŋKzOAvKxؙ8>$88!Gm|#_;gqfċg>58Nh><r;m)6sVxzN &Y?.> *dCt#`U礁vҷ;J$ ya#ԠϽeƼۋ<7BԼ%k97̈́wQgzb rQ_8d%ۙx7!lj\ +=9rR*XSDBƪ&GȹjXuR:V!N־{3f/D6%_[? jkTM'R6R!{Q. _v)_O!U`ؽvK)hu`H|$Alab>N{,T(O: I0{=9>c5eL$L &E+xڛc_6u`2+WdWNQc,SסIPZIïًk=Pׄ3koV ;bȹ#z4 ,\#ay515D=JtWI $W;~Rc GvkW:.ǟvuhV7Fm6vJL.O(fpF_.9;$nV*%()HM\bxA/=i\ x̻g/".,@6E^8NaM #Cew-F/ (#YJKXyOWSpiIOUI׳ rZbQKuL(bJ sCPТ*EGWĝ$+ϐcg4p|O1."/|Yʄ|6$ ~Ǻ b]  VĚ"V Ӕ}IiS Hc0n>Aoת>7TsOOy sE(\"e+ 99F+Cl ¸aYxftK+ AqeIev C|y_ \U<.X.{z B6HR(O;J}َ!YIjա%1aы.1?*Q}jJMiz~Jؐ;U%:RO /Dc֑4³wEe5ʬTuvoe>nu.&zLFy%%Fbee.z{LmDf\*iogP7m=+}F|vBC ;N[ݹEnm?M1pY83F\k1QXГ?C㕡M Ϟɲ2V%`2& P aIgC+skp~cFm"5rU7#n#h`wA@s8.im!ZIwe[$E5ݟ\V n Y?Pm8!ue 3UMXM6lzF^ֵ\'IG#G4?앻(Wk*z6m&,`p*I 岡B/Sotu]j|H{SYq7N+OfdPv 8 DZiC1\/*5 xJ*G"ۖ5 u G+3'x?Y-DºdPU-m(aU |!qBEzӲΉ- 3NUϖv9$ɥu%BjH~BIglȫE!KP9\*A>nƱg?4jPʀ_΍i;u&'{h]TǮ1IEy5u*IO0sR r?rsq*^pv5l,o LD޴c)2$FyNAv0J[MgSL%i;%qL^߶*XkkbOIFC+7/'բ7!* WI{j/'U"s.W%?:ꂉ,i ǃX{snMxcn%N&zwśÖ01OXgjE5˶f,.k˕MׅԮeox7phymbh_]GTU{早RUk= +RK4Vh8&[\2rc^Xk)-gS*ų"(8 O14uXVvd@v=FVE' U{![x}NCگgU >oax'U6͊2.1_23+0v۬Gh <䐷zb$=%q? bBdd e)3ig**UAMuw.v`E|2rP`dE1BwI`r6~M<ܭ&:S''dY gǧ-TsWU :ypR;0I'>rDA+Y/e|&8h~KTIA05:K& ;h8>ŵȬ*XdAuhqz$(HRL{NH,9O̷fߜ*nϽwm{|_g֋{?}5KM&`/ê^.RL)e`.$N?eг" ^ha!0݀aaWY02dmD[ӽ7 cR?Oo|,PuKOփP&0$tj'=5%1WXJu- φKNx;Y?bLHK:(ȻLߘV6 b+Z̜ojnF-a6{8LTWiy3F~h.@{#S@4U+50cj8 9-_o'"j aNonv} 1bʄNnFq@zoh#r^.',#N2VZdRKzZߦ#Y7p↺KRҝeQiDqhuR89tcߪb(?< F]Z܆7J"s=n< a,Sk]cs]_h6Oe۾[(^8njra𴕺scO2_#jn~av[) ɽ+`TObyB2b}M0W;|oRja d3̒ohY,jP禖ʉPS]u #6៏V*~49yΪ*4Y~1.N <ū~宆kJxGI}DvLvх&]+'RxPAvb ϴҥۈ1<4Æ867$k%۟reL͕/:lQ_\s~y4?93ƦZ?w+sN]Z7D?Hc[O")PH5No."2%{Rr\="?}%,iZtG-prpR )ʕ@X](Ǭ~#A?#RY~<sҗeAH̳^ˈbmb!>/!DD>qk"Yѫ/C|[V:Ծx.g`^mzƝ"|=I!eu]5%i3LkҜn|P[J L- >$3̝x.e40lkJyNrA83xf=v"ORэ*vݟ +!u~#g`%Lfì&H<%"'j>7w||t%7ŰMh3,;a‰ڥdДj:C/$>WQ@JAd c}RjBC d0,RZjz'Ό2>AVDœ\-`=_p,q׮ˉж; w~n DFt~|FoE5Gvyw>^$A.zxgb-l4> #$EϚDZi66teCCTؼ10Lv<^Dq8%_G` }XE:OafCNG B Fo(yPN1$N$|?sE+ΒZPg}AN`?óq)&?((Ļؓ P%Ri.ypɭҎ_NFcd&cENwb*'[ukKN7笒,٠3=$%u) 6wDؙ,qJDk|pm[f7 |ICf9>f]a\kJ/r[V3KTP+mimF dCclTs}{Tj"ox/PlԈ)Z-W;#(yuD!fYF-Ќ{A?{؋1`r<ᱰCF-4hLuxy6iO1$6 h;)v^Խ_JD|o2JY+aϾLtY?N$_+ꌯ%cn\k)4 a޻P)EYߧ;qVLkNdց#gE3͇G2 cK4AxRmdURiq&F#GQK s;4iD9V]F m` ?d{4p ,"rt@V#!o Ƀ~-sIT Y28 ,XP*X*G}>6rwH.OEE0TBt ӡ/_ *Vk *wǹi8j^3R\:q RR8.m6)= cyA.-Ǹx3VՓ KX]k4:W-8H54o`dN)G!eȒ,Y|[WVzFb ؽr9(De+4EH.S[!$j#W5*g+_bd+W:Kok FN8C8P>J¼ .??*ܚ1i0A_ \.SWB΄J ȝ k_$M"5ōMk.(yB'2/$"f"' `R/]+lŃB5kth~8g ǝoz$H2FbU|.G mGvCx}3CzgwK*Ӭe9+! Rs ,ϏZ<82u2 H:*'bl3`(3S~0܏~؄i{ u$ W C{N5Ԩu-y{y{lӧ(ȳbhm& ' f"2GrO=Yv-*22F* ]P@:+̘Dh>ˡR#)Dʨp8̟%?cd&ů,e. 5/̍BAG/)7 @䜤7|^WMCIu:g *#vʲi3{trKC軻ձЧrcd$= ;vԒ`q?SmEk󦔝wl7f8w8$< u#X]zVlJ\^$ UԤ،a)'t{>,+yi  ~W '\rV%6T4U;VЇx)M7׬,CR&E'B^ endstream endobj 281 0 obj << /Length1 1647 /Length2 12659 /Length3 0 /Length 13511 /Filter /FlateDecode >> stream xڭxeXݒ-`5] 4ָ-]/w̙;Ώݵvګv=o7* Pf`ad(Xٚ8;*q1-6w#le3y@3 `DwwU4iek Ȼ@cGU ̭lQE%miI:@:lbce 24s;G?S;_91s ;N@Sw7)/`trrzX9,A3@6f%n7;!{G; x$&R[? Ύ= +KM?-/ؙZ't{X> ժUu&nr4z bymv?ّ²Lxt碮Qr3!i~<5bP C8wvGGA~k4& *-U@t>]f4<1O!I<х=ř4NcՏ*`BO$ɩvٲlR BM,4e aNF=Ev)K-X8[Xe# /4[g}_*93}e^Lw, b&WDqJ2W89Nd =%(_|Ԍ<(܂GzWM]˕>3b6 Ʈ\ Q +%0O SF1jAj"ˆ(mIs!zAE> 䳴Q  V̊PӤv&+iD"4D,>Va=}n*p A.8kEF ?4wyW$n<9Rž Izեgm8 n EAf T9tuUnx䱝spyJ+.Vλ*rX P+ɦu-鿄z lraFͲ-fT5qDq:_g렠N^ ^gVoK1 C~ÔV{1oqqQC#,HGe9ᕢA5Vq'eeFt!78!oovg\de }!xYimI{]ܿ47 lIZKZKRafb蕐6,315xkh?L OOs|^ AybYliL%l0F ;GP+z@VcMpjVx Kk84ۆ ID%TvWKYN#f Z#; O2W32q&\SuiEH|ez;(9* Mt kmֻMͪjj!ŋ[̼[oh<1jr{@ jBHߩ ^lK5cI'wjEa-9u,cZ֜`xꑺzA i8Tf\!в*`W,c<˓wO<Z'f?@x"R:~ BՖVOۛ}ΒK|}@18vٔ37 #QQQ~bl%+yvpб$Biyܓf\Š ߔ;r8N&31K+h, y>a:7;Bi.1T8GqI>y3_^E8b8//eB&!В~*Uy+è2D+ҝ8ˇ: "j<E2seAAE K#_,ۓ pݹ:MTPIUc6s@ Wt|b;S6ymjY";ԥr ڈ.t ]ώ.Й(J'8\Σ Jgv0v>Ph3{&*eD' x[ qђXV-N oherE0y^\9Dq7 uYY 4ЏXjxc/)=J0 9߲"8>jbYPk8CBP=y;c&#?uۖ@a#q$]r#uɶnBDWۀ[u %ؑP^d㍰%I/>.<.oGɈ79:1 0eY;Y?G#6BW' S@پ#켜.KV\XTfinI,h($q5.ic%COGOcW+x <&}+ JQFMt<glag>& w|B`L08½mMwYՇg>CӀ2P1d#d")_9y$ۏ/#|W90g5xVh/ }Fy. L_ )Tt]w*ET;3%F=˷*Ӱm,?BY=ޱ8_ٖ,U3AA;³6G^0 }k)&BJsG;]x𠣗`"Iv];ZL|N =/Q9+w%;t:] v%Dˈ"s#gK[@i"&aև0f)EiKv]J#!k&eg_c8kw*d.nn\gnU9e-i53SJIŭI F 8C [piGjm(FɄZ$[~ cppv׳Laz%w&QX+t\s̰KK>1oC_ 9vez,Z֠qđN WN7 *c*~"(?ŏSܑMKPXjfѴ ʼ >{&֤au\!VpX#ظ&I'!2$2m4~q_9e8lk5@O_ +TqP(qv4['b1nJ3k4ʨE>Y m~3%A۪?B17?V*GxQG$9cJ 29 2wX,$<[Pb! G6-f2U3,xx=*e>k%b [a~2IoJLH$Ш3)p\W.3ЊO]xly`GpEaڢu~!IrWu%Zv>祂䙐Omp߳ ʌynC=5Br{gGAn)A<Ά+ޒz fmrpA~>JTOWg_q;dQH-'\v 4uj4dU]Ovsps|`b"w'=OH%S }F4ywtn}%.jaM(¼~JRQtw}_Ow6*0b)n|@d^9 Īv?X./{S6B)˛+5ߙwJhWH1;c6A*<^S<u`]p1.%#kLIw,X<:ªtԎq33FNuݐ. ;@7|/2]x( #{TNWsJ3vgϛ.1ܞN"pcvQEJelh"Uӝ: s6:.l}vHc}8OQ縁2CO&ɉyWT4Ő&P^eD MPcJy/o Leѷ.x1EN%az4ŜB(a%*hwfKKҀ.<<[?\58 -^{aYf(2h*h'\y +W ov7.g\Gq|ơ8QT\]!DLjóc'~{/sc,d7Q S{Kd!].S4gQ4r`#Kv-}>V6')Nq4k9X 8lVԜRa}X?lFFyAYܸjBUzWfātTqWCc䱘y3qXa[Y8f3iI+n_l!'78TFQb?N YWB!@/|/QsGl2ER12x9'cMі5bh(/7[?7U[ @@ C飞˜j|7 1unnݴ MnIʾַ1.s+s~dLsH)Q&)jb5{Iin#,@KT0KUw|D`8@8>ǧIO %iA* ]ՑVweݚh$C?]ɛ Q끢ɱd*۾pq0R9RS_Ǵ[}A)ҙ'߹X>BHԹCsBW C=i B?^]ӽx9YX[4ď|[Vԗ7F' |V95y+/Y,#"DHJ%VM^GD)Ii" 5)ur"i"eʷ/j1] ^"IDbw@ _(׺c@0*8]OD=Y.~#0yJa$^ <9@]&*-J|юmİyy]ohcre65SHwAP= ʴ#8˛rrkexѷoL_%jԎ^LIɤn(u`9(ËniR{?\~P,YTS 0 , 7iAOU SFW1뤲OD`B?ibiS׭':3o@[%(.~ڲ_ZdpGp\+eѰ^C=eJ*T qo>8B2d8͕Vp[ʇD 6w 84е92pdz!]u\tNM6dx XfOxBZTsnݦI4K-_ߤ=ڢ HpA wjU=:rRdIg[4C 8p|ؕc}N3E(WxX>B}nj 2}e|x g-`dB @AW,Y%ORO&%s-g){(2„”' _H 7UGDRId+-^>C FnA`>JTm(9jjkوŀ >[?!9jɭ6 Uu +J&ujI{#~7*u}Vm2߉Z$Ra_՝}5gO#V2/|4r; ,\$!܍Źt%,AAB\k[÷o|v ?J<9O:ϗѾyTսȬ q;MYaUɷᣐ˷5]q}??u(|V_Crk(o+c!nɀZ;5+="E޽o-ϙ%4"{hB=SUy:7Sal}?!*0 x)kR a1{πАCTnܨpa+E0u]Uk+zxCNU/1jHNs5\zC0`x7Xr5,jʬ4h^Wwjb]{UĮ[/2zn/ ڞĦxIeeE +wق,bXd"81 @Ԅ6D1.\}~kx rCĻ}>Ԭ^55q}ܠt((6)D \G~45$ZScY_YT=@֘SDGkdP8fWIꏜ9 &g XI~t!TܪtvsBKޫ8rq$/Cq|5efhmRp|YI/4=lr:vm eLDP%0'!_FgۖZ$Tr,Yn%5&WmvʺFGq[dX)#ʣљ\jE [j4[,.,\  p Ad7KdoWX}*ʩ#KY]ic[*‚ 4e|ÈʙVg_(3$aq O+oCިɹ<9 7q0D gm۹eORDBK hB<SD+ qRl$( "^D(hpfDXkNkc\no+Ϣ{P]#0h0CI1&%'̭ Ә7]KyHY#/ھR64yV|6"~DHR2q-|c>nTMFtuՖ->vN1նQ4^cdk)ŵu_PR8J:>(sL20 R81=M̗FhO->"FbfJE'n~rW* !<7ާE%_VucDOMhu&5zߺz$"2H#!eO_c>I}''8Ęg::Ye:}@#IkWl~IKnDߣ[B @ Uu=$ Xߗ:PRk!,h_if4%`4W bsld&mɊXKH:UNdyjζ$/H{Rd 9XD(Js"sk_EeZW ,%?o2xijL.ߚФKǡ,$y[i%۪;& -8!'t6p'\U\ ܶ XFBs_zDXQA|L%$Ѯb<5넁埝o:hmſYyiawMbWիy| uȑWt$ ?7aȺ]/1B ,4Qj endstream endobj 299 0 obj << /Producer (pdfTeX-1.40.25) /Subject (GAP Manual) /Author (The GAP Group) /Creator (TeX) /CreationDate (D:20251204120203+01'00') /ModDate (D:20251204120203+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) kpathsea version 6.3.5) >> endobj 276 0 obj << /Type /ObjStm /N 62 /First 528 /Length 2527 /Filter /FlateDecode >> stream xڵYr8}WѮ'rS-J$HLRqƅ$xb/½FICG"ĉl)"!", "爄E0N4Hne $GCw&`sP`\C C"8 Jx\Fp@ܐÁu9bDv @vb&ua"JC\8AHL:@;`! :.cBN{ Nr=$YǑ84`y!:ʁm .U"L ~ I 5FJ;y:JPxqη>'")3\Jr\3hOR XbȆWsd,l$ 1>o;|opx'2M Yxc^Np'85p \,2!p Ig1;s=ixv~3ju-tQ^EEWtyĦ[ŖlNpvK_Ox[|,#e?SĖTO*§D"FM3Y] MxZ/Do{Q&Zt&-tTʁޣF+]&|)15]?Jg,5޿8x`?Xqp(0xNR]M!=qvQZ]M~x~.i6B:p(&DaEQ+WL1f,䋹 ;٘B\30nh;4!,Ct(>M&4N`p<5L&"GSuXCߝ bNy+hIS*[եR5F/??VAH?ȵ؟_UV7\8;<*odR۷ndCmƅI(rớ7ӯ.<,/dA92Q9YXPf{K׻ P ڇzmC)Rkg>8گ{m6]^Jz|tק'mrj }jw]fR ~?::y3흠 \K{`3O_  {m'K ?^ߚ(J.F7<>\`UXjdOnGmd(l! :75FφWoFEi/Vj D 5BbϮ6nU;UݷFS-|vb d[}U49xF֌gBx*K'9D{g'N{{➄mY=ܓײ;Oem^.qNWlWV IIQ뻋 Cj!;0 %(5E5V٪0u:6OTy[AT*6D5T ]אëX(0@LmqK yv1̶*bXe7J4h'ZqM2 x#k:/3qB>\+73'rƷg! 8̹aPp{fx ծoO0C0LH4`Ìmx,Z/Qo͝he@&qq>HiVΣE˿Z W#^C9 ˙)͢U~;к94b%moMgf-'zR0Ssf5Y\M|&<}ƾұhBrWf>_G.EP]e|ː^c25!9[ݕ2|-ok y_d[r5!ŸߡEQa ] /Length 711 /Filter /FlateDecode >> stream x9LUAs.eSln.;& nN 4VFcck4Ce_Λwf7_br07+<Ő){Qs UȅNPP!-kCë h0׷ V ,{$YiNPBTC[N,-Jg=v-pB[q˅WcQ-n k 4h+Akf.hqX׼3}W+~A1uyapҬJqrq .U ܂0617 Le<,âz`YpF6ANIUgFլܫnwsWՂߪݟSSղ/V}͓[۔ there is a unique holohedry such that each f.u. group in is a subgroup of some f.u. group in , but is not a subgroup of any f.u. group belonging to a holohedry of smaller order. \enditems This statement is correct for dimensions 1, 2, 3, and 4, and hence the definition of ``crystal system'' given on page 16 of \cite{BBNWZ78} is known to be unambiguous for these dimensions. However, there is a counterexample to this statement in seven-dimensional space so that the definition breaks down for some higher dimensions. Therefore, the authors of the book have since proposed to replace this definition of ``crystal system'' by the following much simpler one, which has been discussed in more detail in \cite{NPW81}. To formulate it, we use the intersections of $\Q$-classes and Bravais flocks as introduced on page 17 of \cite{BBNWZ78}, and we define the classification of the set of all $\Z$-classes into crystal systems as follows: \beginitems & *Definition*:\ A crystal system (introduced as an equivalence class of $\Z$-classes) consists of full geometric crystal classes. The $\Z$-classes of two (geometric) crystal classes belong to the same crystal system if and only if these geometric crystal classes intersect the same set of Bravais flocks of $\Z$-classes. \enditems From this definition of a crystal system of $\Z$-classes one then obtains crystal systems of f.u. groups, of space-group types, and of space groups in the same manner as with the preceding definitions in the book. The new definition is unambiguous for all dimensions. Moreover, it can be checked from the tables in the book that it defines the same classification as the old one for dimensions 1, 2, 3, and 4. It should be noted that the concept of crystal family is well-defined independently of the dimension if one uses the ``more natural'' second definition of it at the end of page 17. Moreover, the first definition of crystal family on page 17 defines the same concept as the second one if the now proposed definition of crystal system is used. *Remark 2:* The second remark just concerns a different terminology in the tables of \cite{BBNWZ78} and in the current catalog. In group theory, the number of elements of a finite group usually is called the ``order'' of the group. This notation has been used throughout in the book. Here, however, we will follow the {\GAP} conventions and use the term ``size'' instead. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Crystal Families} \>NrCrystalFamilies( ) returns the number of crystal families in case of dimension . It can be used to formulate loops over the crystal families. There are 4, 6, and 23 crystal families of dimension 2, 3, and 4, respectively. \beginexample gap> n := NrCrystalFamilies( 4 ); 23 \endexample \>DisplayCrystalFamily( , ) displays for the specified crystal family essentially the same information as is provided for that family in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the family name, \item{$\bullet$} the number of parameters, \item{$\bullet$} the common rational decomposition pattern, \item{$\bullet$} the common real decomposition pattern, \item{$\bullet$} the number of crystal systems in the family, and \item{$\bullet$} the number of Bravais flocks in the family. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayCrystalFamily( 4, 17 ); #I Family XVII: cubic orthogonal; 2 free parameters; #I Q-decomposition pattern 1+3; R-decomposition pattern 1+3; #I 2 crystal systems; 6 Bravais flocks gap> DisplayCrystalFamily( 4, 18 ); #I Family XVIII: octagonal; 2 free parameters; #I Q-irreducible; R-decomposition pattern 2+2; #I 1 crystal system; 1 Bravais flock gap> DisplayCrystalFamily( 4, 21 ); #I Family XXI: di-isohexagonal orthogonal; 1 free parameter; #I R-irreducible; 2 crystal systems; 2 Bravais flocks \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Crystal Systems} \>NrCrystalSystems( ) returns the number of crystal systems in case of dimension . It can be used to formulate loops over the crystal systems. There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4, respectively. \beginexample gap> n := NrCrystalSystems( 2 ); 4 \endexample The following two functions are functions of crystal systems. Each crystal system is characterized by a pair (, ) where is the associated dimension, and is the number of the crystal system. \>DisplayCrystalSystem( , ) displays for the specified crystal system essentially the same information as is provided for that system in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the number of $\Q$-classes in the crystal system and \item{$\bullet$} the identification number, i.~e., the triple (, , ) described below, of the $\Q$-class that is the holohedry of the crystal system. \endlist For details see \cite{BBNWZ78}. \beginexample gap> for sys in [ 1 .. 4 ] do DisplayCrystalSystem( 2, sys ); od; #I Crystal system 1: 2 Q-classes; holohedry (2,1,2) #I Crystal system 2: 2 Q-classes; holohedry (2,2,2) #I Crystal system 3: 2 Q-classes; holohedry (2,3,2) #I Crystal system 4: 4 Q-classes; holohedry (2,4,4) \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Q-Classes} \>NrQClassesCrystalSystem( , ) returns the number of $\Q$-classes within the given crystal system. It can be used to formulate loops over the $\Q$-classes. The following five functions are functions of $\Q$-classes. In general, the parameters characterizing a $\Q$-class will form a triple (, , ) where is the associated dimension, is the number of the associated crystal system, and is the number of the $\Q$-class within the crystal system. However, in case of dimensions 2 or 3, a $\Q$-class may also be characterized by a pair (, ) where is the number in the International Tables for Crystallography \cite{Hah95} of any space-group type lying in (a $\Z$-class of) that $\Q$-class, or just by the Hermann-Mauguin symbol of any space-group type lying in (a $\Z$-class of) that $\Q$-class. The Hermann-Mauguin symbols \index{Hermann-Mauguin symbol} which we use in {\GAP} are the short Hermann-Mauguin symbols defined in the 1983 edition of the International Tables \cite{Hah95}, but any occurring indices are expressed by ordinary integers, and bars are replaced by minus signs. For example, the Hermann-Mauguin symbol

    $\overline{4}2_1m$ will be represented by the string `\"P-421m\"'. \>DisplayQClass( , , ) \>DisplayQClass( , ) \>DisplayQClass( ) displays for the specified $\Q$-class essentially the same information as is provided for that $\Q$-class in Table 1 of \cite{BBNWZ78} (except for the defining relations given there), namely \beginlist%unordered \item{$\bullet$} the size of the groups in the $\Q$-class, \item{$\bullet$} the isomorphism type of the groups in the $\Q$-class, \item{$\bullet$} the Hurley pattern, \item{$\bullet$} the rational constituents, \item{$\bullet$} the number of $\Z$-classes in the $\Q$-class, and \item{$\bullet$} the number of space-group types in the $\Q$-class. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayQClass( "p2" ); #I Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2; #I Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group gap> DisplayQClass( "R-3" ); #I Q-class (3,5,2): size 6; isomorphism type 6.1 = C6; #I Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps gap> DisplayQClass( 3, 195 ); #I Q-class (3,7,1): size 12; isomorphism type 12.5 = A4; #I C-irreducible; 3 Z-classes; 5 space grps gap> DisplayQClass( 4, 27, 4 ); #I Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2; #I Q-irreducible; 1 Z-class; 1 space group gap> DisplayQClass( 4, 29, 1 ); #I *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3; #I R-irreducible; 3 Z-classes; 5 space grps \endexample Note in the preceding examples that, as pointed out above, the term ``size'' denotes the order of a representative group of the specified $\Q$-class and, of course, not the (infinite) class length. \>FpGroupQClass( , , ) \>FpGroupQClass( , ) \>FpGroupQClass( ) returns a finitely presented group , say, which is isomorphic to the groups in the specified $\Q$-class. The presentation of that group is the same as the corresponding presentation given in Table 1 of \cite{BBNWZ78} except for the fact that its generators are listed in reverse order. The reason for this change is that, whenever the group in question is solvable, the resulting generators form a pcgs (as defined in section "ref:Polycyclic Groups" in the reference manual of {\GAP}) if they are numbered ``from the top to the bottom'', and the presentation is a power-commutator presentation. The `PcGroupQClass' function described next will make use of this fact in order to construct a pc group isomorphic to . Note that, for any $\Z$-class in the specified $\Q$-class, the matrix group returned by the `MatGroupZClass' function (see below) not only is isomorphic to , but also its generators satisfy the defining relators of . Besides of the usual components, will have an attribute `CrystCatRecord', which is a record with component `parameters', which keeps a list of the parameters that specify the given $\Q$-class. \beginexample gap> F := FpGroupQClass( 4, 20, 3 ); FpGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( F ); [ f1, f2 ] gap> RelatorsOfFpGroup( F ); [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ] gap> Size( F ); 12 gap> CrystCatRecord( F ).parameters; [ 4, 20, 3 ] \endexample \>PcGroupQClass( , , ) \>PcGroupQClass( , ) \>PcGroupQClass( ) returns a pc group $P$, say, isomorphic to the groups in the specified $\Q$-class, if these groups are solvable, or the value `fail' (together with an appropriate warning), otherwise. $P$ is constructed by first establishing a finitely presented group (as it would be returned by the `FpGroupQClass' function described above) and then constructing from it an isomorphic pc group. If the underlying pcgs is not a prime orders pcgs (see section "ref:Polycyclic Groups"), then it will be refined appropriately (and a warning will be displayed). Besides of the usual components,

    will have an attribute `CrystCatRecord', which is a record with component `parameters', which saves a list of the parameters that specify the given $\Q$-class. \beginexample gap> P := PcGroupQClass( 4, 31, 3 ); #I Warning: a non-solvable group can't be represented as a pc group fail gap> P := PcGroupQClass( 4, 20, 3 ); #I Warning: the presentation has been extended to get a prime order pcgs PcGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( P ); [ f1, f2, f3 ] gap> Size( P ); 12 gap> CrystCatRecord( P ).parameters; [ 4, 20, 3 ] \endexample \>CharTableQClass( , , ) \>CharTableQClass( , ) \>CharTableQClass( ) returns the character table $T$, say, of a representative group of (a $\Z$-class of) the specified $\Q$-class. Although the set of characters can be considered as an invariant of the specified $\Q$-class, the resulting table will depend on the order in which {\GAP} sorts the conjugacy classes of elements and the irreducible characters and hence, in general, will not coincide with the corresponding table presented in \cite{BBNWZ78}. `CharTableQClass' proceeds as follows. If the groups in the given $\Q$-class are solvable, then it first calls the `PcGroupQClass' and `RefinedPcGroup' functions to get a suitable isomorphic pc group, and then it calls the `CharacterTable' function to compute the character table of that pc group. In the case of the five $\Q$-classes of dimension 4 whose groups are not solvable, it first calls the `FpGroupQClass' function to get an isomorphic finitely presented group, then it constructs a specially chosen faithful permutation representation of low degree for that group, and finally it determines the character table of the resulting permutation group again by calling the `CharacterTable' function. In general, the above strategy will be much more efficient than the alternative possibilities of calling the `CharacterTable' function for a finitely presented group provided by the `FpGroupQClass' function or for a matrix group provided by the `MatGroupZClass' function. \beginexample gap> T := CharTableQClass( 4, 20, 3 );; gap> CharacterDegrees( T ); [ [ 1, 4 ], [ 2, 2 ] ] \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Z-Classes} \>NrZClassesQClass( , , ) \>NrZClassesQClass( , ) \>NrZClassesQClass( ) returns the number of $\Z$-classes within the given $\Q$-class. It can be used to formulate loops over the $\Z$-classes. The following functions are functions of $\Z$-classes. In general, the parameters characterizing a $\Z$-class will form a quadruple (, , , ) where is the associated dimension, is the number of the associated crystal system, is the number of the associated $\Q$-class within the crystal system, and is the number of the $\Z$-class within the $\Q$-class. However, in case of dimensions 2 or 3, a $\Z$-class may also be characterized by a pair (, ) where is the number in the International Tables \cite{Hah95} of any space-group type lying in that $\Z$-class, or just by the Hermann-Mauguin symbol of any space-group type lying in that $\Z$-class. \>DisplayZClass( , , , ) \>DisplayZClass( , ) \>DisplayZClass( ) displays for the specified $\Z$-class essentially the same information as is provided for that $\Z$-class in Table 1 of \cite{BBNWZ78} (except for the generating matrices of a class representative group given there), namely \beginlist%unordered \item{$\bullet$} for dimensions 2 and 3, the Hermann-Mauguin symbol of a representative space-group type which belongs to that $\Z$-class, \item{$\bullet$} the Bravais type, \item{$\bullet$} some decomposability information, \item{$\bullet$} the number of space-group types belonging to the $\Z$-class, \item{$\bullet$} the size of the associated cohomology group. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayZClass( 2, 3 ); #I Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( "F-43m" ); #I Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( 4, 2, 3, 2 ); #I Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable; #I 2 space groups; cohomology group size 4 gap> DisplayZClass( 4, 21, 3, 1 ); #I *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible; #I 1 space group; cohomology group size 1 \endexample \>MatGroupZClass( , , , ) \>MatGroupZClass( , ) \>MatGroupZClass( ) returns a $dim \times dim$ matrix group , say, which is a representative of the specified $\Z$-class. Its generators satisfy the defining relators of the finitely presented group which may be computed by calling the `FpGroupQClass' function (see above) for the $\Q$-class which contains the given $\Z$-class. The generators of are the same matrices as those given in Table 1 of \cite{BBNWZ78}. Note, however, that they will be listed in reverse order to keep them in parallel to the abstract generators provided by the `FpGroupQClass' function (see above). Besides of the usual components, will have an attribute `CrystCatRecord', which is a record with two components. The first component is `parameters', which saves a list of the parameters that specify the given $\Z$-class. The second component is `conjugator', whose value is the identity element of . Its purpose is to make the resulting record consistent with those returned by the `NormalizerZClass' or `ZClassRepsDadeGroup' functions described below. \beginexample gap> M := MatGroupZClass( 4, 20, 3, 1 ); MatGroupZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( M ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] gap> Size( M ); 12 gap> CrystCatRecord( M ).parameters; [ 4, 20, 3, 1 ] \endexample \>NormalizerZClass( , , , ) \>NormalizerZClass( , ) \>NormalizerZClass( ) returns the normalizer , say, in $GL(dim,\Z)$ of the representative $dim \times dim$ matrix group which is constructed by the `MatGroupZClass' function (see above). If the size of is finite, then again lies in some $\Z$-class. In this case, will have an attribute `CrystCatRecord', which is a record with two components, `parameters' and `conjugator'. These contain, respectively, the list of parameters of that $\Z$-class, and a matrix $g \in GL(dim,\Z)$, such that $N = g^{-1} R g$, where $R$ is the representative group of that $\Z$-class. \beginexample gap> N := NormalizerZClass( 4, 20, 3, 1 ); NormalizerZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( N ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, -1, -1 ] ] [ [ 1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 0, 0, -1 ] ] gap> Size( N ); 96 gap> CrystCatRecord( N ).parameters; [ 4, 20, 22, 1 ] gap> CrystCatRecord( N ).conjugator = One( N ); true gap> L := NormalizerZClass( 3, 42 ); NormalizerZClass( 3, 3, 2, 4 ) gap> Size( L ); 16 gap> CrystCatRecord( L ).parameters; [ 3, 4, 7, 2 ] gap> CrystCatRecord( L ).conjugator; [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ] gap> M := NormalizerZClass( "C2/m" ); gap> Size( M ); infinity gap> HasCrystCatRecord( M ); false \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Dade groups} Some of the $\Z$-classes of dimension , say, are ``maximal'' in the sense that the groups in these classes are maximal finite subgroups of $GL(d,\Z)$. Generalizing a term which is being used for dimension 4, we call the representatives of these maximal $\Z$-classes the *Dade groups* of dimension $d$. \>NrDadeGroups( ) returns the number of Dade groups of dimension . It can be used to formulate loops over the Dade groups. There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively. \beginexample gap> NrDadeGroups( 4 ); 9 \endexample \>DadeGroup( , ) returns the th Dade group of dimension . \beginexample gap> D := DadeGroup( 4, 7 ); MatGroupZClass( 4, 31, 7, 2 ) \endexample \>DadeGroupNumbersZClass( , , , ) \>DadeGroupNumbersZClass( , ) \>DadeGroupNumbersZClass( ) returns the set of all those integers $n_i$ for which the $n_i$th Dade group of dimension contains a subgroup which, in $GL(dim,\Z)$, is conjugate to the representative group of the given $\Z$-class. \beginexample gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 ); [ 1, 5, 8 ] gap> for d in dadeNums do > D := DadeGroup( 4, d ); > Print( D, " of size ", Size( D ), "\n" ); > od; MatGroupZClass( 4, 20, 22, 1 ) of size 96 MatGroupZClass( 4, 30, 13, 1 ) of size 288 MatGroupZClass( 4, 32, 21, 1 ) of size 384 \endexample \>ZClassRepsDadeGroup( , , , , ) \>ZClassRepsDadeGroup( , , ) \>ZClassRepsDadeGroup( , ) determines in the th Dade group of dimension all those conjugacy classes whose groups are, in $GL(dim,\Z)$, conjugate to the $\Z$-class representative group , say, of the given $\Z$-class. It returns a list of representative groups of these conjugacy classes. Let be any group in the resulting list. then has an attribute `CrystCatRecord', which is a record with two components. The component `parameters' is the list of parameters of the $\Z$-class of , and `conjugator' is a suitable matrix from $GL(dim,\Z)$, respectively, such that equals $g^{-1} R g$. \beginexample gap> DadeGroupNumbersZClass( 2, 2, 1, 2 ); [ 1, 2 ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ] gap> R := last[2];; gap> CrystCatRecord( R ).parameters; [ 2, 2, 1, 2 ] gap> CrystCatRecord( R ).conjugator; [ [ 1, 0 ], [ -1, 1 ] ] \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Space groups and space group types} \>NrSpaceGroupTypesZClass( , , , ) \>NrSpaceGroupTypesZClass( , ) \>NrSpaceGroupTypesZClass( ) returns the number of space-group types within the given $\Z$-class. It can be used to formulate loops over the space-group types. \beginexample gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 ); 13 \endexample The following functions are functions of space-group types. In general, the parameters characterizing a space-group type will form a quintuple (, , , , ) where is the associated dimension, is the number of the associated crystal system, is the number of the associated $\Q$-class within the crystal system, is the number of the $\Z$-class within the $\Q$-class, and is the space-group type within the $\Z$-class. However, in case of dimensions 2 or 3, you may instead specify a $\Z$-class by a pair (, ) or by its Hermann-Mauguin symbol (as described above). Then the function will handle the first space-group type within that $\Z$-class, i.e., = 1, that is, the corresponding symmorphic space group (split extension). \>DisplaySpaceGroupType( , , , , ) \>DisplaySpaceGroupType( , ) \>DisplaySpaceGroupType( ) displays for the specified space-group type some of the information which is provided for that space-group type in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the orbit size associated with that space-group type and, \item{$\bullet$} for dimensions 2 and 3, the and the Hermann-Mauguin symbol. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplaySpaceGroupType( 2, 17 ); #I Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1 gap> DisplaySpaceGroupType( "Pm-3" ); #I Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1 gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 ); #I *Space-group type (4,32,10,2,4); orbit size 18 gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 ); #I *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65; #I orbit size 2; fp-free \endexample \>DisplaySpaceGroupGenerators( , , , , ) \>DisplaySpaceGroupGenerators( , ) \>DisplaySpaceGroupGenerators( ) displays the non-translation generators of a representative space group of the specified space-group type without actually constructing that matrix group. The generators are given in the representation acting from the left on column vectors. In more details: Let = be the given dimension, and let $M_1, \ldots, M_r$ be the generators of the representative $n \times n$ matrix group of the given $\Z$-class (this is the group which you will get if you call the `MatGroupZClass' function (see above) for that $\Z$-class). Then, for the given space-group type, the `SpaceGroupOnLeftBBNWZ' function described below will construct as representative of that space-group type an $(n+1) \times (n+1)$ matrix group which is generated by the translations which are induced by the (standard) basis vectors of the -dimensional Euclidian space, and additional matrices $S_1, \ldots, S_r$ of the form $S_i = \left[\matrix{ M_i & t_i \cr 0 & 1 } \right]$, where the $n \times n$ submatrices $M_i$ are as defined above, and the $t_i$ are -columns with rational entries. The `DisplaySpaceGroupGenerators' function saves time by not constructing the group, but just displaying the $r$ matrices $S_1,\ldots, S_r$. \beginexample gap> DisplaySpaceGroupGenerators( "P61" ); #I Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] \endexample \>SpaceGroupOnLeftBBNWZ( , , , , ) \>SpaceGroupOnLeftBBNWZ( , ) \>SpaceGroupOnLeftBBNWZ( ) returns a representative, , of the space group type specified by the arguments. is returned in the form of an `AffineCrystGroupOnLeft', which acts from the left on column vectors (see also the description of the `DisplaySpaceGroupGenerators' function above). The package {\Cryst} provides methods for the computation with space groups. \beginexample gap> S := SpaceGroupOnLeftBBNWZ( "P61" ); SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for s in GeneratorsOfGroup( S ) do > Print( "\n" ); PrintArray( s ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 1 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 1 ], [ 0, 0, 0, 1 ] ] gap> CrystCatRecord( S ).parameters; [ 3, 6, 1, 1, 4 ] \endexample The resulting group has an attribute `CrystCatRecord', whose component `parameters' specifies the given space-group type. \>SpaceGroupOnRightBBNWZ( , , , , ) \>SpaceGroupOnRightBBNWZ( , ) \>SpaceGroupOnRightBBNWZ( ) \>SpaceGroupOnRightBBNWZ( ) returns a representative, , of the space group type specified by the arguments. is returned in the form of an `AffineCrystGroupOnRight', which acts from the right on row vectors. The generators of are the transposed generators (in the same order) of the corresponding `SpaceGroupOnLeftBBNWZ', , specified by the same arguments. The space group is also accepted as argument. The package {\Cryst} provides methods for the computation with space groups. \beginexample gap> T := SpaceGroupOnRightBBNWZ( S ); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> for m in GeneratorsOfGroup( T ) do > Print( "\n" ); PrintArray( m ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/2, 1 ] ] [ [ 0, 1, 0, 0 ], [ -1, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/3, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1, 1 ] ] \endexample \>SpaceGroupBBNWZ( , , , , ) \>SpaceGroupBBNWZ( , ) \>SpaceGroupBBNWZ( ) calls either `SpaceGroupOnLeftBBNWZ' or `SpaceGroupOnRightBBNWZ' with the same arguments, depending on the value of the variable `CrystGroupDefaultAction'. \>FpGroupSpaceGroupBBNWZ( ) returns a finitely presented group , say, which is isomorphic to , where is expected to be a space group from the BBNWZ catalog (acting from the left or from the right). It is chosen such that there is an isomorphism from to which maps each generator of onto the corresponding generator of . This means, in particular, that the matrix generators of satisfy the relators of . If the factor group of by its translation normal subgroup is solvable, then the presentation returned is a polycyclic power commutator presentation. \beginexample gap> G := FpGroupSpaceGroupBBNWZ( S ); FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od; g1^2*g5^-1 g2^3*g5^-1 g2^-1*g1^-1*g2*g1 g3^-1*g1^-1*g3*g1*g3^2 g3^-1*g2^-1*g3*g2*g4*g3^2 g4^-1*g1^-1*g4*g1*g4^2 g4^-1*g2^-1*g4*g2*g4*g3^-1 g4^-1*g3^-1*g4*g3 g5^-1*g1^-1*g5*g1 g5^-1*g2^-1*g5*g2 g5^-1*g3^-1*g5*g3 g5^-1*g4^-1*g5*g4 gap> # Verify that the matrix generators of S satisfy the relators of G. gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) = > MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) ); true \endexample crystcat/doc/manual.six0000644001325400021140000000343315114265053014632 0ustar gaehleruserC crystcat.tex 1. The Crystallographic Groups Catalog I 1.0. crystallographic groups I 1.0. crystcat S 1.1. How to access the data of the book S 1.2. Representation of space groups S 1.3. Crystal Families F 1.3. NrCrystalFamilies F 1.3. DisplayCrystalFamily S 1.4. Crystal Systems F 1.4. NrCrystalSystems F 1.4. DisplayCrystalSystem S 1.5. Q-Classes F 1.5. NrQClassesCrystalSystem I 1.5. Hermann-Mauguin symbol F 1.5. DisplayQClass F 1.5. DisplayQClass F 1.5. DisplayQClass F 1.5. FpGroupQClass F 1.5. FpGroupQClass F 1.5. FpGroupQClass F 1.5. PcGroupQClass F 1.5. PcGroupQClass F 1.5. PcGroupQClass F 1.5. CharTableQClass F 1.5. CharTableQClass F 1.5. CharTableQClass S 1.6. Z-Classes F 1.6. NrZClassesQClass F 1.6. NrZClassesQClass F 1.6. NrZClassesQClass F 1.6. DisplayZClass F 1.6. DisplayZClass F 1.6. DisplayZClass F 1.6. MatGroupZClass F 1.6. MatGroupZClass F 1.6. MatGroupZClass F 1.6. NormalizerZClass F 1.6. NormalizerZClass F 1.6. NormalizerZClass S 1.7. Dade groups F 1.7. NrDadeGroups F 1.7. DadeGroup F 1.7. DadeGroupNumbersZClass F 1.7. DadeGroupNumbersZClass F 1.7. DadeGroupNumbersZClass F 1.7. ZClassRepsDadeGroup F 1.7. ZClassRepsDadeGroup F 1.7. ZClassRepsDadeGroup S 1.8. Space groups and space group types F 1.8. NrSpaceGroupTypesZClass F 1.8. NrSpaceGroupTypesZClass F 1.8. NrSpaceGroupTypesZClass F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupGenerators F 1.8. DisplaySpaceGroupGenerators F 1.8. DisplaySpaceGroupGenerators F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. FpGroupSpaceGroupBBNWZ crystcat/doc/manual.lab0000644001325400021140000000625415114265053014571 0ustar gaehleruser\makelabel{crystcat:The Crystallographic Groups Catalog}{1} \makelabel{crystcat:How to access the data of the book}{1.1} \makelabel{crystcat:Representation of space groups}{1.2} \makelabel{crystcat:Crystal Families}{1.3} \makelabel{crystcat:NrCrystalFamilies}{1.3.1} \makelabel{crystcat:DisplayCrystalFamily}{1.3.2} \makelabel{crystcat:Crystal Systems}{1.4} \makelabel{crystcat:NrCrystalSystems}{1.4.1} \makelabel{crystcat:DisplayCrystalSystem}{1.4.2} \makelabel{crystcat:Q-Classes}{1.5} \makelabel{crystcat:NrQClassesCrystalSystem}{1.5.1} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:Z-Classes}{1.6} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:Dade groups}{1.7} \makelabel{crystcat:NrDadeGroups}{1.7.1} \makelabel{crystcat:DadeGroup}{1.7.2} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:Space groups and space group types}{1.8} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:FpGroupSpaceGroupBBNWZ}{1.8.7} \makelabel{crystcat:Bibliography}{} \setcitlab {BBNWZ78}{BBNWZ78} \setcitlab {Hah95}{Hah95} \setcitlab {NPW81}{NPW81} \makelabel{crystcat:Index}{} crystcat/doc/manual.toc0000644001325400021140000000074115114265053014613 0ustar gaehleruser\chapcontents {1}{The Crystallographic Groups Catalog}{3} \seccontents {1.1}{How to access the data of the book} {3} \seccontents {1.2}{Representation of space groups} {4} \seccontents {1.3}{Crystal Families} {6} \seccontents {1.4}{Crystal Systems} {6} \seccontents {1.5}{Q-Classes} {7} \seccontents {1.6}{Z-Classes} {9} \seccontents {1.7}{Dade groups} {12} \seccontents {1.8}{Space groups and space group types} {13} \chapcontents {}{Bibliography}{18} \chapcontents {}{Index}{19} crystcat/doc/manual.bbl0000644001325400021140000000127013232361444014563 0ustar gaehleruser\begin{thebibliography}{BBNWZ78} \bibitem[BBNWZ78]{BBNWZ78} H. Brown, R. B{\accent127 u}low, J. Neub{\accent127 u}ser, H. Wondratschek, and H. Zassenhaus. \newblock {\em Crystallographic Groups of Four-Dimensional Space}. \newblock John Wiley, New York, 1978. \bibitem[Hah95]{Hah95} T. Hahn, editor. \newblock {\em International Tables for Crystallography, Volume A, Space-group Symmetry, 4th Edition}. \newblock Kluwer, Dordrecht, 1995. \bibitem[NPW81]{NPW81} J. Neub{\accent127 u}ser, W. Plesken, and H. Wondratschek. \newblock An emendatory discursion on defining crystal systems. \newblock {\em Match}, 10:77--96, 1981. \end{thebibliography} crystcat/doc/make_doc0000755001325400021140000000120615061747115014321 0ustar gaehleruser#!/bin/sh set -e echo "TeXing documentation" # delete old stuff to avoid spurious or "hidden errors" caused by their presence rm -f manual.{aux,bbl,blg,dvi,idx,ilg,ind,lab,log,pdf,ps,six,toc} # TeX the manual tex manual # ... and build its bibliography #bibtex manual # TeX the manual again to incorporate the ToC tex manual # ... and build the index ../../../doc/manualindex manual # Finally TeX the manual again to get cross-references right tex manual # Create PDF version pdftex manual pdftex manual # The HTML version of the manual mkdir -p ../htm echo "Creating HTML documentation" ../../../etc/convert.pl -i -u -c -n crystcat . ../htm crystcat/Changelog0000644001325400021140000000144315114263666013704 0ustar gaehleruserVersion 1.1.11 - adjusted tests to new GAP version Version 1.1.10 - Improved documentation conversion and formatting Version 1.1.9: - Compatibility fixes for GAP 4.11. Version 1.1.8: - PackageInfo record corrected. Version 1.1.7: - Testfile with manual examples added. - Corrected premature warning about RefinedPcGroup. Version 1.1.6: - Fixed file permissions. Version 1.1.5: - Minor update. Version 1.1.4: - Adapted to GAP 4.5. Version 1.1.3: - Address change. Version 1.1.2: - File manual.toc added. Version 1.1.1: - Several manual examples fixed. - Support for new package loading mechanism in GAP 4.4 Version 1.1: - Fixes for several problems with trivial groups. - Corrected the list of enantiomorphic pairs of space groups of dimension 4. crystcat/init.g0000644001325400021140000000056113232361444013175 0ustar gaehleruser############################################################################# ## #W init.gd GAP library Volkmar Felsch ## Franz Gaehler ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ReadPackage( "crystcat", "lib/crystcat.gd" ); crystcat/read.g0000644001325400021140000000060113232361444013140 0ustar gaehleruser############################################################################# ## #W read.gd GAP library Volkmar Felsch ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ReadPackage( "crystcat", "grp/crystcat.grp" ); ReadPackage( "crystcat", "lib/crystcat.gi" ); ReadPackage( "crystcat", "lib/normalizer.gi" ); crystcat/lib/0000755001325400021140000000000015114265054012627 5ustar gaehlerusercrystcat/lib/normalizer.gi0000644001325400021140000000157013473201665015341 0ustar gaehleruser############################################################################# ## #W crystcat.grp GAP library Franz G"ahler ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## InstallMethod( NormalizerInGLnZ, "for PointGroups of space groups from the cryst. groups catalogue", true, [ IsPointGroup and IsCyclotomicMatrixGroup ], 0, function( P ) local S, p, N, s, gen; S := AffineCrystGroupOfPointGroup( P ); if not HasCrystCatRecord( S ) then TryNextMethod(); fi; p := CrystCatRecord( S ).parameters; N := NormalizerZClass( p[1], p[2], p[3], p[4] ); s := Size( N ); if IsAffineCrystGroupOnRight( S ) then gen := List( GeneratorsOfGroup( N ), TransposedMat ); N := GroupByGenerators( gen, One( N ) ); SetSize( N, s ); fi; return N; end ); crystcat/lib/crystcat.gd0000644001325400021140000005255013232361444015005 0ustar gaehleruser############################################################################# ## #W crystcat.gd GAP library Volkmar Felsch ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains the declarations for fthe crystallographic groups ## library. ## ############################################################################# ## ## Some global variables. ## ############################################################################# ## #A CrystCatRecord( ) ## DeclareAttribute( "CrystCatRecord", IsGroup, "mutable" ); ############################################################################# ## #F CR_CharTableQClass( ) ## ## 'CR_CharTableQClass' returns the character table of a representative ## group of the specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'CharTableQClass'. ## DeclareGlobalFunction("CR_CharTableQClass"); ############################################################################# ## #F CR_DisplayQClass( ) ## ## 'CR_DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayQClass'. ## DeclareGlobalFunction("CR_DisplayQClass"); ############################################################################# ## #F CR_DisplaySpaceGroupGenerators( ) ## ## 'CR_DisplaySpaceGroupGenerators' displays the non-translation generators ## of the space group specified by the given parameters. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupGenerators'. ## DeclareGlobalFunction("CR_DisplaySpaceGroupGenerators"); ############################################################################# ## #F CR_DisplaySpaceGroupType( ) ## ## 'CR_DisplaySpaceGroupType' displays for the specified space-group type ## the following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupType'. ## DeclareGlobalFunction("CR_DisplaySpaceGroupType"); ############################################################################# ## #F CR_DisplayZClass( ) ## ## 'CR_DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayZClass'. ## DeclareGlobalFunction("CR_DisplayZClass"); ############################################################################# ## #F CR_FpGroupQClass( ) ## ## 'CR_FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'FpGroupQClass'. ## DeclareGlobalFunction("CR_FpGroupQClass"); ############################################################################# ## #F CR_GeneratorsSpaceGroup( ) ## ## 'CR_GeneratorsSpaceGroup' returns the non-translation generators of the ## space group specified by the given parameters. ## DeclareGlobalFunction("CR_GeneratorsSpaceGroup"); ############################################################################# ## #F CR_GeneratorsZClass( , ) ## ## 'CR_GeneratorsZClass' returns a set of matrix generators for a ## representative of the specified Z-class. These generators are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## DeclareGlobalFunction("CR_GeneratorsZClass"); ############################################################################# ## #F CR_InitializeRelators( ) ## ## 'CR_InitializeRelators' initializes the relator words list of the ## crystallographic goups catalogue. ## DeclareGlobalFunction("CR_InitializeRelators"); ############################################################################# ## #F CR_MatGroupZClass( ) ## ## 'CR_MatGroupZClass' returns a representative group of the specified ## Z-class. The generators of the resulting matrix group are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'MatGroupZClass'. ## DeclareGlobalFunction("CR_MatGroupZClass"); ############################################################################# ## #F CR_Name( , , ) ## ## 'CR_Name' returns the "name" of the specified object which may be a ## Z-class representative, a Q-class representative or its character table, ## or a space group. The resulting name is a string which consists of the ## given string followed by the relevant parameters which are separated by ## commas and enclosed in parentheses. ## DeclareGlobalFunction("CR_Name"); ############################################################################# ## #F CR_NormalizerZClass( ) ## ## 'CR_NormalizerZClass' returns the normalizer in GL(dim,Z) of the ## specified Z-class representative matrix group. If the order of the ## normalizer is finite, then the group record components "crZClass" and ## "crConjugator" will be set properly. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'NormalizerZClass'. ## DeclareGlobalFunction("CR_NormalizerZClass"); ############################################################################# ## #F CR_Parameters( [ , , , , ], nparms) #F CR_Parameters( [ , , , ], nparms ) #F CR_Parameters( [ , , ], nparms ) #F CR_Parameters( [ , ], nparms ) #F CR_Parameters( [ ], nparms ) ## ## Valid argument lists are ## ## [ dim, sys, qcl, zcl, sgt ], 5 ## [ dim, sys, qcl, zcl ], 4 ## [ dim, sys, qcl ], 3 ## [ 3, it ], n ## [ 2, it ], n ## [ symbol ], n ## ## where ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## it = corresponding number in the International Tables (only for ## dimensions 2 and 3), ## n = 3 or 4 or 5, ## symbol = Hermann-Mauguin symbol (only for dimensions 2 or 3). ## ## 'CR_Parameters' checks the given arguments to be consistent and in range, ## and returns them in form of an "internal CR parameter list" ## ## [ dim, sys, qcl, zcl, sgt ] ## ## which contains the "local parameters" of the respective object. The ## following "global parameters" of the same object are used as local ## variables. ## ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## DeclareGlobalFunction("CR_Parameters"); ############################################################################# ## #F CR_PcGroupQClass(,) ## ## 'CR_PcGroupQClass' returns a pc group isomorphic to the groups in the ## specified Q-class. If = true, then a warning will be displayed ## in case that the given presentation is not a prime order pcgs. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'PcGroupQClass'. ## DeclareGlobalFunction("CR_PcGroupQClass"); ############################################################################# ## #F CR_SpaceGroup( ) ## ## 'CR_SpaceGroup' returns a representative matrix group (of dimension ## dim+1) of the specified space-group type. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'SpaceGroup'. ## ## In particular, the function expects that, whenever the order of the point ## group is not a multiple of 60, the given point group presentation is a ## polycyclic power commutator presentation containing a list of n power ## relators and n*(n-1)/2 commutator relators in some prescribed order, ## where n is the number of its generators. ## DeclareGlobalFunction("CR_SpaceGroup"); ############################################################################# ## #F CR_ZClassRepsDadeGroup( , ) ## ## 'CR_ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'ZClassRepsDadeGroup'. ## DeclareGlobalFunction("CR_ZClassRepsDadeGroup"); ############################################################################# ## #F CharTableQClass( , , ) #F CharTableQClass( , ) #F CharTableQClass( ) ## ## 'CharTableQClass' returns the character table of a representative group ## of the specified Q-class. ## DeclareGlobalFunction("CharTableQClass"); ############################################################################# ## #F DadeGroup( , ) ## ## 'DadeGroup' returns the n-th Dade group of dimension dim. ## DeclareGlobalFunction("DadeGroup"); ############################################################################# ## #F DadeGroupNumbersZClass( , , , ) #F DadeGroupNumbersZClass( , ) #F DadeGroupNumbersZClass( ) ## ## 'DadeGroupNumbersZClass' returns a list of the numbers of those Dade ## groups which contain groups from the given Z-class. ## DeclareGlobalFunction("DadeGroupNumbersZClass"); ############################################################################# ## #F DisplayCrystalFamily( , ) ## ## 'DisplayCrystalFamily' displays for the specified crystal family the ## following information: ## - the family name, ## - the number of parameters, ## - the common rational decomposition pattern, ## - the common real decomposition pattern, ## - the number of crystal systems in the family, and ## - the number of Bravais flocks in the family. ## DeclareGlobalFunction("DisplayCrystalFamily"); ############################################################################# ## #F DisplayCrystalSystem( , ) ## ## 'DisplayCrystalSystem' displays for the specified crystal system the ## following information: ## - the number of Q-classes in the crystal system, and ## - the triple (dim, sys, qcl) of parameters of the Q-class which is the ## holohedry of the crystal system. ## DeclareGlobalFunction("DisplayCrystalSystem"); ############################################################################# ## #F DisplayQClass( , , ) #F DisplayQClass( , ) #F DisplayQClass( ) ## ## 'DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## DeclareGlobalFunction("DisplayQClass"); ############################################################################# ## #F DisplaySpaceGroupGenerators( , ,,, ) #F DisplaySpaceGroupGenerators( , ) #F DisplaySpaceGroupGenerators( ) ## ## 'DisplaySpaceGroupGenerators' displays the non-translation generators of ## the space group specified by the given parameters. ## DeclareGlobalFunction("DisplaySpaceGroupGenerators"); ############################################################################# ## #F DisplaySpaceGroupType( , , , , ) #F DisplaySpaceGroupType( , ) #F DisplaySpaceGroupType( ) ## ## 'DisplaySpaceGroupType' displays for the specified space-group type the ## following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## DeclareGlobalFunction("DisplaySpaceGroupType"); ############################################################################# ## #F DisplayZClass( , , , ) #F DisplayZClass( , ) #F DisplayZClass( ) ## ## 'DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## DeclareGlobalFunction("DisplayZClass"); ############################################################################# ## #F FpGroupQClass( , , ) #F FpGroupQClass( , ) #F FpGroupQClass( ) ## ## 'FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## DeclareGlobalFunction("FpGroupQClass"); ############################################################################# ## #F MatGroupZClass( , , , ) #F MatGroupZClass( , ) #F MatGroupZClass( ) ## ## 'MatGroupZClass' returns a representative group of the specified Z-class. ## The generators of the resulting matrix group are chosen such that they ## satisfy the defining relators which are returned by the ## 'FpGroupQClass' function for the representative of the corresponding ## Q-class. ## DeclareGlobalFunction("MatGroupZClass"); ############################################################################# ## #F NormalizerZClass( , , , ) #F NormalizerZClass( , ) #F NormalizerZClass( ) ## ## 'NormalizerZClass' returns the normalizer in GL(dim,Z) of the specified ## Z-class representative matrix group. If the order of the normalizer is ## finite, then the group record components "crZClass" and "crConjugator" ## will be set properly. ## DeclareGlobalFunction("NormalizerZClass"); ############################################################################# ## #F NrCrystalFamilies( ) ## ## 'NrCrystalFamilies' returns the number of crystal families of the given ## dimension. ## DeclareGlobalFunction("NrCrystalFamilies"); ############################################################################# ## #F NrCrystalSystems( ) ## ## 'NrCrystalSystems' returns the number of crystal systems of the given ## dimension. ## DeclareGlobalFunction("NrCrystalSystems"); ############################################################################# ## #F NrDadeGroups( ) ## ## 'NrDadeGroups' returns the number of Dade groups of the given dimension. ## DeclareGlobalFunction("NrDadeGroups"); ############################################################################# ## #F NrQClassesCrystalSystem( , ) ## ## 'NrQClassesCrystalSystem' returns the number of Q-classes in the given ## crystal system. ## DeclareGlobalFunction("NrQClassesCrystalSystem"); ############################################################################# ## #F NrSpaceGroupTypesZClass( , , , ) #F NrSpaceGroupTypesZClass( , ) #F NrSpaceGroupTypesZClass( ) ## ## 'NrSpaceGroupTypesZClass' returns the number of space-group types in the ## given Z-class. ## DeclareGlobalFunction("NrSpaceGroupTypesZClass"); ############################################################################# ## #F NrZClassesQClass( , , ) #F NrZClassesQClass( , ) #F NrZClassesQClass( ) ## ## 'NrZClassesQClass' returns the number of Z-classes in the given Q-class. ## DeclareGlobalFunction("NrZClassesQClass"); ############################################################################# ## #F PcGroupQClass( , , ) #F PcGroupQClass( , ) #F PcGroupQClass( ) ## ## 'PcGroupQClass' returns an ag group isomorphic to the groups in the ## specified Q-class. ## DeclareGlobalFunction("PcGroupQClass"); ############################################################################# ## #F SpaceGroupOnLeftBBNWZ( , , , , ) #F SpaceGroupOnLeftBBNWZ( , ) #F SpaceGroupOnLeftBBNWZ( ) ## ## 'SpaceGroupOnLeftBBNWZ' returns a representative matrix group ## (of dimension dim+1) of the specified space-group type. ## DeclareGlobalFunction("SpaceGroupOnLeftBBNWZ"); ############################################################################# ## #F SpaceGroupOnRightBBNWZ( , , , , ) #F SpaceGroupOnRightBBNWZ( , ) #F SpaceGroupOnRightBBNWZ( ) #F SpaceGroupOnRightBBNWZ( S ) ## ## 'SpaceGroupOnRightBBNWZ' returns the transposed matrix group of ## the given or specified space group. ## ## The reason is the following. Each space group is presented in the form of ## a group of augmented matrices (of dimension dim+1) of the following form: ## ## [ M | t ] ## [-----+---] Here, M is the `linear part' and ## [ 0 | 1 ] t is the `translational part'. ## ## Therefore, the natural action of a space group in this form is from the ## left. This collides with the convention in GAP to have all actions from ## the right. This function does the necessary conversions. In fact, it does ## not only transpose the matrices, but it also adapts the relators given in ## CrystCatRecord(S).fpGroup to the new generators. ## DeclareGlobalFunction("SpaceGroupOnRightBBNWZ"); ############################################################################# ## #F SpaceGroupBBNWZ( , , , , ) . #F SpaceGroupBBNWZ( , ) . . . . . . . . . . . . . . #F SpaceGroupBBNWZ( ) . . . . . . . . . . . ## ## Calls either `SpaceGroupOnRightBBNWZ' or `SpaceGroupOnLeftBBNWZ' ## depending on the value of `CrystGroupDefaultAction' ## DeclareGlobalFunction( "SpaceGroupBBNWZ" ); ############################################################################# ## #F ZClassRepsDadeGroup( , , , , ) #F ZClassRepsDadeGroup( , , ) #F ZClassRepsDadeGroup( , ) ## ## 'ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## DeclareGlobalFunction("ZClassRepsDadeGroup"); ############################################################################# ## #F FpGroupSpaceGroupBBNWZ( ) . . FpGroup isomorphic to BBNWZ space group ## DeclareGlobalFunction( "FpGroupSpaceGroupBBNWZ" ); ############################################################################# ## #E cryst.gd . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here crystcat/lib/crystcat.gi0000644001325400021140000021127613236341124015011 0ustar gaehleruser############################################################################# ## #A crystcat.gi GAP group library Volkmar Felsch ## #Y Copyright (C) 1994, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions that allow to access most of the data which ## are listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## ## For each of the dimensions 2, 3, and 4, the tables of the book are ## arranged in the following hierarchical format: ## dimension, ## crystal family, ## crystal system, ## Q-class (geometric crystal class), ## Z-class (arithmetic crystal class), ## space-group type. ## ## The following conventions for local variables are used throughout in all ## functions of this library. ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## ## For most of the functions in this library there are two versions given, ## a public version and an internal version which are distinguished by the ## prefix "CR_" in the name of the internal version and by different ## parameter lists. The reason for that distinction is that in the public ## functions the arguments are checked for being in range whereas no ## argument checking is done in the internal functions. ## ############################################################################# ## #M CR_CharTableQClass( ) . . . char table of Q-class rep ## ## 'CR_CharTableQClass' returns the character table of a representative ## group of the specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'CharTableQClass'. ## InstallGlobalFunction( CR_CharTableQClass, function ( param ) local CR, dim, F, fgens, G, name, param1, qcl, sub, sys, table; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; if dim = 4 and sys = 31 and 3 <= qcl and qcl <= 7 then # The given group is not solvable. Compute its table from a # permutation group isomorphic to the f.p. group. F := CR_FpGroupQClass( param ); fgens := GeneratorsOfGroup( F ); if qcl = 3 then # group 60.13 ($A_5$) sub := Subgroup( F, fgens{ [ 2 .. 4 ] } ); elif qcl = 4 or qcl = 5 then # group 120.1 ($S_5$) sub := Subgroup( F, fgens{ [ 2, 3 ] } ); elif qcl = 6 then # group 120.2 ($2 \times A_5$) sub := Subgroup( F, fgens{ [ 2 .. 4 ] } ); elif qcl = 7 then # group 240.1 ($2 \times S_5$) sub := Subgroup( F, [ fgens[3], fgens[2]^2 ] ); fi; param1 := [ dim, sys, qcl, 1 ]; G := CR_MatGroupZClass( param1 ); SetName( G, CR_Name( "MatGroupZClass", param1, 4 ) ); else # The given group is solvable. Construct an isomorphic ag group # with a prime order pcgs and compute the table of that group. G := CR_PcGroupQClass( param, false ); SetName( G, CR_Name( "FpGroupQClass", param, 3 ) ); fi; table := CharacterTable( G ); name := CR_Name( "CharTableQClass", param, 3 ); SetName( table, name ); SetIdentifier( table, name ); return table; end ); ############################################################################# ## #M CR_DisplayQClass( ) . . . display Q-class invariants ## ## 'CR_DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayQClass'. ## InstallGlobalFunction( CR_DisplayQClass, function ( param ) local CR, dim, isotext, ord, pt1, pt2, pt3, q, qcl, snum, sys, text, type, zfirst, zlast, znum; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; type := QuoInt( CR.codedIsomorphismTypeQClass[q], 100 ); isotext := RemInt( CR.codedIsomorphismTypeQClass[q], 100 ); zfirst := CR.nullZClass[q] + 1; zlast := CR.nullZClass[q+1]; znum := zlast - zfirst + 1; snum := CR.nullSpaceGroup[zlast+1] - CR.nullSpaceGroup[zfirst]; pt1 := CR.codedDecompositionQClass[q]; if pt1 > 4 then pt2 := QuoInt( pt1, 10 ); pt3 := RemInt( pt1, 10 ); pt1 := 1; fi; text := CR_TextStrings.QClass; # Print the Q-class type. if IsBound( CR.splittingQClass ) and CR.splittingQClass[q] then Print( text[8] ); else Print( text[7] ); fi; # Print "H" if the Q-class is a holohedry. if CR.hQClass[q] then Print( text[18] ); fi; # Print the Q-class parameters. Print( text[16], dim, text[15] ); Print( sys, text[15], qcl, text[9] ); # Print the order of the Q-class representative. Print( ord ); # Print the isomorphism type of the Q-class representative. Print( text[10], ord, text[17], type ); if isotext <> 0 then Print( text[20], CR_TextStrings.isomorphismType[isotext] ); fi; # Print the Q-constituents. Print( text[21], text[pt1] ); if pt1 = 1 then Print( CR_TextStrings.QConstituents[pt2], text[pt3] ); fi; # Print the number of Z-classes in the given Q-class. pt1 := 11; if znum > 1 then pt1 := 12; fi; Print( znum, text[pt1] ); # Print the number of space groups in the given Q-class. pt1 := 13; if snum > 1 then pt1 := 14; fi; Print( text[19], snum, text[pt1] ); Print( "\n" ); end ); ############################################################################# ## #M CR_DisplaySpaceGroupGenerators( ) . . . display space #M . . . . . . . . . . . . . . . . . . . . . . . . . . . . group generators ## ## 'CR_DisplaySpaceGroupGenerators' displays the non-translation generators ## of the space group specified by the given parameters. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupGenerators'. ## InstallGlobalFunction( CR_DisplaySpaceGroupGenerators, function ( param ) local CR, dim, G, gen, gens, text; # Get some arguments. dim := param[1]; CR := CrystGroupsCatalogue[dim]; text := CR_TextStrings.spaceGroup; # Get the non-translation generators. gens := CR_GeneratorsSpaceGroup( param ); # Print a heading. Print( text[13], CR_Name( "SpaceGroupOnLeftBBNWZ", param, 5 ), text[14] ); # Print the non-translation generators. for gen in gens do PrintArray( gen ); Print( "\n" ); od; end ); ############################################################################# ## #M CR_DisplaySpaceGroupType( ) . . . . . . . . . display #M . . . . . . . . . . . . . . . . . . . . . . . . . space group invariants ## ## 'CR_DisplaySpaceGroupType' displays for the specified space-group type ## the following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupType'. ## InstallGlobalFunction( CR_DisplaySpaceGroupType, function ( param ) local CR, dim, it1, it2, obt, q, qcl, sgt, sys, t, text, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; sgt := param[5]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; t := CR.nullSpaceGroup[z] + sgt; text := CR_TextStrings.spaceGroup; # Print the space-group type. if dim > 2 and CR.splittingSpaceGroupType[t] then Print( text[2] ); else Print( text[1] ); fi; # Print the space group parameters. Print( text[6], dim, text[7] ); Print( sys, text[7], qcl, text[7], zcl, text[7], sgt, text [12] ); # Print the associated number in the International Tables. if dim <= 3 then it1 := t; it2 := 0; if dim = 3 then it1 := CR.internatTableSpaceGroupType[t]; if it1 > 230 then it2 := QuoInt( it1, 1000 ); it1 := RemInt( it1, 1000 ); fi; fi; Print( text[3], it1, text[8], CR.HermannMauguinSymbol[it1] ); if it2 = 0 then Print( text[10] ); else Print( text[9], it2, text[8], CR.HermannMauguinSymbol[it2] ); Print( text[11] ); fi; else Print( text[10] ); fi; # Print the orbit size. obt := 1; if sgt > 1 then obt := CR.orbitLengthSpaceGroup[t-z]; fi; Print( text[5], obt ); # Print a note, if the space group is fixed-point-free. if CR.fixedPointFreeSpaceGroup[t] then Print( text[4] ); fi; Print( "\n" ); end ); ############################################################################# ## #M CR_DisplayZClass( ) . . . display Z-class invariants ## ## 'CR_DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayZClass'. ## InstallGlobalFunction( CR_DisplayZClass, function ( param ) local code, cohom, CR, decomp, dim, fam, q, qcl, sgt, snum, sys, t, text, type, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; sgt := param[5]; fam := CR.familyCrystalSystem[sys]; code := CR.codedPropertiesZClass[z]; decomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); type := RemInt( code, 10 ); cohom := QuoInt( code, 10 ); snum := CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z]; text := CR_TextStrings.ZClass; # Print the Z-class type. if IsBound( CR.splittingZClass ) and CR.splittingZClass[z] then Print( text[6] ); else Print( text[5] ); fi; # Print "B" if the Z-class is a Bravais Z-class. if CR.bZClass[z] then Print( text[15] ); fi; # Print the Z-class parameters. Print( text[14], dim, text[13] ); Print( sys, text[13], qcl, text[13], zcl, text[12] ); # Print the Hermann-Mauguin symbol. if dim <= 3 then if sgt = 0 then sgt := 1; fi; t := CR.nullSpaceGroup[z] + sgt; if dim = 3 then t := CR.internatTableSpaceGroupType[t]; fi; if t > 230 then t := QuoInt( t, 1000 ); fi; Print( text[11], CR.HermannMauguinSymbol[t], text[12] ); fi; # Print family number and Bravais type. Print( text[7], CR_TextStrings.roman[fam], text[16], CR_TextStrings.roman[type] ); Print( text[decomp] ); # Print the number of space groups in the given Z-class. if snum = 1 then Print( text[17], snum, text[8] ); else Print( text[17], snum, text[9] ); fi; # Print the order of the cohomology group. Print( text[10], cohom, "\n" ); end ); ############################################################################# ## #M CR_FpGroupQClass( ) . . . . Q-class rep as f.p. group ## ## 'CR_FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'FpGroupQClass'. ## InstallGlobalFunction( CR_FpGroupQClass, function ( param ) local CR, cr, crgens, crrels, dim, F, G, i, list, ngens, nrels, num, ord, q, qcl, rels, sys; dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; if ord = 1 then F := FreeGroup( 0 ); rels := [ ]; else ngens := RemInt( CR.codedPresentationQClass[q], 10 ); crgens := CR.generatorsQClass{ [ 8 - ngens .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); F := FreeGroup( ngens ); if RemInt( ord, 60 ) = 0 then list := [ 1 .. nrels ]; else list := Reversed( Concatenation( [ ngens + 1 .. nrels ], [ 1 .. ngens ] ) ); fi; rels := List( list, i -> MappedWord( crrels[i], crgens, GeneratorsOfGroup( F ) ) ); fi; G := F / rels; # Save the Q-class parameters in the group record. SetName( G, CR_Name( "FpGroupQClass", param, 3 ) ); SetSize( G, ord ); cr := rec( ); cr.parameters := [ dim, sys, qcl ]; SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_GeneratorsSpaceGroup( ) . . space group generators ## ## 'CR_GeneratorsSpaceGroup' returns the non-translation generators of the ## space group specified by the given parameters. ## InstallGlobalFunction( CR_GeneratorsSpaceGroup, function ( param ) local code, column, columnGeneratorSpaceGroup, CR, dim, dim1, gens, i, j, mat, modul, ngens, num, q, qcl, quot, sgt, sys, t, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; sgt := param[5]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; t := CR.nullSpaceGroup[z] + sgt; dim1 := dim + 1; modul := CR.modulSp; columnGeneratorSpaceGroup := CR.columnGeneratorSpaceGroup; code := 0; if t > CR.nullSpaceGroup[z] + 1 then code := CR.codedGeneratorsSpaceGroup[t-z]; fi; gens := CR_GeneratorsZClass( dim, z ); ngens := Length( gens ); for i in [ 1 .. ngens ] do mat := gens[i]; num := RemInt( code, modul ) + 1; code := QuoInt( code, modul ); column := columnGeneratorSpaceGroup[num]; quot := column[dim1]; for j in [ 1 .. dim ] do mat[j][dim1] := column[j] / quot; od; mat[dim1] := ListWithIdenticalEntries( dim1, 0 ); mat[dim1][dim1] := 1; od; return gens; end ); ############################################################################# ## #M CR_GeneratorsZClass( , ) . . . . . . . . matrix generators ## ## 'CR_GeneratorsZClass' returns a set of matrix generators for a ## representative of the specified Z-class. These generators are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## InstallGlobalFunction( CR_GeneratorsZClass, function ( dim, z ) local anz, code, codedGeneratorZClass, CR, gens, i, j, k, mat, modul, n, rowGeneratorZClass; CR := CrystGroupsCatalogue[dim]; modul := CR.modulZ; rowGeneratorZClass := CR.rowGeneratorZClass; codedGeneratorZClass := CR.codedGeneratorZClass; n := CR.nullGeneratorsZClass[z]; anz := CR.nullGeneratorsZClass[z+1] - n; gens := ListWithIdenticalEntries( anz, 0 ); for i in [ 1 .. anz ] do mat := ListWithIdenticalEntries( dim, 0 ); n := n + 1; code := CR.codedGeneratorZClass[n]; for j in [ 1 .. dim ] do k := RemInt( code, modul ) + 1; code := QuoInt( code, modul ); mat[j] := StructuralCopy( rowGeneratorZClass[k] ); od; gens[i] := mat; od; return gens; end ); ############################################################################# ## #M CR_InitializeRelators( ) . . . . . initialize CR relators ## ## 'CR_InitializeRelators' initializes the relator words list of the ## crystallographic goups catalogue. ## InstallGlobalFunction( CR_InitializeRelators, function ( CR ) local a, b, c, d, e, F, f, g, gens, rels; # Define the abstract generators. F := FreeGroup( "g", "f", "e", "d", "c", "b", "a" ); g := F.1; f := F.2; e := F.3; d := F.4; c := F.5; b := F.6; a := F.7; gens := [ g, f, e, d, c, b, a ]; # Define the relator words. rels := [ a, a^2, a^3, a^4, a^5, a^6, a^8, a^10, a^12, b^2, b^2/a, b^2/a^2, b^2/a^3, b^2/a^6, b^2/a^9, b^3, b^4, b^5, b^6, b^10, b^12, c^2, c^2/a^6, c^3, c^4, c^6, c^6/a^2, d^2, d^4, d^5, d^6, d^6/b^2, d^10, e^2, e^3, e^6, f^2, f^6, g^2, Comm(a,b), Comm(a,b)/a, Comm(a,b)/a^2, Comm(a,b)/a^3, Comm(a,b)/a^4, Comm(a,b)/a^6, Comm(a,b)/a^8, Comm(a,b)/a^10, Comm(a,b)/b^4, Comm(a,b)/b^8, Comm(a,b^2)/b^3, Comm(a,b^2)/b^6, Comm(a,b^3)/b^2, Comm(a,b^3)/b^4, Comm(a,b^4)/b, Comm(a,b^4)/b^2, Comm(a,b^5), Comm(a,b^6)/b^8, Comm(a,b^7)/b^6, Comm(a,b^8)/b^4, Comm(a,b^9)/b^2, Comm(a,c), Comm(a,c)/(b*a), Comm(a,c)/(b*a^2), Comm(a,c)/(b*a^4), Comm(a,c)/(b*a^6), Comm(a,c)/(b^2*a), Comm(a,c)/(b^2*a^2), Comm(a,c)/(b^5*a^2), Comm(a,c)/(b^5*a^5), Comm(a,c)/(b^8*a^2), Comm(a,c)/(c^3*b^3*a), Comm(a,c)/(c^5*b*a), Comm(a,c)/a, Comm(a,c)/a^2, Comm(a,c)/a^4, Comm(a,c)/a^6, Comm(a,c)/a^10, Comm(a,c)/b, Comm(a,c)/b^2, Comm(a,c^2)/(b*a), Comm(a,c^2)/(b^2*a^2), Comm(a,c^2)/(c^3*b^2*a^3), Comm(a,c^2)/(c^5*b^2*a^3), Comm(a,c^3)/(c^5*a), Comm(a,c^3)/(c^5*b^4*a^3), Comm(a,c^4)/(c*b*a^3), Comm(a,c^4)/(c*b^2*a^3), Comm(a,c^4)/(c^3*b^2*a^3), Comm(a,c^5)/(b*a^2), Comm(a,c^5)/(c*b^3*a^3), Comm(a,c^5)/(c^4*b^6), Comm(a,d), Comm(a,d)/(b*a), Comm(a,d)/(b*a^4), Comm(a,d)/(c*a), Comm(a,d)/(c*b*a), Comm(a,d)/(c*b*a^2), Comm(a,d)/(c*b^2*a), Comm(a,d)/(c*b^3), Comm(a,d)/(d^2*c*b*a), Comm(a,d)/a, Comm(a,d)/a^2, Comm(a,d)/a^10, Comm(a,d)/b, Comm(a,d)/b^2, Comm(a,d^2)/(d^3*b*a), Comm(a,d^2)/(d^8*b*a), Comm(a,d^3)/(d^2*b*a), Comm(a,d^4)/(d^3*c), Comm(a,d^4)/(d^8*c), Comm(a,d^5), Comm(a,d^6)/(d^2*c*b*a), Comm(a,d^7)/(d^8*b*a), Comm(a,d^8)/(d^2*b*a), Comm(a,d^9)/(d^8*c), Comm(a,e), Comm(a,e)/(c*b*a), Comm(a,e)/(d*b*a), Comm(a,e)/(d*b*a^2), Comm(a,e)/(d*c*a), Comm(a,e)/(d^3*c*b^2*a), Comm(a,e)/d^3, Comm(a,f), Comm(a,f)/(c*a), Comm(a,f)/(d*c*a), Comm(a,f)/a^2, Comm(a,f)/b, Comm(a,g), Comm(b,c), Comm(b,c)/(b*a), Comm(b,c)/(b*a^2), Comm(b,c)/(b*a^3), Comm(b,c)/(b^2*a), Comm(b,c)/(b^2*a^2), Comm(b,c)/(b^2*a^4), Comm(b,c)/(b^4*a), Comm(b,c)/(b^4*a^2), Comm(b,c)/(b^5*a), Comm(b,c)/(c^3*b^2*a), Comm(b,c)/(c^4*b*a^2), Comm(b,c)/(c^4*b^4*a^2), Comm(b,c)/a, Comm(b,c)/a^2, Comm(b,c)/a^3, Comm(b,c)/a^4, Comm(b,c)/b, Comm(b,c)/b^2, Comm(b,c)/b^4, Comm(b,c)/b^10, Comm(b,c^2)/(c*a), Comm(b,c^2)/(c^3*b^2*a^3), Comm(b,c^2)/(c^3*b^8*a), Comm(b,c^2)/a, Comm(b,c^3)/(c^2*b^2*a^2), Comm(b,c^3)/(c^4*b^2*a^2), Comm(b,c^3)/(c^4*b^4*a^2), Comm(b,c^4)/(c^3*b^3*a^3), Comm(b,c^4)/(c^5*a^3), Comm(b,c^4)/(c^5*b^3*a), Comm(b,c^5)/(c^2*b^4*a^2), Comm(b,c^5)/(c^3*a), Comm(b,c^5)/(c^3*b^2*a^3), Comm(b,d), Comm(b,d)/(b*a), Comm(b,d)/(c*a), Comm(b,d)/(c*b*a), Comm(b,d)/(c*b^3*a), Comm(b,d)/a, Comm(b,d)/a^2, Comm(b,d)/a^3, Comm(b,d)/a^9, Comm(b,d)/b^2, Comm(b,d)/b^4, Comm(b,d)/c, Comm(b,d)/d^2, Comm(b,d^2)/d^4, Comm(b,d^3)/d, Comm(b,d^3)/d^6, Comm(b,d^4)/d^3, Comm(b,d^4)/d^8, Comm(b,d^5), Comm(b,d^6)/d^2, Comm(b,d^7)/d^4, Comm(b,d^8)/d^6, Comm(b,d^9)/d^8, Comm(b,e), Comm(b,e)/(c*b*a), Comm(b,e)/(c*b^2*a), Comm(b,e)/(d*b^2*a), Comm(b,e)/(d*c*b^2), Comm(b,e)/a, Comm(b,e)/b^2, Comm(b,f), Comm(b,f)/(d*c*b*a), Comm(b,f)/(d*c*b^2), Comm(b,f)/b^2, Comm(b,g)/a, Comm(c,d), Comm(c,d)/(b*a), Comm(c,d)/(b*a^2), Comm(c,d)/(c*b), Comm(c,d)/(c*b*a), Comm(c,d)/(c*b*a^2), Comm(c,d)/(c*b*a^3), Comm(c,d)/(c*b^2*a), Comm(c,d)/(c^2*b*a^3), Comm(c,d)/(c^2*b^3), Comm(c,d)/(c^4*b), Comm(c,d)/(c^4*b*a), Comm(c,d)/(d^3*a), Comm(c,d)/(d^8*a), Comm(c,d)/b, Comm(c,d)/b^2, Comm(c,d)/c, Comm(c,d)/c^2, Comm(c,d)/c^4, Comm(c,d^2)/(d*c*a), Comm(c,d^2)/(d^6*c*a), Comm(c,d^3)/(c*a), Comm(c,d^4)/(d^3*c^2*a), Comm(c,d^4)/(d^8*c^2*a), Comm(c,d^5), Comm(c,d^6)/(d^8*a), Comm(c,d^7)/(d^6*c*a), Comm(c,d^8)/(c*a), Comm(c,d^9)/(d^8*c^2*a), Comm(c,e), Comm(c,e)/(b*a), Comm(c,e)/(d*a^2), Comm(c,e)/(d*b^2), Comm(c,e)/(d*c*b^3), Comm(c,e)/(d^3*b), Comm(c,e)/b^3, Comm(c,e)/d^3, Comm(c,f), Comm(c,f)/(c*a), Comm(c,f)/(d*c*b^3), Comm(c,f)/b, Comm(c,f)/b^3, Comm(c,g)/(d^3*c*b^3), Comm(d,e)/(c*b^3*a), Comm(d,e)/(d*c*a^2), Comm(d,e)/(d*c*b*a), Comm(d,e)/(d*c*b^2), Comm(d,e)/(d^3*b^3*a), Comm(d,e)/(d^3*c*b), Comm(d,e)/(d^4*c), Comm(d,e)/(d^4*c*b*a), Comm(d,e), Comm(d,f)/(c*b*a), Comm(d,f)/(d*c*b*a), Comm(d,f)/(d^4*c*b), Comm(d,f)/a^3, Comm(d,f)/c, Comm(d,g)/(e*d^5*c*b^3*a), Comm(e,f)/(e*b), Comm(e,f)/(e*c*a^3), Comm(e,f)/(e*d*c*a^2), Comm(e,f)/(e^4*c*b^3*a), Comm(e,f)/e, Comm(e,g)/(e^2*d^4*c*b^2*a), Comm(f,g)]; CR[2].generatorsQClass := gens; CR[3].generatorsQClass := gens; CR[4].generatorsQClass := gens; CR[2].relatorWordsQClass := rels; CR[3].relatorWordsQClass := rels; CR[4].relatorWordsQClass := rels; end ); ############################################################################# ## #M CR_MatGroupZClass( ) . . Z-class rep as matrix group ## ## 'CR_MatGroupZClass' returns a representative group of the specified ## Z-class. The generators of the resulting matrix group are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'MatGroupZClass'. ## InstallGlobalFunction( CR_MatGroupZClass, function ( param ) local CR, cr, dim, G, gens, q, qcl, sys, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; if param{[2..4]} = [1,1,1] then gens := []; else gens := CR_GeneratorsZClass( dim, z ); fi; G := Group( gens, Identity( CR.GLZ ) ); # Save the Z-class parameters in the group record. SetSize( G, CR.orderQClass[CR.QClassZClass[z]] ); SetName( G, CR_Name( "MatGroupZClass", param, 4 ) ); cr := rec( ); cr.parameters := [ dim, sys, qcl, zcl ]; cr.conjugator := Identity( G ); SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_PcGroupQClass(,) . Q-class rep as pc group ## ## 'CR_PcGroupQClass' returns a pc group isomorphic to the groups in the ## specified Q-class. If = true, then a warning will be displayed ## in case that the given presentation is not a prime order pcgs. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'PcGroupQClass'. ## InstallGlobalFunction( CR_PcGroupQClass, function ( param, warning ) local CR, cr, crgens, crrels, dim, F, G, i, ngens, nrels, num, ord, q, qcl, rels, sys, lev; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; if RemInt( ord, 60 ) = 0 then Print( "#I Warning: a non-solvable group can't be represented", " as a pc group\n" ); return fail; fi; if ord = 1 then G := TrivialGroup( IsPcGroup ); else ngens := RemInt( CR.codedPresentationQClass[q], 10 ); crgens := CR.generatorsQClass{ [ 8 - ngens .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); F := FreeGroup( ngens ); rels := List( [ 1 .. nrels ], i -> MappedWord( crrels[i], crgens, GeneratorsOfGroup( F ) ) ); F := F / rels; # suppress premature warning about better using RefinedPcGroup lev := InfoLevel( InfoWarning ); SetInfoLevel( InfoWarning, 0 ); G := PcGroupFpGroup( F ); SetInfoLevel( InfoWarning, lev ); # Refine the pc series, if necessary. G := RefinedPcGroup( G ); if warning and Length( GeneratorsOfGroup( G ) ) <> Length( GeneratorsOfGroup( F ) ) then Print( "#I Warning: the presentation has been extended to get", " a prime order pcgs\n" ); fi; fi; # Save the Q-class parameters in the group record. SetName( G, CR_Name( "PcGroupQClass", param, 3 ) ); SetSize( G, ord ); cr := rec( ); cr.parameters := [ dim, sys, qcl ]; SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_Name( , , ) . . . name of crystal #M . . . . . . . . . . . . . . . . . . . . . . . . group or character table ## ## 'CR_Name' returns the "name" of the specified object which may be a ## Z-class representative, a Q-class representative or its character table, ## or a space group. The resulting name is a string which consists of the ## given string followed by the relevant parameters which are separated by ## commas and enclosed in parentheses. ## InstallGlobalFunction( CR_Name, function ( string, param, nparms ) local dim, name, qcl, sgt, sys, zcl; # Initialize the name by the given string and a left parenthesis. name := Concatenation( string, "( " ); # Add the dimension. dim := param[1]; name := Concatenation( name, String( dim ) ); # Add the crystal system parameter. sys := param[2]; name := Concatenation( name, ", " ); name := Concatenation( name, String( sys ) ); # Add the Q-class parameter. qcl := param[3]; name := Concatenation( name, ", " ); name := Concatenation( name, String( qcl ) ); if nparms > 3 then # Add the Z-class parameter. zcl := param[4]; name := Concatenation( name, ", " ); name := Concatenation( name, String( zcl ) ); if nparms > 4 then # Add the space-group type. sgt := param[5]; name := Concatenation( name, ", " ); name := Concatenation( name, String( sgt ) ); fi; fi; # Close the name by a right parenthesis and return it. return Concatenation( name, " )" ); end ); ############################################################################# ## #M CR_NormalizerZClass( ) . . normalizer of Z-class rep ## ## 'CR_NormalizerZClass' returns the normalizer in GL(dim,Z) of the ## specified Z-class representative matrix group. If the order of the ## normalizer is finite, then the group record components "crZClass" and ## "crConjugator" will be set properly. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'NormalizerZClass'. ## InstallGlobalFunction( CR_NormalizerZClass, function ( param ) local con, coninv, CR, cr, dim, gens, N, q1, qcl1, sys1, z, z1, z2, zcl1; # Get the arguments. dim := param[1]; CR := CrystGroupsCatalogue[dim]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; z1 := RemInt( CR.codedNormalizerZClass[z], 1000 ); z2 := QuoInt( CR.codedNormalizerZClass[z], 1000 ); if z1 = 0 then gens := Concatenation( CR_GeneratorsZClass( dim, z ), CR_GeneratorsZClass( dim, z2 ) ); N := Group( gens, Identity( CR.GLZ ) ); SetSize( N, infinity ); else gens := CR_GeneratorsZClass( dim, z1 ); if z2 <> 0 then coninv := CR_GeneratorsZClass( dim, z2 )[1]; con := coninv^-1; gens := coninv * gens * con; fi; q1 := CR.QClassZClass[z1]; sys1 := CR.crystalSystemQClass[q1]; qcl1 := q1 - CR.nullQClass[sys1]; zcl1 := z1 - CR.nullZClass[q1]; N := Group( gens, Identity( CR.GLZ ) ); SetSize( N, CR.orderQClass[q1] ); # Save the Z-class parameters in the normalizer group record. SetName( N, CR_Name( "NormalizerZClass", param, 4 ) ); cr := rec( ); # N.crZClass := [ dim, sys1, qcl1, zcl1 ]; cr.parameters := [ dim, sys1, qcl1, zcl1 ]; if z2 <> 0 then # N.crConjugator := con; cr.conjugator := con; else # N.crConjugator := Identity( N ); cr.conjugator := Identity( N ); fi; SetCrystCatRecord( N, cr ); fi; return N; end ); ############################################################################# ## #M CR_Parameters( [ , , , , ], nparms) #M CR_Parameters( [ , , , ], nparms ) . . . . #M CR_Parameters( [ , , ], nparms ) . . . . . internal #M CR_Parameters( [ , ], nparms ) . . . . . parameters for #M CR_Parameters( [ ], nparms ) . . crystal groups ## ## Valid argument lists are ## ## [ dim, sys, qcl, zcl, sgt ], 5 ## [ dim, sys, qcl, zcl ], 4 ## [ dim, sys, qcl ], 3 ## [ 3, it ], n ## [ 2, it ], n ## [ symbol ], n ## ## where ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## it = corresponding number in the International Tables (only for ## dimensions 2 and 3), ## n = 3 or 4 or 5, ## symbol = Hermann-Mauguin symbol (only for dimensions 2 or 3). ## ## 'CR_Parameters' checks the given arguments to be consistent and in range, ## and returns them in form of an "internal CR parameter list" ## ## [ dim, sys, qcl, zcl, sgt ] ## ## which contains the "local parameters" of the respective object. The ## following "global parameters" of the same object are used as local ## variables. ## ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## InstallGlobalFunction( CR_Parameters, function ( args, nparms ) local catlist, CR, dim, it, nargs, param, q, qcl, sgt, symbol, sys, t, z, zcl; # Check number of arguments. nargs := Length( args ); if nargs <> nparms and nargs <> 1 and nargs <> 2 then Error( "illegal number of arguments" ); fi; # Initialize the parameters list. param := ListWithIdenticalEntries( 5, 0 ); if nargs < 3 then if nargs = 1 then # The argument is a Hermann-Mauguin symbol. symbol := args[1]; it := Position( CR_2.HermannMauguinSymbol, symbol ); if it <> fail then dim := 2; else it := Position( CR_3.HermannMauguinSymbol, symbol ); if it = fail then Error( "don't know the given Hermann-Mauguin symbol" ); fi; dim := 3; fi; CR := CrystGroupsCatalogue[dim]; catlist := CR.spaceGroupTypeInternatTable; else # The second argument is an International Table number. # Check the dimension parameter. dim := args[1]; if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "inconsistent dimension parameter" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the IT number. it := args[2]; catlist := CR.spaceGroupTypeInternatTable; if not IsInt( it ) or it < 1 or Length( catlist ) < it then Error( "illegal IT number" ); fi; fi; # Reconstruct the space group parameters from the coded information # in the catalogue list and store them in the parameters list. param[1] := dim; z := RemInt( catlist[it], 100 ); q := CR.QClassZClass[z]; sys := CR.crystalSystemQClass[q]; param[2] := sys; param[3] := q - CR.nullQClass[sys]; if nparms > 3 then param[4] := z - CR.nullZClass[q]; t := QuoInt( catlist[it], 100 ); param[5] := t - CR.nullSpaceGroup[z]; fi; else # Check the dimension parameter. dim := args[1]; if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "illegal dimension parameter" ); fi; param[1] := dim; # Check the crystal system parameter. sys := args[2]; CR := CrystGroupsCatalogue[dim]; if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "crystal system parameter out of range" ); fi; param[2] := sys; # Check the Q-class parameter and get the Q-class number with respect # to all Q-classes for dimension dim. qcl := args[3]; if not IsInt( qcl ) or qcl < 1 or CR.nullQClass[sys+1] - CR.nullQClass[sys] < qcl then Error( "Q-class parameter out of range" ); fi; param[3] := qcl; if nargs > 3 then # Check the Z-class parameter and get the Z-class number with # respect to all Z-classes for dimension dim. zcl := args[4]; q := CR.nullQClass[sys] + qcl; if not IsInt( zcl ) or zcl < 1 or CR.nullZClass[q+1] - CR.nullZClass[q] < zcl then Error( "Z-class parameter out of range" ); fi; param[4] := zcl; if nargs > 4 then # Check the space-group type parameter. sgt := args[5]; z := CR.nullZClass[q] + zcl; if not IsInt( sgt ) or sgt < 1 or CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z] < sgt then Error( "space-group type parameter out of range" ); fi; param[5] := sgt; fi; fi; fi; return( param ); end ); ############################################################################# ## #M CR_SpaceGroup( ) . . . . . . . . . . . . space group ## ## 'CR_SpaceGroup' returns a representative matrix group (of dimension ## dim+1) of the specified space-group type. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'SpaceGroup'. ## ## In particular, the function expects that, whenever the order of the point ## group is not a multiple of 60, the given point group presentation is a ## polycyclic power commutator presentation containing a list of n power ## relators and n*(n-1)/2 commutator relators in some prescribed order, ## where n is the number of its generators. ## InstallGlobalFunction( CR_SpaceGroup, function ( param ) local CR, cr, crgens, crrels, dim, dim1, exp, G, g, g1, gen, gens, gens0, i, i1, i2, idword, inv, j, mat, leng, names, ngens, ngens0, ngens1, nrels, num, q, qcl, rel, rels, S, subword, sys, word; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; dim1 := dim + 1; # Get the non-translation generators. if param{[2..5]} = [1,1,1,1] then gens := []; else gens := CR_GeneratorsSpaceGroup( param ); fi; # Add the translation generators. for i in [ 1 .. dim ] do mat := StructuralCopy( CR.spaceGroupIdentity ); mat[i][dim1] := 1; Add( gens, mat ); od; # Construct the space group. S := Group( gens, CR.spaceGroupIdentity ); # Initialize a finitly presented group G isomorphic to S. ngens := Length( GeneratorsOfGroup( S ) ); ngens0 := ngens - dim; ngens1 := ngens0 + 1; names := List( [ 1 .. ngens ], i -> Concatenation( "g", String( i ) ) ); G := FreeGroup( names ); g := GeneratorsOfGroup( G ); idword := One( g[1] ); rels := [ ]; # Extended the point group relators. if ngens0 > 0 then g1 := g{ [ 1 .. ngens0 ] }; gens0 := gens{ [ 1 .. ngens0 ] }; crgens := CR.generatorsQClass{ [ 8 - ngens0 .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); if RemInt( CR.orderQClass[q], 60 ) = 0 then # The point group is non-solvable, so just extend its relators # appropriately. for i in [ 1 .. nrels ] do mat := MappedWord( crrels[i], crgens, gens0 ); word := idword; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, MappedWord( crrels[i], crgens, g1 ) * word^-1 ); od; else # The point group is solvable, so construct a polycyclic # power commutator presentation. if nrels <> ngens0 * ngens1 / 2 then Error( "This is a bug. You should never get here.\n" ); fi; # First handle the power relators. for i in [ 1 .. ngens0 ] do rel := crrels[ngens1-i]; leng := Length( rel ); gen := crgens[i]; if leng < 2 or Subword( rel, 1, 2 ) <> gen^2 then Error( "This is a bug. You should never get here.\n" ); fi; exp := 2; while exp < leng and Subword( rel, exp+1, exp+1 ) = gen do exp := exp + 1; od; word := idword; if exp = leng then mat := gens0[i]^exp; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, g[i]^exp * word^-1 ); else subword := Subword( rel, exp + 1, leng ); mat := MappedWord( subword, crgens, gens0 ) * gens0[i]^exp; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, g[i]^exp * word^-1 * MappedWord( subword, crgens, g1 ) ); fi; od; # Now handle the commutator relators. i := nrels + 1; for i2 in [ 2 .. ngens0 ] do for i1 in [ 1 .. i2 - 1 ] do i := i - 1; rel := crrels[i]; leng := Length( rel ); if leng < 4 or Subword( rel, 1, 4 ) <> Comm( crgens[i2], crgens[i1] ) then Error("This is a bug. You should never get here.\n"); fi; word := idword; if leng = 4 then mat := Comm( gens0[i2], gens0[i1] ); for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 ); else subword := Subword( rel, 5, leng ); mat := MappedWord( subword, crgens, gens0 ) * Comm( gens0[i2], gens0[i1] ); for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 * MappedWord( subword, crgens, g1 ) ); fi; od; od; fi; fi; # Add the remaining commutator relators. inv := List( gens, mat -> mat^-1 ); for i2 in [ ngens1 .. ngens ] do # Add the relators which describe the action of the non-translation # generators on the translation generators. for i1 in [ 1 .. ngens0 ] do mat := inv[i2] * inv[i1] * gens[i2] * gens[i1]; word := idword; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 ); od; # Add the commutator relators for the translation generators. for i1 in [ ngens1 .. i2 - 1 ] do Add( rels, Comm( g[i2], g[i1] ) ); od; od; # Save the finitely presented group G in the group record of S. G := G / rels; # Save the space group type parameters in the group record. SetSize( S, infinity ); SetName( S, CR_Name( "SpaceGroupOnLeftBBNWZ", param, 5 ) ); cr := rec( ); cr.parameters := param; cr.fpGroup := G; SetCrystCatRecord( S, cr ); return S; end ); ############################################################################# ## #M CR_ZClassRepsDadeGroup( , ) . . . . Z-class reps #M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in Dade group ## ## 'CR_ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'ZClassRepsDadeGroup'. ## InstallGlobalFunction( CR_ZClassRepsDadeGroup, function ( param, d ) local code, con, CR, cr, dim, G, gens, i, j, k, mat, matinv, modul, n1, n2, name, q, qcl, reps, rowConjugatorDadeGroup, sys, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; rowConjugatorDadeGroup := CR.rowConjugatorDadeGroup; n1 := CR.nullDadeGroupsZClass[z] + 1; n2 := CR.nullDadeGroupsZClass[z+1]; reps := [ ]; # Loop over all Dade groups containing groups from the given Z-class. for i in [ n1 .. n2 ] do # Check the Dade group for being the given one. code := CR.codedDadeGroupsZClass[i]; if RemInt( code, 10 ) = d then # Construct the representative matrix group of the given Z-class. gens := CR_GeneratorsZClass( dim, z ); name := CR_Name( "MatGroupZClass", param, 4 ); # Conjugate the group, if necessary. con := QuoInt( code, 10); if con = 0 then G := Group( gens, Identity( CR.GLZ ) ); SetName( G, name ); mat := Identity( G ); else modul := 140; matinv := ListWithIdenticalEntries( dim, 0 ); code := CR.codedConjugatorDadeGroup[con]; for j in [ 1 .. dim ] do k := RemInt( code, modul ); code := QuoInt( code, modul ); matinv[j] := StructuralCopy( rowConjugatorDadeGroup[k] ); od; mat := matinv^-1; gens := matinv * gens * mat; G := Group( gens, Identity( CR.GLZ ) ); SetName( G, Concatenation( Concatenation( name, "^" ), String( mat ) ) ); fi; # Save the Z-class parameters in the group record. SetSize( G, CR.orderQClass[CR.QClassZClass[z]] ); cr := rec( ); cr.parameters := [ dim, sys, qcl, zcl ]; cr.conjugator := mat; SetCrystCatRecord( G, cr ); # Save the group in the list. Add( reps, G ); fi; od; return reps; end ); ############################################################################# ## #M CharTableQClass( , , ) . . . . . . character table #M CharTableQClass( , ) . . . . . . . . . . . of a Q-class #M CharTableQClass( ) . . . . representative group ## ## 'CharTableQClass' returns the character table of a representative group ## of the specified Q-class. ## InstallGlobalFunction( CharTableQClass, function ( arg ) local T, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the character table of the class representative group. T := CR_CharTableQClass( param ); return T; end ); ############################################################################# ## #M DisplayCrystalFamily( , ) . . . . . . . . . . display some #M . . . . . . . . . . . . . . . . . . . . . . . . crystal family invariants ## ## 'DisplayCrystalFamily' displays for the specified crystal family the ## following information: ## - the family name, ## - the number of parameters, ## - the common rational decomposition pattern, ## - the common real decomposition pattern, ## - the number of crystal systems in the family, and ## - the number of Bravais flocks in the family. ## InstallGlobalFunction( DisplayCrystalFamily, function ( dim, fam ) local bnum, code, CR, pnum, pt, qdecomp, rdecomp, snum, text; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the family parameter. if not IsInt( fam ) or fam < 1 or Length( CR.nameCrystalFamily ) < fam then Error( "family parameter out of range" ); fi; code := CR.codedPropertiesFamily[fam]; rdecomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); qdecomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); bnum := RemInt( code, 10 ); pnum := QuoInt( code, 10 ); snum := Number( CR.familyCrystalSystem, x -> x = fam ); text := CR_TextStrings.family; # Print the family number. Print( text[12], CR_TextStrings.roman[fam] ); # Print the name of the family. Print( text[13], CR.nameCrystalFamily[fam] ); # Print the number of free parameters. Print( text[14], pnum, text[16] ); if pnum > 1 then Print( text[15] ); fi; Print( text[19] ); # Print the rational decomposition pattern. if qdecomp = 1 then Print( text[10], text[1], text[14] ); elif qdecomp > 1 then Print( text[10], text[2], text[qdecomp], text[14] ); fi; # Print the real decomposition pattern. if rdecomp = 1 then Print( text[11], text[1] ); elif rdecomp > 1 then Print( text[11], text[2], text[rdecomp] ); fi; # Print the number of crystal systems in the given family. pt := 19; if qdecomp = 0 then pt := 14; fi; Print( text[pt], snum, text[17] ); if snum > 1 then Print( text[15] ); fi; # Print the number of Bravais flocks. Print( text[14], bnum, text[18] ); if bnum > 1 then Print( text[15] ); fi; Print( "\n" ); end ); ############################################################################# ## #M DisplayCrystalSystem( , ) . . . . . . . . . . display some #M . . . . . . . . . . . . . . . . . . . . . . . . crystal system invariants ## ## 'DisplayCrystalSystem' displays for the specified crystal system the ## following information: ## - the number of Q-classes in the crystal system, and ## - the triple (dim, sys, qcl) of parameters of the Q-class which is the ## holohedry of the crystal system. ## InstallGlobalFunction( DisplayCrystalSystem, function ( dim, sys ) local CR, qnum, text; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the crystal system parameter. if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "system parameter out of range" ); fi; qnum := CR.nullQClass[sys+1] - CR.nullQClass[sys]; text := CR_TextStrings.crystalSystem; # Print the crystal system number. Print( text[1], sys ); # Print the number of Q-classes in the given crystal system. if qnum = 1 then Print( text[6], qnum, text[2] ); else Print( text[6], qnum, text[3] ); fi; # Print the holohedry. Print( text[4], dim, text[5], sys, text[5], qnum, text[7] ); Print( "\n" ); end ); ############################################################################# ## #M DadeGroup( , ) . . . . . . . . . . . . . . . . . . . Dade group ## ## 'DadeGroup' returns the n-th Dade group of dimension dim. ## InstallGlobalFunction( DadeGroup, function ( dim, n ) local CR, G, param; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the given Dade group number for being in range. if not IsInt( n ) or n < 1 or Length( CR.parametersDadeGroup ) < n then Error( "Dade group number out of range" ); fi; param := CR.parametersDadeGroup[n]; G := CR_MatGroupZClass( param ); return G; end ); ############################################################################# ## #M DadeGroupNumbersZClass( , , , ) . . . Dade #M DadeGroupNumbersZClass( , ) . . . . . . . . . . . group #M DadeGroupNumbersZClass( ) . . . . . . . numbers ## ## 'DadeGroupNumbersZClass' returns a list of the numbers of those Dade ## groups which contain groups from the given Z-class. ## InstallGlobalFunction( DadeGroupNumbersZClass, function ( arg ) local CR, dim, i, n1, n2, nums, param, z; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); dim := param[1]; CR := CrystGroupsCatalogue[dim]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; # Construct the list and return it. n1 := CR.nullDadeGroupsZClass[z] + 1; n2 := CR.nullDadeGroupsZClass[z+1]; nums := List( [ n1 .. n2 ], i -> RemInt( CR.codedDadeGroupsZClass[i], 10 ) ); return Set( nums ); end ); ############################################################################# ## #M DisplayQClass( , , ) . . . . . . . . . . . display #M DisplayQClass( , ) . . . . . . . . . . . . some Q-class #M DisplayQClass( ) . . . . . . . . . . invariants ## ## 'DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## InstallGlobalFunction( DisplayQClass, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Display some invariants of the given Q-class. CR_DisplayQClass( param ); end ); ############################################################################# ## #M DisplaySpaceGroupGenerators( , ,,, ) #M DisplaySpaceGroupGenerators( , ) . . display space group #M DisplaySpaceGroupGenerators( ) . . . generators ## ## 'DisplaySpaceGroupGenerators' displays the non-translation generators of ## the space group specified by the given parameters. ## InstallGlobalFunction( DisplaySpaceGroupGenerators, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Display the non-translation generators of the space group type # representative matrix group. CR_DisplaySpaceGroupGenerators( param ); end ); ############################################################################# ## #M DisplaySpaceGroupType( , , , , ) . #M DisplaySpaceGroupType( , ) . . . . . display some space #M DisplaySpaceGroupType( ) . . . group invariants ## ## 'DisplaySpaceGroupType' displays for the specified space-group type the ## following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## InstallGlobalFunction( DisplaySpaceGroupType, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Display some invariants of the given space-group type. CR_DisplaySpaceGroupType( param ); end ); ############################################################################# ## #M DisplayZClass( , , , ) . . . . . . display #M DisplayZClass( , ) . . . . . . . . . . . . some Z-class #M DisplayZClass( ) . . . . .. . . . . . invariants ## ## 'DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## InstallGlobalFunction( DisplayZClass, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Display some invariants of the given Z-class. CR_DisplayZClass( param ); end ); ############################################################################# ## #M FpGroupQClass( , , ) . . . . . . . . . . . Q-class #M FpGroupQClass( , ) . . . . . . . . . . . representative #M FpGroupQClass( ) . . . . . . . . . as f.p. group ## ## 'FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## InstallGlobalFunction( FpGroupQClass, function ( arg ) local F, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the the corresponding f.p. group. F := CR_FpGroupQClass( param ); return F; end ); ############################################################################# ## #M MatGroupZClass( , , , ) . . . . . . Z-class #M MatGroupZClass( , ) . . . . . . . . . . representative #M MatGroupZClass( ) . . . . . . . as matrix group ## ## 'MatGroupZClass' returns a representative group of the specified Z-class. ## The generators of the resulting matrix group are chosen such that they ## satisfy the defining relators which are returned by the ## 'FpGroupQClass' function for the representative of the corresponding ## Q-class. ## InstallGlobalFunction( MatGroupZClass, function ( arg ) local G, param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Construct the class representative matrix group. G := CR_MatGroupZClass( param ); return G; end ); ############################################################################# ## #M NormalizerZClass( , , , ) . . . normalizer #M NormalizerZClass( , ) . . . . . . . . . . . of a Z-class #M NormalizerZClass( ) . . . . representative group ## ## 'NormalizerZClass' returns the normalizer in GL(dim,Z) of the specified ## Z-class representative matrix group. If the order of the normalizer is ## finite, then the group record components "crZClass" and "crConjugator" ## will be set properly. ## InstallGlobalFunction( NormalizerZClass, function ( arg ) local N, param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Construct the normalizer in GL(dim,Z) of the class representative # matrix group. N := CR_NormalizerZClass( param ); return N; end ); ############################################################################# ## #M NrCrystalFamilies( ) . . . . . . . . . . number of crystal families ## ## 'NrCrystalFamilies' returns the number of crystal families of the given ## dimension. ## InstallGlobalFunction( NrCrystalFamilies, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].nameCrystalFamily ); end ); ############################################################################# ## #M NrCrystalSystems( ) . . . . . . . . . . . number of crystal systems ## ## 'NrCrystalSystems' returns the number of crystal systems of the given ## dimension. ## InstallGlobalFunction( NrCrystalSystems, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].familyCrystalSystem ); end ); ############################################################################# ## #M NrDadeGroups( ) . . . . . . . . . . . . . . . number of Dade groups ## ## 'NrDadeGroups' returns the number of Dade groups of the given dimension. ## InstallGlobalFunction( NrDadeGroups, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].parametersDadeGroup ); end ); ############################################################################# ## #M NrQClassesCrystalSystem( , ) . . . . . number of Q-classes ## ## 'NrQClassesCrystalSystem' returns the number of Q-classes in the given ## crystal system. ## InstallGlobalFunction( NrQClassesCrystalSystem, function ( dim, sys ) local CR; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the crystal system parameter. if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "system parameter out of range" ); fi; return CR.nullQClass[sys+1] - CR.nullQClass[sys]; end ); ############################################################################# ## #M NrSpaceGroupTypesZClass( , , , ) . . number #M NrSpaceGroupTypesZClass( , ) . . . . . . of space-group #M NrSpaceGroupTypesZClass( ) . . types in Z-class ## ## 'NrSpaceGroupTypesZClass' returns the number of space-group types in the ## given Z-class. ## InstallGlobalFunction( NrSpaceGroupTypesZClass, function ( arg ) local CR, param, z; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); CR := CrystGroupsCatalogue[param[1]]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; return CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z]; end ); ############################################################################# ## #M NrZClassesQClass( , , ) . . . . . . . . number of #M NrZClassesQClass( , ) . . . . . . . . . . . . Z-classes #M NrZClassesQClass( ) . . . . . . . . . in Q-class ## ## 'NrZClassesQClass' returns the number of Z-classes in the given Q-class. ## InstallGlobalFunction( NrZClassesQClass, function ( arg ) local CR, param, q; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); CR := CrystGroupsCatalogue[param[1]]; q := CR.nullQClass[param[2]] + param[3]; return CR.nullZClass[q+1] - CR.nullZClass[q]; end ); ############################################################################# ## #M PcGroupQClass( , , ) . . . . . . . . . . . Q-class #M PcGroupQClass( , ) . . . . . . . . . . . representative #M PcGroupQClass( ) . . . . . . . . . . as ag group ## ## 'PcGroupQClass' returns an ag group isomorphic to the groups in the ## specified Q-class. ## InstallGlobalFunction( PcGroupQClass, function ( arg ) local A, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the corresponding ag group (if solvable). A := CR_PcGroupQClass( param, true ); return A; end ); ############################################################################# ## #M SpaceGroupOnLeftBBNWZ( , , , , ) #M SpaceGroupOnLeftBBNWZ( , ) . . . . . . . . . . . . . . . #M SpaceGroupOnLeftBBNWZ( ) . . . . . . space group ## ## 'SpaceGroupOnLeftBBNWZ' returns a representative matrix group ## (of dimension dim+1) of the specified space-group type. ## InstallGlobalFunction( SpaceGroupOnLeftBBNWZ, function ( arg ) local G, param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Construct the space group. G := CR_SpaceGroup( param ); SetIsAffineCrystGroupOnLeft( G, true ); AddTranslationBasis( G, IdentityMat( param[1] ) ); SetIsSpaceGroup( G, true ); SetIsSymmorphicSpaceGroup( G, param[5]=1 ); return G; end ); ############################################################################# ## #M SpaceGroupOnRightBBNWZ( , , , , ) . #M SpaceGroupOnRightBBNWZ( , ) . . . . . . . . . . . . . . #M SpaceGroupOnRightBBNWZ( ) . . . . . . . . . . . #M SpaceGroupOnRightBBNWZ( S ) . . . . . . . . . . . .transposed space group ## ## 'SpaceGroupOnRightBBNWZ' returns the transposed matrix group of ## the given or specified space group. ## ## The reason is the following. Each space group is presented in the form of ## a group of augmented matrices (of dimension dim+1) of the following form: ## ## [ M | t ] ## [-----+---] Here, M is the `linear part' and ## [ 0 | 1 ] t is the `translational part'. ## ## Therefore, the natural action of a space group in this form is from the ## left. This collides with the convention in GAP to have all actions from ## the right. This function does the necessary conversions. In fact, it does ## not only transpose the matrices, but it also adapts the relators given in ## S.fpGroup to the new generators. ## InstallGlobalFunction( SpaceGroupOnRightBBNWZ, function( arg ) local cr, F, G, narg, param, rel, rels, S, T; # Evaluate the arguments. narg := Length( arg ); if narg = 1 and IsGroup( arg[1] ) and HasCrystCatRecord( arg[1] ) and Length( CrystCatRecord( arg[1] ).parameters ) = 5 then # The argument is the space group S to be transposed. # Get a copy G of the finitely presented group involved in S. S := arg[1]; cr := CrystCatRecord( S ); param := cr.parameters; else # Construct the space group S to be transposed from the arguments # and get the finitely presented group G involved in S. param := CR_Parameters( arg, 5 ); S := CR_SpaceGroup( param ); cr := CrystCatRecord( S ); fi; # Get the f.p. group G associated to S. G := cr.fpGroup; F := FreeGroupOfFpGroup( G ); # construct the group T generated by the transposed generators of S. T := Group( List( GeneratorsOfGroup( S ), TransposedMat ), One ( S ) ); cr := rec( ); cr.parameters := param; SetCrystCatRecord( T, cr ); SetName( T, CR_Name( "SpaceGroupOnRightBBNWZ", param, 5 ) ); SetSize( T, Size( S ) ); # Reverse each relator in the presentation of G and construct the f.p. # group defined by these reversed relators. rels := List( RelatorsOfFpGroup( G ), rel -> Reversed( rel ) ); cr.fpGroup := F / rels; # Return the transposed group. SetIsAffineCrystGroupOnRight( T, true ); AddTranslationBasis( T, IdentityMat( param[1] ) ); SetIsSpaceGroup( T, true ); SetIsSymmorphicSpaceGroup( T, param[5]=1 ); return T; end ); ############################################################################# ## #M SpaceGroupBBNWZ( , , , , ) . #M SpaceGroupBBNWZ( , ) . . . . . . . . . . . . . . #M SpaceGroupBBNWZ( ) . . . . . . . . . . . ## ## Calls either `SpaceGroupOnRightBBNWZ' or `SpaceGroupOnLeftBBNWZ' ## depending on the value of `CrystGroupDefaultAction' ## InstallGlobalFunction( SpaceGroupBBNWZ, function( arg ) local p; p := CR_Parameters( arg, 5 ); if CrystGroupDefaultAction = RightAction then return SpaceGroupOnRightBBNWZ( p[1], p[2], p[3], p[4], p[5] ); else return SpaceGroupOnLeftBBNWZ( p[1], p[2], p[3], p[4], p[5] ); fi; end ); ############################################################################# ## #M ZClassRepsDadeGroup( , , , , ) . . . . . #M ZClassRepsDadeGroup( , , ) . . . . . . . Z-class reps #M ZClassRepsDadeGroup( , ) . . . in Dade group ## ## 'ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## InstallGlobalFunction( ZClassRepsDadeGroup, function ( arg ) local CR, d, dim, nargs, param, reps; # Check the number of arguments; nargs := Length( arg ); if nargs < 2 then Error( "illegal number of arguments" ); fi; # Evaluate the given Z-class arguments. param := CR_Parameters( arg{ [ 1 .. nargs - 1 ] }, 4 ); # Check the Dade group argument; d := arg[nargs]; dim := param[1]; CR := CrystGroupsCatalogue[dim]; if not IsInt( d ) or d < 1 or Length( CR.parametersDadeGroup ) < d then Error( "Dade group parameter out of range" ); fi; # Construct the list of representative Z-class groups. reps := CR_ZClassRepsDadeGroup( param, d ); return reps; end ); ############################################################################# ## #M FpGroupSpaceGroupBBNWZ( ) . . FpGroup isomorphic to BBNWZ space group ## InstallGlobalFunction( FpGroupSpaceGroupBBNWZ, function( S ) local F; F := CrystCatRecord(S).fpGroup; SetName( F, Concatenation( "FpGroup", Name(S) ) ); return F; end ); CR_InitializeRelators( CrystGroupsCatalogue ); crystcat/PackageInfo.g0000644001325400021140000000547015114263776014417 0ustar gaehleruser############################################################################# ## ## PackageInfo.g for CrystCat ## SetPackageInfo( rec( PackageName := "CrystCat", Subtitle := "The crystallographic groups catalog", Version := "1.1.11", Date := "04/12/2025", # dd/mm/yyyy format License := "GPL-2.0-or-later", ArchiveURL := Concatenation( "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/crystcat-", ~.Version ), ArchiveFormats := ".tar.gz", BinaryFiles := [ "doc/manual.pdf", "doc/manual.dvi" ], Persons := [ rec( LastName := "Felsch", FirstNames := "Volkmar", IsAuthor := true, IsMaintainer := false, Email := "Volkmar.Felsch@math.rwth-aachen.de", WWWHome := "http://www.math.rwth-aachen.de/~Volkmar.Felsch/", #PostalAddress := "", Place := "Aachen", Institution := "Lehrstuhl D für Mathematik, RWTH Aachen" ), rec( LastName := "Gähler", FirstNames := "Franz", IsAuthor := true, IsMaintainer := true, Email := "gaehler@math.uni-bielefeld.de", WWWHome := "https://www.math.uni-bielefeld.de/~gaehler/", #PostalAddress := "", Place := "Bielefeld", Institution := "Mathematik, Universität Bielefeld" ) ], Status := "accepted", CommunicatedBy := "Herbert Pahlings (Aachen)", AcceptDate := "02/2000", README_URL := "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/README.crystcat", PackageInfoURL := "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/PackageInfo.g", AbstractHTML := "This package provides a catalog of crystallographic groups of \ dimensions 2, 3, and 4 which covers most of the data contained in \ the book Crystallographic groups of four-dimensional space \ by H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and \ H. Zassenhaus (John Wiley, New York, 1978). Methods for the \ computation with these groups are provided by the package \ Cryst, which must be installed as well.", PackageWWWHome := "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php", SourceRepository := rec( Type := "git", URL := Concatenation( "https://github.com/gap-packages/", LowercaseString( ~.PackageName ) ) ), IssueTrackerURL := Concatenation( ~.SourceRepository.URL, "/issues" ), SupportEmail := "gaehler@math.uni-bielefeld.de", PackageDoc := rec( BookName := "CrystCat", ArchiveURLSubset := ["doc", "htm"], HTMLStart := "htm/chapters.htm", PDFFile := "doc/manual.pdf", SixFile := "doc/manual.six", LongTitle := "The crystallographic groups catalog", ), Dependencies := rec( NeededOtherPackages := [ [ "Cryst", ">=4.1.25" ] ], SuggestedOtherPackages := [], ExternalConditions := [] ), AvailabilityTest := ReturnTrue, TestFile := "tst/testall.g", Keywords := [ "crystallographic groups", "space groups" ] ));