Picture effect

All topics about ZGameEditor goes here.

Moderator: Moderators

Post Reply
User avatar
rrTea
Posts: 475
Joined: Sat Feb 15, 2014 9:54 am

Picture effect

Post by rrTea »

I saw something on ZGE Visualizer YouTube channel (or someplace like that, can't remember) and just for fun tried to make something similar:

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<ZApplication Name="App" Caption="ZGameEditor application" FileVersion="2">
  <OnRender>
    <UseMaterial Material="Material1"/>
    <RenderTransformGroup Scale="12 8 1" Rotate="-0.07 0 0">
      <Children>
        <RenderNet XCount="60" YCount="40">
          <RenderVertexExpression>
<![CDATA[//Update each vertex.
//Vertex : current vertex
//TexCoord : current texture coordinate
//Color : current vertex color

float mX,mY;//max coordinates X,Y
mX = Array1.SizeDim1-1;
mY = Array1.SizeDim2-1;

float cX,cY;//current X,Y
cX = 0.5+Vertex.X;
cY = 0.5+Vertex.Y;

cX = clamp( cX*mX, 0, mX );
cY = clamp( cY*mY, 0, mY );

float t;//time
t = 0.5+sin(App.Time)*0.5;

Vertex.Z = Array1[cX,cY]*t*2;]]>
          </RenderVertexExpression>
        </RenderNet>
      </Children>
    </RenderTransformGroup>
  </OnRender>
  <Content>
    <Bitmap Name="Bitmap1" Width="120" Height="80" Filter="1">
      <Producers>
        <BitmapFromFile Comment="Imported from 剪貼簿圖片.png" Transparency="2" HasAlphaLayer="1" DataWidth="120" DataHeight="80">
          <BitmapFile>
<![CDATA[78DA5CBDE75A72E9DAAC7D7C6BAD37CCF0F6EC2799D3F6282841C939C3FE9073164192B83D921573CE5AABEE81DD3DD7F7E33AE0C1D8E31C5557D500ECFFEFFFCC626EDE89C5452FBEFFB4E2D7AC1373736ECC48B74ECCFC30C3BC16C2D68A0F1A45023FFFB50325FF3DF34D8BEFFFA3C68FDF38FFDAE668F8312D7EFDAEC38C986F7ACC7E3360EEBB11F3DF4D58E0F7312A32D85E8B60F9870D4B3FEDD89CF761FD971B6B1CDD5A12556307D6F50CE4B34128E623502FC6B1351F836625839CA58FB4B60DD55206EAA51C0CB25DA8578A50AF9610B28E90734DB02DDBC7CE66037AD501B6156DA8950770D94F100B5E42671841AD1D406B1C63DB30845A3F80C57E8C48E41256C731D4BA236C6B3BFCBC43A8779AD8D134910C4DE076F5A150ED624B59C4CE4E199B8A2CE45B69247D3DF83D1DC8E471ACCB2250F0D8AC6E04B1BA16845D9747CCD5845C1EC6D2B207ABAB5EACAC78B0B0E0C0FCBC0D6A35FFBB1411CCCE9A799C4DF83563C4CF5F068E1E3F7EEA383CB63F347FCEB7EF3BF8F66D1BBF7EE9F83DC9E9C70EB654212CAFD86152843133C3AFE5F79D59766166D18AF9550F7E2E3AB1240FE27FFDC71CBFBF859F1BC4DC8287ACDD585CF06161DE8BA5052F96E75C50AE06605467B1F0D32431157C7FFCB683C5192B3657FC585D70626DC1CD5B1736163DD2C896BC90F19CD95CF2737CD8E47D038F8B692B83AD05BF34AAA510548B61289722306C6450367510DADA856639C949C1B09A85966C0D1B05642D03D438267235CA2AB06DEEC324AFC1B85947D87A8C92FF1C166507167517D69D3E2C9A3E4CDA213CCE53C4C2D7705827B09B27B059FF1A97FB0CD1D8356F4F61368F61360D61310F61347661361E2197B880C73D8456D78056CB9FA5AF4143C6DBEA224AE1313CAE0E14CA34D9A6A056A5B1B915C3D6660C41CB1EC2AE16363723D82073B93CC45B3FD6D6BC585D7143AFCF41A98C6243E69FCE860F6B1B5E6956D73DD2ACACBAA5595E71F21C220F72FB4ECE9BE4FBFB3735CF1333D49A38BFD6239D23B38B2E2CF03C9A5F766061DD8B59714E6D45F0BFC9F7F76F1A7ECF089696825859F443BE12C6FA327F27DE576FC478CCB2D0AD0631438D7EFF6D1B72B213BA148C57A97DA1D5196A75968FCD51ABF33FA67A5DFC69A14E6D58FE65C7CA2F07B516815599A3367D1CF25D0C518B112817C2FCFE49EC5ABB286E37A05B4C42BF9482752D0FFD721606DE26C9B61B3C835D56854D56835FD922E33ACC9B4D846D27D84B5EC3B7DD836B7B009F7E8CB8E1045EFD317CAE73C423374805AE50085E2113BE429693E7FD08751D4BDCC0EB39879FDF23E498C0EF12E701CF0BEB10A5C20DF98E60D435612563A7A90983B60AB3B68266E192DA3E22A72C270DFD36FFBBB6129C380A5E9EA76EF29547209385F818596E0424C6B2751FCFA592A4E9A525FA266761D14E6DDBC8CC4ACFB46076CE2CCD54DB062C9399D0F0ECAC016BAB2E72DEC6EC0F2DBDCA4F9F49D04FA8E5551F94AA3896F871D966188B3CA7569471FC9FFF9CC7DFFE21C3CA7A14EB1B71AC2D87215B8D619D235B9FCE0ED9C6D405CCD3777FFCA6C1F2AC0DAB730EC9939766E8B5D4F1FC4F33F56DC1E22F2B967E91E90C99CE38B04A9F17B331EB9634EBD1EC617B292C71DD5EE6B9B39195F46AE06DC6DA47C1DA836935C7C923A0A8C1B4568479A38CB865885AFC0A0EF93E1CF4E088A10F3B3DD84ACD469D13E4A84337F5EAD08E10252FAF6102A7F11401DF1562D13BF8BCD4B093F713B7F085AE61755DC217BC463CC58F91BDC37E0E87E30CA1D039ACF40327BD3B9DE139E33B81D1700093BE85A06F40D63CA70CFBC8E72F785EF4B1BD5DE4E4E1B4D4A8EB2C54649D8D8EA8ED16B6849E397A4D56D2B2F0EB2D5990DE51213337F9BA24BE8B8BF46DC177C1FAFF309E9935F2D6C4CFB3493EBDBC6CE7E75AF183F7E7C93D66C8634711824C19C3ACF051DE2ECAA875B1171431ACA953F88FFF5CC07FFCD71296C9714596A2BEC398A36FAEC953585E8B51D771497F797D150BDF0DF8C51D2BF4B9B5ECE77D1DEF9BB1C23D3DFBEDDFB52B746BC532B5BBF28B7C396B333CAFE6BC88980FB03547CF9E0BF036049B9C5E351F25F324E2E6BE34DAC534B4DCB3616D13BAA5020C2B252479CC739E33B2AE71EA88DA46F4E736FDFE807C4F91F6738F6AC7306AC60853977ADD047AC329FC816B2412F770F86E60705E234C9EEEE82D0CEE6B78C3B74864EEE12167BDF51C66E70582D10B18CDC73C17B8B7A397F07BF97DF41D7EBF16D98FA0D5702F181B0887E90DDE3E54AA0299E6B9071AD4E9D4AB83A1215CCE16B54BAD6C8461D0E5249F5E5FF543A34AF2FCA97EF1754B6C1717BEF84A6CADD25E1623F6B2D0F502B9FFE45E96CBE8BB42D3DCD34BBCCDD96BD49A092B8A38E6E9151B3B59CC50C78BFCF7127FCEDA7616DFC4FEA6D697847E37B3D8E02C6F24B1B125EE679827F8BB2D0791D555B14296B3BFD38B39DBF4ED99AFFB32EED7295BF39F6C9724B6D4EFCC94ED54BF0172E921613DE00ECDC2BA55846BB304B3AC40966D321C4A7BD4A7AE739A0832E3B8140DDE1E22438DE6F9B1A493FC4C232478FC83C663F83949EF0532814B2422D41B7519A31F3BEC5770BAAE11A176D3E947C4B28F08241F10C93C22CC09A41E91C83D22CD8924EFE10ED0A7433788C4794BEF8EA7AE914C5CF37B091F1E4B3E1D8D4CA8D921B99F201AE55E8F9C50E7D4B6919E626BC066D9E7E7B5118E8EC9FE48D2B0569BA3FE4B3C3F0AD4771A89700F36479D79CB871566AF656A786971AAE18505BB94BF04E3B9B929E355EEE01972164C55D4AAC86073FCB78CE742D6CEF384FC659A3C965529C898EBE6E91332FEAC55EE8B353EFE9FFFBD84FFFADB0A73971B324591C38F91B198357986FFCED1AFE308ABB2D866FE9AA74EC5AED5C8139266454616196AFECF7D6B9DEEDB2FAEEB125B0FE4733EA8972388DA0728F84650311FEB56B9B7D632D46A0A31DD0152F4E052E8026E650DEECD1A776D0DD68D2A7CCA36F2AE33E47CE7089B07B06F76E0E59EB5297AB0AB06487AC8971A8C52C32EDB05029E6B89ADCB7B831899A6B34F48E49F104C3D21C2FB91DC3342BC4D179F90293C21967E803B740B27B5EE2763A7E71271EEF354F206D1F08594B94C46FE2CEE0F93FE00013F594727DCEB1358B993F5DCC762CC862AF91F2044BE01FF005E579BFE9CA0C633DCD13CFECCD9B9CC040E72DF60665D158C99AB0567B18B97242D7317CFFFB58B65F45BC1578C5A1991B2F222B9EB98C542C63C56F9B5326D018BDC0BABE4B9207E8EA18C356D116BBA22FEE75F4AFCF6BB4ACA5F9BEA3DC8D5FC98A28495CD1C56E5DC1BAA12F35B1636EADBB111C522398A6CA5952725CD8AD95C0AF0F1FF97EDEAEC54B3B2B9295BE1C79AD504624E7619F2DD598833376561DCC8D37F73886A0F90A7264B3C9E7E4D0B2EEE5991A31CF23A02AA0E8A645BA0EFA6DD27D47497598ABB966C1DEA1152DCB1797A6E847CACC60BF8DC37B0DAAE6173DD52878FC8159F912A3DC3977A46ACF8822827907946B6F282FCEE0BE264ED08DCC3C6F3C147CE1607BD20758B4CFA967C2FC977048B6900A78DF9DA788878EC54D27234780CBBA54DB67BD06E97C99EE7A2AF8348EC84FECD1DEC6C932B3B21B5A456F396C73E9539819B9F235B9FFAF51F8C855FFFA965C158D2B295FEEEFBF26B13337A1473C28FF9B85B15838D796A652304B9BE44AE196CD02716980164A63DDEDFC52A19FFF3370519ABF0FB4F03B6340D4E0DEBEA2A64DBFC38F5ACD054A86176027A7454451F2047A155D55A947BD7C5FB162856427FE564C176E6FFC7763EC0BC1C846E9D3AA57E138E1EF92660648E326F146160460EEDB450F49CA2E83F43D8D08187D9D8B62E344CAF560ABE1728D283E3767A25B906998DBD5A8E7E426FBE46314696E11BB81DF468EF2D35423DFA1E90CC3EA3408699DD57C44AAF2835DF51E4C4CBAFC8D75E51ACBE205978863B720F57F00E8108F7B3FF86D9EA16594E3C7A051773B58B79CBEBE45E660F8F84C56E3E45926333912F8F996EA7028BA146BE87DC09E2E3C7FCBA1654EA1C341A766732562993CC7247707BDAE4169266837D798D9C5756D845FFF0EBAFCC25386FCA02928E57969DEC5E41CC0B4DD393E3C602BB8D8FACD837CDF4694D013273054BFA0A36CCFBD8E0AE98E5F9F4DF7FDFC07FFF63137FFB1F05E4ECF65B862636E9410A4303724D1DDBC63AE4AA7DF6DC30B2EC7FABCCC68BD4E91635ABE4638BE4AA6497121E2D676FDE62A752B06789C7542B11A8393B2B31F6D824FD5874DA0CB966A0594C30231760659F35AD14A9D1068ADCB1296AC5A76E916F03AE0D8EAC09BFE210BBDCB105F73942EC3E6EA5E03B817B9BC750738A14B37129718710F5E7B4DD20402D06238F08259E902A902D5966AB64D97CC3E9D50786671F2834DE90DF7F931867C83F9279E2E7732F4799C5E8EF91D81D8AF93B444357B0DB4EE9CDC77093B1DDD4E78E6706089C2015635F235F936E1F46F66391AB6D96263C9E2E77F3985FD324DB1274DAB2A4E12D799C1E9BE6A424D64AE62085D499A3EC52610EB5C87C2D638FDA608F12B3250F4A7E2DD88A9EBCC4FBCA2507F28E7DACF21C901B2A50D89B5824DF4D47034BE60636785EC9DD47F8C58C25BAD1DFFF670BFFF8D73696B5FC98E9007273170A4B87AC3BD8A1FFC8B79B50306B65F9FB6FB0F32C93F1FABC5BBA5EB144CDCA17D967C973959A5D9F734B3959CE8EBBC93CA5580841B928AE45C5B0BD1887863959C77D2BB46B235BFB26FBECC62EFB6C03BBEE5378E482E93EBCECB51E790B6E598B3DA98B7D669E3CFB8B47C1BDA61A2164107C39DA33249885DB9527440377D419FB8FFF9E7BF411FEF833E2E49B24DF54E50D05EAF6E5ED034F2F1F28B6DE90ABF3B1FA3BB27B6F08675F10E4F9108C3DC2E5A72FC7EFD16A3ED39FD9ABEC673C6F26F0384EE0E02EB69B9811C3F49AF425EF1FC0AC6F50BB62EAECC7D431F356921E2DF81AF47BCCCF623F97A4FEA4DC4AF25826A4EB20A21FCB99B1E5EBD432F7F10675BCBE32BDD62546B64ECD50BF42C79AED04F5ED9298EEF036EFAA53F73EC8A9538DBF8765FD2E14DCFD2B8E0E56C8561E1C62461DC7DFFEB989BFFFA6C43FBFEB314F4F5EB7F5B1C98CBAE31E40611DC0C08E27D31CC060A923C1DF55C98CB52A1873ACEC7EC28F0553FD665A622CE9961D4BE8769B1D5AEC5CDD5A8A392A0DC37A06A6757AF27A1E66F65B33BBAD6DA3022F337248D546D9C5BEAAE0EE5D275FEAD6273F20E303EA977CD9514BCC515EE590FAA67ED87D3CD4AE577741BE3768969E100FB1EBB8A85DB20DC59E104EBFA0B0FF8ED6E003D5A30F940FDE71FFF48E87E77754BA6F680E3F7074FC815AE71D497A7724CDDC157F645FBAE7FEBD47BDCAEC45CF77B11BBBEDFCDD78FEB92C63321E204DED1624BE1D726DF2B625F13551C70E6A58F075DAD9CFA9272D35ACE5B1D2A8F3E4C421678D6ABA8FD50AE6AFAD3894E4AD60F6DDE24CB5CC63A88C73474FAF8318F559297FC9E9DF26EA3AE9A8312FF15C711E602730C0BAA9065590DD32C18E9821BFE431BEB30FFF5DF0FD971ABFFD3241C18C5F685F23DDB841B0788E2D764C4BF0847E3D80C5D3838FFBD7C6DC2C6376125CED9ADD69FFA16E0DD4B75CBAEE48CD2E0ACD8625DDAA96A8DBA52FDD8A6B8E2BE4BC92459879394EAF0BA8DBF06EB14F6E7750E18E8D6B7B086CB611DCEA20247294BC83C0561735F2AD707CCA31FCEA63440CEC515A8E9E59C8738306B3702AF2C0FC7ACF7EC2CE93A07673AF680FDEF1F4FA81AB87779CDD4EF5FBFAFE81C9CD9B74FBF1F181CEF80399CA2B3F9F3E9D7C823FCCCCCD4CBD4F4F103BDDE360A6A78603EE33B8E9D32ECB08F914F745EA120ED3216CC603B8AC47E4DEE6B4E8DF474827CF785E1C50CB7576A726F3741F6EB2D856B287088F664F5652C70AC1554E7FA68EA5F9D2B4E8CB1A758A7B779ABBCC863C5698BDD4DCD17E6AD96B60EF3695A1F60DA0619693996B50464738B9B8417B449F2B8FF1633B35F5E6DFB7F1AF190B66D54538D2C798A77EE5AE01FD7C0C6B6822F1B589ACC8DF2DC4F3504EFF5DA366EDDB2569E76E304719D997E5F3DCBD8B62F78ABD1BE3EF12672E23DB656A78851A265B23D99A56A8DD9502F35319515D1769D310391EB7FDF01562DB5DF8852753B721728D28FB88AA87A8FAAF50A35786764E10A02F470CCCD9E4EB375CB11FDDA2C19E93A1F67C5E765C6A379E7941AAF88652E31DBBD4EDF9CD3BEAC357DC51BF2FEFEF383879C3C5FD9479A3FF815CF58D398B192CFD24EDEE2CFBB2C43772CB5C7549C6E7E47B0E8FF5045EFB098A19EE8BD415EFF7E161A777719F398C2DD88D4D3ED6610FBAE0EE3EE69E1E304777E8DB6568D505EA36871DD51F8CB983BFB4BB45C682B5D8C5725988BA0D487CA5FEB3E6E38E679F5D72434B4F4E984BB06C27A1E69ED58446D0C7C69071071BB363446AEC13F52194910EF51BC73F989F05DFDF7E9931A3CC21549E60D973022DF78B8A79D61639C5A681FAF58D6150E6513037A9519F948D8D5BCC491B7172F5C2C49E2CF86E2D04C9959AA52F6B57A799EA4FB6AB59E9BAA399B9CAB2CADF71A544FF653EE6AE4DE8FB12DF8C9EDD52D9E5F410634E0E6FF5C8788006FB4F33C9BDA89920663C47DCCCE367BE44C4CAAFE1BEAC936F3EF98860E081BBF31989EC2BD2A537ECD37B1B03E1CB1FB8B863763E7CC13B35FB878E25FD8E3E98B3DE793E50C3C2A3B9830BECCB35F24D3167857D3CAFBCFC59CC78210F75CC3C5D29DE6237476DB313BB2DF43689F31187BEE3ED2397E52E7175D9D7EAF4ED7DE8A80BC1572B3C5A2D1867240DABB88FC5089F56720467D92AB3D48A9F9E9E96F6B19A3EABA117CB785FBB1EE09E622E67163384C6508A6BA6F1136AB88B50FD0CFDD32BEC0FCE20F736F0FB6618F3D4FCFC92070BFC9E2BFCD9BEDC29FD999FD3BF8529C61EC99EB7651CC1EC19F367EC62CF7E48DF0D48F949B31E8745C9DC465FD6D39F95922F879897E31257FDBAD8B9A2E366FF62BBC6CCBC56826DB50CDBCA2EFDB741FF6D2143CF6BF0E7E54C6304640708D297539A3112DB2324D9835ACCC7826F4C7B8A988E998A6CA3261E73CB35B2DC97EDBD1794F3ECB7912724C9284B56F90A772FB529FCF9AF7997981E9D923DF57C79F7817A97799A593ACB0E95CEB30F279F512E3FA3597F469A392BCC7C1EF65C214AC641E719828E5389EF5E9199DD3DE66343045D43B8CC1DEAB785887FC8F3839FEB1F702F3724BE7A7A9D98BF38FFA1E38C94BBA67A2663A1E38D30B6D89D76A85F91B98CD4AE6A2B8A2DDED7315FEF058FA43DADA73F287D436899D537BC5DACFA3BF055C6D0273B58B2D598B972ECBFCC5642BF3F8CF8B1CC73C6C73D92BD8433730943E41AA620F99A8E61F353D3BA16CADC291AF6A2690F0AC1ADABF27E50DAB9BA8D24772D7FEE4A82BD76CAD5B49193AE3F9A37A8D975B25D2F4ABEEC58AFC0B15A819FDA0D2ADAC8B37B3462ECB1EC22411935203B445C35447873402D8FD04E9261FA1E696A3763BD44963D37E3BA4192936777EDECBF60976C22A12724922FE4F4C65E446F6E893EF42931BDA3862BBD377CF2FEE7E787E4D5A37366AF8EF0E77764A8F7047D3D1A7F42999DE9A0C55E957C606EBB4532CC11CF47F8794E51C3FBE57B89AFD73A84DB3CD5AFD3243C9AB982C7BD58E0F940EF74D0EFACE46BD8D9854153E6ADE05C844EE8985EADDB2E7084A633D0326F6D6FB243C9A2D02913908B8E2C9E4F36EFF23EF71EC748AEC540074AF6AD1DB255F35CD2C7D8DD8A67D88AF4A8DD73697E194AF88D394CBAAE4D0D2FACB05BF1FBAEF2E72A8397B0C42EA1E67F872D720685995FCF5B83658084A10A177D5C49A682ABDFD494D82A98A7F4B214B46B49E837D2D2F5658B9C3B76AB04C7D62E9C0AF2DCAAC0B9B5275D7BF46CEEC3B5BA47ED361116CF01A9BACCCF67A8F1F885C9362CEB22CEAC1CDD1A92F3189DEC033AB907EAF71C512D33B399BB5A0CFB6E81B9EAA0F6820ABB502246CD91518EACF2BBEF28B1FF347A9FB8BEA71FD3930F8EA77CC5DEFD20E32BEA77AF4D7FE6FECD95794EF01C11FAAF549ED16EF0FB906F94FE1FA17E63DE2B6AF79C73867A85F97A973D8C19D4C33CEDB70FE062D672926F3675465F3F85DB76C03CD6A6A6EB306A2AE45C85455F659FAA709FB2F7B3D3980CE296BB795B64EA34753CF56A9D2A25F115E3B456B1C95B35739747BC76C0B90F2D7B918E6C45BE3290AF3D7F0E7D6A8CD6987BA134C612B3D7BCF0F40D8BF4FCC2BFBE1BF06DC68A1FF34EC8991FCCE173281DFC3A725552BF76DF314CFCB797E79B60AC5E16CFCB8711602F5089E770795FCB9D2BFAD00E3395763929ED5CD1876C727AB19C5D97E360D7756E90F1464DF2E690EA80FBF58859AA8302F75A2BCE632967AE92F790620F8A6DD19FB74F7048B687F907A48C22635F2049B609CB0DA29C4294ECEBAFCC432FEC33F4E714FD59E8B7F84E6E64DCFC40F7F813CFF4E7F1E53BDEB877FBA7623EC9FE43CA60995DFA33F3582A33F5E746E3159D36CF9114B3B8F746E21BE584C837CA9C25F1E584784C7C16FAB34370EE927107A5BC78AEE3847EDDE67E168C5BB0B13B89E78D4DEC1C46A1637626A37657BADDA147ABC50E669E5651BF224F6BC87753F8B42C22F1DD225B0DB357C2417D19E9F3CC56A6F03135DC872E34C43233DD267BB02C34803274846FEC57BFB14FAD2E9BA46BD682EFF75F16FC9C63DFA10F6B98B15476E667FAB38A3BD1E61DC3440FB53163579C87DCB15189AB9B7D4FB79192EEAB96A2306FE6FECCCB0629536560951525C68E4DEA5756816BA30ACF17DF88AA8398BACB3DDBA7374F7090BC2353662B791FE9ED63C4C937A13CA6B6AF70907940D642AEECBC49D31552D46ECC7A831273F321791C506F89C83352A9973FF9E6B88373CC4E25FAF4DE2159B6DF5113FB96CCF3D4B634FC78A6FC17DF04F9760E5E70C8DC5DE4CF8CFA6E91F0F167916F985D29CE9C25FC391BBD40C0C6BE46BE61760E2FF97A2D5DEEE66B24C227F03BF86FE62D49C3E46BE12E33EB2AE4BC2B69D84C0D1B768A12DF6D455A622CF86AD5E9AFCE14C1B62AC98E558292DEAA65D6DE0D328B732FEBDD87D4E03135DCC70EB92E5A5ACC545D2C3BBBF8B59DC1EFCCD9FFB360975EF3F1ED870EBFFF30E007F52BF1DDAE40CDDF77DB790223752BF165BEB2F05C356BF6D0F4B2733143A997A3F4E4B4B477D5642B72B3555184499EA337B32B6F1661DF2AC3ADA21FABF6E155D5E1578AEB8DEC831CD18BD2C6A1949713EA3EF2F409C137A3A1665523E434274828C612DFA2ED12DD2273ADFD1A49DD2552E49BB6DF2041C6F9E074FFB63849F24D936FAE2078BD4B192BBBF78E34FDB7C22CFDC01D7C72C97D4BAEE29A5696FACEEF4D77AFF81AC137C9EEDC6A4ECF975C823B817C93F4E898FB0A1127CF2DEE90E61EB340F002412BF3A055F01D51C73D04B987F7C837E61FC327F234F51BE2F10A536782B1CD5063E66227E6D88DFBB092B35153E44ECE7327E7C836CB2E9597F88A117EBD432DABE431E8B612A84707DCD7CCADDE210CF4E76D7757D2F0A2E5005BBCDDE263DFB8A7FFC55EF51B77EF6FBFEF50BB3A3266BE9AB5E1D782072BAA02B63D1368BC67B0044FA1E6FE75064E60774FA40EDFE0EF6B14598A8C851F9BE459E9B518A2EB8ABD6B92E5A4EBCC266666F31A39CBCA7052BBAECDAAB4777D9B0DF8640DF6DC06129A1E8ADC07BBAE73ECDA4FD121DFACC8CDCC5559F509EF4FC87B82D217DF92F31A29FD25CF0DE666C72D35CC71DDE160EF154DE6DF54F41919F22D90559EF9AA446D961B1F2872EAF4E28FCF4F76A54F94A9E3227DB9243E46C6D2BEA67EC5EE4E916F83DFAFC59D9EE4B91327DF74E01671F28DB10B67435768561E24BE516A20EA3A2677A1E33EC2CCD17BCC56A9E80429768F5890DCE99D36FD3E6CBA1A795625C6363DEFEBF6E8D7F45AE62C0D35BC430D8BD171172BE5E2BA478CFACE52D7317A770C26EEE75AB40F13F56C60B6D273B63D3DE88243ACBB7A5087C7D8F2D09BB9ABFFB5ECA67E6DF8D7EF1AFC4EBEDF7F9AF173D68ED9253F96543C9F426708B303B81217D05827F0B00F3BBCCC0CEE110AB6163CF469ADD47113B0D093A59DBB9294C6A9E28E5963BE92E525BED60DEA78A30C977CCAD74FBE7E39354CBE21DE46373B48B2EFE6A8DB0E7B50C93C419A9939C35C95558BFB27C81BCED123DF2A8F758E9D2867BB46C173879C9BE783E71E07CCBB2DD16FC8374BBE45B22A325FEDD39727179FDCBF1FD2AE7DFFF8C4DDE327F6E9D1277CBC33FCC4AEF068FA73815F93494FF936ABE45B7D41264C9D86F833989F53ECC14966AC227B5C8B7C133CFFC3B663441D2708DB4712DF18F798E01B710F99BDE8CFD60E33571376C157CCBFB3DD29434F2D09BE5A6556626CD216A73E4DAD2AE9D5464D0EDBBC2FC64DAE596F0B165B1DA6C031F53B822E3080297E0C7D62024B66824D76E31FCCD8BF0BBEF336E9B575DFBE8BD76592EF9C03B3CB012C6BAA28362F7175FB8474ED865E7F097FFC1CAEC0390261E65BFE7E11FE7E1AA9E726A59D2B5EFFF8C7F50C9BA224BD36C3CC6C65612FFA932F77AF472EF66E1D01892FBBD106F96E4DF96654031CA5EE50B69C22A5A03F335715F567E47E8A227355AF40BEDE5B640D57C852BF05EA3663E7BFDDEC4E25F619F2CDC59F91A706CBD4E32E3DB9DD9BE666713DE3E6415CCFF894EE8B3CFD492D5FDE7EA2C673A044AF2E0A0D67E9C9CC67826D93792D1DBC2357F2E56D82FA8DBB2E99E7AED1E2FE4D926FD2778A0C3D2EE21822641B20499FABD19F43F61E77F394AF43DFE0D4BF180BB6DCC3CC5926762503BBB05E9527DF2963C177FB2B6B69D8970C22572BC4BFE33C97AADC057BD45917E6E009BBEB315C641AAB5FA17D7283FED92D54FE03FCA4DEBF91EF6FE4BBC23DBCB616C0868C5D8B1E205765B0C53D11299E23D7E4316CDEC2E8BF46247B0D4FE812017662DBF62E5C5BFC9DC857BF3EBD8EE15095A6D73456A799CAAB6B48CF2308BE36193B12F93AC573095F7C83E41B92B710E6C415474809BE8A3E8EA8DF3DFB39D2E49BD74E50E0645513DE3F479759A719BE4381FA2D70EFEEFAEE51F0DE23E7617EDE9DF2CD72FFE6D87FCBD46299BBF780DDE8F9E553DABB2257BDBD7FE2E6915AEEBFFFC9B7CE7E54647E169ACF51BF59EAB74D7F169D2B13B847C67F873C359C24DF04FD799719BFC9EE5B2D5C73AEB097E5BE08B1B7936F36722AF10D5ABB125F9FA50397A10927F93A045FE651AB760F66F661D3B6E05BFC53C35643055A5556F268C1D8AC2B489DF80FBE560D77343DDA159EC04A3FD553C381F205B207B7E89E725FB5AF207736B16E286085DD684515C7F76FE235D47AFCFA65C62CBBD19C782DC6560686C0987CD90BCA573006D959B25708C4D9FF78EE5A75757815FC9DD6A75D5768D7A9A6D790AF714D3C479465AE2AB1F3EE499DD7A5A02F737C8A7D0495F46425B98A5EA4E0487C0FC9B78BD4660F9DE82DF7FB2559932FF76F49778A9CEA947CCFD027DF56E41E5532AEB30FD7787F78F882FDEC23BA647154794591FA2D9251857EBBCFFD2AF4FBF8FC89273216D799C535C95BEAB8359CF2BD22DFC6C107CF8537E99C10DACF89FC4C7F1EF5E8F3EC5E2576E042E81619FA732E7483BDC42DDAD46FAD78836A8EBC93DCC38E3199F651A0CF55F3D708304B07AC477FF2F5B047BA4D4D761B6A997DD86E10BB788F997A9AA78DCCD1224F0B8FD67CF1B5E8B803956949C73B646CD74E5FC3E5626E17D78D4DE49C6A305F1E5E6340BEE9D625160C65FCA456BF2D39F1FB9C955C0DEC4766CCCDDBB1B0E4C1D26A08CB9B69E9F9C1E1193344F51A3E1ED754F992F9E401F12C773273A15759A03633D36B90646CD9CCC34E5F3650BF6671CD8ADE2C72B39DBDC82E69F7CB9FC56B976553FD0AEDC614F466754FF2E7047B6F2B788D26F34B86BD28C7DC5C22D73CF916346718A4A8D398E0CBF3B5FA8846F21E93C92BEAF9271C959E31209342E409E52C1FABBDE2FAEE0347830F89EDCBDB276E1F3F257F7E7E9B5ECB12D737AEC9B779F88E7AF31DBB456AB6FD8ADDDC337AFCFAC3CAB3C4B7C2EE5DE4CF2C846FC8F70AF514F952BF451EE7B497F9805934CAFD1BB20E504A9DA39CE13E337798A5C998E3652695F4ABDB27A32A755881655BE8B70C23352CC666A8422779F494AF71274F6D6725BE624C6AF64CF2B5B9D843E26770C64FE12B9CC195A35F0CEFB137E039B57B86556385F929418D86312FF3636DC505C5A69F3D3B0E95220A19339B8C3F43C1DFC719BFE15C40CF4EE00E4D10885E2249BE3E7601137B51849E6C5C9FEA575C8BF46C5725FD0ABE968DBCD47BFDDBF426F92E3C5B42BFDCBBE2B95E450B11E5017BD101B5DB61FFE922A31E20ADEAA31D6716A63EB29BE4AB20DF1D6A97FE5C509FA217BF473F718F8AEB06F53439732F8AE77DABECBF07D9278CB96F8BE167ECA6C9977EDB6ABDA1CEDDDA1B7FA24DCECDDE74FF8AFC5CEFBEA3C7CCD5A267D7A8F31A79EE916F9DE7C82E353CDC67BEE279538E932FCFEF62E006C508F952C3ADCC1D5A39EE65E719520E6AC8C91DC81E1CB60CB097BF4285FA0DD97A9C2E33D7017CE23A87D02F7396CB30F569BBC8D2E235799AB2C456E85778B48E3B58AB204B7D997CA911678D8FA511A02EC573C66E1FCF95C004EED88419BA0B2DFB90313E819A595DED3BC422F53D270F6376DD87D955377EFDD46163D98EAD0D37E4EB5E2CB01F2DAE84B022A74733F73BC267D0DB4EE1659EF6F8CE108B8B6BEDE7922F27781E9A055BF1BC3DF98A6B915679619AAB64A21715A45EE45737E116D9595685F70FFD323B0BFD162CC728B317E5F4CCCBCA3E0E98AF3A9CA2C8569CB296DA25DF22357C14BB438F5EB9CBFD5B8F704F3B6F258FAE861E70907EC209F9EE869FB09B7841AD2034FC86DAFE3BF6EA1FD86B314B7744C6FAC4D9D527AAE23AC7C13BAAEC4735E6E77D76A42ABF662F4F6F4FF15CD97F433347BEFCFEBB3CAF4AECBF8271CE7525B1AD6745373B45D27682B46B22BD6E37CE9176327D5BF08DD203D3E163240223B8845E24FDEE51BFBB530DF3D6C6BE6411D7B198B1F45F7C8D3B3C86CC59663D879A157CC3E60A7604E7F000EEC0295CA1318C1EF2F50DD87546D861D65A375530CB0CF573D58B9FF4E75F8B36FCF8AEC1FCAC118B73162C2D88D774B9B1C40CBD2AA72F3013FA92DC85DC35B1D4157CEC4711FA53C47B0EABB2446D8A6B8EC28BB3534FA666DDAACA576E167C8B70305B79B977C5EBABBC64EC93EFFFC937226B212A6B23A5EA22AF1BA26265FF4DDF4D3B92EA1845F6A25DEAB7426FDE65BEEA5147BDDC23F6989DF7CCDC7DECBE15FB1DF57C2FF11D33EFEE91EF5E5CEC640E7770A3FE8673F21C887E44BE55EA79977A6D1C7DE0ECF203DD01F72F19EF339BD5F2AFA88ADD1D7FC250F423EEF57280BF0BF355D9778302F3959876E91E2DFA7386FACD88D7D6B30327ECECECF4E8BDDC946F9AC73BE2EA73071FC2C3FDFB175FF65F3216E36096B673079B98B18CAA698ED693AFCDB00B3DB52BD80A8F36F2BE8BBEAB21DF087DD9133AA79F8EE1662F8AEC5E205CB9809D196FC5B88BF9AD386656BCF8B5E4C0CF79EE5F76DF19E6ABD95F2672B661715EBC7ECF8775790ADEE419C6E78F4895C4EB10AFE1F79C22CE7C950C5EC1ADADC32CCB22CA3C28DE6332F5E302BCEA2A1C9BD431B3B39D7C9DE4EB92ED22A66E21A810BD97ACC937CCFD9B379F487B37B9C5FCBC79881C3DBAC75DD74DDDA34CEDEEB21755D98FAAFA73EC6904DF47F479CC6BFA6BEC9BA961C72DF69D77D8673FEAE69FA9B957EC73FFD6D881EBE454CB51C37B6F989C7D4AB9F99EB9F980196B9F79F9E6AB1F3DBF7EE2803ADE67B6DACFBDA02AB44FBE83FA2B3AC567EC05B9DBC8782F708B5DF13A3E719D94C7A345C659F215EFA9C8F1B8A4E97529EA779FFAAD5798471D646B39E41E3E80C7D822E703EEE343FA725562EC34ECC365E231E4EE1563624F121A366B8AD434F3963A2FE52B03F3B4DF5C23FBAC747D2B91E19E8D5DC2173B45A9CD0C3F7CA02771470DEE20B737B1C06E34C36EF46BD18EEFB326FCFCAEFD37BE562C91EF0AF96E6CC4A1646F8B31EB3BFD374850BFE2F54719EEC654E01241E643E1C9116669BB5CBC0E322F79B34D5E4460A70E1B79DBD97B5DB232DCE4EB65B612EF2F0A6E3624EDA6747D94ECCC4E06FA97FC00E92D6A987C9BBE4B749377644B4FDE3A4695FE5C564E5025DF61FE1143F26D5A6FD064EF6D926FDD76870619F79889C6DCA18DE0131AE4DB22DF06F936A8E116F5393E993216597A74367D7E50B03DBB205F66AB26776F9BDE5C6737AAC704DF1729B3D502CCE9D46F8D7CF7A8E18A77CAF760F7815E7D8634FD394B7F4E58471263C1B724F2B4BD2FED5F1FD9869D3DC4FD23EA62CC9CB50F8F99D992DE2A7CDAC28C6516AF9D265FA161B7655F626CD21498BFF2927603D67DEE66EADA544534768E608CFA0A8FE1CDF0367B81C353E6FBCE0D64D63A16E511CC92EF0CF9FE9A334BFA9D25DF79F25DA07E97D8915616BD585B16EF6B4CC2C7EFE3E47F57927CC3F4E50C3357CA7F819863243DC7EB56961160AE7208B6646C275FB77297DE5D63E725DFF5123C1BCC57E41BE11E2E394E10D96AA1EC3E47C573215DCB48926F867C73ECBF65CD18832C77AA81E7A7E04B7FDE25DF0AF7EFA8480F2E3C615FC70CABA74F926FDBC1ACE3BAC3203FE5DB0E927F88798B1DA7997A41933BB5219EE72743E1C782AB789EFFEE71EACD07DCC32D76A326BDB99D79E6B9F1842667D47C41977C1B41EEDA8018EA97DA2D3B2E7044B6877B0FC8DA989DADE42BFC59BC07D97B82D6EE2D7BF20811EEDF30FB5190FD28C5AE99A29FA6B88BC39E1E529163E6ADBA741DC1CA1E6C5653C3F468E1D54E03BBF136D952BF668E935AB673844FBBA9CF44E2823B58F8F3319CB13358A213383317F0E52658E7CE5ED808628E7CE7E9CFB30B166C7017CB3702D2FBDA549B11A815716C2BA6D74EC4EB48DCFE3EFCCC3219EE9538776F3E79CB8E70899CFF4CF265AB2C8798AE21F1B50BBEF4683BB51BA27FBBD98D5C6B826F19BE8D8A34159E1BE279DE8AF70255F6DC3D669494EC0059C177ABC79D3BC430738FBAE90CE5CD63ECA927A8916D55E42BDF2D8E99699BC62B34C8F7C0768396E9162DEB1D46E5175C0CDED0E3FEED3243F7458725DF0E75D9EFBCA3CBECDC1B4DAF3F0B1D7779BF37FCC090B9BAC35CD6A1371F51F307D46E27F688F3D11B7730B5EC11FE4F9F10DA75321BBB2ED12B3F50E3E21AE929B2F609B28E6324C9B7E09FA055BE41DC3E20DFEE175F9EBB649B21D3342715194B6367BEB291AD958C2D646BDDE1B132ED4B3AB66A046FF64FF20D92A9891C8CD46FC8DF4592FD3AC25E16E3BE8DD25BFDECDF6EF6318D78AF93B502952E0BA526892D759C3D288219FAF31FFA5D12EFF39EB54BEFE915EFD1DE5C0D23181F6374CABE3061EF67F629A6C9978C0A3E762635B33D7355485363FF117B96FB76A340DD16A4DB8896B979BD0C2FC7BF5E418053A297FDC1B6C6D917C748CEDDBB497F26DFBCBC8F11F76FCB728EDD4DE65166AC3ABBD1BEF2146DEB1526D4EF01776F4B778D43FA74C77C8B0EF91E53BF179D578CA9BD9EFF11C771765831DCAB4FEC432FAF536F167CC5358EC797AF2ECCDB1E777497E7428FDE7C187A429FFBF78CDF6B587E428B7C1B2E71CD8579CE71859AE70A83CA03AADC5179E6C1BCE06B2737F22D874EB9976F10B5F6A4F7D18599AD42E49B25DF6CF444E29B891D231E18487C25C642C3DCBF5E6B935E5DFCE23A656BA34FFBE8B966B235B1B3A662D3D7D4C7B97FCB759ED7E3275CDC3DA37DFC00A5A50699228695352F16979DD27B4DC57B4B37965D90AD78B0C5BEA49205D8BDA2D06C45A061CE16B9DCC69F2B5E4398E34EC9FA2F518A880CC99DC85C116146B0AFD137A8DD3833A25B569C325E2BD09799B5D87BC3AA267CABF4F0D55D04C97757BC4643B0A537D73D976832A354344366286613233395D06F94CCEC17A8C8C7D8A3869BDB6712DF96E1026785471C59AFD1D65EA16BB9C191E9065D66E931F7E455E90527F4E791F70127CC59E3C833BDE00563F69F217D78D07B979E5FB8BD23536AFA92BB7742FD0EB87787097E3EB5DBE7F71946A8DF5D7A40F41E6D6AB7C5BEDDF2DCA046BE0DEEDF21FD599CA305FA7389F939C3EE2BF8562267DC07D7483806C8F8C748FB8648B8FBC8474E90136CC938231871E73944CE225F073B70C8D166E6AA48AF27FF83AD951E1D76B4789F5D847CAD9C1C7B6E26C85D103861CE9D209EA68E8B5708E6D961AD5568F439A8A95DBD290DB536460DB3077F17EFE7D54BEF2355ACD86150FAA19189F71F38A1A08677D89572E4500EF2BFC5419FF432CF7287EEB3D3670D2DFA6F863CB34818998DB7448E2A23C4CE1BE184C837633AE2AE1DF258F45109906DF06ACA968CDBAE0B3499A10BB20EF21B1DFA710FFBDA11FABE2BF49CE42B1BA14AC62DF2AD2BE87DEC48E7CC587DDB353AE4DB674FEA93EF801A3EF6DDE39A79F72CF08889FB0117F4E9336AF194596B927AC631391F37DFA69A7DFEC0887D685CE463647B422F9F44C4E792B19FE746F80197E5670C42F7E890ED01A7ED16799DDDD77FC55DC00ECEF3B260157C79CCAD6449BE557AE77E8A3AF08E11A37E23DCBD614E967B374FB6D9D889A4DF5286C7A17081DDF409FBF21942AE037A7559E26BA766055BA1DD90435CC7A44772AFBAE9D9E5308F958739CE3944D23340DCC53D103A4194BB57A98C63937B56B6EE86DD998252E5C586DCF9C55787C59F7A6C2DDBA15E75617BD58DCD390754CCD25A66ADACBEC3FFB601EA46E65B9EAB0DD3803B6FC48ED283673D03B7D0303B6FC6D1814FF4DDB522F9EE21CC4C95DE6EB2AB5C6250BAC34191C7ABF8804EF60E47DCE37DF705DAA61394648728AC1FA0B4DE4569B58B1E33CCC07D89EAFA0835D91807F4E7C6D604EDED735CB0038FECD7E86AE893C66B8CC857CCC47D87BBC233AEC8E7C2798FBBD003AE7DEC0ED4F30DD9DD90DD2DF3D35DE70DB7CC6177D4EA351FBFE6E357BCBDE2E75D31979DF23C3927D71B66AB21B355D7497F901853BBF62B7402573C2FEEB1EB3843917CCB0E9EE7161E73CB10757A5C357E8618BB45CCD2FDE27B48BECC1009EEA512CFED2A774AEB1EBD168F478D5DB9C2FDA9A796C9D746BE621C6419A02FDBA859BBAE04E70EB5CCECB51FA047389851F83DF3366A82FE9F730F603396A4D7CB6E314B6D6D78A0D5304F6DB9B1B262C51CD92E50BF4B3F0D58E50EDE98B590AD0DCA393BB6E79C30CCBBB91B4B181A0E30D01CA1A73B42577B889EBE87B17904FF6A1A9ED50C27472FAE22A4A8F07E013E320E88BF6D435F1E946E7198BF41AFFA8841ED09932675C6FC794E2D377686D46917E5F54314970E5059EDA16B3AA51EAF515BE539B436429719ABB57982363DFA32718F131EF3DEF62586CC58C7D4F089F10667CCD24FE47BE7255BFB1D5EC8F6993A7EA557BFF1FE87FF1E9FCC879FF9F3E9042FF1E1BBC32BFDF889E7C423B93EF073AE789E5CB1F33EEE3EE1D87F8B81931EE1A25F50BB4DDB057AA16B8C7377A83037942C27D86376167C33E6219ACC39BBD458DC42ED9A0E10B376B98799897C3C47F3FC7DD9578F8E1ED1EB321FF4B9DBF7D9E3CB17D26B505DDA5DE9FD0276F20D3A1AF030478BF713D815D40F776F81FED876F7D020D77D76AE3D630D3576AD16FF6D5CA7E772BF2AA94BF9B203EB4B56AC303B2FCC1BFF8DAF51E22B63C6DA624F5293AF961A3693717A398A2B66A82B4513A7AA36CED42DE9F6423F4082F92AB09221E72CBC2B39243575F8560A644BBE2B2504C9B797A59792EB609FC78C6CCF3B2F786CDF63C8FDD561FF6D2A07282DF2775EE9A2B6D1C7A1F60417C15BEC2F0DD020E3FE36B395EC0407D4F075FC1E67DC897DF52546DA4B4CC8F7547F8D2BF6E1D7D2239EC8F7D97A8B0F76E24FC73DC05BB03F7DB2577F9CDEE0E3FD159FEFF4E9B31B7CD23FC0ECF449A61F9C37EF1D1E9CB7B8A76E5FAA0FD4F22D460EF2F45CE3C8CE7D62A5AF446E7022F80AED926FCD3DE59B26DF83FC154A01662D76DF38D986CD07EC4A43A4E9A1B9C439EE063CBF07DCF19CE3D13346BD47FAF4A9C4D7C12EECD094E1D8294EB54BB60E8E8B7C3D5B29B4CD6DF46C6D668D268E7435FA570997965D1C6FA761677ED273D42B2E6CB217AD2D92EFBC190B7386A937FF3060F997E06B265F2B14E4BB4DBEFA59076C9CD42F175EAC653CB3EB5E6ED471BD59C30D595F92F12E7373946C832B59F83921FA738E592B2869B78CC8C61EFACC9B83FA13869C93D6332E5B4FB82B5D63683DA3D79EF377253BE58843EF5FEFE3484DBE811BD417B90F9687E8C8F9F18D63DE4EE8B3D497F71643D505C63B973827DF7366E96B66E9F7DC23DE3DF7F8E03E06F5FC491FFFA4A7C27149ED1EE3F3836C27D4F119E7FD855CC70073DCA7F3929CF9B99E5BBCF13C7966DF7D63863A63A63AE6F71873F776C9F7C07ACE0C46BFC8DEFEC9B7CCEC9CA33767CC03896F815A4D3B07EC1823E65176627A7341BC57893BAA57BB65EFE2793E66AEA77E8F87CF3868DC487C9DCC570E7A74CCDD86877DD7416F7691AF8FE327DF91B985A1A98A117D7AA02AF27CCEE17C2B812B671C9E15378C9C6D666505F96E487C4D58245F191FDB247BE59A0FDBECC65A5908467AB9551E66C709B3D384915F0AE18699EED590C7EDF72C1EE6F2785EDEC58D8CE791620F09F17E314E603983E87A1635571FDD24B324CFE52E7D59D22ED98EA9DD49FB05F7AD5B9C707F8D2C1C32EEAA4728FD68A0367F80B67CC8C7CF71C6CEDDA27E5B0B431C09B6ABC738DC38A177DEE02E405D29CE71ACBEC00577F02577F12D397FA41EC8885A657FFA644FFD749D50C3237C1A87BCED52BB42B757F8B8E0C7DFC89AD9EF9359E2D33504BCFC5CE6BA4FEAF543F0CD728F93F9898D3B80BBB74BED1EF0F79A24C83BCD2E2CD89AC728338FE4A85DF1F7B90ECAB7D2FECD7987F4E84384E9A3599189B8977349F629DE5E1DD1F3FB8FE8926D7FF08C316FF7CBE7CCC643EC17CF904F1C936D0E4E72F57002D46F8A33E18EBED0E67141AF3E5B8AE0CC5CC029BBCE89A78AA82A06F7768CBB3B0EA33A0A9D5ABCEE320CC556E02B5B19B042FD6E50BF9BF46715F5AB650F36CFD8E1E1147F3871F52B80C7B5085E77FCF8C8C4F1664EE0851E7CB5C50C45B6716A58E838AF28E0307ECC8C3CC271ED51F2E461FD79EACD6D6AB7CE1CC46E3E62171A71CF8E8C13F4A9DDF2B73AAA3F5BA8FFEA70B74E987D6F71B43C426791DF877AEE916D6F8DBAE6E337E13B8CB778AC95E7B8E20EBEDEBEC283816C92E4CB9DF96923DB20F5DA3FC5E739EF97FAF8DC6EE0734CAE7FF873973B58C3C75A637CDED1AB4FA863E6DB4FB2FCE4CF78CB701773F74EAC97DCF7CCF3647BC8F3F184FD7F90117C8FB9838FD170539FB6218A8E21DAECBE22E3262C478872FF86E863F9183B32BD59FCADB40CF3753D7B869B01F315B91E91AFF06B69E8D5A52CB3787C28F175717CD470983C5B9C1B6512AF8904DEC221BC84FDB8D971E3D612C1812A8110356A65E7D52D39A15CB443C6DDFB877E3745E6127F1B8B3B7A9BF95A4FED5AD87FDD2AEA5E1EA5BF46B0CFFDFBACF0E1A34AB65DB21D55F151CBE35D96C6D3561959EA36CE1D1C5E4E23B29246CDDF473BC77CCB3C356C88BDCB2CDA10D70F1FF1BC7F89B1E91823C30463B21DE92718D0972B82EF3766EDEF22C79DE2DCCF0CB540CFFED5C7F1FA185DDE1FAC4D702EFC39768F898A1AA77E6F0C97B855932F397F70377F52DBC26F3FF72712CB0FE1C36FCFF8383C96B42BAE4F8AF72F7C9CF3F34713E9639FAFAF533DB7CEF8F57C9CFDFB257D876BF23DB55CE28CCCFBCC565DEE92718E7C0BB7A8D9D8D5992FF71DF4677A40913ED12A5EA3429E826FCCC4EC6C6CA348B68514F926CF91E5FD0C7BEB69FD8ABDFB015DF23DEAF3D890758F7C2BCCD2E9681F4E551E1EF2F5936F946C073A1E676B02AF953D3C6779DCC759BC55A8B5AC0F87AB4124C5FB45A95D87360E8B56FCBDAD08D4CA20148A2FFD8AFE4B0DAFCDB003CF5BB9AB9DF0A80370D3D3FDDCBFB59F1E3C7DF7E365D8E0F4F05ACFE3ADB48B77E68157558D9D2687E8520A214E947C5BF46671FDBD475F1623D88ADD7B5FBDE43E635E62C71D1B4E24ED0E34C71828D883BED39FFF45BEBFB731DA39C50575D8FBD947E7F71E46F363F46686182C8CD96B6F714DFD4E36CE70B675867BF315EE762EF0642497D4BDA4BD4F76E7CF3AB5FB4266A764FAF14E7E2F537FBEE4EDF9B3745F62FAC1DB0B7ECE2BCF83C685E4D182EF538E7D9A5CCFE90517EC6A7D6AF7C87C8631BB9DE0BB673EC6AE698CAA7D2CF1151A6E93EF5E5CF03D64473A60866EA340A6C594607BC6EE7B8A94B8D6113DC66D8719823E2D347C48C65DEEE383C3471432C7E42B5EFBC2DDABCA20A92DE0CCB48B677F81DA68E3B591C3D3C5311E463DDCC733E82CB8B91B3D927E2D0A2FB49B2EA8D6ED53FDCEEA31FF7D9A9F97BFFA917CC60C2D77B49959CCB9E84260D689BD191FEEFE4EBEED069E4FFB78391DE03ED7C58BB28617559D19B88D947A1761F6A48CA98966F91E0715F19AA829DF01F95EED5DE3821DBFA1EAA1A719E2D84CB6D4F0407782E1D608F59F4DF26DA0F1AF361AFF6CE182C7B5FF7380C37F7631126C7F0D319C1BE1921ABD89DEE3749D1A979FE25E7B817BC5059E759753BECC659FCC419FF4C9CF9B17C98B25869F9FF83C26FB6DEE5C75071F836BE9B18F37327FE59CF373E317D37383E7D033F9DE30979D9B2FD8BDD8DFC9B66B666FA37E87BB77A872F756A8DF8AD8BFA63E0AF6215AE27D29D46D82BD37467F8E92B1D8BDC5F454C3E92FBEC910F71177D87D8FFD9ADEDC21E3163BD341F7098DF603FC16F11E2F66196B15457F0737D6268F471593549BE7C5004F37D7B81B8D71E52AA2BE1A6096F5C0424D1A642EA8C9767359F8B3F18BAF967C75EC47FA2FBE162899A175CCCF5676233FF916677D38FF16624F64AEEA54E811F46B7D040FDF3278D5B4D053D4514B5DA29667BEE07F7F2D2F5E6FCE9EC79DDB23DB93E20DEEF3A768A87BA82BBBE8EB46ECAEC7E8D39BFBCCCE03F2EDCB06E8CC75D024DFFA7F35A99B0B0CC9F5F06F4718FCDEC7E80773D7CC08D7EC2E373EF6DD95092E64E44B8F7EE02E7E21DFCF3CF76F8A0C4DE4EBA17E3D437C0CF9F8EBD354C38FFC38CFCB8FEC213E1EEEA78FF1631F23326526FAF4F3EB98A33EF9DFF141FF91F8F27B9D31630FC856F4F2518AB9BFC8FF46B2DDE394999DF3E45B6216177F9332CE733D49FDA69D3D6403E3A97ED31728E52EB95B4F9114AFE7080EC978887AE604B7FD7B74A8DD76EF194D76E366E711FBAD7BD49853EAFBB7F4FD26EED87DAF14493C05A3786BC7F03CAAE0AEC17CA58CA3B8E6672F75C34CFDEE2C91EDA205EBD4EE3277EFC28CEEDFF83263B103CBA85FE5AC759AAFE8CD1EF24DCD79A89F101EAD593C1E53BFA303BC1F34F13AC33DA0630FD6F1FCF50CB0CBDCB1C76E28F8B6797CFA643BA9DCE3897BA5A5EDA1A63A424D79C43E34448F1EDDD3D077B7C7923F77D97DFB6B039C6C8E71BC419DB2738EE9C7DDFFD5C1E06F5D1C7F1B62FC7DC0AC4C4F66373E5B3AC1E5EA040FCC580FF2733C730F7FD4C8AF40FDEAC9C949BE813EF5493F7E2443C152F8B3D0F3D7AD78CFE8C7DDC3B413C799B33DE780995FCB1CFCD17CC42D7DF9DCC83D603BC7C034C191E944EA46DDF039F98EB1C7DE5B622FCA197B287BC768976F50620F131E9DF3B133F9D88FA2BCCF4C9DE7CECA2604DF31E2E49B080EA4E9B2FFDE72171F50BF4DEAB746B682EF5EE30E79F2DFF7F670A3AFE3DD97C3EB618BC79FBECCE37FDB610E5D0E20C9ECE464BE32D073D58B36C817CC589B3362E98BEFDCBF5D9F5C21E30DF17738C85743BE46F275906F78D68DDA6C00D72B113C9FF4F13C19E1A9738937F93E75C39FA5ECA118BF92F856A8DF7A91FE5C65D7659E7CAC5CA1A9EF628F9E585575C8F7105DB21DE8C7D4F0098E8DA738E10C954354FFB98FFADFEBE8CFF770E9BEC185EA0CC3BFF730FCDF4738F9E700E3FFE9E35C31C13DF7EFF902BB12F93E3167BD6C72B88B3FE3D4AEFF1AD83E63AFE5BFBDCCD027F75396EFEFF838BD94984AF96A7231F565E6AF8F63762A3F3FD745B6067E5D881D8939F9866C2FA9DF73F21D729F1C198F71C2DDDB099EA1CACE55612F2A9A7A285807A8C5D807D9E9F3E41A33B410D13791097DFD1D074E961D583CF7938C4CA4E78FE2C1FE9FD3CD4F70DBE6713B78C07EE7017BCD7B5404DFF2157FD61837ECBE0FB63A1E721D3C0C8FF17842EF2A745094B1BF321F5BC857B72CFE368783FAB5619D8C97E8CF0BF46719B52DFAAF829FA7DAF82B439B36C3B06F46A50C1D95C7509227315E4BE331D1C22D33D5B3B281DB8D1A1E356D3C886BC7F14B9492E2F5DE776852BB275966DADC39F67587D825DB8AFA0015D501AACA0E8EB4DCA5E43BA6268E99B14EC4F548ED09F9D6D0F8471DC38D21AEBDD7B83233DB6C3067FFE71126FFDDC3F1DFBBD4EF39EE98A12E56D995A8E147C5199EE56778E22EFE0853BB3EEE55E6B34F1BC7C509312337C99DBBF173C07961B6BA23F3093F8F3DED93C7F1334AA6EED3295F9E6BEFC12BBCD0E7AFB83F2EC8F8DC76861EB5DBB59E605CBA4327728E8A917E2572B3B98F5A98BB2773293D3758A47EFFE09B137F63876C73E94BF26536663F4A323FC7C83746AEB140EF6BBAE8A6C991BF679DDAAD728AD51B648B97E8BA7BB860A63963FFBD325770AAAFE092D353B3B3B0F7FA9411D895619855111878AB616E5631372BB6FC906F7AA7CF2F7CFF2B434FAF519AA1E00EDE9E9D5EC3B2730F07E7DCC8CE7971252FD117CBB8DBACE1629D7B80FBF741D6468DE77489BDBF91BBC175FE0A57F109F6741D94B6DB286F1F6057F517DFAED8BF8663F623FA1DF79AE03B6407AEFEB38A1633F485E502576EF65A371953C3178BC738FD471F97BCBD65A6BDA33FDF9AAEF87B707F7107DFB1373D6C924B887C8337F860D615AC3E1C67539FF692B193FA8C8FC9F5119F6292FCB7E7041F7EC1567CDE193EBCFC1ADEBE44AFF190BCA5374F3061063CB69C323F33EF47D8DBB97B7BD96BF65EF623A15BFF09EAE428D836999F6BD90BC4D88B42FA86A4DF3CD90ABE99A4D0EFBFF125D7A8187F1711FF1122BE0E7BC7080F0D7EEFFA8DC43757BA62DF38A4BFD53131567169AD61ACADE044534596DA7331039BB87335D4AC72D12A79F3AAF0E6D9A937CFFED2607DC905D93235BC2A34EC63B69E6A58275DC70AC3BA1981531E815F461D6FC4D053EDE25E685673C0CEDDC0B5A68967F5113AFE099A51EE42F6BCAEB38F3CB917C8B6C82951BB65D594B1A45F1DF54BAF1B53131263EAB839D740F5B72A862B7D69F75E7DCD35FBE715B5794D96F7D4B3F0E6BBC82DEEC9FE5ECFFE2B3BE1B9469F66CE95F8C6C9D7772165E18FACC84AEC3E3931975FC3C7B2D4E99F1FA38E0BBCA5FE3E13FC1AEED6F7FC0D9E9237FCF9E798D097C7164EF002E334B35599FD88FBB993BA425DB08D9CA2491F10AFDB10FEDC20932CB388E01BB51D4A7F47299BA47EC957E83721DE53E8A776FD7FB0E588BF69E8655FF61E2017E8E0BAC0F3A5C04CB6CB73DCD9C1A5A38D89B5CE9CD7C0B9A58D2BDB11FCEA387B5414568E494DED72B4AA30B53BEDBD9BD4AF4C3ED5EFF43986AF8CF5CB28F560F99C05DB8B0EE885B7CF3B60A2866D732EE4571338DD6A60B2B98FB16C0FC3CD2A46AB359EEB5D3CD2A7AA3C77B3DAA63479F1372525BED4B07ACA774F7980AE9EFB575CE330FFC5B7F6AB8AEAF71A7D887EE8A42F53A7D7F4DA1BFF54C3373AFA32BBCF9D9F139CCE23D93FF0F147239924C988C7F7B3C9DDE9A11E95EC471AEA364096F4874FCBD74EF65F4C1FE37D58F96FEAF3337201E826F8E08E780FF0B12EFD7CF706AFFC7E17D4F4C4C7895D62CCDD3B10FAE574C9B3C5F3A1C1CE2372959806F55B6786DE658E0A1B9B089B5AD2B52BC1369BFCDABFD46F94B94F6877CAF60861DF946D48FCED59771B71771363E6BD11FDA6ADABA14DCD760D551CE877D1D156A5D153B75A8E7A49FC7D481B14CB56C8962C7FE6E6B9192D667EED60E6BB46E2FBE7750EF13C03F96ED0A3B7E6AC50CE4D9F6BD0CD39602463D7820FA78A16C69B751C93F160AB8663591D17860E52DA7D4E1D695D43E29BFBD2F0946FFB4F8FEE50BF03F394AFE8C1279CBD992ADA4B6D9CBB2EA5B9E05C91B1E4D3D64BDC721F4B7CA9D1FBE82D73C01DDE98E75EC8E88DC7FEB349BEFB647778858F2AEFEF909B6A32ED3CFA53C0446E16DEF75E4ACF2549F7C56364FA41BE1FEC69EFDCB79F757E6D9F3ED0E06DE706CFD4F60D35FDC4AE725EBDC749E50EA3DD5BF42BB738A427B7C4DE2557E1CD0D7E6EBD7825314E38BA08195BD2F346B9D4D49FA7FA3DA16EFFD2EE946D47621B24DB80AB8580B38E80BD867D76A3EAF62EEA9A5D748DE4ACABA0C32C9D53E6E8C976292F2B245FFEEA445F9D776E568799190D7EFDDC96F8FEA9E19FFA3F352C188B3DBCC92CADFC7A3E4943C6E239C3A1A28163451327F4E7AEBC8A73727CF4D38B78CEA6E84B826FE68B6F7E871EAD6E498CFFE07B6818A3FF877E0563FA5F857C07EA21CE1C173867DFBCE0ED8D604ABD3E52ABCF64FA9AE0A4EEF09E633E2ADEE1839AF960C6FCAC710EAFA76CC5758B09335388BB547532D5B28EFAA53E259E1EB2F5F03C304C1FFBD83EC67BF8026F1AEE637AEDE729B53BE21CF1FB0CEEA46CF641B6EFCCB44FCD073C726E1B0FB86CDC63B24FD6556A5AB0A6DE9B822F7780D8C1F9D058E22BAE5BFDC1F78FFDFB27DF2FED86A8DDA0A7FDC5B7093FF9063983F001EA82A9816C99AF6AE4DC36D4E19389FF6785155B0BE26FC99ABFFAEE572722DB596AF717B5FBF3875AE2FB8786C5752CF15CC3D217DF35F295CD8AE783A73A16CF098BCC55D92CA247FD8E947574E9CF373C579FC36D34C4DFE563764C7DF1953C5A233CBAF5A78625FDD29FFBD4EF50F015BB8DF9656F9EDE4CCFBCF6313F7104D3B7E80D7D97C7974C3FC9F4B3CCD9E3FDDA1DD0E21CF2632D72E870BAD391F89EF273BA5778DF9EE08DF9EA5D2BBC773265EABA98E664FEFB9D9A7D551FE38D1A7F117CD9F93E2FF833C6E4DB177C6FA78CFB9CD103D0672E3B645F664F7DED3CE1AEFD806BF2BE20FB49FD0E43B2EE9173B74C9FE68E17FE9CFB37BE7FE467C177AADDC3A976BFF806DCD4AEAB41BE0D84C9F936DFC781A182867E0F754E5553469B1AD2B20B6DFEDFB6CE732DADAD8BC2E73B2DD5D85B62BB1E7B8D85DED5FBB16341144514297A3D028A88DD6862728C8E6FCCB5368839E7C778F6064B9EF832E61C73ED46B692A73A3E9A8B99EA13D5C0DA5C57ABBD5B4DBE727FF7167A5DEE4BDAD1E42A1E2FEC65DEEAE3CC34D0C6BC450DCBDCD43185D1F649F8BB03D817BE03BBD8EF255FDB1EEEFD7BC8F85258E667567B3856F4F09AD187558DA6F6468FC897F32F33E911F966E5586A23FB6FD32E329F8F70C35CF320EB509C457EB2E73DB12E3EC5F8374E5071BE4E527B54EA46FB4CEAE9B1E13BD99ED3DF17B79A1FE7A47FC8F21FEE3FD0AF3F9DE74A0F8327F841EFDE0F1EE3073DFE8375FA496626E17BC27FE7F8561F2BCE5159614E1D91EFE137B57D3CBAE7FE3D1ED2F7B8E3DC7A439D73AE49852EB13193C582238989D11DE55F997D57983BC5BF529F67C70DEF1A6CA5366BB6714C90AB305EF4722E593D606EA76FC9364CEF46D887C3ECC7039DE318E89E403FD547C9F581DD5DE3EAD9481D1D1EB476B8D1D2E64653AB1335F2DC24A346D74B1FAED11E963EDC420FB7D2C31D75AC03F47037FB712F7D6CFF3489146BF4C9700229CEC25FECE43B9FC4E9D43E96CD092C8E499D7EE65BEA61C5772C8B34F91E0A5FB215EDF6A71022E3F5EA4D84AAC3D8EFCFE08C7DF2669EB3A8645C9961538697281C6B068F697EED48B37DCC197C4FA8FC1795AB1E38233D3043FD1C63AD668E7BF49C6BC9EB51619EC33FE4FBC0EF7DCC5EE9DA2E7C655DE4A484F1E937AD1C7542B639CED187DF7147A6B9AD1B24E9D9F519D6646690A9E16D4CB28EFABD699D9F15DFE77C257CC5BBCAB725DE15B6E3D27BE9DFF0CC3E6E16E24898E95BD6E84DF2DDE2D6DF17603DE61C44C93184A60693F2ADAC658877A52E8B77A5365755F769BE953A6709DF8602E35AE39C0EF2953A2DE76575916F8F716E56A2378A64FF0EB711E4C8F2DB520A77FE0C560CBE8BA3720D4A09E321CD58F826C78E90B6E6C89722DB43C7290E7D1738625F3C605F8E75E9192AC7F7F27C2FD39642B62585CBE11CE7AF4BFC885CE367FC4673653D7E8C331F65F9FAEC2B1990C5F957F5FEFDF029EE6C9C9F468E39A7E770C79FFF463FDFF3DFBB1D3AC697C12CAE878E70EBCEE3CB0879EF5FEA9F3D652DA61EC9F661EF4AF3CE7FC543F61BEEF66E71C17E9C26AB88FB08EBEE0CF314FB2EB37648CE7DF51C606DE10461BE27927567E1BBCC9CB5B470A6FC3B53F0AEF717B6257C0F1633B80BEC639F33EFC6C8260203EB58677D76B1F7B6926B4B83EEB9A56C0B994AD85657F5A3B2AA17D5E4AB193F7BB8817C0B59AB90A7DBC9B7937CBBC8577C1CEC5A47A46713F1C16D1C0CECE0EB7C1ADF170F1130C7E01FDB555A245FA9D3853E2C755AD63B12A623A4ACCC58FCDBCBBA41CA7586343D95A1B2F4AC70CE52C722CF054E5C9CA95B38E7D373971397B89CBCC435B737F4E31D7FF61BF3EF77CEB20F49D6647AFC917DF3E72E33F7500E5FF819BA1AC9E2922C2F87B27C7DC27A93C725B3DCC5C021CE0633B8719D302366F1B0455F7336FA4772738233F606FFAD65CE46B367389A3A45668DBD35C4D997B9394A566B0EB2E5ECBB438EDB94BA5703F373448EF3072FC9F602EB01998DCE15DF4539375DF8FAC4BB7B9A2D35E18917D9FA9C3B18774691994BE17C8ED97438447F84B0C0CCBCFA599E93E0D159AA5ED61FC7D058376ACC42C3CFBE556CFB505149BE157CAF6248F1AD2BF035B274216BB5187C3BC8B653F1B563BA63119B5D21243F47B13FC87AD21B26EF0896E59A34B25D10C6A3BA4E2BC6C53A4DBEE62C52B61CD2E49B72E49122D734598A0E457C7D24ACB92F1E3EE1CC7A327E8153323DE3F69C7C2FA6383BCD5EE394FDF354BC286B4ECBE4B274837BCEAC57ACBB67ACF15F7DA7F8E2E4FEE021191EE18EAFBF4E9CAAD7C2F6CA7ECC2C7786DCE70CF2EC1B37FCFACDD2152E56AE70C25CB4E73846DCCABC10BCC6C1DA3592549C1CD53C24A26FA3DC46F8F9DA947B35049F258C37C4BF8BDABB05BE9AADD173C5BBC2979EF591AF977C7D9C8DE68737E01F0C22C4993738BC4EBE012C0DAE29DFAAF529836D7D314F7D468D91A92AC9B782DE2DAFE8C1C7462B3E3163357F7430673955CE6A979CD5E24157AB579DDFD12BD73674C8B3EA2631D83985216ABC7B11C7CCC9F9B104AE4D29C4FA9903C838C47C3767FA857169D6A2E2962CF6ED391CD84F7040FFED394FD536E539C321F9A95A3DAE9525E7636E73B2C6307589D3C90B9C4D93F30CE7E4B92B9C73FF7281AC3903DFCD5DE07EEE120F7ECECE8E2C73785EAF7984AF71E5CCE2CA75CCAC76A35E5FBBB3B8B01D71BEE2D7E9B9DBE93C4EED19DCB3FE5F2FF033E4E7BFC99E7914B8428ADBFDD52B24A90439CB350A31F1307F4EBC1B2147E55DC3BF61CEBF21FA767DE5026B2BE7082E9FABFB51CAF338E667729AED2F75D947BE5EFAD64BB63E47042B9FD7B0C3DE9B71C490B647111DDBC4C668083D9D3E74CBF5079D5E7474324BB58B98A7A8E63697CA549F5A1CF8D86C4763930D9515FDA8AA1828D6E8520F4B1FFEC83EDC546764AD7A99A359A31B1DB0B74EE2AB39892BFAF51F5B1A57D63D7CE5DF678F597AD6142D612CBDF825E318F9266CC7489071D299577CF739C7489D4E712B753AC30C5D607C4CFF1E936F8E73CC099527E3FC14FD3C4BC6D4C59CAC5B3213CBDA226BE9E332E7DC75CE41E14B3C524F5BECCFE173A5A76DBE1FE17E84EF6DF07BC3DC6E1ADF1BE23E79FC20873BF2B8A0EF8E962F915AA18FC9362EEB90F4E32E15A55F778257CFB559EECBC0F73714D773C5763D70AEF65797CE381BE5E197E7AA90EFA427F982ADD760EB716EC34DBE7E7AF8763C8D0B579C9FCB5D5C8BECCCE2037E95A78AFD56F956E6DC12DF56EABA2CDE2D2BEFD2FDB78AF5B95A73ADAF916BCDE87FD6E54F7592CF2CACF756B4916B073DDEF9C9859E268FBA4FFC1DF95D73067872A471638DE307B3C609B3F4AC394AC6BB9AB1C9E8C5A371A317C711B56695E2649BA0920EAD7D87669C769F69C6DCAA5ACD7A9BF59DE1985C8F27C9996C4F842F75C1D75FA7C97586B32DB3E9A39C2317E43E7BE953F4C210F777A9D885DEAA7D6AE74C7F6DC7F85E727F5A638E5EC8E1A73F8FEF0B64CC6C9421E77D324E085F72DCA55F65AD6A5BD63228B93FD206794A7DDE20CF90F8569D7375CAFCCCF96851AE9BCEEBB5ABE963B265CF75C75FF8D643B91D3B70DB2308B9A3F8CE7C7DC5AFDDDAB77147B65FCC9B98EE9B4327E79ED61627DADA1DE8EA76A1BD935EFD64467DA309750D63A8A91F410DFB7135D957314BD7D74A0DE75CACFAB59C7367C1A746B957835DCDC6AD723E5EAB9BB3960F23FD539C8D3DE8E57C3CD83A8EFCC0066E462378E4AC77EB245F7EE6BE303F4E9B7638DB73462F305679ABD08BE388D8B3D871E4B023D7BA384E90A0C4C3CAC752ABC95C71A6970FE963D1116BF791F75471161FE727CED88335DB4739BE379F0716C97635474E679A65E2427364BE564A5CBCDC37383FCAF7A8EFBDD0CC83FC1D01D676D6811F6475B6CC9EC16D92DB18B73B94AC5145C8758BFBC27793DBD08A9C87A38FE5CB56248CC5BBF2BC8DC5B91CFD9B2DB22DFA56B8D2B76EB274D9B710F3ECE0613A851B72FEEA627665BDBE1D5B87A5CD4B2E725D02F3503BEB68B703AD6D36D4D1CFB575A55C35DB8A9A015494F7B246F7B146F7336B0DE8BCA5E6A592AC453FCBF9F06D72DE65BD9C1FC059F8A313E1EE655C0F6FE2C9B9C7CF590C3FBC07F8E6DEC7A2254ABE51C578B694F1A8AED5EBB60CC2641C21DF2839C758A7E38AB3F6B1D4E894FB546DD36EAD8CF46683EF89B0A5EEC9F7E734BDCABFDF133DF7B4CCFE1AA4B64F35BBB8216197BCD0EB53C9CBE7FD84FEDA63ECEC997D546A3B7FD72AE7A565D68300F3393909E30C9520C7A8F015AE7CBD29F743627F95FB228596E55C3A3987F914ABF46B40AEF7A3E4BA4EFFEC31F91E63762AFDD2B78AED0EB946145BA76D0BC7EE1DFCF0C55993C3F86A0BE3CEB2899BE15535F74AA6922CD550CF7987AAAD655D664D2EAFD035F94379B7AACBEF3F74E2DD870E947FE8D18CCB751F16551B6B1E75D5CF6B1EC2F813FB70B3F461D66BE9C1536D33B861667F742570EBD8C5F78914BEF90EB0452F2BBE965D4CBFF0714CF563BFF4E2B124D6AD696C8997958FC9D845BECE13323E613FCE3373E539379D2A65BC322393AF378FF3F133DC91EFCF69F1ED29B04C9E4B39608D5CC239CDEAE00A90B58FD455518FB295356A9973537ABD5AAD69CAB6F0BDC23EC23A10D28C11E4BF435FDE92DD09191E906994FE8CB06E87F9BAC0779DEF89E41A4E612B5A9ECF61899E15AEF3D31995A9744ED66CDD866F85AD931CB536713B11E7DF31C68C18E6ACBE85AF960DECF7EBDE5B5F3B62AC3DF6ABF50B99710BFDB694ADE86D591BCACABAC9B8D7F0717F91AFEAC925F3F03363CED5F470073D3CC23E7C3318C21339DE5AB6F1C516C59D234E3609728D629AEF0BE317B5DAA4192F8EB11F8F2694D6CC29FAF90851CE31BB549C4A92E99E9B3DD943B93947712BFECD8F73DE993C63FD92F371A825B20D90C74A96BE3B665E32F88A4FE9D147F1E9BEDE17E64FB25E51D82FFA581F772AEE2BBEC7BA4EB31F3F91F10367D96B72CE8A87C9749B2C378529BD2A5A33149817DF9ED0B7528FB3EAD87D61DD51B1357AADF8D645B64EE5D9301C22EB26A66C1BB81F8F236F0DE1DABA816FE6106E478258E99E523391F26EC3085A3BE8B5D651C5B7BCA2DB60DB5DF4ADB07DFBBE553D0B5AEE8125CF1FAD33FA7063BD5C9BA47BB05A9B966B963833B537BB8DEBC13DEA5AC4C1F6496439773FDA62B8B56EB346EFE2D412419EFF9F29F30E26C978CAAC3D3CCD4C2D8C674B7DACE663CD39400547F7B0614E236CC960C7494FBB7248D0AF492AC599F5685CCE7BD775F9718EB595B5F02970AA7CA6EAB2B08DE6353BF1E3E18DDE664AB6C67188A25FF9DEA37C7FC6787FDF38375E7E97D4E935EEAFD1C3C1737C634DCE93ED1EB543B6E25FE55BD573599317D967678ED4B9196A4DD96DE428D77FD563CDB6C0D52EA24F03F64D7C9F4C2039BC44BE217C33AD93EF2A7C3DD3686D95E77D33177590471767A1363BEA3F5A50CB6C55CB6C55CD3E5CC57C55C93E5CC91E5C419FBF79DB6E7858D7E98AF23EE5E3D25CADEA748DE163235B37F133D0D968C746C7021E47E8DDB12DD6E8187263EC17EEA4C1B7C0584B79DAE8C9E263CD398E25F132B5C2593AC0BABD3AB68720B5CEB95ACE81D9A2B7633E6630FA3647AEDFFC97FA9C8C10B79C711026E30D328EE4F479EDCAB3BAF66ABF1A92F794AFAFF47189A4F6F1A3DA5E3F7B5B3E23617E5E36A4DEF3331496F9E90AFF70563E676EDE937997ACA52EAFAAEBF1B3989735658F1C9FE7FFDDAD8FE34EB89ED9FA4A7294626B8B906B5871B591AB95B25942D87686D9E792D81DF2E38AAFEFD8776F0697D1CDDE2BDE2D5D9BD2335077B11EBF2B13DFB62BDFBE566AC1BBF79DF840B6D27F557DAE94B54B99A98695AFEBC9B341C4DEDB58A73376933CCF926C3B99B1663A66F148665F589F6FF9FFC95999F7A652F0DB76314EBEE3643A21A27F274D51C3CB85DC152BD66BBFE2CC7A4DADC8332A84B3899C4D725CF9006B9694CE65AE2CC26ECE5693791CB13E9FAD9CE1CBFA39EEC9E171F7BCD87B15AF34BDB9AFB7EA58535A8EEBDEE8D769E3D893BCDE333E0B07862473F177DD3387DF6C5EE2949FA35440AECDA74F99930233CC4A728E0DF3E49C671FB39E3DCD965C155B97B07DAEC75E72F5143D4BAECC50C2D666DD30D8866031AFC34AA5BC3BF83EBD8798F8975EFE3ABA8663B9176C933CBFDDA2672066E56A7AB4AAF6D9A7E59C7F3F907D19B99755C833CBE4B974E42EDE15CF560EA85A2DCF79AF36D8D695CC4E8DF566A36EEBF9A999F3702BE7E1A1661F0EE59EFD239BD8198B20C87EBC2AF787366FC3671291B1A1094A184F09E7927AAD39C7B140F9A94553024B2683B3794F69D542CE641CB4A6B0664B63DD9E41C87988B0278BED71CE5A13ECDD53ECDB33ECD39C5B8FC9E29435F58CBDF362ED9C3AC355E85CE9D2D039DF3BE7D7F2CCC839F23B644EDB673FDF65EF8CCC9D6063268710E7D5E064162BBE0C96BC692C7A5258E00C384FAE73E43ACB5A3543A68AED0BAE25F5D85EE259B22D7AD6ACB99A4DA235584C41B8870358326F60A67F1E8BC32B58A326BBA7D93BC9B4469EB5CE99A74AD48F72E6E60FF472598566FABEC8B54B8B7DF8D5EB66BC7EDB8AF7EF35EB327AF983AAD552A7C99C755AFC2CF731AC3154A8D78D35CC5BB5664CF60531DD1FC4147BF144AF5C37B38671CE4D5E53C4D0B692EF3F39EF1A9C6345CE7EB32881456AC99CC4B2C842CED67DAC5A0F10B491B33DADD6F78571C875884DF791621DF11E23E23BC6CEB85654B84FE6D4B5AAB1A913AAB03D4194EFED50DB13FC192A3C91C52615A2D6C78F10F41DAA73E556BCBFB0756BAEB3255C279D314C50E3CE979E75977055F598B38ED4620BD916B89AC8D534B60AF36800A6BE05D8FAE599075318EB9981A9778E3EB2D17FFD25F59819B9AC508F3BF086B5F8CD3BD6E3772D78F5AE197FBF6D52FAEBCD27FC4DBEF27CF677EF3AC8B8ABC85867EAFE22E302E75AFABBAEA6B0D6A57BB2ADD38FF13E3225676F2FB3806C07D7E1612FF6B02F7B4C5BF08E6D6BFD07E7425F2E72369333192F90AFE22CD7C15BE4F9ED7B5826E315DB0173480AAB54D099C19A2B8375320E91B1DCCB25EC3DC29697AC7DF4764164FDACAC5284DAA2C2D4A68F3F4BAD93E91AB5EA15B6692CCBFDC8287FC1B306D7199911C8B5C056717508D7FFF06C699F2D7A56731D23D782463F2F61943CCDBDF3EA1CF491EE19F55AFEE6E5E5BD8AADE4E50F157A067AFBBE5DB115AEA2BFDFBE64FBE79B8FF8EB9566FCE66D9BEAC5EF4A187FF8C0B9D9605CE0DCD830CA5E605273765D95CE5E83CD13F0D2BBEEDE8092A74FAE4FE6EBD1F0BF24BC0BACA57E8F8F1538EF3CFB59329892B08E63DE92C002E517CE56CA46D636B2B693B5238580338D552A48CE6BEE43754C36E43954AC37C87A534476E112299E641832B44E8F06BDC23583802783150FD9D2AFE259BF9B7DD6F06C912B992ACF72EE1F27539F9D7E55DA56CF2B725A0DBF4A9F95ECA4B89678764CB31DA5674523232B18EE5FC030990AD761D6E461321EA28FCB3E742B896F9B5A39EB34484DEEA46735D757FFE24ABDFE883F5E35702B7C9B9487DFD2C3FF625CAE19575468CE92E1E4FC2DF1B0D46A5907696FB0C345AECE9E15387B57F43EE51AD98053EE3540B94AA45947C83AA239CB73CD4BEB7649D69E21E3590B395B843365256BF2F5DB0CCE8E7DEA002B4E727691B34B38536ED66F721209EB90DA525EBD5D37B4468E416A950A90E50AB54C9E4B949F4C17C874CEA5B9CAFDA8A629B9A79CE26AA75FC954E4B16DC34DAE2E83ABC3A26BB1707DE1D9FFE0AA25F76C9F513C87C87690DBC1AE4974363B8BF5B88C9EADAC61EFAC668F2DFB773DFED3F0EC1FC2F675037EFFBB8E8C3FE12FF2FD8B1E7EE62BB5BDC0B8D760DC57645CECCB4A43A8AF1A81836CEDDDCB4A05CE729F1F0719974AB11E29E13C56E01C31F2588175F499B55A27892929D6D602677ADA4ED6F63D2C3AF6B0E4A4A79DF4B48BF5DB95525A2DB0766B8EC253EDBBF9354301B25C917303DDFCACB8F8BBA805329D7726302B6B718A6B4C719D24D709BBF8956C6D2FB93A5F70D5B5D85AF4ABC176F417CF0E2F1B5A421F790AD781CE49F4CB39569D13F8D460260BDD6BC5B355B5ECC1151D256C9B5F7AF675237E7F256AC0FFFEAC21DF8F8AF11FAF9A54CE12C64A258C3F0863AABCC0B9D0970B2A1F80A9731ED6AE2558BB97C87849F1760C06611F0EC146D94B54643DF2D2D3721F2851A176BF606DAC9588146B329EA5E6C878DE167F66ED4816593FF3DEA3F6C9FB592B2EFDFE32A5983A934A0B642A5CE7842B794E3B84EB2E26EDDAAF5287BD64EAB16AA68AABC1D46E7EC9D542A6E6175C578A7E15A69FC9F4F3E7450C5183830BE825CF3E51C7387ADB7D6A2BC7FD749F6DE34CD44B916F6547D1B77FBDF0ADC1F56F513DFEF747157F8E759C9F8F375293CB598F2B647666FEA6372B99A7AAD85FAB99A36A6A478D352E9352FD2FEA6F9960E6F32B59BB16958F6D7D01D83E73AE33641B2E889C479E593BA9979ED6F218D9BBC07AC22C32D64CE869D18C957DDA2A9E8E29CEF3E4BC602F659D50DC967E91E2C9AFF90D2D28F1F342CD0A573BB9DA852B6777FAD4677BE6EAB6902B990A5747295713EBB0C155FB95B949BC3AF22BD745C575F0B31F83435AFD7DB3E8EDF029F5B47BD1D326F78CF4A819B7A26608E55465DD67A5F2DA419491FB7BCE46EF38EF6AF5E00DF3D71BD6F0D7ACDDAFDEB166BF695075F9F7BF3F2AFD697858B2D61B7AF84DA98FA5C797F53C7B59A9AFA8E67A2B4C1DF318A3CCCCD3367AD9D2430DAEEA7B191BB2502F796BD62F3C5DF4F5732653B9CC98B7C6C959D64E146B8BB0660DB7BE643D27ACEDC23C46DEF1A2FC0EADC26BF99E394333E4394D4DD9A2EA9ECB1356E67C2B3F5B56C3AFE4A9B892A7C32C5C756E525E953AACFCCA5967D4E0FA4B0D16AE43254C07E8D9827A7BA6D04DA64A729FB25637DA9B1DCC4EC2AA45A9908F0B9EFDE3D77A4CCFFEC69EFBDB5FB5CABBBFFD5E8EFF033F510D23]]>
          </BitmapFile>
        </BitmapFromFile>
        <BitmapExpression>
          <Expression>
<![CDATA[//X,Y : current coordinate (0..1)
//Pixel : current color (rgb)
//Sample expression: Pixel.R=abs(sin(X*16));

float mX,mY;//max coordinates X,Y
mX = Array1.SizeDim1-1;
mY = Array1.SizeDim2-1;

float cX,cY;//current X,Y
cX = clamp( X*mX, 0, mX );
cY = clamp( Y*mY, 0, mY );

Array1[cX,cY] = (Pixel.R+Pixel.G+Pixel.B)/3;]]>
          </Expression>
        </BitmapExpression>
      </Producers>
    </Bitmap>
    <Array Name="Array1" Dimensions="1" SizeDim1="120" SizeDim2="80"/>
    <Material Name="Material1" Shading="1" Light="0">
      <Textures>
        <MaterialTexture Texture="Bitmap1" TextureWrapMode="2" TexCoords="1"/>
      </Textures>
    </Material>
  </Content>
</ZApplication>
(The original was using something closer to "Point" rendering but I'm using "Flat" just for testing.)

This works but I can't figure out why am I getting a line of pixels that don't react in the lower 5/6th part? It must be something obvious but I just can't see it :oops:
User avatar
Kjell
Posts: 1915
Joined: Sat Feb 23, 2008 11:15 pm

Re: Picture effect

Post by Kjell »

Hi rrTea,

It's a rounding error. You should use the following ( instead of your clamp functions ) in your BitmapExpression ..

Code: Select all

cX = round( X*mX );
cY = round( Y*mY );
K
User avatar
rrTea
Posts: 475
Joined: Sat Feb 15, 2014 9:54 am

Re: Picture effect

Post by rrTea »

Right that was it, thanks!
Post Reply