ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل یازدهم generic ها در#C

<!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-alt:"Courier New"; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tms Rmn"; panose-1:2 2 6 3 4 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Helv; panose-1:2 11 6 4 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"New York"; panose-1:2 4 5 3 6 5 6 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:System; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:바탕; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:PMingLiU; panose-1:2 1 6 1 0 1 1 1 1 1; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:"MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS ゴシック"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Dotum; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:돋움; mso-font-charset:129; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimHei; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:黑体; mso-font-charset:134; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:MingLiU; panose-1:2 1 6 9 0 1 1 1 1 1; mso-font-alt:細明體; mso-font-charset:136; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:Mincho; panose-1:2 2 6 9 4 3 5 8 3 5; mso-font-alt:明朝; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Gulim; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:굴림; mso-font-charset:129; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:Century; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Angsana New"; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:"Cordia New"; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:Mangal; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:32768 0 0 0 0 0;} @font-face {font-family:Latha; panose-1:2 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1048576 0 0 0 0 0;} @font-face {font-family:Sylfaen; panose-1:1 10 5 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:67110535 0 0 0 159 0;} @font-face {font-family:Vrinda; panose-1:1 1 6 0 1 1 1 1 1 1; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:65539 0 0 0 1 0;} @font-face {font-family:Raavi; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131072 0 0 0 0 0;} @font-face {font-family:Shruti; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:262144 0 0 0 0 0;} @font-face {font-family:Sendnya; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Gautami; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2097152 0 0 0 0 0;} @font-face {font-family:Tunga; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:4194304 0 0 0 0 0;} @font-face {font-family:"Estrangelo Edessa"; panose-1:3 8 6 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:-2147475392 0 128 0 0 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:"Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-134238209 -371195905 63 0 4129279 0;} @font-face {font-family:Cambria; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627400839 -2147483648 8 0 66047 0;} @font-face {font-family:BJadidBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:178; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Arial Black"; panose-1:2 11 10 4 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:BNazaninBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:178; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:BRoyaBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:178; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:BMitraBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:CourierNewPS-BoldMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:CourierNewPSMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:SymbolMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"MS Gothic"; mso-font-charset:128; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:TimesNewRomanPSMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:ArialMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings-Regular; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier-Oblique; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Adobe Caslon Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185563 0 0 155 0;} @font-face {font-family:"Adobe Caslon Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185563 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185563 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185563 0 0 155 0;} @font-face {font-family:"Arno Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Light Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Smbd Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Smbd Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Smbd SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Arno Pro Smbd Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1610613383 1 0 0 415 0;} @font-face {font-family:"Bell Gothic Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Bell Gothic Std Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Bickham Script Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 147 0;} @font-face {font-family:"Bickham Script Pro Semibold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 147 0;} @font-face {font-family:"Birch Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Blackoak Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Brush Script Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Chaparral Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185563 0 0 155 0;} @font-face {font-family:"Charlemagne Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Cooper Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Eccentric Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Garamond Premr Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870209 1342234747 0 0 415 0;} @font-face {font-family:"Garamond Premr Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870209 1342234747 0 0 415 0;} @font-face {font-family:"Giddyup Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Hobo Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870145 1791491327 18 0 131077 0;} @font-face {font-family:"Letter Gothic Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:-2147483473 1342208251 0 0 1 0;} @font-face {font-family:"Lithos Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 155 0;} @font-face {font-family:"Mesquite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Minion Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870225 1342234747 0 0 415 0;} @font-face {font-family:"Minion Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870225 1342234747 0 0 415 0;} @font-face {font-family:"Minion Pro Med"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870225 1342234747 0 0 415 0;} @font-face {font-family:"Minion Pro SmBd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-536870225 1342234747 0 0 415 0;} @font-face {font-family:"Myriad Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-1610612049 1342185547 0 0 415 0;} @font-face {font-family:"Myriad Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-1610612049 1342185547 0 0 415 0;} @font-face {font-family:"Myriad Pro Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-1610612049 1342185547 0 0 415 0;} @font-face {font-family:"Nueva Std Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"OCR A Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:-2147483473 1342186058 0 0 1 0;} @font-face {font-family:"Orator Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:-2147483473 1342208251 0 0 1 0;} @font-face {font-family:"Poplar Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Prestige Elite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:-2147483473 1342208251 0 0 1 0;} @font-face {font-family:"Rosewood Std Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Stencil Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1073750090 0 0 1 0;} @font-face {font-family:"Tekton Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 155 0;} @font-face {font-family:"Tekton Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 155 0;} @font-face {font-family:"Tekton Pro Ext"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 155 0;} @font-face {font-family:"Trajan Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:-2147483473 1342185547 0 0 155 0;} @font-face {font-family:Marlett; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Console"; panose-1:2 11 6 9 4 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-2147482993 6144 0 0 31 0;} @font-face {font-family:"Lucida Sans Unicode"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147480833 14699 0 0 63 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"Comic Sans MS"; panose-1:3 15 7 2 3 3 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Impact; panose-1:2 11 8 6 3 9 2 5 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Georgia; panose-1:2 4 5 2 5 4 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium"; panose-1:2 11 6 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Palatino Linotype"; panose-1:2 4 5 2 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-536870009 1073741843 0 0 415 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Webdings; panose-1:5 3 1 2 1 5 9 6 7 3; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MV Boli"; panose-1:2 0 5 0 3 2 0 9 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 0 256 0 0 0;} @font-face {font-family:AngsanaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:BrowalliaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:"Browallia New"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:CordiaUPC; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:DilleniaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:EucrosiaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:FreesiaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:IrisUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:JasmineUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:KodchiangUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:LilyUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:Aharoni; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:David; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"David Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:FrankRuehl; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Levenim MT"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:Miriam; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Miriam Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Miriam Fixed"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Fixed Miriam Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:Narkisim; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:Rod; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Rod Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:2049 0 0 0 32 0;} @font-face {font-family:"Traditional Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Arabic Transparent"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Andalus; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic Fixed"; panose-1:2 1 0 9 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Kartika; panose-1:2 2 5 3 3 4 4 6 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:8388611 0 0 0 1 0;} @font-face {font-family:"\@MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:FantasyMatrix; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:FantasyMatrixSmall; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Jokerman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"HolidayPi BT"; panose-1:5 12 1 2 1 2 9 2 2 2; mso-font-charset:2; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"OldDreadfulNo7 BT"; panose-1:4 8 8 5 6 1 7 1 8 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"MisterEarl BT"; panose-1:3 8 8 2 2 3 2 2 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Calligraph421 BT"; panose-1:3 6 7 2 5 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Blackletter686 BT"; panose-1:3 4 8 2 2 6 8 4 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Cataneo BT"; panose-1:3 2 8 2 4 5 2 6 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Staccato222 BT"; panose-1:3 9 7 2 3 4 7 2 4 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"ParkAvenue BT"; panose-1:3 2 6 2 5 5 6 8 7 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Square721 BT"; panose-1:2 11 5 4 2 2 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Broadway BT"; panose-1:4 4 9 5 8 11 2 2 5 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Microsoft Sans Serif"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627401183 -2147483648 8 0 66047 0;} @font-face {font-family:"Scruff LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Odessa LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Highlight LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"One Stroke Script LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Mekanik LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Tiranti Solid LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Pump Demi Bold LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Quixley LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"La Bamba LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Rage Italic LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Ruach LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Westwood LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Milano LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Victorian LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Academy Engraved LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Orange LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"John Handy LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Jokerman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Agency FB"; panose-1:2 11 5 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Arial Rounded MT Bold"; panose-1:2 15 7 4 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Blackadder ITC"; panose-1:4 2 5 5 5 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT"; panose-1:2 7 6 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Black"; panose-1:2 7 10 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Condensed"; panose-1:2 7 6 6 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Book Antiqua"; panose-1:2 4 6 2 5 3 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bookman Old Style"; panose-1:2 5 6 4 5 5 5 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bradley Hand ITC"; panose-1:3 7 4 2 5 3 2 3 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Calisto MT"; panose-1:2 4 6 3 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Castellar; panose-1:2 10 4 2 6 4 6 1 3 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Century Gothic"; panose-1:2 11 5 2 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Century Schoolbook"; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Copperplate Gothic Bold"; panose-1:2 14 7 5 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Copperplate Gothic Light"; panose-1:2 14 5 7 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Curlz MT"; panose-1:4 4 4 4 5 7 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Edwardian Script ITC"; panose-1:3 3 3 2 4 7 7 13 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Elephant; panose-1:2 2 9 4 9 5 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Engravers MT"; panose-1:2 9 7 7 8 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Bold ITC"; panose-1:2 11 9 7 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Demi ITC"; panose-1:2 11 8 5 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Light ITC"; panose-1:2 11 4 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Medium ITC"; panose-1:2 11 6 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Felix Titling"; panose-1:4 6 5 5 6 2 2 2 10 4; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Forte; panose-1:3 6 9 2 4 5 2 7 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Franklin Gothic Book"; panose-1:2 11 5 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi"; panose-1:2 11 7 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi Cond"; panose-1:2 11 7 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Heavy"; panose-1:2 11 9 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium Cond"; panose-1:2 11 6 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"French Script MT"; panose-1:3 2 4 2 4 6 7 4 6 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Gigi; panose-1:4 4 5 4 6 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Gill Sans MT Ext Condensed Bold"; panose-1:2 11 9 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT"; panose-1:2 11 5 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT Condensed"; panose-1:2 11 5 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold"; panose-1:2 11 10 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold Condensed"; panose-1:2 11 10 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gloucester MT Extra Condensed"; panose-1:2 3 8 8 2 6 1 1 1 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Old Style"; panose-1:2 2 5 2 5 3 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Stout"; panose-1:2 2 9 4 7 3 11 2 4 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Haettenschweiler; panose-1:2 11 7 6 4 9 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Imprint MT Shadow"; panose-1:4 2 6 5 6 3 3 3 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Maiandra GD"; panose-1:2 14 5 2 3 3 8 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Monotype Corsiva"; panose-1:3 1 1 1 1 2 1 1 1 1; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"OCR A Extended"; panose-1:2 1 5 9 2 1 2 1 3 3; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Palace Script MT"; panose-1:3 3 3 2 2 6 7 12 11 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Papyrus; panose-1:3 7 5 2 6 5 2 3 2 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Perpetua; panose-1:2 2 5 2 6 4 1 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Perpetua Titling MT"; panose-1:2 2 5 2 6 5 5 2 8 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Pristina; panose-1:3 6 4 2 4 4 6 8 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rage Italic"; panose-1:3 7 5 2 4 5 7 7 3 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Rockwell; panose-1:2 6 6 3 2 2 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Condensed"; panose-1:2 6 6 3 5 4 5 2 1 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Extra Bold"; panose-1:2 6 9 3 4 5 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Script MT Bold"; panose-1:3 4 6 2 4 6 7 8 9 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tw Cen MT"; panose-1:2 11 6 2 2 1 4 2 6 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Tw Cen MT Condensed"; panose-1:2 11 6 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Wingdings 2"; panose-1:5 2 1 2 1 5 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Wingdings 3"; panose-1:5 4 1 2 1 8 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Sans"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Sans Typewriter"; panose-1:2 11 5 9 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tw Cen MT Condensed Extra Bold"; panose-1:2 11 8 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"MT Extra"; panose-1:5 5 1 2 1 2 5 2 2 2; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Outlook"; panose-1:5 1 1 0 1 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Bookshelf Symbol 7"; panose-1:5 1 1 1 1 1 1 1 1 1; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Reference Sans Serif"; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"MS Reference Specialty"; panose-1:5 0 5 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Freestyle Script"; panose-1:3 8 4 2 3 2 5 11 4 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Juice ITC"; panose-1:4 4 4 3 4 10 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Kristen ITC"; panose-1:3 5 5 2 4 2 2 3 2 2; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Handwriting"; panose-1:3 1 1 1 1 1 1 1 1 1; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Mistral; panose-1:3 9 7 2 3 4 7 2 4 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Tempus Sans ITC"; panose-1:4 2 4 4 3 13 7 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Arial Narrow"; panose-1:2 11 5 6 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 2048 0 0 159 0;} @font-face {font-family:Garamond; panose-1:2 2 4 4 3 3 1 1 8 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Algerian; panose-1:4 2 7 5 4 10 2 6 7 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Baskerville Old Face"; panose-1:2 2 6 2 8 5 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bauhaus 93"; panose-1:4 3 9 5 2 11 2 2 12 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bell MT"; panose-1:2 2 5 3 6 3 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Berlin Sans FB"; panose-1:2 14 6 2 2 5 2 2 3 6; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Berlin Sans FB Demi"; panose-1:2 14 8 2 2 5 2 2 3 6; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bernard MT Condensed"; panose-1:2 5 8 6 6 9 5 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Poster Compressed"; panose-1:2 7 7 6 8 6 1 5 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:7 0 0 0 17 0;} @font-face {font-family:"Britannic Bold"; panose-1:2 11 9 3 6 7 3 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Broadway; panose-1:4 4 9 5 8 11 2 2 5 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Brush Script MT"; panose-1:3 6 8 2 4 4 6 7 3 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Californian FB"; panose-1:2 7 4 3 6 8 11 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Centaur; panose-1:2 3 5 4 5 2 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Chiller; panose-1:4 2 4 4 3 16 7 2 6 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Colonna MT"; panose-1:4 2 8 5 6 2 2 3 2 3; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Cooper Black"; panose-1:2 8 9 4 4 3 11 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Footlight MT Light"; panose-1:2 4 6 2 6 3 10 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Harlow Solid Italic"; panose-1:4 3 6 4 2 15 2 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Harrington; panose-1:4 4 5 5 5 10 2 2 7 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"High Tower Text"; panose-1:2 4 5 2 5 5 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Jokerman; panose-1:4 9 6 5 6 13 6 2 7 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Kunstler Script"; panose-1:3 3 4 2 2 6 7 13 13 6; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Bright"; panose-1:2 4 6 3 7 5 5 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Calligraphy"; panose-1:3 1 1 1 1 1 1 1 1 1; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Fax"; panose-1:2 6 6 2 5 5 5 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Magneto; panose-1:4 3 8 5 5 8 2 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Matura MT Script Capitals"; panose-1:3 2 8 2 6 6 2 7 2 2; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Modern No\. 20"; panose-1:2 7 7 4 7 5 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Niagara Engraved"; panose-1:4 2 5 2 7 7 3 3 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Niagara Solid"; panose-1:4 2 5 2 7 7 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Old English Text MT"; panose-1:3 4 9 2 4 5 8 3 8 6; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Onyx; panose-1:4 5 6 2 8 7 2 2 2 3; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Parchment; panose-1:3 4 6 2 4 7 8 4 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Playbill; panose-1:4 5 6 3 10 6 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Poor Richard"; panose-1:2 8 5 2 5 5 5 2 7 2; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Ravie; panose-1:4 4 8 5 5 8 9 2 6 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Informal Roman"; panose-1:3 6 4 2 3 4 6 11 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Showcard Gothic"; panose-1:4 2 9 4 2 1 2 2 6 4; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Snap ITC"; panose-1:4 4 10 7 6 10 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Stencil; panose-1:4 4 9 5 13 8 2 2 4 4; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Viner Hand ITC"; panose-1:3 7 5 2 3 5 2 2 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Vivaldi; panose-1:3 2 6 2 5 5 6 9 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Vladimir Script"; panose-1:3 5 4 2 4 4 7 7 3 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Wide Latin"; panose-1:2 10 10 7 5 5 5 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Candara; panose-1:2 14 5 2 3 3 3 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750091 0 0 159 0;} @font-face {font-family:Consolas; panose-1:2 11 6 9 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610611985 1073750091 0 0 159 0;} @font-face {font-family:Constantia; panose-1:2 3 6 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750091 0 0 159 0;} @font-face {font-family:Corbel; panose-1:2 11 5 3 2 2 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750091 0 0 159 0;} @font-face {font-family:"Segoe UI"; panose-1:2 11 5 2 4 2 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-536861953 -1073733541 9 0 479 0;} @font-face {font-family:"\@Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-134238209 -371195905 63 0 4129279 0;} @font-face {font-family:"\@MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-priority:1; mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} h1 {mso-style-priority:5; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 1 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:1; font-size:15.0pt; mso-bidi-font-size:18.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; mso-font-kerning:0pt; font-weight:bold;} h2 {mso-style-priority:6; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 2 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:2; font-size:13.0pt; mso-bidi-font-size:16.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} h3 {mso-style-priority:7; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 3 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:3; font-size:11.0pt; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} h4 {mso-style-priority:8; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 4 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:4; font-size:11.0pt; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:normal;} h5 {mso-style-priority:9; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 5 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:5; font-size:11.0pt; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:normal; font-style:italic;} h6 {mso-style-priority:10; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 6 Char"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-outline-level:6; font-size:10.0pt; mso-bidi-font-size:13.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} p {mso-style-priority:1; mso-style-unhide:no; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.MsoAcetate, li.MsoAcetate, div.MsoAcetate {mso-style-noshow:yes; mso-style-priority:99; mso-style-unhide:no; mso-style-link:"Balloon Text Char"; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:8.0pt; font-family:"Tahoma","sans-serif"; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast;} span.MsoPlaceholderText {mso-style-noshow:yes; mso-style-priority:99; mso-style-unhide:no; color:gray;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:36.0pt; mso-add-space:auto; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:36.0pt; margin-bottom:.0001pt; mso-add-space:auto; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:36.0pt; margin-bottom:.0001pt; mso-add-space:auto; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:36.0pt; mso-add-space:auto; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.MsoQuote, li.MsoQuote, div.MsoQuote {mso-style-priority:1; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Quote Char"; mso-style-next:Normal; margin-top:0cm; margin-right:36.0pt; margin-bottom:10.0pt; margin-left:36.0pt; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi; color:black; mso-themecolor:text1;} span.Heading1Char {mso-style-name:"Heading 1 Char"; mso-style-priority:5; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 1"; mso-ansi-font-size:15.0pt; mso-bidi-font-size:18.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} span.Heading2Char {mso-style-name:"Heading 2 Char"; mso-style-priority:6; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 2"; mso-ansi-font-size:13.0pt; mso-bidi-font-size:16.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} span.Heading3Char {mso-style-name:"Heading 3 Char"; mso-style-priority:7; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 3"; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} span.Heading4Char {mso-style-name:"Heading 4 Char"; mso-style-priority:8; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 4"; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191;} span.Heading5Char {mso-style-name:"Heading 5 Char"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 5"; mso-bidi-font-size:14.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-style:italic;} span.Heading6Char {mso-style-name:"Heading 6 Char"; mso-style-priority:10; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Heading 6"; mso-ansi-font-size:10.0pt; mso-bidi-font-size:13.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} p.Publishwithline, li.Publishwithline, div.Publishwithline {mso-style-name:"Publish with line"; mso-style-noshow:yes; mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:16.0pt; mso-bidi-font-size:19.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:major-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; color:#17365D; mso-themecolor:text2; mso-themeshade:191; font-weight:bold;} p.PublishStatus, li.PublishStatus, div.PublishStatus {mso-style-name:"Publish Status"; mso-style-noshow:yes; mso-style-unhide:no; margin-top:6.0pt; margin-right:0cm; margin-bottom:2.0pt; margin-left:0cm; mso-pagination:widow-orphan; background:#FDEB9F; border:none; mso-border-alt:solid #FDBD5E .5pt; padding:0cm; mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt; font-size:9.0pt; mso-bidi-font-size:13.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.PublishStatusAccessible, li.PublishStatusAccessible, div.PublishStatusAccessible {mso-style-name:PublishStatus_Accessible; mso-style-noshow:yes; mso-style-unhide:no; margin-top:6.0pt; margin-right:0cm; margin-bottom:2.0pt; margin-left:0cm; mso-pagination:widow-orphan; border:none; mso-border-alt:solid #FDBD5E .5pt; padding:0cm; mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt; font-size:9.0pt; mso-bidi-font-size:13.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.Account, li.Account, div.Account {mso-style-name:Account; mso-style-noshow:yes; mso-style-unhide:no; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:3.6pt 63.35pt; font-size:9.0pt; mso-bidi-font-size:12.0pt; font-family:"Segoe UI","sans-serif"; mso-fareast-font-family:"Segoe UI"; color:#4F81BD;} p.Categories, li.Categories, div.Categories {mso-style-name:Categories; mso-style-noshow:yes; mso-style-unhide:no; mso-style-parent:Account; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:3.6pt 63.35pt; font-size:9.0pt; mso-bidi-font-size:12.0pt; font-family:"Segoe UI","sans-serif"; mso-fareast-font-family:"Segoe UI"; color:#4F81BD;} p.PadderBetweenTitleandProperties, li.PadderBetweenTitleandProperties, div.PadderBetweenTitleandProperties {mso-style-name:"Padder Between Title and Properties"; mso-style-noshow:yes; mso-style-unhide:no; margin-top:0cm; margin-right:0cm; margin-bottom:1.0pt; margin-left:0cm; mso-pagination:widow-orphan; font-size:1.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.PadderBetweenControlandBody, li.PadderBetweenControlandBody, div.PadderBetweenControlandBody {mso-style-name:"Padder Between Control and Body"; mso-style-noshow:yes; mso-style-unhide:no; mso-style-next:Normal; margin-top:0cm; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; mso-pagination:widow-orphan; font-size:1.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} p.underline, li.underline, div.underline {mso-style-name:underline; mso-style-noshow:yes; mso-style-unhide:no; mso-style-parent:""; margin-top:2.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; border:none; mso-border-bottom-alt:solid #4F81BD 1.0pt; mso-border-bottom-themecolor:accent1; padding:0cm; mso-padding-alt:0cm 0cm 2.0pt 0cm; font-size:1.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} span.QuoteChar {mso-style-name:"Quote Char"; mso-style-priority:1; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:Quote; color:black; mso-themecolor:text1;} span.BalloonTextChar {mso-style-name:"Balloon Text Char"; mso-style-noshow:yes; mso-style-priority:99; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Balloon Text"; mso-ansi-font-size:8.0pt; mso-bidi-font-size:8.0pt; font-family:"Tahoma","sans-serif"; mso-ascii-font-family:Tahoma; mso-hansi-font-family:Tahoma; mso-bidi-font-family:Tahoma;} span.msoIns {mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single; color:teal;} span.msoDel {mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:red;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 72.0pt 72.0pt 72.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

[Enter Post Title Here]

 

 

 فصل یازدهم

C#  در   ها generic

Mohsen_mahyar@yahoo.com

                                آنچه که در این فصل یاد خواهید گرفت:

ها برای پیادهسازی الگوریتمها بدون وابستگی به نوع داده generic • آشنایی با

ها و استفاده از آنها در تعریف نوع دادهها generic • ایجاد

ها و غلبه بر آنها generic • آشنایی با محدودیتهای تعریف

FCL های موجود در generic • نحوهی کار با

ها به شما اجازه میدهند، یک ساختار generic. هستند NET ها جزء قدرتمندترین و مفیدترین ویژگیهای . 2,0 generic1

دادهی نوع امن، یک کلاس یاور 2 سودمند تعریف کنید، بدون اینکه نوع دادهی واقعی مورد استفاده آن را مشخص کنید.

ها به پیشرفت مهمی در کارایی و کیفیت کد منجر میشوند، چون میتوانید بدون نیاز به پیادهسازی مجدد یک generic

هستند، اما از نظر پیادهسازی و C++ ها شبیه الگو 3های generic . الگوریتم آن را با ساختارهای دادهای دیگر بکار برید

تواناییها باهم تفاوت دارند.

generic -1-11 تعریف

مشخص میگردد. نوع generic شبیه یک کلاس عادی تعریف میشود، ولی بعد از نام کلاس نوع generic یک کلاس

بوسیله کلاس، میتوانند به عنوان نوع دادهی یک عضو از کلاس یا به عنوان نوع دادهی پارامترهای متدها generic دادهی

استفاده شوند.

public class MyGeneric <T>

{ private T member;

Public void Method (T obj)

{

}

}

ها میتوان generic ی استفاده کند. ولی به کمک generic بصورت یک نوع object هر کلاسی میتواند از نوع دادهی

نوع دادهی مورد نیاز در داخل کلاس را هنگام اعلان یک نمونه از آن کلاس مشخص کرد.

1 Generic

2 Helper

3 Template

فصل یازدهم-کلها

159

پیادهسازی میکنید و سپس میتوانید آن را با generic شما سرویسدهنده را فقط یکبار به عنوان یک سرویسدهندهی

را نشان میدهد. Stack generic هر نوع دادهای بکار برید. مثال زیر نحوهی تعریف و کاربرد یک

public class Stack<T>

{

T[] m_Items;

public void Push(T item)

{...}

public T Pop( )

{...}

}

Stack<int> stack = new Stack<int>( );

stack.Push(١);

stack.Push(٢);

int number = stack.Pop( );

را نشان میدهد. Stack generic 1 پیادهسازی کامل - مثال 11

1- مثال 11

public class Stack<T>

{

const int DefaultSize = ١٠٠;

readonly int m_Size;

int m_StackPointer = ٠;

T[] m_Items;

public Stack( ) : this(DefaultSize)

{}

public Stack(int size)

{

m_Size = size;

m_Items = new T[m_Size];

}

public void Push(T item)

{

if(m_StackPointer >= m_Size)

{

throw new StackOverflowException( );

}

m_Items[m_StackPointer] = item;

m_StackPointer++;

}

public T Pop( )

{

m_StackPointer--;

if(m_StackPointer >= ٠)

{

return m_Items[m_StackPointer];

}

else

{

m_StackPointer = ٠;

throw new InvalidOperationException("Cannot pop an empty stack");

}

}

}

تعریف میشود. generic T با استفاده از پارامتر نوع Stack کلاس

public class Stack<T>

{...}

از چه نوع دادهای generic T را بکار میبرید، باید مشخص کنید کامپایلر به جای نوع دادهی Stack generic زمانی که

لازم است. generic استفاده کند. در هر دو حالت اعلان یا تعریف یک نمونه از آن کلاس، تعیین نوع دادهی

C# برنامه نویسی

160

Stack<int> stack = new Stack<int>( );

را پذیرفته یا بر T کامپایلر و کنترلکنندهی زمان اجرا بقیه کارها را انجام میدهند. همهی متدها ( یا خصوصیاتی) که یک

از نوع دادهی مشخص شده استفاده خواهند کرد. T میگردانند، به جای

است. generic یک نوع دادهی <Stack<T است. در حالی که generic یک پارامتر نوع دادهی T : توجه

مزیت این نوع برنامهنویسی به عدم پیادهسازی مجدد یک الگوریتم برای انواع دادههای دیگر است.

ها generic -2-11 پیادهسازی

هستند. اما اختلافات مهمی در روش پیادهسازی و پشتیبانی توسط C++ شبیه الگوهای C# های generic بطور سطحی

ایمنی نوع داده را بهبود میدهند، اما تواناییهای محدودتری C#های generic ،C++ کامپایلر دارند. در مقایسه با الگوهای

زمانی که یک کلاس الگو با یک نوع دادهی خاص را بکار میبرید، کامپایلر کد الگو را ،++C دارند. در بعضی از کامپایلرهای

و هر جا که (inline) کامپایل نمیکند. زمانی که نوع داده را مشخص میکنید، کامپایلر کد را در داخل برنامه درج میکند

برخورد کند، با نوع داده مشخص شده جایگزین میکند. این عملیات بر عهدهی پیوند دهنده 1 generic به پارامتر نوع داده

است و انجام آن همیشه امکانپذیر نیست. این عمل زمان بارگذاری برنامه و حافظه مصرفی را افزایش میدهد. ++C

طرف سرویسدهنده را کامپایل #C بصورت محلی پشتیبانی میشوند. زمانی که کد IL و CLR ها در generic ،2,0NET . در

فقط پارامترها یا محلهایی را برای انواع دادهی IL ، کامپایل میشود. با این وجود IL کنید، شبیه انواع دادهای دیگر به

را در بر دارند. generic اطلاعات ،generic واقعی در بر میگیرد. علاوه براین، فرادادههای سرویس دهندهی

کامپایلر طرف سرویسگیرنده، این فرادادهها را برای پشتیبانی ایمنی نوع داده بکار میبرد. زمانی که سرویسگیرنده یک نوع

را در generic فراهم میکند، کامپایلر سرویس گیرنده، پارامتر نوع دادهی generic دادهی خاص را به جای نوع دادهی

را با نوع دادهی generic فرادادههای سرویس دهنده با نوع دادهی خاص جایگزین میکند.. این عمل یک تعریف از یک

وجود نداشته است. بدین روش کامپایلر میتواند صحت generic خاص ایجاد میکند، همانند اینکه هیچ نوع داده

را برای نوع داده خاص به اجرا در آورد. IDE پارامترهای متد، بررسی ایمنی نوع داده و حتی هوشمندی

داخل سرویسدهنده را به کد ماشین ترجمه میکند. آن بر generic کلاس IL کد NET. سوال جالب این است که چگونه

اساس اینکه نوع دادهی مشخص شده در ماشین واقعی از نوع مقداری یا ارجاعی است، تولید میگردد. اگر سرویسگیرنده

را با نوع مقداری مشخص شده جایگزین generic پارامترهای نوع داده JIT یک نوع داده مقداری مشخص کند، کامپایلر

بر اساس نوع مقداری generic را به کد ماشین محلی کامپایل میکند. چون در حالت عادی کد کلاس IL میکند و کد

همان کد JIT ترجمه شده است، پس کافی است یک ارجاع به کد سرویسدهنده برگردانده شود، چون کامپایلر

سرویسدهنده را با نوع دادهی مشخص شده مقداری بکار میبرد.

جایگزین کرده و object را با generic پارامترهای JIT اگر سرویسگیرنده یک نوع داده ارجاعی مشخص کند، کامپایلر

را به کد ماشین محلی کامپایل میکند. این کد میتواند برای همه کاربردهای یک نوع داده ارجاعی بکار رود. توجه کنید IL

مدیریت شده Heap فقط کد واقعی را مجددا استفاده میکند. نمونهها براساس اندازهی آنها به JIT ، که در این روش

اختصاص داده میشوند و هیچ عمل قالببندی وجود ندارد.

1 Linker

فصل یازدهم-کلها

161

1ها generic -3-11 اعمالکردن

2,0 میتوانند از مزایای انواع داده CLR همه زبانهای مطیع ،CLR و IL ها در generic به دلیل پشتیبانی محلی

1 را بکار میبرد. - مثال 11 generic 2005 زیر، کلاس VB ی بهره ببرند. برای مثال کد generic

Dim stack As Stack(Of Integer)

stack = new Stack(Of Integer)

stack.Push(٣)

Dim number As Integer

number = stack.Pop( )

است. Point مفید از generic ها را در کلاسها و ساختارها بکار برید. این یک ساختار generic میتوانید

public struct Point<T>

{

public T X;

public T Y;

}

بکار برید. int را با مختصات Point generic میتوانید

Point<int> point;

point.X = ١;

point.Y = ٢;

و برای رسم نمودارهایی که دقت اعشار نیاز دارند:

Point<double> point;

point.X = ١٫٢;

point.Y = ٣٫۴;

چندگانه generic -4-11 انواع داده

نشان generic تعریف کند. برای مثال، لیست پیوندی generic یک نوع دادهی واحد میتواند چندین پارامتر نوع دادهی

2 را ملاحظه کنید. - داده شده در مثال 11

2- مثال 11

class Node<K,T>

{

public K Key;

public T Item;

public Node<K,T> NextNode;

public Node( )

{

Key = default(K);

Item = default(T);

NextNode = null;

}

public Node(K key,T item,Node<K,T> nextNode)

{

Key = key;

Item = item;

NextNode = nextNode;

}

}

public class LinkedList<K,T>

{

Node<K,T> m_Head;

public LinkedList( )

1 Apply

C# برنامه نویسی

162

{

m_Head = new Node<K,T>( );

}

public void AddHead(K key,T item)

{

Node<K,T> newNode = new Node<K,T>(key,item,m_Head.NextNode);

m_Head.NextNode = newNode;

}

}

لیست پیوندی گرهها را ذخیره میکند.

class Node<K,T>

{...}

را در بر دارد. هر گرهای یک ارجاع به (generic T و یک مقدار ( پارامتر نوع (generic K هر گره یک کلید ( پارامتر نوع

تعریف میشود. T و generic K گره بعدی لیست دارد. لیست پیوندی نیز با پارامترهای نوع

public class LinkedList<K,T>

{...}

را در اختیار قرار دهد. ()AddHead همچون generic این عمل به لیست اجازه میدهد، متدهای

public void AddHead(K key,T item);

اعلان میکنید، باید انواع دادهی مورد استفاده را مشخص کنید. با این generic زمانی که یک متغیر از نوع یک کلاس

باشند. برای مثال، لیست پیوندی یک متغیر عضو generic وجود، خود انواع دادهای مشخص شده میتوانند انواع دادهای

با استفاده از پارامترهای m_Head . دارد، که به اولین عنصر لیست پیوندی ارجاع میکند <Node<K,T از نوع m_Head بنام

اعلان میشود. T و generic K نوع دادهی

Node<K,T> m_Head;

مربوط به خود generic لازم است در زمان تعریف یک گره، انواع دادهی مشخص را فراهم سازید. میتوانید پارامترهای نوع

لیست پیوندی را بکار برید.

public void AddHead(K key,T item)

{

Node<K,T> newNode = new Node<K,T>(key,item,m_Head.NextNode);

m_Head.NextNode = newNode;

}

لیست پیوندی و گره یکسان هستند، ولی generic توجه کنید که برای بالابردن قابلیت خوانایی، اسامی پارامترهای نوع

میتوانند اسامی دیگری داشته باشند، همچون:

public class LinkedList<U,V>

{...}

یا

public class LinkedList<KeyType,DataType>

{...}

بصورت زیر اعلان میشود: m_Head ، در این حالت

Node<KeyType,DataType> m_Head;

زمانی که سرویسگیرنده از لیست پیوندی استفاده میکند، آن باید انواع دادهی مشخصی را فراهم سازد. سرویسگیرنده

را برای عناصر انتخاب کند. string را برای کلید و int میتواند

LinkedList<int,string> list = new LinkedList<int,string>( );

list.AddHead(١٢٣,"AAA");

همچنین میتوانید هر ترکیب از انواع داده دیگر را انتخاب کنید:

فصل یازدهم-کلها

163

LinkedList<DateTime,string> list = new LinkedList<DateTime,string>( );

list.AddHead(DateTime.Now,"AAA");

generic -5-11 محدودیتهای

IL را بطور مستقل از نوع دادهی انتخاب شده توسط سرویسگیرنده، به generic کامپایلر کد ، C#های generic بوسیله

generic میتواند سعی بر کاربرد متدها، خصوصیات یا اعضای پارامترهای نوع generic ترجمه میکند. در نتیجه، کد

داشته باشد، در حالیکه با نوع داده مشخص شده توسط کاربر ناسازگار است. این غیر قابل قبول است، چون عامل از بین

نیاز دارید کامپایلر را برای در نظر گرفتن محدودیتهای مربوط به انواع داده استفاده شده C#بردن ایمنی نوع داده است. در

راهنمایی کنید. سه نوع محدودیت وجود دارد که در زیر به آنها اشاره میشود: generic در سرویسگیرنده به جای نوع

محدودیتهای مشتق

از کدام نوع پایه همچون واسط یا کلاس پایهی generic به کامپایلر نشان میدهد یک پارامتر نوع o

خاص مشتق میشود.

محدودیت سازندهی پیش فرض

سازندهی عمومی پیش فرض را دارد. generic به کامپایلر نشان میدهد که پارامتر نوع o

محدودیت نوع داده مقداری یا ارجاعی

را به یک نوع دادهی مقداری یا ارجاعی محدود میکند. generic پارامتر نوع o

را برای IDE میتواند چندین محدودیت را بکار گیرد و در زمان کاربرد میتوانید سیستم هوشمند generic یک نوع

استفاده کنید. (مانند پیشنهاد متدها یا خصوصیاتی از نوع دادهی پایه) generic انعکاس محدودیتهای پارامتر نوع

ضروری ، generic توجه: اگرچه محدودیتها اختیاری هستند، اغلب در زمان توسعه یک نوع دادهی

هستند. بدون آنها، کامپایلر یک روش محافظه کار و ایمن نوع داده بکار میبرد و فقط دسترسی به عملکرد

را مجاز میدارد. generic در پارامترهای نوع دادهی object

هستند. بنابراین سرویس گیرنده میتواند مزایای آنها را به خوبی generic محدودیتها بخشی از فرادادهی نوع دادهی

استفاده کند. کامپایلر طرف سرویسگیرنده به توسعهدهندهی سرویسگیرنده اجازه میدهد فقط از انواع دادهای مطابق با

محدودیتها و ایمنی نوع داده استفاده کند.

یک مثال برای شرح نیاز به کاربرد محدودیتها بصورت زیر آمده است. فرض کنید دوست دارید، جستجوکردن و

2 اضافه کنید. - اندیسگذاری بوسیله تواناییهای کلید را به لیست پیوندی مثال 11

public class LinkedList<K,T>

{

T Find(K key)

{...}

public T this[K key]

{

get

{

return Find(key);

}

}

}

این مثال به سرویسگیرنده نوشتن کد زیر را اجازه میدهد:

C# برنامه نویسی

164

LinkedList<int,string> list = new LinkedList<int,string>( );

list.AddHead(١٢٣,"AAA");

list.AddHead(۴۵۶,"BBB");

string item = list[۴۵۶];

Debug.Assert(item == "BBB");

برای پیادهسازی عمل جستجو، لازم است لیست را پیمایش کرده و کلید هر گره را با کلید موجود مقایسه کنید و عنصر گره

بصورت زیر کامپایل نمیشود: ()Find مرتبط با کلید را برگردانید. مشکل این است که پیادهسازی

T Find(K key)

{

Node<K,T> current = m_Head;

while(current.NextNode != null)

{

if(current.Key == key) //Will not compile

{

break;

}

else

{

current = current.NextNode;

}

}

return current.Item;

}

کامپایلر خط زیر را نمیپذیرد:

if(current.Key == key)

عملگر == را پشتیبانی میکند. برای مثال، ساختارها این پیادهسازی را فراهم نمیکنند. میتوانید بر K چون نمیداند آیا

چیره شوید. IComparable محدودیت عملگر == با استفاده از واسط

public interface IComparable

{

int CompareTo(object obj);

}

میتواند آن را ()Find در صورتی که شی موردنظر شما با شی پیادهسازیکننده یکسان باشد، صفر بر میگرداند. پس متد

بصورت زیر بکار برد.

if(current.Key.CompareTo(key) == ٠)

را پیادهسازی IComparable واسط K متاسفانه این کد نیز کامپایل نمیشود، چون کامپایلر به هیچ روشی نمیداند که

میکند.

با قالببندی صریح میتوانید کامپایلر را برای کامپایلکردن این خط مجبور سازید. اما ایمنی نوع داده را از دست میدهید.

if(((IComparable)(current.Key)).CompareTo(key) == ٠)

مشتق نشود، در زمان اجرا یک استثنا رخ میدهد. بعلاوه، زمانی که نوع IComparable اگر نوع دادهی سرویسگیرنده از

داده مشخص شده، یک نوع دادهی مقداری باشد، یک جعبهبندی اجباری از کلید انجام میشود که برخی دلایل بهرهوری را

تحت تاثیر قرار میدهد.

-1 محدودیتهای مشتق -5-11

را روی پارامتر نوع where برای تعریف یک محدودیت استفاده میشود. کلمه کلیدی where 2,0 ، کلمه کلیدی C# در

بکار برید که به دنبال آن : و بعد از آن نام واسط مورد نظر جهت پیادهسازی مشخص میگردد. برای مثال، generic دادهی

لازم است. LinkedList کلاس ()Find در کد زیر یک محدودیت مشتق برای پیادهسازی متد

public class LinkedList<K,T> where K : IComparable

فصل یازدهم-کلها

165

{

T Find(K key)

{

Node<K,T> current = m_Head;

while(current.NextNode != null)

{

if(current.Key.CompareTo(key) == ٠)

{

break;

}

else

{

current = current.NextNode;

}

}

return current.Item;

}

//Rest of the implementation

}

را مجاز میدارد، اما هنوز عیب جعبهبندی نوع IComparable توجه: اگرچه این محدودیت استفاده از

generic واسط System دادهی مقداری حذف نشده است. برای غلبه بر این مشکل، فضای نامی

را تعریف میکند. <IComparable<T

public interface IComparable<T>

{

int CompareTo(T other);

}

محدود کنید. با این عمل نه تنها ایمنی نوع داده <IComparable<T میتوانید پارامتر نوع دادهی کلید را برای پشتیبانی از

را بدست میآورید، جعبهبندی انواع دادهی مقداری نیز حذف میگردد.

public class LinkedList<K,T> where K : IComparable<K>

{...}

2,0 نیز NET . را پشتیبانی میکنند، در IComparable 1,1 واسط NET . در حقیقت، همه انواع دادهای که در

برای (... ،string ،int ) را پشتیبانی میکنند. این عمل شما را قادر می سازد، از انواع دادهی معمول <IComparable<T

برای عمل NET. ، برای مرتبسازی و منظمکردن طراحی میشود <IComparable<T کلیدها استفاده کنید. در حالیکه

را تعریف میکند. <generic IEquatable<T مقایسه واسط

public interface IEquatable<T>

{

bool Equals(T other);

}

از واسط LinkedList ظاهر میشوند. برای مثال، اگر generic 2,0 همه محدودیتها قبل از لیست مشتق کلاس C# در

را قبل از آن قرار دهید. where مشتق میشود، کلمهی کلیدی <IComparable<T

public class LinkedList<K,T> : IEnumerable<T> where K : IComparable<K>

{...}

اعلان میکند که کلید آن یک نوع دادهی گسسته 1 باشد. کامپایلر LinkedList زمانی که سرویسگیرنده یک متغیر از نوع

مشتق شود و از ایجاد کد سرویسگیرنده <IComparable<T طرف سرویسگیرنده اصرار دارد که نوع دادهی کلید آن از

سرباز میزند.

یکسانی محدود کنید. مثال: generic با استفاده از کاما میتوانید چندین واسط را روی پارامتر نوع دادهی

public class LinkedList<K,T> where K : IComparable<K>,IConvertible

{...}

1 Concrete

C# برنامه نویسی

166

مربوط به یک کلاس محدودیتهایی فراهم سازید. generic میتوانید برای هر پارامتر نوع دادهی

public class LinkedList<K,T> where K : IComparable<K>

where T : ICloneable

{...}

-2 محدودیت سازنده -5-11

تعریف کنید. مشکل اینجاست که generic را در داخل یک کلاس generic فرض کنید میخواهید یک نمونه از شی

کامپایلر نمیداند آیا نوع دادهی مشخص شده، سازندهی مطابق با حالت مورد استفادهی شما را دارد یا نه. پس کامپایلر عمل

را برای generic به شما اجازه میدهد یک پارامتر نوع دادهی #C ، کامپایل این خط را نمیپذیرد. برای حل این مشکل

انجام میشود. مثال زیر یک روش ()new محدود کنید. این بوسیله محدودیت public پشتیبانی یک سازندهی پیشفرض

2 را نشان میدهد. - مثال 11 <generic Node<K,T متفاوت برای پیادهسازی سازندهی پیش فرض نوع دادهی

class Node<K,T> where K : new( )

where T : new( )

{

public K Key;

public T Item;

public Node<K,T> NextNode;

public Node( )

{

Key = new K( );

Item = new T( );

NextNode = null;

}

//Rest of the implementation

میتوانید محدودیت سازنده را با محدودیت مشتق ترکیب کنید. محدودیت سازنده در آخر لیست محدودیت ظاهر میگردد.

public class LinkedList<K,T> where K : IComparable<K>,new( )where T : new( )

{...}

-3 محدودیت نوع مقداری/ ارجاعی -5-11

،bool ،int را طوری محدود کنید که یک نوع دادهی مقداری باشد ( همچون generic میتوانید یک پارامتر نوع دادهی

(...

public class MyClass<T> where T : struct

{...}

را طوری محدود کنید که یک نوع دادهی ارجاعی باشد: generic بطور مشابه میتوانید یک پارامتر نوع داده

public class MyClass<T> where T : class

{...}

نمیتواند بوسیله کلاس پایه استفاده شود،چون محدودیت کلاس پایه به یک کلاس اشاره struct/class محدودیت

و سازندهی پیش فرض را باهم بکار برید، چون سازندهی پیشفرض به struct میکند. بطور مشابه نمیتوانید محدودیت

یک کلاس اشاره میکند. اگرچه میتوانید محدودیت کلاس و سازندهی پیشفرض را باهم بکار برید، اما ارزشی ندارد.

در ابتدای struct/class را ا محدودیت واسط ترکیب کنید، بطوریکه محدودیت struct/class میتوانید محدودیت

لیست میباشد.

FCL در generic -6-11 کلاسها و کلکسیونهای

تعریف میشوند. این generic تعداد زیادی کلاس کلکسیون و واسط System.Collections.Generic در فضای نامی

میتوانند به جای کلاسهای کلکسیون عادی بکار روند. generic کلاسهای

فصل یازدهم-کلها

167

generic -1-6-11 مروری بر کلکسیونهای

است. واسطهای اصلی و عملکرد آنها در جدول زیر generic .NET این بخش مروری بر کلاسهای کلکسیون و واسطهای

تعریف میشوند:

واسط متدها و خصوصیات توصیف

<ICollection<T

Add(),

,()Clear

Contains(),

CopyTo(),

Remove()

Count,IsReadOn

ly

بوسیله کلاسهای کلکسیون پیادهسازی <ICollection<T واسط

میشود. متدهای این واسط برای اضافهکردن، حذفکردن عنصر از

از <generic ICollection<T کلکسیون استفاده میشوند. واسط

ارثبری میکند. پس میتوانید اشیائی را که IEnumerable واسط غیرکل

<ICollection<T را لازم دارند به کلکسیون IEnumerable متدهای

رد کنید.

<IList<T

Insert(),Remov

eAt(),

IndexOf() Item

دسترسی به عناصر یک کلکسیون را بوسیله یک <IList<T واسط

اندیسگذار مجاز میدارد. درج یا حذف عناصر در هر موقعیتی از لیست

ارثبری IEnumerable از <ICollection<T امکانپذیر است. شبیه

میکند.

<IEnumerable<T

)GetEnumerator

(

در یک کلکسیون، پیادهسازی این واسط foreach در صورت استفاده از

را پیادهسازی میکند که ()GetEnumerator لازم است. این واسط متد

بر میگرداند. <IEnumerator<T یک شمارنده از نوع

<IEnumerator<T

Current

یک شمارنده برای دستیابی به همه عناصر یک foreach دستور

را <Ienumerator<T کلکسیون بکار میبرد. این شمارنده واسط

generic از واسط غیر <IEnumerator<T پیادهسازی میکند. واسط

IEnumerator . ارثبری میکند IDisposable و IEnumerator

<IEnumerator<T . را تعریف میکند Reset ،MoveNext() متدهای

را تعریف میکند. Current نسخهی ایمن نوع دادهی خصوصیت

IDictionary

<TKey, TValue>

Add(),Contains

Key(),Remove()

,TryGetValue()

, Item,Keys,

Values

بوسیله کلکسیونهایی که عناصر آن یک <IDictionary<K,V واسط

مقدار و یک کلید دارند پیادهسازی میشوند.

<IComparer<T

()Compare

برای مرتبسازی عناصر یک کلکسسیون بوسیله <IComparer<T واسط

پیادهسازی میشود. ()Compare متد

و عملکرد آنها در جدول زیر نشان داده میشوند. generic کلاسهای کلکسیون

کلاس واسط های پیاده سازی شده توصیف

<IList<T> ICollection<T <List<T

<IEnumerable<T

جانشینی برای کلاس <generic List<T کلاس

میتواند <List<T است. بطور مشابه کلاس ArrayList

بطور پویا بزرگ و کوچک شود. علاوه بر پیادهسازی سه

واسط، عملیات اضافی همچون مرتبکردن و معکوس کردن

اعضای لیست را پشتیبانی میکند.

C# برنامه نویسی

168

Dictionary<TKey

<, TValue

<IDictionary<TKey,TValue

ICollection<KeyValuePair

<<TKey, TValue>

IEnumerable<KeyValuePair

<TKey,TValue>>ISerializable

IDeserializationCallback

این کلاس کلکسیون برای ذخیره زوجهای کلید و مقدار

استفاده میشود.

SortedList<TKey

<, TValue

<IDictionary<TKey,TValue

ICollection<KeyValuePair

<<TKey, TValue>

IEnumerable<KeyValuePair

<<TKey, TValue>

است، با <Dictionary <Tkey,Tvalue این کلاس شبیه

این تفاوت که در این کلکسیون کلیدها مرتب شده هستند.

<LinkedList<T

<ICollection<T

<IEnumerable<T

ISerializable

IDeserializationCallback

یک لیست دو پیوندی است، که یکی از <LinkedList<T

اعضای آن به قبلی و دیگری به بعدی ارجاع میکند.

<Queue<T

<ICollection<T

<IEnumerable<T

است. عنصر جدید به FIFO یک کلکسیون <Queue<T

انتهای صف اضافه میشود و عنصر حذفی از سر صف حذف

یک عنصر به ته صف اضافه ()Enqueue میگردد. متد

عنصری را از سر صف حذف ()Dequeue میکند و متد

بدون حذف یک عنصر از ()Peek میکند. میتوان با متد

عنصر سر صف باخبر شد.

<Stack<T

<ICollection<T

<IEnumerable<T

است. عنصری که اخیرا LIFO یک کلکسیون <Stack<T

اضافه شده، اولین عنصری است که میتوان به آن دسترسی

پیدا کرد. عناصر جدید به بالای پشته اضافه میشوند و از

یک عنصر جدید ()Push بالای پشته نیز حذف میشوند. متد

عنصر بالای پشته را بر ()Pop به بالای پشته میگذارد و متد

بدون حذف عنصر بالای پشته آن را ()Peek میدارد. متد

بدست میآورد.

IEnumerable -2-6-11 مثالی از کاربرد واسط

را پیادهسازی کند. واسط <IEnumerable<T را پشتیبانی کند، لازم است واسط foreach برای اینکه یک کلاس دستور

<IEnumerable<T دارد که یک پیادهسازی از ()GetEnumerator فقط یک متد بنام <generic IEnumerable<T

در ایجاد شمارنده به توسعهدهندهی کلاس یاری میرساند(همانطور که yield با استفاده از کلمهی کلیدی C#. برمیگرداند

3 مشاهده میکنید). - در مثال 11

3- مثال 11

using System;

using System.Collections.Generic; // for the generic classes

namespace Enumerable

فصل یازدهم-کلها

169

{

public class ListBoxTest : IEnumerable<String>

{

private string[] strings;

private int ctr = ٠;

// Enumerable classes can return an enumerator

public IEnumerator<string> GetEnumerator( )

{

foreach ( string s in strings )

{

yield return s;

}

}

// required to fulfill IEnumerable

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator( )

{

throw new NotImplementedException( );

}

// initialize the list box with strings

public ListBoxTest( params string[] initialStrings )

{

// allocate space for the strings

strings = new String[٢۵۶];

// copy the strings passed in to the constructor

foreach ( string s in initialStrings )

{

strings[ctr++] = s;

}

}

// add a single string to the end of the list box

public void Add( string theString )

{

strings[ctr] = theString;

ctr++;

}

// allow array-like access

public string this[int index]

{

get

{

if ( index < ٠ || index >= strings.Length )

{

// handle bad index

}

return strings[index];

}

set

{

strings[index] = value;

}

}

// publish how many strings you hold

public int GetNumEntries( )

{

return ctr;

}

}

public class Tester

{

static void Main( )

{

// create a new list box and initialize

ListBoxTest lbt =

new ListBoxTest( "Hello", "World" );

// add a few strings

C# برنامه نویسی

170

lbt.Add( "Proust" );

lbt.Add( "Faulkner" );

lbt.Add( "Mann" );

lbt.Add( "Hugo" );

// test the access

string subst = "Universe";

lbt[١] = subst;

// access all the strings

foreach ( string s in lbt )

{

if ( s == null )

{

break;

}

Console.WriteLine( "Value: {٠}", s );

}

}

}

}

خروجی آن شبیه زیر است:

Value: Hello

Value: Universe

Value: Proust

Value: Faulkner

Value: Mann

Value: Hugo

جدید ایجاد کرده و دو رشته به سازندهی آن ارسال میکند. زمانی که ListBoxTest آغاز میشود. یک ()Main برنامه در

بطور اتوماتیک واسط foreach با 256 درایه ایجاد میشود. حلقهی Strings شی ایجاد میشود، یک آرایه بنام

را احضار میکند. ()GetEnumerator را بکار میبرد و <IEnumerable<T

بصورت زیر پیاده سازی میشود. ()GetEnumerator متد string از نوع IEnumerator برای برگرداندن یک

public IEnumerator<string> GetEnumerator( )

{

foreach ( string s in strings )

{

yield return s;

}

{

صریحا برای برگرداندن یک مقدار با شی شمارنده استفاده میشود. توجه کنید که yield کلمهی کلیدی جدیدی بنام

IEnumerable را در بردارد. آن در تعریف ()generic GetEnumerator پیادهسازی ما یک پیادهسازی از متد غیر

لازم است و معمولا برای رها کردن یک استثناء تعریف میشود. چون ما انتظار نداریم آن را فراخوانی کنیم. generic

// required to fulfill IEnumerable

System.Collections.IEnumerator

System.Collections.IEnumerable.GetEnumerator( )

{

throw new NotImplementedException( );

}

-7-11 خلاصه

مشخص میگردد generic شبیه یک کلاس عادی تعریف میشود، ولی بعد از نام کلاس نوع generic • یک کلاس

ها به پیشرفت مهمی در کارایی و کیفیت کد منجر میشوند، چون میتوانید بدون نیاز به پیادهسازی مجدد generic •

یک الگوریتم آن را با ساختارهای دادهای دیگر بکار برید.

فصل یازدهم-کلها

171

هستند. اما اختلافات مهمی در روش پیادهسازی و پشتیبانی ++C شبیه الگوهای #C های generic • بطور سطحی

توسط کامپایلر دارند.

را بطور مستقل از نوع دادهی انتخاب شده توسط سرویسگیرنده، به generic کامپایلر کد ،#C های generic • بوسیله

ترجمه میکند. IL

هستند. بنابراین سرویس گیرنده میتواند مزایای آنها را به generic • محدودیتها بخشی از فرادادهی نوع دادهی

خوبی استفاده کند.

را طوری محدود کنید که یک نوع دادهی مقداری باشد. generic • میتوانید یک پارامتر نوع دادهی

تعریف میشوند. generic تعداد زیادی کلاس کلکسیون و واسط System.Collections.Generic • در فضای نامی

در ایجاد شمارنده به توسعهدهندهی کلاس یاری میرساند. yield با استفاده از کلمهی کلیدی #C •

 

   + MOHSEN GHASEMI - ٩:٠٤ ‎ق.ظ ; ۱۳۸٩/٤/۱۱