[seam-commits] Seam SVN: r8102 - in trunk/examples/seamspace: resources/META-INF and 3 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Fri May 2 19:37:20 EDT 2008


Author: shane.bryzak at jboss.com
Date: 2008-05-02 19:37:19 -0400 (Fri, 02 May 2008)
New Revision: 8102

Added:
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/PictureSearch.java
   trunk/examples/seamspace/view/pictures.xhtml
Removed:
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentLocal.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendLocal.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileLocal.java
Modified:
   trunk/examples/seamspace/resources/META-INF/security-rules.drl
   trunk/examples/seamspace/resources/WEB-INF/pages.xml
   trunk/examples/seamspace/resources/import.sql
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendAction.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/MemberImage.java
   trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java
   trunk/examples/seamspace/view/profile.xhtml
   trunk/examples/seamspace/view/register.xhtml
Log:
removed session beans, added member images in prep for advanced permissions example

Modified: trunk/examples/seamspace/resources/META-INF/security-rules.drl
===================================================================
--- trunk/examples/seamspace/resources/META-INF/security-rules.drl	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/resources/META-INF/security-rules.drl	2008-05-02 23:37:19 UTC (rev 8102)
@@ -5,6 +5,7 @@
 import java.security.Principal;
 
 import org.jboss.seam.security.permission.PermissionCheck;
+import org.jboss.seam.security.permission.RoleCheck;
 import org.jboss.seam.security.Role;
 
 import org.jboss.seam.example.seamspace.BlogComment;
@@ -14,7 +15,7 @@
 import org.jboss.seam.example.seamspace.MemberFriend;
 import org.jboss.seam.example.seamspace.MemberImage;
 
-rule ViewImage
+rule ViewProfileImage
   no-loop
   activation-group "permissions"
 when
@@ -25,11 +26,45 @@
   check.grant();
 end
 
+rule FriendViewImage
+  no-loop
+  activation-group "permissions"
+when
+  member: Member()
+  image: MemberImage(mbr : member -> (mbr.friends contains member))
+  PermissionCheck(target == image, action == "view")
+  role: RoleCheck(name == "friend")
+then
+  role.grant();
+end
+
+rule GuestViewImage
+  no-loop
+  activation-group "permissions"
+when
+  image: MemberImage()
+  PermissionCheck(target == image, action == "view")
+  role: RoleCheck(name == "guest")
+then
+  role.grant();
+end
+
+rule ViewMyImages
+  no-loop
+  activation-group "permissions"
+when
+  acct: MemberAccount()
+  image: MemberImage(mbr : member -> (mbr.memberId.equals(acct.member.memberId)))
+  check: PermissionCheck(target == image, action == "view")
+then
+  check.grant();
+end
+
 rule RestrictCommentPage
   no-loop
   activation-group "permissions"
 when
-  check: PermissionCheck(name == "/comment.xhtml", granted == false)
+  check: PermissionCheck(target == "/comment.xhtml", granted == false)
   Role(name == "user")
 then
   check.grant();
@@ -104,7 +139,7 @@
   no-loop
   activation-group "permissions"
 when
-  check: PermissionCheck(name == "seam.account", action == "create", granted == false)
+  check: PermissionCheck(target == "seam.account", action == "create", granted == false)
   Role(name == "admin")
 then
   check.grant();
@@ -120,7 +155,7 @@
   no-loop
   activation-group "permissions"
 when
-  check: PermissionCheck(name == "seam.user", granted == false)
+  check: PermissionCheck(target == "seam.user", granted == false)
   Role(name == "admin")
 then
   check.grant();
@@ -130,7 +165,7 @@
   no-loop
   activation-group "permissions"
 when
-  check: PermissionCheck(name == "seam.role", granted == false)
+  check: PermissionCheck(target == "seam.role", granted == false)
   Role(name == "admin")
 then
   check.grant();

Modified: trunk/examples/seamspace/resources/WEB-INF/pages.xml
===================================================================
--- trunk/examples/seamspace/resources/WEB-INF/pages.xml	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/resources/WEB-INF/pages.xml	2008-05-02 23:37:19 UTC (rev 8102)
@@ -131,6 +131,11 @@
         </redirect>
       </navigation>    
     </page>
+    
+    <page view-id="/pictures.xhtml" action="#{pictureSearch.loadMemberPictures}">
+      <param name="name" value="#{pictureSearch.memberName}"/>
+      
+    </page>
        
     <page view-id="*">
         <!--navigation from-action="#{identity.logout}">

Modified: trunk/examples/seamspace/resources/import.sql
===================================================================
--- trunk/examples/seamspace/resources/import.sql	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/resources/import.sql	2008-05-02 23:37:19 UTC (rev 8102)
@@ -26,6 +26,8 @@
 
 insert into MemberImage (imageid, member_id, contentType, data) values (4, 4, 'image/jpeg', 'FFD8FFE000104A46494600010200006400640000FFEC00114475636B79000100040000003C0000FFEE000E41646F62650064C000000001FFDB0084000604040405040605050609060506090B080606080B0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B1C1F1F1F1F1F1F1F1F1F1F010707070D0C0D181010181A1511151A1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFC000110800E100AA03011100021101031101FFC400A20000010403010000000000000000000000040203050600010708010002030101000000000000000000000001020003040506100001030204030603050408040700000001110203000421311205415106617181223213A1420791B1522314C1E16215F0D1F1723353541692B24363A2C27324342508110002020104010402020104030000000000011102032131120441516113052232718114F091A1B1C14215FFDA000C03010002110311003F00AFBA09BDC735A10E2A072AE3B63D504C36A740F77881A7B2AAB263A0E82231C601C547C053A7023A4B09B72015540720578D24B2CE210D7443E4F362420!
 CE9250CD3162D868D65138B46390A590C1B6C51A82A8BC0E6283B31D2D02D8C6BB308DE3DBCA96488362B469B70C421CC76A1E35629E26549FCADFAA23B72DFF61D9C87EE97B05B1CC31CF05E7B9815DF0A7C7CADB17BA15F93EB0F464523BDB74D3054D4D8901EED65B855F5C171A14075AFD5FE8BB8736274F25B3CA00668DCD18F6856D0B60B92B5459F6FDDB6BDC5865B2B98EE5A062E8DC1C9DE86A8D56FA11A7E09781CDD383711C473F1A4E7007561243DCDC40C715A5AD9D9C20B4902E970CD1390141B63A43DA096B4EA538D339D03082228DDA0871C03704F1A64236151315A4262067DE94FF24282B6876384FB04A2A0C56A4CA07923EE9AE6CA153ECAAEADC8FE06D1DD992D5FF232A839300D8A576905EDD44EACF553365554DA1D709257374E9D0062076525996D11210DB3BDB0E2854263E355CEA5A87E1B651E9E0B8F134772486DBDAA1248E0695C92479E1A1A11840429CB2A46DAD8285C16D1A9F20F37A41F89AA9B65892098AD18D6E1896E20E74F54E00E19CCBEA0FD519E39A7D8FA7246B6E89D3777C083A08285B1F027B7856EC385B537FD4A1538D9478473AB5DADC6C2FEF6E64335D4A51B24A55CE73B173B1ABAF926D5AAD11A2AA2AD9057360D6B89320692001892A95B6B7667B56014C9730B8398F28310D7623E34D0988ACD6C4858F515D5A!
 4CCB9B395F637CC2A2589C51C7B41FB8D556C53BEA8B96595E8CEE5F4AFEAC43BECCCD
9B790D837700182650D8E74E4383FB38D72FB3D574FCABAD7FE87ADF97F275D30BA4607808A15573C38566AEA2BD019D1863C3199FCC3B70A9103C855BC6C400F95DCAAC4A6046C3A3862F60348049287B3C692F100523ADB5746DC078F68E155A9416CD96398C2C40350CA8CB0004F103AC9C7420A6A6E160BA8F319D68E4271396D9185F139AE4182F691E34D6B2298D43A38985ED6008D0303C39E355EEC64E07E36481C801734E49950ADD263B5215135EE2010840C0760AA9E4D4B55740F861F28247980F81CA9DDA4513EDFB9806E38A1196548EDA0CAA1B6B666418A69181E34B519B82B3F537AA0EC3B03E0B3C374BF22DED1AD451AB073BC1BF1AD98A89B8F0B51137B90FF004F3E876D735BB2EF758E4BAB87B75C9A9DA2305D8941EA7779ACF9BEC2F66D57446CAF5EB58E5AB3A933E9B74FC56C6D99610FB2D0123737501DB8F1AC4EF6999D4B559156EA1FA43D333C1283B6C20A287B3531C08E4946BDCC957A3637C34B2D8E05D63D0726CF24AE8838C2094692A47DB8D773A9DFF916BB9CFCFD6E1B14991A59206B82E9C070AE92664685C7753C32C7730C8639A121D0C8D28E639B8820F654693D09C8F59FD23EB61D61D350BAE1DA772B21EC5EB78170183C01F8F3AE067C2F1DDD56C68E5C9497C75BC6A0E90383C8CD699A50226C75B665A84A15C1470FB2!
 91CD46DC263B66B029C790AA6CC23CE8E4907A480DF4A1E34D122C4089E2974EA3820E1D94F6A0A9919305D64E0A8838914956B52C6817433E2B9D37221CD1967098E4735C010306BBB08C939D58D1947ACD8DD7ED1975BDC3594C139E694B3B8E97A9391DBC4E2D008408A3BBBA8F1D075B84456189C4008BCB0E554BAB2C91418D6E96F61FB530A1508F680C800D28434E230E54CE00A4321FD3C168E9EE3F2A389A4B9D9655A31568F7D0AAFCFC1C0B7EDC64DFBEB0DA032FBB6768161898708D1703C0B9733575A175ECD2893462ABF9123D23D3D20836F8DA467861C502D70E8DA3A592B24A45744E6A1C11073E741DB42BE001BA5D3035DE5D4E23E26B3DA59752A725EB8D89D7CD94862AA94AB7AB91D2C1CD4E4A0E0DD45B24DB65D11731F95EBA1BCEBD5F5F32BAD0E365C6EAF52BCE6B434F0E43F656B3333A3FD05EAA3B2F5BB6DE490B6D37289D048CE1EE3417467EF1E3593BB8E693E85989F83D370EFB14D219490D883C82DC2B909F16D16D75524958EE7EFC803406B5874D23B38416D6C483AE5AF6B40211C5C1BDBA4D2D85ADD30BB572354629EA078D4560D9044A1AF806001031F1C6ACB6494257721370631A51BE8E27C2AA45A05AA2E63D3A72AB2453CFD2757BE09FF4E0B4991F8C8714040C8F1435B3836A4CCB78F03DB7EF925BEE6C96477B913B53!
 305C8F3AA7FE0BF8A82E567D496C185B127B8306B9C42270C41AAAD763D688376EEA78
BDFD13488D94A3DCE20B580E2AB4AAADA15B49933657165B8E93048091800B8E02AC55E3BEE45795289686D6179607798A129C3214AC3E4AF7D4EDC7F9774E4AC8641EE3C39F180517437501F691498E5D92F05B43CFFF0049AE1971D7A0488F73EDCE95CF5282EAEA7D8D630FF64EA39CBFD1E9CB3DE76DB57C50BEE4071006971189AE03BFB1D3746C979B71B48207DC4CE6B5B1824BB82551280A8CAC3FAFB62B891F199018C601C5C065478DBCA1925EA466E9D55D3E617384D1BC3BD3E6198A2B1B7E193925E4E1DF552FA2B89A39206F931470E64F0AEEFD5D1AD19CFEDDA4E6AE7BDD22B8AAE04D76A0E7324FA727367D45B65CAA88AE61712A986B43F7D57954D5AF625773D0761BE996E6660796445C40989006AC8A780AE2DB1962BAF52DBB66EAFB68436195B27B89A5EAB81E341D3692BC96F42746EE45D5A0047B685E9C7482065553509898ADA96CB1BE13C4D7C6DF2BC38E938A0ACBCB5846B6B490F86312B482720415E7CA9B1EBB81A82037D33B4BDAC180441DA952A9C8EECA0AF25E7C12B515724796208E69431E5E4BB06907995CBC2BA966919E4B15A5D1129716E98E3046818941C178565BD4B6B71D8AFAE2699AE62B400480320780E555DAB08B6AC441BB4F248E609CB99AFF0030351143B2CB1CA9B871424A6F52E9D3579FFDD6DB1413699086CB3!
 39CED23DB6FAC788C2A89896D0B6DE117FB8EB0D9F6DB9B7B79DE7549AB5BB30D5C1A1DC94E5431C38D07B268E79F59B722ED9ED6EA39411212D6441092C78043978227C6ADEAD66D01AEC721E86DAF72DDFAAA6836C9BF4976C8247B676025087008839AA5743B791531276532CB30D1DAEE34D0EAD75D23D510BF6C8E2DC2D1E5C12F2292DDEE95CF5F96400BF2CC970C6B85FE463FCA6AFDB53A5F1DB4D57B973EB0B6BE8BA1A187DC26E64708647620E9040C7B74D62C2FF397B17647F8B4884B0E899EDFA44B36CDC5FB7EE7286B9974606C814A6AD5A9AF2542E4956DBB339395D72AFA0AB17E31570CAFD8FD18BCDCF70F7F74DC652C693AE68A01009315FE11E3A6B5FF00F4F8D62B54BFB933FF00892F5642FD5AD976CDA2D596F6E069604695525305ABBEB325AF77257DBC6AB5D0E44F78D20B085398EDAF408E5362A22E696C8710D425314231A8D93C1D92D6EE391A1F1CC1640D78D20E3A829AE53D248D96EB0BFB98AD213A5BA43B0CCE0AB8E18525E0AACB50982F6E0DFBAE2393439308D5415F954D57772A094B433AC7495F437360DF386E903BC2E24615CEB522D26DADBF1271F711C6C716BD3505C69EB54846DBDCADEEF34841707100627914E4955C3E45B56A0ABFEAE4FC3F7E5CAB5C94F16799ADB748993B8C738D4C19341C4227102BB76C6FD0A03!
 A1DD21F68E89525C75B435141EFAA6F8C08CB6BDBB74467B756480A3067A8A62ABC129
1D14C32C5631970D65AAB1CE63DC496B4AA823E63FBE8C4B1791916EF74248A48A576B602D710712175A0E588A67890512B3750C92C13CB2CAD96E25635A0855254EA45E2B54AC1C5A4B62CF93927244F5075336F76C658C8F73DD140C85870C1CD00FC2AFA608B4868F417F45AF4D87D4189AE785BB85F1877220870FBAAAFB4A72C3A7866AE969963D51EAE64ADFD3EB90832307A80C96BCDDA0EA434C89EA58E0FE590AA38297B81C8F72D1AD5039125D3D771B2CA16C6859983D99252AAA4C37520BD4FBC362B57BB521C7FAAABB291E8923CD1F5677837972D66A50154675E8BEAB0F14D9CBEEE4967376B7CA4152D38F85768E734390B91635C1D877D401D7FA66F3649365B212DC3D971ECC6D983580A1011557118572F356DC98E9D4BADBB76D7C2D6C1BB37DA386A000CF9E22AA6ECBC782BC897A8FC1B2D9CB20D1BB30170FF000C201DF9E78D2B6FD0A346CB874F7BFB6811C7771BE340A0A9FBCD67CAA7C1752D1E49BB8DF4C719D7230340E273E3599D2CF445DF2D56AD9017BD4F14D30B40F6FBA4600945EE5ABAB8EC948EAF51BF78FE319E9CC67F868CBF464E753C8B1CE1972640A1A4A63C8675E96CB432B245AE73260E6925BE944E24E754FF00244196B7F3C2D2010F6039380C0F022ABB5131AAC92926824B3F71BE56EA0109C7138D55C5A646311FB3A8!
 B236800B95AEC5701881DFC69E18012E1C0C69C49CC6592765324C328AF5D1F6E77A3B1FC272C7135A56C3D7408E99DCA4B1EA7B0BD6F934CA1464007F978F7D57D8C5CF1BA96E1BF1C8AC7AC362DDBF98411DB4D23A22E620760AA422E35E372A83D04C951FA95BD7D44B7DC6D36DDBE28DF046D1FF00BD68563C1FC40E2D3D95B7A95C0D3777AFA19333BA6B8A2D1D29BE3EC761B5B4DCA66CDBA9D45C5992B9C4A01D8B59B2C727C7445D47A29DC87EB0BFB89637B41D00855E5431575D4992DA1E7FEB37BDD7A7510E3F8BB2BD3F4FF53919D9596B9ED5239615B20CD26464870EC34C2974E9A12496E1DAD803496A3BEDACB9A24162D96FFA989035C1ADCF25C57926154E9A15B610CBE95B300ED2030799A149E4532A584064E6DFBD5EC0D6C5087B812495C91304E555D948AE209986F771B860F75A1A1AE52A70701CAA9D0154426F570DD66574ED639CE2AFFE107FAE9F1FA16A4447EB5DFEA5FEB5F9B3FC5DF4F03423904618F9F4BB06B15D8F1AEB37A0107999AE7797CAA73EDF0AA62030116AFB563035CED5A9C4923D44A252DA5910E7EA491A6360D23966BDF43884545712900B016C993814209C7339E551C018B8ED1D2BFCCE0D6FCC06341DE10208BDEACDB1CC42A9635A5483E9CFECC6ACC57943A5A11173339EF561C18819CF0AB921AD693BFF00D32EAF!
 D97A8F6FB7B0DC813750E96CD187163896FCC0B4829870AF2DDFEADB15A57EACED75B3
AC958F28B77516C53CD1B62B7DB2E66B768564CCB9900009CC8249AC58EF0E67FE0D16D54411FB16DD65B34CE93F4A45D3824933DEE794CC05792829F26476DD894AAA903D69D53017398D21DCEB475B0B6E4A7365F0717EA29FDCB97B9C54925078D7A3C0A141CACAE4862E01A899FF00402AF2A371005D8D46C52F1D1716A8E623800E2D2172E40679D62ECDDC85D4B8D931D3B8FE593234957105B8AAF7567B5DA82BB2089A110A17B5CE23038AF6E34AAE98AEAD0FDADEBA36B70738044072514E2B1736FD78E698E38C800A1257051C05075435568097114B70E2F90620292404C396094554740BA3FEF0CD736E7F67C2A68349C85A252F6FB7894248AEB3150FD8CCE1388DE400DC88C4F60C6ABB574085161326A0E0002411DB4A822A395EBA47988208ED23FB2A344256DAE6E03581A5855E4EA70ECC71ECAA9D502099DBEDEEEE5CD64535BEBC4B49683DF98AA2D082911DD6D04F6AE83DC73099E2D25CC6800169C7E069FAF0CB3C14C79858ED058A87170E2B8D6D4085B08DBF73BCDBAFE3BDB290C37313B531CD39767750C98D593ABD5029775728EF5B37FF00A26D5FB2B6DAF627C77AD6064A5A0693866DEFAF3D97E9EEADF8FEA7569DEAB5AAD4ADEFBF54A4BC5FD2911467D45C417273ABB17D6C7EDA95E4ED4EC526F7A89D3B8E826599E712720B5D0A75A17!
 B195E421EE619A47895CAE7BB8638569AC2454EAF706D0633E6C4F114C2334C70F7142F2A3042DBD17B87B17843A4D2AC1A5ABF30380FB2B3E7C72A4325FECF7A6C772E6C6CD48D009241524E6085AC97C52B52736876F6F2025AE7B092D524B54853DFC692B44B611B9188B758A295CE631C5BAD1AA72030539D589303A263526FBAA60448F2C27D2110E1C53850756C3C505B7F4772C33492BE28DCC01A70C0AE599C2A6A80A013F451FF00AC67E2CBE4FC5951E4FD0128E3E6490073587D410F34AEB68146A17E3188D9AE4F1A56127ACA374AE2D6C424705F3383AAAB34884CD96D8F0318E3073D40177EC4ACF6BA1C9AB3B56471B5D23B5318F1E46B1A317145FE82974DC56C9689CD6822360610A065A42760154B4C744075943FAADADDA9C0490B4BE3279804B82A7114D82D1619EC7320D0584EA476481723C6BA620D69F39C88EDA22B277A1ACECEF3AA6CACAEDA2486E4BA2D2725734E9F8D66EDB75C6DADD16E08E6A4BC750FD2AFD2977E9A319E08A895CEC3F63E2C68C9D6F4226CBA2EE03835EC08DF510B9FEFABF276D4094C6C9F9BA31B159174518D4462482B95615DDD752FF84E6FB8D93A0B9958E099E3F72D76B1E49464BD6182DBC25D20D2311991D9565AC569129B1CF6D6FB8344AD05C41D1A828D4460B49965D7401D3B6AB36DC6960BB86068030D4!
 D54CFCC8714AE6E4BC7A8CA92483B6C9666961BC865B76128E01C3123040B489BDFC91
D503FFB5A68A132CE118E70687AE927562884AA61562CDE01C584DA742CEA0BA76B6338807CADC94AAD67BF6D2DB52EAE06C1F71E9A16A0B2DEEE39A4209723F5A782609529D9E5AB501B61821FF96C9CFE4FC5FBAB57C88CFC11CE044085766BD87015D4656196969138F958EC02E08AB55D98791356D058B6190B1AE6608E94B9497386000ECACB7BB981902BAE2E0B9D1C321F6CBD8C6C851A55710107754D376116EEA4B9DBE69ACEE982E59839B30015A1A8B80CD69E98D594AD00C7D9D5F099DCC6C3AA29012C7905A03F13E3F0A1F038D49242EE7D4F73776F300D6C64C5ECC8C52410BEA00F1AB2B821924AF6B9312B81C0FDFF00B2B40659BB7B6B8B995B142C7492BCA358C0A49EC028369297A2024DEC757FA75F48F7696EA2DCEE888E4808922881C438150A79D71BB7F6558E35D4DD83AAE659DA24DA9D25B24ED05C4004D705D949D255D3506B6E928FDC56B15BC0220CE85B2BF502A209BDE9E5B77B4346B6A16A0E098E755BB6A58AA706EBFD89F65BBCBE4FCA793A9322ED4428EFAF49F5F9B9523CA39BD9C70C84B5DB1909B7B80D2E8DCE7B508450D6A155AD56C9328A1562195EB88C8B87398A0B5C749EECAB6D7633D96A4EECEE95FF009C5924ACC753587118E2B546648105A761FE731CD2CF61692B9C037D88DF8863D53510ECC76561C8EBE58C9382!
 776E83AF1DBDB679D8F96118B637248C07B11508ACF97261F8E0B31D6DC8BFEF538B5B08EE2EA3602D00BA31A439CF2110373217B2B93D6A6B0B63A393224B5DCAEB6589D0DD92F0DB82D01D3940E01C8435B96095BA1CA8D8E7DAED952D76FC9DFE2267FF008BBEBA5F9141CDCEA81C547B8C7121BCFF007D74E6457535B6FBD2CE741734A804F04E2B4B93441489C91F2CECD0D934C61DA002814F04F1ACA924CB1D4321DA85BD9937128733DC00BD9FC38E1CF13555B34DB45A8CAA566F16E374D27CCC6F9107215BA9A54AAC0B6BAA2DC882090D2480EE280E9A67AD4080EE7DC12ABFE65345120DDB324909631A5C48E1C8516E06A9E85FA41F4E2CA1DA62DC6E226BAEA70AE73DBE66B485D2172AF2FF0063DDB5EEEABF5475FAF8156B31AB3B2596C76F6F0B1B0B3408C83A42809E15CD56D0BC224DBDACC0F986AC06155B1EAC7E2B46889DE4500714147C01B22B736696BB04E4570AA9DE07A9C0FEA3DA5CCDBECC1CE26189BADA303ABCC4AB5792015DDFAEBA54F732766ADB2AFBADDC106D76BA59A4064B8AAE2E3A4D7431636EEFFA31E56924549A44B117BB1271032C4E02BA4F4665DC22DA7B8B0B912025A000A01213FAF0342E959411A83A5F45756DEB6F220E1EEDB39CCF77005DA75050A0615C7ED60490F4B6BEC75A9770B7B9639B6D7115BBD7C8D538F1!
 45F1AE3BA7A9B1644968445DED73CC5B23E581EF8C6821EF6AA9C70526A572C38D40EB
C882B8E9D92E9D387CAD8A13EB23104AA9C5AB8A0AD74ECF18D3528789B213F94ED3FEA63FF2FE7CFF0017A72ADDF358A38A393191BAA36B8973BE61CB1E15D975DCAE4236EBAB766EFA5E8C81F208DFC835F82F8675564AB74F71EAF52E76BB159DD5B996D9D1CCC85E59EE01E6D40A9295CCBF61D5C3D25172A489DD367F7219C471B98D6BFDCD01472E66A62CDAA058AE7F2F6CB75A7CAD001798C7038E7C56B77C908A7722F7275BD9DCBE428F94101A072AB71FE488F420E591D2CA5EECCE4D157A4297EE91E8A9E56C172F617EB734E8009D4490130CD38D733B5DB4A6A8DFD6EBCEA7AAFA6B6B6DA6DF144E6000040113135E59B9674D93CD6688F482002386345B110C98D00C0A877A8D240FC87E704464B715E1C6A37A016E57B77964F61E13D3C5292C9416A3CFFD641F26E7713CB316884C8C6B00CB5711DAA31AEEF49A55492DCC79F729FBB58DEDF5BDBD8D8C6E964697351A3003045AE9E3C95A376B6873F226D4224763E81BB85C25BB8659401AB4868634705D7220F85559BBE9A8AB1F1F5DA72D0F6FDD3EE6EB2F8AD6132056B4CA4B803866142D1C5D8DB7264A47A152B1DCEF366BD77A6560F2B846E51A49CC11FB6B7DE8B254C930CE8DD35D67B1CB0C4F7C4657460B5CDF2024B954BC3B8A658D71B3F52C9EA68A59345DAC773E98DD2D191FB92305ABF!
 5B6278634EAE24E8D6484C33AC36C56A3FE4BF4B224A3774EDEB9ED17CED709D3A1A74680E2B96211DCE9785AABF90B556E644FFB67A6FF00CC19A7A87AF965F0A1F2E4F51BE0A1E7074113E446E2D0A14E054D7AD76691CC81A36914539683ADE4AEAE02A2B3820558DFEEB6339920B97C2D3E6D0D2A172F495155DE94BAD548CA517276F4C9E288CCD22E240DF70314E828A540E1CEB99F04371B17CA06EA282DF6CDB5FBA3246B8CA00893071738603C29BAD777B707E05BD78A939A4D3493CA6490AB9C549AECA508CD23FB7411CF7D135EED2C5571A5C8E10D452CF5B7D3DD86C8EDD6B3C0D6BA26B07E77CC469C004C109C6BC467C8DDDCEF27A0AA4AAA0E8D1B044D0D7221F483884E1540B322A276B2002BCA993D42F40C16A5CD040418E1DB4F1256F2408F6092E1A502042292C86E455BA9C5C3229047860E201C979D5362FC6CE1DBDECED9EF1CC983EE2591E52207152702E4F4D76B06575AA8D119334361B6BFC9F61607DFEE3059C6D473A0B71AA73CDA5E7F652BE795FE356FDDEC2A8A2D5C115BAFD59D8A2698F6DDBF5F1371704BDCEE030E1E02B562FAABFF00ECCAAFDC5E114BDE3EA6EF57FE51296460235B146C8C0E78A126BA78FEBE95F064BF61B2A1757935C48E92491CF7BB17179524D6EAD52508CEDC88B699D148D7B09D43D4DE04546A511382E!
 169B839D6B04D149EDE9040F6F369CCEA031AC2F1EAD346BAB4D492FB1EF0C8AE58370
6CF716C1C1DAAD5ED0ECFE6690A40AA72E195A68C097AEA5D7FDC5D27FEAA5F4EBC8E7F872F57F0D73FFC7C9E85BF8FA9C7DB6EFB891AD89C039DC33C0678E55E82CF898EB5925ACF62B58DC1F2CA9163E6014B9C31214D64BE77E16A5F5C3EE1B0DA6D06E5F23A27981A7417870C48C780AA9DAF1BEA1745BF80D9B75E9BDBED5C63B3D7A7173A57B8B53220B422E354AC596EE1B272A2F050FA87A9AF77B95A66FCBB78B08606E000E6799AEA60EBD712D37665C991D88868CCAE590ABE4426B60B22E9DA5ED3A737103878D519AF087A1D47A3FEA16EBD3F10B7B49049087796DE5C011C74BB31F6571BB3D2AE473B337E2ECBAA83A5C3F5B3689E18EDEF6292CE73A55C40731A0E7E66AFC45736DD0BEEB534ACF52F3B1F5874A5CDB87C1B9C05E9882F6F7F13D9543C56AEE98EDF2D89D8779B37B563B88DCD39BDAE18E34CDA48ADD183EE9BFD8DA46E9659D8C89A3CCED42AB7AB843D6B0722EB5FA9ED96E0DBDA23618F57E71200CB324E5977D6AC3D2E5AB2BC9D84B638B6FBD71B8497328B3944511712656F13C4EAF9ABBD83A344972460BE76CAA4FB8493C8E7C84CF2953A9C4A0ED45ADEA892F4450EED8CB8DFCAC63DC488DC48680348C11500A74EAB604B069637B0F989CCA7DB4C010002799E350122DA02828A2A0649CE9BBA860DC1B14C7F26E3C99A238FA4!
 F81AA7B159AE9E0BB05D2B6BE4B8CDB6597B06E4BDAD7C650381D21414C08C2B9F4CAE60DD931289905FD63FF1BFD299B73E7FBEADE08A39155DB3708D8487791EC5D298E75B32E36CCD8AF0586CE582E21F6A595B23479831CAD2D279118D61C94757291AEB54C91B6B6DBD8C735F216C67CDA55BA7578E359ED6BBD96A3708457FAD2DF6FB7B381B6770D90CAE2648DA1A30057304F13CAB6751DDD9F25066CF54B62A39F70ADF065318D570079802A3412C505D7B2F6C4D780D4D650A2346609EDACB6ACEA3A622CF746B04B33CBBFECB465A752E23B4F2A96C7E00AC58768B86C90092471639DAA473890981C1472422B365AEB05B4B068BD57173A3610C3E5C31D2B8E3F7D56E8595C827FDC6F823D6C91F190558237BB1C4B7811CAA7F8D2F619E683775D5570E85A66964B86306A10B9EEF39191249F2357C6857ABAE88AED9ECCA85F751CF24CE9646B25982885A71862C5706FCC7FBD5BA9812508A39B215F3CF3C85D238B9CE2A57B79568492D852436DB3067635E892391C4E00019A9A4BEC14197727BB23DD18FC885238B82AB94BBC696B485EE1059362DD5F07EA658BD984A963E5F2EA0BF2B7D471ECA2F2D538F24E2C126DBA7863D4E424A9D23340817E34EAD22C0C6870685E38534110F445ED208C08CBBC6346085AADEDEE65B364AD91C629F4B9C412079!
 B044F49C6B13B2568362535FE4DFF2DB9FF33F83D3C39E7539A27C5EE54AD04D2DD86C
6D5241C0F656BB5A1192889CB7B0DCD0BC46E2C42A3251C10D67B5EBEA6AAD6C1315B5E39CE7CB1BFC9896807E148ED55B16437B90BBCDCC73B981AD7073090E242029C8569C55832E5BC9187E356949919D2F072434083D24C4EB70F539078018D480985E0358D45207DF8D04804BD9EEADB73146402D4FCDED5E18F7D537C523266EE77995F116840D40547300938F6935298920BB683115C96303E51EE4A42C4D763A5C712E4F1CA8B40905BDBA9E5D2D73D583CDA1715C95DDB4E940B20472A720EC43CDFF00350641F6DD48E25AD5571D2D1D940258365B770BA6B031AEF6CB487BC121AE6E3A9389ACD96FF88F4AEA4B6EAF96763DF24A224D3F9AF5739C49C533FB05518DC3D8B1A2B5BADDB1971246D90CAFC3CE4052531AD98D382BBB22175104FF00655E5723FE7665E06A0C4F74F751DEDADB1B516CCB989875623204AA7DB8D64CF82B673305F8B2B4A224B0FF003BBCFF0040DFC7EA6FFC39566F82BEA5FF0027B22B3B16DD1C2B2DCB11D21D2D6BB837F7D69CB7F08C74459E1165A58DD24054C093592D25E920C7496F6D01597DB405E5EAA8D009C4775550DB1E124730BFB975CDCBE4C9A490C1FC2B8576695850626E4182262B4C030D021AA841449271E75086F520278AD020B8882FD4E1AB4E4399A8C83F24C185CD67F8CEC1F21E0B986FF5D2F12021087!
 B69C8677F85421B6AA28F51C3C28103F6C88FEA1AF4572F95789EEECA5B6C144E6D97315AC8F3211A006928712E3CF9567C946F62EAB8646EEBBBCAF26088A86A832F61390ABA9892D44B5C8700AF69E35688C5818273A800DF55B84CF327BB0A1E460AE9D9BD9DC5AD71004C0B5CE7211CC7C4555994D47C6F52DE967FE633D3CC67CEB0CBF43542F5284FBBBC0E4F75C10E15D4E28E7A63CCBFBD6798CEED6AA0838F852BA21B9306BCDD2F27C2595C41188255539D1AD12D88ECD82711CA9802F4AB41425C3BEA4906CAD021A25476D42181505420AC7C2A105B792A27F45A8430E4B92F13C6A106C92E72D4921BC50F65401B1C39F1A9210B8259238CBD8ED2E42D51F8539D2B5244352CAF28095A6820819E38F65164358870298D420B0988544C6800758E21831F29CEA04D3103827851204EA93F11CB9F0A0090590A3CF2E34C0434F95CEC014032A01108BC68221BD241C4A0E144210D1186AB6405C3821A564077B4AAA22E294402401C38D42183E1C56A10D845A041D731A1AA4E7891C4D420D9049E6788FD95086801F6E7520861CD3335082800072A0417AC801A326D12093A720B4486621C53234584D60B8F0FEDA04159271071FDD50903A1E71C30772A843011C73CC25400423B9FCBF0E550920B215791E0B4C040EE2714FB695B09A8E394BC0662ECFF00B69!
 2423E2D6F1E5431C41C751C1BFF001141479A0C336FB79A325462332311F68A3320D46
B0F1A9004250A1A2886DBF1182514436D2015E35086DDA8E2733408682A119AD09018011DA385490984918F8E352486054A0436868C90C4C9313C289051CF1CE8B09B710EE1DE6A119AD2003CE88B23802341FB054218CCCF1EDA0409D5DA725A80059000F3877D1221AD4D071C071A0C21568E71974C4CD4875C85147FC3C52ABB2459525EE2C9F245FCCB7694C16CE21B6F6C0AC8F41820CD399E1545726BC68A596BAF9B18DB594DB16C2E6C5EF009134005063A9EE793A476E14DC94EBE05E246DDECB730BE26B4FBD24C0BE38DAD20E8FC6414469E04A53ACA9CFB0AE9049D8FD3BEB4BE87DE836C9042710F90B6307B46B2D26A8C9F61829A3B16D3A992DB202DC7A4FA8B6C5379612B18337B51ED1E2D5AB3176F164FD6C84C9D7BD37444F6F235A194185D9F6D290D93C7202A10D0E62A10CA8414788E5C2890CCC2E544862D421B0899634584C047251CA8118B6A28A828E1EDC80F2A5408908BF7D4204237E14440299B22F01DD4BA8E98D08F98A90192476B9E3858F748518D20BF4FA88CF48EF38525EA3D58536E62668BDDC1AEBA46E9B780B8E9D49A8A9CC35A5C32A475F15D3D474E3566D97CF303A4912799CF6C936B04B01714642D6E59297767979D454D74D17FAD41C8B9FD3A8DB79B809EF83667CBAEEAE1EF424E93EDC4CFEE82094AE67D93E358AE91A7!
 FE59B3A554ED2FF93B1B77180C443882AA82BCD3A1DB4C0EE20826C74844C69EAE192132ABBBF4174EEE72BA4B8B40C91C71961FCB763C7CB9F8D6DC3DFCB8D68CCB93A78EDAB450FAAFE9749B6C2FBADAEE1D711302BA0900F700FE12DC0D75BA9F6AAEE2EA19CEEC7D7F15357250DF0CB13CB256398FFC2F041FB0D75EAD339CD1A202009C29990C38341E278500092B9A5020A04E7F6D421B1CF8D1443028FD8B4584C0B854900B6A2F6F0A841C18355541A90493005C53BEA007BC7876E550120F2E9D4E3C568910D102A48C688E1C2A105CB2BA4D00E0D634353B29521A4599DC61313423756BF11837EC5A3C7C839160E97EA0FE597C54AB658F48C72F3129F1AC9DAEB7C953460CBC597AB2EB56CF298C151FB6B937E8C23A35ED496BDBB766C910249C7EC15CDBE1866DA649249B344E6024A267DAB59DD59736844B1D9E80E90831E67BBC6954CC20E91A91BBA747ECDBEDBBBF2A290341F6DA70209FC0E18B7EEAD183B97C4F728CBD6A644717EA3E98976CBF96DA186E0B987D0E66A4072F3373EFAF53D7ED2C94566D1C1CFD7E0E3523AD763DD6F247B2DED9EE31E326A1A34AE0A75255B7CD4AEECA6B8ECF646AE765DCED87E7DBB9AC19BC239A139B9A48146B9696D986D8ECBC055974E99A0F78DC35AD43835A5E70E602525F3F17101AE295B893B0C84AC33C!
 537F003A1E9FDD934AF8532CDEAA09F1015C5A4D01D32B480E382820E1D86ADE49B11D
6061BC8E2B4C28EC7187B88E409A9001C0D4CF8542183497765400E63CB8278510034CF0490CC71C395090A186B082A4D081856094C43498F65421B048068A232636BE96DCEFDBEEA36DA0C3F3A656AFF75BEA35972F6AB4D377EC5D4C36B6A5B2C7A19D65622F992BA79C62D72E96F7068E7DB5CEBFD872B716A11AEBD675524AEDBBE8468C0260E6E00839255193AE5F8F2C13D6FBAFBA34104F68E1589E1835D72C8A6EEF6734C76D9C963DE0E0EC096F6507D7B2FCD13E5ABFC5959DD65EA9E90BB75DD94A6F76594EA2CC498BB09E1DF5BB0AC3D9AF1B2E390CB9164C0E6BAD045DF5859EFD6F1BDA0C17D1E1A8E0E6AE7DED3469D2B6171BD467D8AE55E8C897DF6E36C43DB289258BE5940704CFCAE3E6683D86B4FC75B78D199ADCAA0277B9E695F76D48A4384D1B700072231D4D3F0AB96049415739D4664BB30DC367F6C18DC543E21A1CD778203FB69D525401B8D46EFEF2D2F22F7632B37FD461684714CF0A7C78ED571E01669AD3722E61ADA4213C813F72D696B529680D08726699D12B62DA482A33A828B088A9DD44869B9E5DC2A018FA8EDCAA02061EC0D2951050CBCB5A4A9C790A0D84D0734E00F70A813447C28902B6C635F7F08700E6876A735D8828171FB29327EAC7C7B973DB659F719DD2DCC863B18707118154F4B3B79F2AE7664A8A2ABF266CACBDC!
 BB6CF7D6D7768EF2A5B33C90C7CF484AE3E7A3ABF7376269A29DD5168DB6B875D5AF91C71923191EDEFAEA74EFC94332E6AC3943163BEDCB22F7A077B8E666D1EA3CC55993AD59860AE67BA2C305CECDD5762D639E6DB70807E4CE3CB246FCC8EEECAC56C77EBDA56B57B9A6B6AE6AEBA58020EA6DC36E924D9B7A6B647FA1B27C9230E0BE356BEA5322593195AEC5A8F85CAD750ECE6CE46DE58BB55B1573B4E7193FF0096B6F5B3F2FC6DBFFD99F3E2E3AD7622E4DE2EA4898D7E9716E2241991C45685892654F336A18336E4AB9CCF2388E1D95646855C8261DCD8EB6314C15C41477004F1AADE3D650EB2E90C0FDD5472F9C66798AB60AD3105EE04E3876D3DE1304892ED4E5382E74A2B62C1195400B6B70CF3CAA105003505A8063DA8FC28C0A31296871E3442B6047340523C291A18C6E59771A0886D69C83D6931B799B227023ED094AD4A1AAE19356F7B71731416AC76903CA10A0E649ACF6A2AB76342B4E85C63DD62DA76E6CD2235BA036DA339903379EFE15CA781E5BC7FB9BB9F05252F76EA496EA47E2A1C4AD7570F5954C37CD244C779345217C44B49CC7035A5D5329566B61E8F74B88AE7F530B9D14EB896E47BC52BC69A87B0CB234E47EEB797DFE37A4BDE323FB6ABA6254FD46B65E5B8BB1EA09ED0BE377E6C2F6E921D8F9791E74B9302B0D8F3F1D3744!
 6DC3A3F7DE610913892C6F25ABABB6A5376A74D86D4804F0E34644303B85420A19D492
49BC5CEE6B88A2F56413C70A5240B07143CD688205B4A0C3C2890D82350ECCE8480771E7C3E14400DF37F4E752A1421BC3B8D161343850209E54510C199A0424B6BFF00E40EE77FCB55E5D8D18F7267ACBFE9FF00E8B3EE1597A5E7F965F9CAA33856F310E0F5546146E3FF001077D40235271EFA0419E7418059CA800C3E9350860A8431D451059A66415C07754B104FCDE1411073FA7C28104B7FAA8107AAC14FFFD9');
 
+insert into MemberImage (imageid, member_id, contentType, caption, data) values (5, 1, 'image/png', 'My sailing trip in the Mediterranean', '89504E470D0A1A0A0000000D4948445200000190000001900803000000B761C6FE0000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C544517AD57F7F6C7B3C8AD153052535555F6F306AF9A84E6F1F9CDC8C2A38669ABDC85C9C3BBC5BDB4FBFBE9EDF5EB004E261D4372D9DBDCF9F577B2B2B2E9F4FE71CA70F8F386EAF5F974A1BEF8F368F9F532916942F9F359DBDDDE908E21ADA8692A62A7AFAB19D4D4D3E8F4FDC5D2A94584CA777A7B36B8650067322C2E2FAC947C29B35D68C885C1B6AADCE0E3E5EEF63378CDCCE78A265998D5E98CDDE2A284D08EA4D78098945BEBF5F6F8F545FAF6A59D9D9DF7F8F4F9F6B299B8B4E8F3FCCFCD4AEFF6E4FCF6999C7C5B8F663D5AC36EBEB3A5BBAC9C0A182A49BD674D4B2F2D69B4397CCED6DDA4CCC67AFBFCDE3275C9193A64EBD52B66643DECF5F1F0F295D2D1CDF4E753FAF6AA00301795714CF8F4953173C40DAA5498D67BFEFFD1CACA34EBEA9FE9C705F1F6DC4986C9009749EAF5FCD1DAA58BD2796699C2E1E9EEFAF49AC6E58979784!
 8F4E747B6A491EBF193E4EE9135311DB8E084BCC6CEE3E5A1008640E2E57D99765302050692CA53E2EBF1F2DC0283AABA02A751A78D72DEE4E8F5F19BF8F4BDE5E666538CC7F4EC62F5EC77878886DBD483B3A08C9F8061A5BFB1CFCDC8F0EE9D5B91C5001D0EECDD41FDFDBEFFFFA4F8F6BF4E4D15D7D8D8E0E6EB8D643A493822A8A8A8F3F6D40F223BF8F39BFFFE9D936D47BEBC4FEFD31C24548FC0BD71EFD005295EA1224E85EACA1C1DB063D6D662F8F6D105A852C0E287F9F9AD9B795707111CF7EE89040B11EDE75B9B9A7D4D88C8F8F3A01F497CF1DF2100A24EC4C4ACF8F4B6F9F79DF0E146BBD2718F92941B1C1DFEFC8BF8F4AE45484A2F6EBCD8DEA482CE74979EA5BDAFA08EB1B716130CDDEC8F2221161DAF586B6F733070C08C62388C63398D633A9FA7AEE4ECF3666665E3ECF3E5EFF7E9E9E9D3DCA5D3D7DA3F7FCCC0CAD297734FA5AEB5B2BBC3B7A795B9A998ECEE6EEBF4713C563193C03FF4F150128A46DBE7F03B3D3C5B5B5BF8F9D2C2C116F8F8DEF8F7B7FEFDB1F0EFA070767B717171EFCD018960375B583972502D467A4447606F0E0D0CE2E4C28FBE4FFFF79900A650000000FFFFFFE9F5FF3479CFECAEA490000024714944415478DAEC9D0B6013D799EF85553C3212C4264316A238EB5A264E4C2C9B47480209536C614C0CC54E8A49FD20A!
 5B00BD824BC4A6B5F072C521ED746214989AD14536D9C40124CED7A13DC94D26C58E04
2288BE5181C96F516BA7773B7EE867B976E766FB6C8AEF6CC9C33A3D7C81A492369247F5F82319291ADF39BFFFFFBCE77CE19547F825054A8600800080400012010000480400090B88FBFE403802889C6284800486C68F8450240A2CAE3CFF8F04B04804417C76338042600247640308D6F7D8BFD9F63024062C98353C7B7504C42FF7D8B63C2210120B1E2C1E1983469E1C2350B174E9AC42111230240A2C863D2C235E36E3DFBECB3B7C6AD5938C90F1100121D201C8F35E3E6DDC1316FDC1A4CC4278F009028F2B875C715B7D620DFC24400480C8078F3E088208DF8981600899240262D1C77C733C62D149308008996400ECDF30232EF10271100128B124B44204422DE9E0540A2E5584FFA007992F72C50482C52FAB33E409E5D23E25900242A0A993469CD3C1F20F30088E21432E93100122B20223904141243200B0FFA0039B81080C4B0CA12998788CD0C0148E48970F390496BBC257290EB66C13C24669E75C8338B3C796821CCD463E9595E44100FE865C50A0891C8C2430785F590831C0FE8F6C64A2284C89A63079F9C376FDE93070FAD59B85058A1FA13008981443091856BD61C3A7468CD1ABCAE0E2B86B194C863788B038949B0A6AE042208C924C46212EC3A518069FDD963B02F4B5144C4772E0290D822F1DEDBEBFB8500249A4460F7BBF290043AB1034062!
 85C4CFD700909810F1FF25004461014000080400012010000480400010000201400008040081002000040280001008000240209401E41F860660741402E4A37FF9E8A3DF0D0F3F00A3A30C209F0E7F35CC46FDF760781401E4A161120FE5C1F82800C8A7C34280692901C8432E20605A0A00E22610645A5069C51C0827907A302DA500C102F90A4C4B294038813CF49520138995166D30C05846020816C8A71C90BF936C5AF4405A79662B03A3293F102C9091BF617FFBFB87249A16D35A54A7AF48CEA46038E506420442807CAF5E4AA565A05A9A4CBDBDBDD6140B10911B0811080132F26F814D8BA68CB9CD56C4A3D76E6DB640952C2F105E203C90BC80A665A8D134B2F2E0A2AF500BCD165981F002E1818C7C6FF49E164DA5DFA8E87585BD4EDB40C398CA06441088006474D3A2FB0579D8ED84880E88C8074410880BC8C028A6C59873EBECC4AC6C2936FC599DEE2A109109884B20231C867F603FF35B69D1032D4D7A220F7D8E26BD68D04E34D20FA32A0F109740DC80F8332D64572956CCC3D4AC6BA50C0DBA3A42440BB5962C40DC04E20E44BCD232D4F07665B735B550B4C3E1E8D7122285301F9105889B40DC8188565A8C79B1AD8F1BFDBE425D0DE3E0822244FA5232A18B123E107781780011312D26BD895457FAC6F201DA4162801031E518A34384661843A275!
 35556202F104E25D69D15479A395D8D58D74C6E18A01DD20C674A3260AA596E16A9A46
A7D5A4F51B12118887403090EF913F78555A861A5D21E1D1A96B3038DCA3BFC8C669A44217F934421917D799FAACA6CEC546260181780864E477EC9F7EC3FFC9C3B418E32652ED5A532C2EBBC241B7E227ED292D111E249A6AC93191A23B398D4938209E02F106E256693199641C7A4DC92D94C33B18630EA71E53536B444DCBD06F49117A68FA64A321D180780AC41B88ABD2A2321BFBC828DC34330EDF6032B9DEAFBD421B49D3625A733BFB5C2D34DBE2C4690FA8C404E20384372D269D4FE775DEE9830F4AC7B51BFB1A8D911B23649B36BB7B0FAD2E71A63E2A3181F8022195D66F9271FEB0365A285A94074A234D1C337DE4F23A93467E8C5E7D0A6E17F4E598E94402E22D105F20A4D2FA1B3C10FA4D46CAE12F9069B197ADBDD118311E7C1A4355770BB6509B964A2420DE02C140FED11D0831AD37FE9D4B1F350687FFC8CBD563890C444A1F266C549DB9AD0C63E924124920203E0219F95B5F20786E32FC1F6C79651E8D878336A6B003666D4E8F44EDC3A427637D98523457916DE69DE7F05758E2BBF4A50DB40B888F4044818C70403EF97753630BE31835281D3746A6C51168C433469E474E26679B741AE790D64DF1DCF5A7078C9969793401E22B1071206F60D34A29A746E7E1A0CD8DDC9815A6C92E11838B471AB92CF2167379BD392D5ED23ADB81F3FC59999!
 ADC4E7D5D510D8D84A21213883890914FB84AEBEE013A001007A3B5E12C22B78D50028F649E878329E71A687AAD214EC490AED16AD2F3DC9030E69BACA5988AFA078C16959840FC00C1A6F5D0878E80D190CCD9487283CC97568B2F0F87A32687ABEA3635C4058F7E5DA1C96A2A3C6F16AE1F839934A32AB4B9297A959840FC01C1A6755760208C568F6D445E7DF0ED2B53B2D12D8D313AEED166633C0019C0F366BB7E93D05BBA5A44F623D807F5F65E95984046BEC63EF6BF7C80E4E0E9E1F70313492BE4BEAB464E1B11DA68D626771E0EBAA50E7B96F2EB2C4383B693EC0BD11791250AA6BCD0EEB6954A2526107F40CCBFE1E8BDF2A154CF2A9271BA4665360AFAF02CBB5BB986665F72ABD27930C6F383C2C8DB08919A266BAF3B103181F803F2A791BB249A1695CB7D979C1AF9DAEDE5645385A75FE16FC691B269143E5B4753289BDBD063228CA6C2AD294780780B0403D937E21B1FBE22CDB40C163DFB1DEA5A64AA45E9AB5ABC83B857EF9ECF8967710619C1668DCC535ABB0977AA2BCE1B29CA988397F448F75AAF12130806F2A5089091EF4B34ADF466EE6AD6C8E3EB74838E78AF3E39DD775A9A779E7BA7FA5C256F4012A650F68AA6666EF4ADFAC6C545382F9A3669534C56ABAD39572526100CE4293120524DABBF49C6244237E456101E4D469136019D8EFB9!
 9CD2DCACDEB0633D918D2D7A9336B30915E7B5F2FD93AD53260B668B516639E4A4C201
8C81BA240249A16C5D5A2F664399288A1E13CF15E9BF8AA98D0AC51F05CA47F3129491A2D7986014B739F7B2637150D3868030ADAA11213089E87880391685AB4851BC34E191A1A4CEB62B2FC5191EBAFCD6CCEC10B55E54A9508A3C14B6AECC2378DAE204DA15B6D6545D98F7F272A31818C6C1D058834D3A2D3B9EA5A1F7E12117655D83BB5FDFEBA369486AB2795DB626CCD213C480A642C8D7A5258D9ADEEED41959840460722CDB41A92B911CA65C2E641F674F7356B46E9A2E16ADEDEA9D04D934C399704AD39420AA4D2CE37DBACF63EABA9AEA965C0E106E4D3608148332D2A977549FBE23C9978B097D1285D4D4339B76BD2743E4FC919A430D39502997E63B956A7D3695A6ADCF3A24A4C2018C8157F40249916A3C5593DBCE93363DEA4B7629B6DA1029475B80B9FAEC4A62F93C9CD94AC37FB3D2E228381615BF11EEF43F5A95F20FB9891304C8B2EB7E1359170B2BAA175B18DD4268156C5180B37E33529712E42B7E292B7C2C204EC71A846FC03F1AB1029A685B23AEB59A670D644E8ABB9A43609C883EDC273592445819BE6F27436BCF0DFEA081108D767BFCB3F1029A645FA8B61B4B3E8015D05E19149056EF96BF411DE7E14725B94F47307B554A840BE16088804D362F064ADAE25E42B96D2D4917C2E8187C3D1CA2D1CDB73CC0A9308D3D248B6D7D63842!
 05C2DDE6E4C1518048312DDCCE0AFD8AA5349DBDE40010454B782BE40AA8D0300AE381DB55EC06F45081E4FD5B20854831ADFE4D5CE1DB149A67D1799A427C48ABD922451F288C291CBFA8F54F508D84CB24293D5EFBA066C0112A10FAAEC040029B9601AFE37686E45974BF161B2F9A9F0F48E3E1A08A4C51DC7F42D5A469B46822A1B59807E851E6518487FE7C031D3290110940029B1659A60869AE465F25FD76F698B5441E0E4366275ECB8D7C5AA729A336B94E6FB2F6F559F5293ABFB7A612B691E99B5CEDAA0801096C5A0D4D9CE714062F11BA9F1CB2EEADD05DA5A50271D470859D8416331DD06946F7AA81349DD08A4245876DB19FD3308C516C9B4CA48004342D7EAE76A321E8FCA11BE4798CBA8DD827AD73DD810026C96E13D4B04E43494362F0DED636909EEB8603FF9803A3AE119A925B24F2F003E4412940029B564D721FDE6F4405AB8F0AB22F46D72F5D1FAC4976062CEC90D9E81A2B4C56E4349A7E09442873668BBB233179C6DC144F1C281AC58E43B0DBC283D447580A096C5A44227DC19D3834E4F13CEAB479C1F07038AE36F58EEE593455634926877DFA3A3581DB2C9425677030A79C1036500D2D45CD2E1CF63EF2A92D9316E121BA8D2C9240029A16D9E212D44A1ECAE783427D151C0F7E839EDF263C3D90993C28AC0C59530276220D2D29567B!
 AFB5995BF8A229B36653277FB4D16E371526E7E6DEA8C39B070CBE7E95E367DB52E480
04342DA6A599ACE41982CEE77D859A20F5C16D85272BA27E78689A4D6E4613785744C30DDC6B4EAEA191796973049AF65E7D4A6E4B03C5346CE23A443EBBF4903EF4C1EB0301A143CF21124C8BC26D35D34DC92B7979646F9F15F170041DFD9BB8114B113FE038A0E1F70DE2BD05BD810E4232E5B859D03BD842B56A726CC242789FBE31377D801D68865BF7E9F3EAA1D25466287E15665297665ADC74BD50E24A1EBA86C97CB05013AC5FE1AC852F00D1B44E59F84D9BA6E646299D48833999203069339B5C38ECFA465D7A1EF621838E7BC40B481E7FAF24D7B189E80009685A86A04A5F3ACF42FA259D9A01472881D7AEED62550F939E827958EB36B5A4E1CF47DD5BC7B49ED7F3E9E6468A907AFA6C8D5AA370B5D03AAC1083C765A5C56F23A8FA4A1E20014DAB35995BA6A893D2F263F581DF489D960A89079FD66DBE3BAFE99A4DD8446CC9961A03D938349A4428E34D9B504FD5F1F230D5256B5ADD9A9D061DFBFEAC3A0FBFE2A5183C8FF08104322D4A43CEAD072E7D69943FB03E06B5A1F815DE10C47518AD39DE736734D924A73072D18C903D08895BB0FEB208D3A0C9D1BBDDDF93F7BAC5990D1E632CA2102A3305BF0D7D537AB03CC20712D0B4B0449099A63381F627BAFA25FDA1F2203BF47A2BBC765EA3E20D6F3CB7E5E2261F2F11F14E1BD350DE3488456175D!
 565D6E6A2B47EAF21F6CD214C0BD9A66F3B6F0E9A870C40029996A11C973681EE4862A8C9E5FB25B95743E6C16F2BB57ADD4A80BFDF9D69530DCD4B89CB369D227BEB68AAE5461DC919D6C242219537A5E5F9CC280C9C427A5D4028321FB457F8BBD945A840BE2D114820D3EA2FC2535BFDCD9AD179F0FD92DC86D079381C0378E7B5CDA3BD4491E4646D4C3778661B6BB24FFE47A94CB8B38DB5595344EE26A2BF2176C163CBB2F39685A69EF8F63B488A215D56320009645AB499DC09A362B45B09F09662AFCBAD3184C1C36168C187139ADD2A6D86B87A6FA1DB62172937F4453578A189FF40B5EA843BDBE873322923DEC96D6B129D70FF8903622540981A726CC2AEBFD91AD2DB90034820D3129A3AFE6F588A2ECA4E3F37450B7E728825E276E933C664BE78CB739FB3E0257B5B53AECE3DCEE7D878BBEA3C6FA41C9425853BA629DE00A17576575267CC8B49E6D13719437B1BB20009645A4C1A5EE667BB857E7A7EE5783B387BFB783A3C1E0E3A0DCBC156D4CF570B643E51A7F558EC6A201BD2ED7D7D7D763BFE883EF015159AAE64F61BB89B8059D83B098A2768030704E710619BA56B0F6F6C8004EE696536937A365774718DDF9811E2FCDC672EC2ED1EB217927FD184D2E0846ED379C2A6F99B4D8985DD965CCE17B8DC49017F0EE9AAB2687393893F56640C918!
 74C400237E2B5A42954D124321F618CBCA769A8F079381C57F1F9052BDE5F419B73B8A
B41BFD8BB5860BC8E6978FCBB02E8D291A44721A9336632F3B4DB169B43E5211790803D2D614DD694A2C9A3BD378C923B3556E8F2E4E0E13018F1A58FEF4843661CD61C5F57CFE34F2E7A87A95923B1D433901C42D564922352D666EDD5D0D3A04C40029A167D9527C25E7B06CF395B2EDEC06B5B5C6370C8128C659074CD11EEF4945EEF9DE72E2296E40A2BCA1B7DDC873E3BF7C1AA2FBCD12255AA44213945C99DAEBBE2847159A9FC0F6F5040029A168DA666E4609DEDA67BE94F535A3C21D4379965E2814CEB06373A834822E424803E57B49BCFB466B26702B4EE6596D6927655B2E518B456725A904FE7462A9C9F5C2E8548D8A7E59A6ED9CE37B8EF7CC546CEF656E4E2E1A0333BF14D9B1A48716B6FF45786D26E531086DFFA16CC77723F7B2E6A8CB1518884CDA5544B13F9E1075DDB1ED09CCDCA2FBC3BE48BFE9BDCACAF39CD8C27CE36AD9CAFEEB9A5D82D0D991A5BC254B96C0A91B2B99431F373E014BE83C44F1AED85164ACE612227AA6C1ABC6489B249847838C8AD18F006ADA6B0AF2AF9142265473C9D470A4D2BE9C6F3375EEE1D94BE4151E2A6B91C7C501E67F4CEF2480984FD37083AF10EC6CE264D6BD8DF464685483A7B48590A85A54DB6D590CC77AA6B0CF20E1355C4553F29F800FBF97E47E482326AB4A82CD0A4D530E157EDA328E4956081483A!
 7B486E18C52DFE334652BA87DA891B757E808B2B6ECE9E926E882010B62E3004570A44C5B2249E3D6CBD296C8FE16FA566BAD12ABBA390338EBDA415EF8897905521924C8B31926EBC29E70639D1B9C91C810BD89CC24F0DD8BE6F2200095E21120F4CF35B90FBF4E4EE06E64864DC011DFF8FC80D5A18C7185588B4BB3C08447A659F10BA7B96B191ECFA696A7038C6AA42A4DDE5413836C16DB06D89D0F54BEE6AD76B8B2781C8AD1089B7A631F0E5159A21C83B2174FF269915E4A880632C0391766B1A83F906BFCE9E17B1848BE7867DE707C6341089F7D332D4E852F4567DA1AE26723304C65267EFED6B4E338C6D20126F024853468BD6621C88E068D103DAC6E69C885962DC00917AE7521ACD6E233B3FA029737A2B458F752092EF5C1A85A0E9F8C2111920926FB70C2115C85F840744AA69410405A43B64204A322D50089896021502A6A534858069294C21605A8A0302A6253B90FAB0808069C909E44319808069294C21605A4A53089896C21402A6A534858069C90B64386C20605A7201199109089896D2808069290C089896D2808069290D0898967C403E1C01D3520A907A7610FF62044C4B5140E451089896D21402A6A530858069294D21605A4A53089856D840BA6555089856D8405E9119089896C21402A6A530858069294D21605A4A53489C995647B50A47!
 757547622A248E4C6B6747F5A545E7E66EDBB66DC284B9ABA62CB9D4B1338A40D07757
5D52B19741477535773D080AF9BEBC40E2C4B43AAA672C59BF7173654141C19D3B05952B365F9CB048153D22AA198B561DDF787CD5A2EC194BA6AC5FB59EBD1E1C91011217A6B5B37AC694B9172BEFB847E5EC7397A24644359B7CD72D332F6E59B162C596D97397A8764606481C9856876AD184CD0577BC63F3FAA811517DD3271EFDCF071FE472C85D0FFAC45DDFBECBDFFFDF7EC57F0CBB873CA6B5B3A34385BC16FD123EA8546126E09DD54B566DB923169BCF45CBB554C3518F57FE0F3F8A2AEE437547879FACC9E637B74117FECA25F47FF6A2731336CEDCB871E3CC99ECAF99C78F1FDF36F7DC9219A127E09DD5D9E72E16DC118F2D532E75242890ADDC20CEE43F6CDC86EA98EC19AA6AEF81440A98B168FDB68DC257CE74FB7B33676FAEF41EB38282CACA2DA12560B6AE42A97CB63F1C2856CCCDAEDE19BEAAD9CA4975A9DAFF4B451FC8F33EEFB560C54554552C61652028018DCFA255B32BEF041B955BCECD08EE5266ABCCEC2973376E5931FA2B175C3C975D8D824890AB4EDD85CB3DE7359371B9297A0E41CF5EB268CAAA6D1B8F4F98B244D5A15C207824375F9CE9A6828BA8C428B8134A047329A34143C5E584D9D2BE55C1966DEBA72C5A3243D5B173A70A1563C779E122151F473396735396CC20BC50B1B6045B2A7AFE389ACFAC3AB708B1387E91FF4E5B5!
 665578B03D9EA134F3DF3CC339F70E6F2BFBF7CC62B1EF51F6F7DD36FFCCF3BD18C828DD26C6B67F5253468084610E00B566C9939E1DC92EC25AB2EFA3C55894AD46D88095237A2BC6D85C7736CD47A7CFDCC29A23FA54AFC1BBFC10279ABE04E7CC6EC298189A0F9DF946D17435221A2E2CFDE0A2AB7CC66638B04B3DDB23EFB925B8D484A1C3F40B67240EEC46B5C9CE2396FD8C97521DCABB56C3643C5F8822BD8327BA647A9C2FADBA80A895B2068DE30A3DA957C67642F9AB27ED5DC6DC785777E7173AD427FF2C45408AA1166A23909D20262B17EC2CC8B9B37AFA88D0F03F603E42916C89FDF89EBA8DC82CAB68B9B2B2BE32A15263090F80C00024020004868556901005152ACCE4ADA5E00409412B5593B3E58BB63DD2EA500F9726C0329387B61F752A7F3FA86A4D50024F671F8EC8503D79D6C2C4522A905209293EEAEED67D7AD5BB60CFD9AB3FDB05C2FBB6BDD8203D7973A492C3DB0604E419C002938BC6BF59C65EB969D6547E4ECB575D7D8A1B986FFE4FED0328F87D6797CD5B5EDAB771D1EED0D17D4BEBC7D99DBEB2102DC8BAE5B9795B463C3EEB5D3D7AE5D3B7DFADA0F0E5CD82E873656AF43AF3A5DC0C1C6F40D0BCED62A1C4841416DEDCBD7922E4C3DF0C1743222E897EB83F0D05AD10FEE7FFAE0C0D4054973C473672D029EB57FEA076B455F6FF!
 A75CF71DB3127BC2CFEF29CAC053B36A077E4F1B2AC48A61FB810BDEC2E094801AB047
C69735767167B75A29FDCFB470F29965E9FBE7BC385A475CB38F5100921396425EDDF8F904F97FA4DAE874EE4F0EA6BFB91DCD01BF2F396AEEF9EBA3F6BCEEAD5BB0ABC3C62F5594EB873B66FF77E0ECB1B3D3F0785F0E4E139EBCEBE5C103C90020EC8A3E4DA599DB4E1034F15785D9D725011AE7D9714AE5FBF1E0CF3E953AF8544634ED205E47D01DE11BA6C90982F24F1B9AAA076D7CBDBB376ECE6D4BB76ED6EEEB95D8785967241EDE19757675D38809EDEBDFBC006F46CD6BA75490BA6EEFE60C385ACEDB54100614DFB5AD2DF7240761D3EBC6BD76A5491CB3CFC9189A5D3A7065FA5BE9C7561C307922F2FE45E3BF667711E91B57FC154F7714197D4860BFB93D013ACD69187B0A37F5D78120145E4D8EB6BE9F4DD3BF62FDB250DC876942AF72327DDAD6681FCFF0549E88F530F5C77C6495C3FB02369B5E49A0815695968508315FB75EC12D7455C02EB1C3F3F7D1417598A2C7041D6BA6BEBF8AAE72CEFD667AF7900493AC0F904320A0E48CFF5EBD36537A7C88A8435FB39A24B51B52FAFDEBE7D3B327C5CB25DE38A3499D26048170F02EB5DF0B0BFDC801424ED16BE1C0371C6612C4532D97F6D75AD570195B460C7D40D0776FB2DD214132E20672FAC75260010EC1C07584B600B4264E7FB59142C80B8D0BA8A13F03224E0DDEEA922AE81B859025B10C60909!
 1E88B880CB5820A94E88E803117F386420D98FACFA1F2856AD5F520D831B7B20D58FCCFE7CE59E957FBDF2D4A91F4E9801A31B6320AAF53FD8B377D7932F1D3C79FAC4CFF69C3AF5AB4530BEB104923DFBF3CA835FA0F8FDEFC78D7BE9F4AEBDA74E4DE880118E1990877F3BEDE41713D17FC78EFD7EDC4B274F3FFBCB9FAD7C7ADBBB30C4F20129F3FFD7F24BABF23D1EE87864CFE463139F9888F471ECD8B883274F3E7BE204F2AD378F03115980A4060072B9FD6889A75FFDD33D5F3C3171E217CB97738675F2F4BC5F1EAEAC9CBCF2E9E3E05A5100927FA4ADB8DD5D22EFFE76DAF227903E96E7963F376EDC49C4E3446DE53DF7DC33F9D49B0FC320470548774FA9DB038FECB9C5F2F862E2DD5BFFEBB95B279F3C7DA2F627951FDF3379F29E37DF03D38A029092B6EEB2336E02F9A74A367F2C5FFE8BAFD5FF3AEBB5279161CD7B66EB5B93274F9BF6C23B8FC028473E8754A57617B7BB24F2C8E7E35A58812CFFC5FBEF3FF0FEE99FCE3BF193478787BFFC78DAB4699FBFF99E0A8639E2409C196DDD6A41223B374EDE37FC0002F2C573CF3DF7DA6B1C90A78687B72281DCF7F8CF218BC805443DCADF2BEDE96A9BE52AB17E34FF937D13977F810AAC836C8575A29205F2CCE4FBEEFBFCF37BFF301786396C203D8180E41F29EEEAE1EBAC87F79C1EB99DBE9C9DA2B33C!
 9E3D71B8F2E34787BFFA2B16C8BDF7FEE15730CC9107E22C5177A7F249E491692F8D5C
F9C5F2637806727A1E9A81DCF3F137DF63793CFE9DEFBCF80D18E62800A92AAB2FAB229F4FD87370E2D0FCE52EC3425310B6C262790C7FF25D00120D20A5A9DD6D25C4B3E6FEF6E0C4079E5A8E79FC941308E28104F2F8E3DFF9EA7550485480E4B71777F19375342D9CA8ABFFAFE7C6DD6213C8096E8ABE9713C8BDF7BF3EFE6D00120D20CE9236C1B316ED99B7FC8BDF7D0D4DD14F9E3EF1CBC3BC612181DCFBFAD7C7BF0D493D7C20470303294DAD6FCBC01279F7B7F71C5B9E35FC3E3B4567FD0A0161F5C10AE48DF1E3BF0B656F5480E4CF2AEE4AC5127977DB9E71BF5FBE0F11998781201E9C617DBDFBEBE35F7C0726865101E2BC5CD6DD96C17DD6F1F00B278E8D7BEECBE1F77FFA23BEC29AF6F8E38FDF5F7FFFF8F16FBF07DB1DA20384950869F9CED8BBF7A5975E7BEDCAF0EFBEF9938F3F9E8C80DC77DF7DAFBECEF218FF5D682E460988F38CBA5B9D41EAAC177EF6D2AD9FFEDF3FFFF5F0D6E7DFFAC1DEBD3FFCC6FDAF0F6FFD57C4E30FDFC886518E1290D2764122EFFE70E5895BA7E7FDE8FF3DFFEBFAE1E14F3EA91FAEFF352B8FF12F8240E403D216E82F97A885966FF65FAFDC75FA74ED9D9F4CFEC15B8F3EFFFCFD7FF5EABDF7723CE63A60906500D22E0948694F57F11132397CF8D4CA9F1DAE744D41088F5FC17A611481388FB475975D269F3FFCEAA9B!
 D3C8FC7391E2F028F6803612B5F5E22CE25EFFDFC853D7BB90A0B014138DE7E6702F0882E90FC23C5AE26BCF3DDB9AF3EFDEA0B2B577EFEC2BD3F7FF1C53FBCF3DE23B00528CA409044EA859E2F87E4BDA7DF44F1F6DBEF3CFDAB8777C2F0461D48697B5757991B918EEC29E7FEF8CFFFFCC73F4E59046E25279059128138CF947912713A33528F9EC987819519C8111648B1941728517775A9334A0504A5A9F55DEDA530B03103925F52D6D5DD7634E37269697E3EC252AA1EF6DCD408211B903649AF505A5256DC5DDC56967AB47D56C699D22A00125B85208D5C3EAA2EEEEAEEEA2A6E6B53F7B4AB59CB82241243204E6755497BAABAADADB80B6129EE1AEE6A6F3F821CCC2DF20150F42C0BABA4AA24E348FBD11E755B57777D7159575B598F7B1C3D5205431D16900C16485750AF84527A7EE999233DEAEEE29EB6EEFA2E8F689B051A091F487108AF978FE6EEEA23B35807738B2EB7060B44748194A8EBCB2E730EE68A59EAEE3200122320FCD9AA7CB7282DAB0720B10232ABB8EBA877BE282D0385C40CC8D1AEE259004409551601D2D3E55AB2720101CB0A134889CC404021B102520A401406C4EDD8888765C1543D4640D0D85F7602104501A9F29D9CA8A175122320556AB182AAB40404121E90CB2C90EE9026EAF5A9252555A007998154B140EA83E791A1EE2E3E5!
 AA6EE2901224A00C2F2E8EA99D5D6DD55061B4F1400A43443DD85505C6EE77E83B18D3
5104E1FAC34F2D9AD41A9976170630CA4A40C61E0924769099B4A80484C81E49F492D263C109123EAEEB6A350EACA07C4C902190EE685108F6E75069FCAAB66B50DB7CD82FE55EC805CEE29EE6E3BE22250D5DED6AD86E2376640D8F39FEA23EE8AA84AEDF2BC7129445840D4EAB21EE9FF7E082A7887DB3C78B073F62ED8522A1F90E00A5EAEAAF2CAE125B0D5245640D80DF0C5A9DE33C12A58B7950BC8E50C69D14E368AA6AABBBBDB527BBCA3ADBE0D7F52A69616C5D2A26BD827CA1208C8702204005158140310854506005156A8131A48B7C4ECDA263159FBE67BF13822B19818E1A3A79ECF218953CEA946E236CEB4111C5D4712A9EC8D5B1E470579245457395E815C16E4312BC12686F1C9A3BD9BCFE689B6E81297402EABF9F223C1E411A7406609F248C055E2A800993F34F440FAC848FAEDA1A11FE3477443435774EE5F727B1F7A2C53CA8B5509F2684FC8E6621478A40FCD4F1FFA6864E4A3A1CF3E1A4AE71EBA727BE4CA15AF2FFB8D2420B3F8DE625B626EA2880E902B9C303E1ADAC70FF995A1F99FA1DFF65DB932B4EFF6D07C412177232D3DF1D9D0DD233F1EFA4C541E650447FDD1446DBF47C9B2D0188FA45F191ABAFD196F5943FB5820483399ECE02320482108C51357E68FEC43FAD927F64247047924EC3EBCE824F5CF1012F6F7BB1F60C170F1E3DB!
 481068E4E70F21597C46149289380D3D803EBB7B48E3FB2AA5823C7A9C4E00127ADC8D28DC4619E3CA95277418483A92C77C944E3C806085B04F3F7665E88AEFCB6414F3F228710290B0E2235453A1EC91799BF3298480CD15ECD87B2B847D9CFDCA1FF3D5982B9C65A455529FEA74029028C77C528CB9A284974771891380443BB8BACB2352F94E626AA26FF58A8B997A09DF492CCE703A0188821AED63605B91F2815C4EC875A8F8052234DAC7C8AE3B8503113A895DB39C4E00A2A046FB9839FCA38A0779748F1579281B88D068578FA5B3718A0522741213731D2AEE808C81467B3C0119138DF6380232361AED7103243F75784C34DAE305C89869B4C70910BED15E5FE674021068B403108FE8A91F5B9D4485033933B61AED8A0792A0073EE21548C21EF8885320EDDD63B193A8582097C762A35DC14012FAC047FC0149F0031F710724D10F7CC41990C43FF0115F40C6EC3A9432818CE17528450219CBEB500A0432560E7CC40B9031BE0EA5382063E7C0475C00817528650181752845018175286501390AF2501210588752161058875214902A588752149059200F25018175286501817528450129857528450181752845018175A8608044F19F308075284501817528E500298675286501292B1EABE7A1940AA404D6A124038121002010000480400010000201400008!
 0400012010000402800010080002402000080081002000040280400010000201400008
0400012010000480400010080002402000080081002000040280001088D8C77F0B3000C784193E7E8425740000000049454E44AE426082');
+
 update Member set picture_id = 1 where memberid = 1;
 update Member set picture_id = 2 where memberid = 2;
 update Member set picture_id = 3 where memberid = 3;

Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,15 +1,17 @@
 package org.jboss.seam.example.seamspace;
 
-import javax.ejb.Stateless;
+import static org.jboss.seam.ScopeType.STATELESS;
+
 import javax.persistence.EntityManager;
 
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.security.Identity;
 
- at Stateless
+ at Scope(STATELESS)
 @Name("contentAction")
-public class ContentAction implements ContentLocal
+public class ContentAction
 {
    @In EntityManager entityManager;   
    

Deleted: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentLocal.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentLocal.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentLocal.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,9 +0,0 @@
-package org.jboss.seam.example.seamspace;
-
-import javax.ejb.Local;
-
- at Local
-public interface ContentLocal
-{
-  MemberImage getImage(int imageId);
-}

Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -63,7 +63,7 @@
    {
       if (IMAGES_PATH.equals(request.getPathInfo()))
       {
-         ContentLocal contentAction = (ContentLocal) Component.getInstance(ContentAction.class);
+         ContentAction contentAction = (ContentAction) Component.getInstance(ContentAction.class);
 
          String id = request.getParameter("id");
          MemberImage mi = (id != null && !"".equals(id)) ? 

Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendAction.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendAction.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendAction.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,9 +1,11 @@
 package org.jboss.seam.example.seamspace;
 
+import static org.jboss.seam.ScopeType.CONVERSATION;
+
+import java.io.Serializable;
 import java.util.Date;
 
 import javax.ejb.Remove;
-import javax.ejb.Stateful;
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 
@@ -14,15 +16,18 @@
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.annotations.web.RequestParameter;
 import org.jboss.seam.contexts.Contexts;
 import org.jboss.seam.faces.FacesMessages;
 import org.jboss.seam.security.Identity;
 
- at Stateful
+ at Scope(CONVERSATION)
 @Name("friend")
-public class FriendAction implements FriendLocal
+public class FriendAction implements Serializable
 {
+   private static final long serialVersionUID = 4565339001481077911L;
+
    @RequestParameter("name")
    private String name;
    

Deleted: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendLocal.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendLocal.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/FriendLocal.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,15 +0,0 @@
-package org.jboss.seam.example.seamspace;
-
-import javax.ejb.Local;
-
- at Local
-public interface FriendLocal
-{
-   void createComment();
-   void saveComment();
-   
-   void createRequest();
-   void saveRequest();
-   
-   void destroy(); 
-}

Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/MemberImage.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/MemberImage.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/MemberImage.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -21,6 +21,7 @@
    private Member member;
    private byte[] data;
    private String contentType;
+   private String caption;
    
    @Id @GeneratedValue
    public Integer getImageId()
@@ -54,6 +55,16 @@
    {
       this.contentType = contentType;
    }
+   
+   public String getCaption()
+   {
+      return caption;
+   }
+   
+   public void setCaption(String caption)
+   {
+      this.caption = caption;
+   }
 
    @Lob
    public byte[] getData()

Added: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/PictureSearch.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/PictureSearch.java	                        (rev 0)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/PictureSearch.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -0,0 +1,47 @@
+package org.jboss.seam.example.seamspace;
+
+import static org.jboss.seam.ScopeType.EVENT;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
+
+ at Name("pictureSearch")
+ at Scope(EVENT)
+public class PictureSearch implements Serializable
+{
+   private static final long serialVersionUID = -1868188969326866331L;
+   
+   private String memberName;
+   
+   @In
+   private EntityManager entityManager;
+   
+   @Out(required = false)
+   private List<MemberImage> memberImages;
+   
+   public String getMemberName()
+   {
+      return memberName;
+   }
+
+   public void setMemberName(String memberName)
+   {
+      this.memberName = memberName;
+   }
+   
+   @SuppressWarnings("unchecked")
+   public void loadMemberPictures()
+   {
+      memberImages = (List<MemberImage>) entityManager.createQuery(
+            "select i from MemberImage i where i.member.memberName = :name")
+            .setParameter("name", memberName)
+            .getResultList();      
+   }
+}

Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,12 +1,12 @@
 package org.jboss.seam.example.seamspace;
 
 import static org.jboss.seam.ScopeType.CONVERSATION;
+import static org.jboss.seam.ScopeType.EVENT;
 
 import java.util.List;
 import java.util.Random;
 
 import javax.ejb.Remove;
-import javax.ejb.Stateful;
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 
@@ -19,10 +19,9 @@
 import org.jboss.seam.annotations.web.RequestParameter;
 import org.jboss.seam.annotations.Scope;
 
- at Stateful
 @Name("profile")
- at Scope(ScopeType.EVENT)
-public class ProfileAction implements ProfileLocal
+ at Scope(EVENT)
+public class ProfileAction
 {
    @RequestParameter
    private String name;

Deleted: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileLocal.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileLocal.java	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ProfileLocal.java	2008-05-02 23:37:19 UTC (rev 8102)
@@ -1,21 +0,0 @@
-package org.jboss.seam.example.seamspace;
-
-import java.util.List;
-
-import javax.ejb.Local;
-
- at Local
-public interface ProfileLocal
-{
-  void display();
-  
-  void newMembers();
-  
-  List getLatestBlogs();
-  void getMemberBlogs();
-  
-  List getFriends();
-  List getFriendComments();
-  
-  void destroy();  
-}

Added: trunk/examples/seamspace/view/pictures.xhtml
===================================================================
--- trunk/examples/seamspace/view/pictures.xhtml	                        (rev 0)
+++ trunk/examples/seamspace/view/pictures.xhtml	2008-05-02 23:37:19 UTC (rev 8102)
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:ui="http://java.sun.com/jsf/facelets"
+    xmlns:h="http://java.sun.com/jsf/html"
+    xmlns:f="http://java.sun.com/jsf/core"
+    xmlns:s="http://jboss.com/products/seam/taglib">
+
+  <ui:composition template="template.xhtml">
+    <ui:define name="content">
+      
+      <div class="errors"><h:messages globalOnly="true"/></div>     
+
+      <s:div rendered="#{selectedMember == null}">
+        Sorry, but this member does not exist.
+      </s:div>
+    
+      <s:div rendered="#{selectedMember != null}">
+
+        <h1>#{selectedMember.memberName}'s pictures</h1>
+                    
+        <ui:repeat value="#{memberImages}" var="img">
+
+          <h:graphicImage value="/content/images?id=#{img.imageId}&amp;width=170"/>
+            
+        </ui:repeat> 
+
+      </s:div>                
+          
+    </ui:define>
+    
+  </ui:composition>
+</html>

Modified: trunk/examples/seamspace/view/profile.xhtml
===================================================================
--- trunk/examples/seamspace/view/profile.xhtml	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/view/profile.xhtml	2008-05-02 23:37:19 UTC (rev 8102)
@@ -32,7 +32,10 @@
           
           <br style="clear:both"/>
           
-          View My: Pics
+          View My: 
+          <s:link view="/pictures.xhtml" value="Pics">
+            <f:param name="name" value="#{selectedMember.memberName}"/>
+          </s:link>
           
         </s:div>
         

Modified: trunk/examples/seamspace/view/register.xhtml
===================================================================
--- trunk/examples/seamspace/view/register.xhtml	2008-05-02 23:35:59 UTC (rev 8101)
+++ trunk/examples/seamspace/view/register.xhtml	2008-05-02 23:37:19 UTC (rev 8102)
@@ -75,9 +75,7 @@
 
               <div class="formRow">
                 <h:outputLabel for="dob">Date of birth<em>*</em></h:outputLabel>
-                <!-- TODO Add in start and end of range -->
-                <!-- TODO Change image -->
-                	<rich:calendar id="dob" value="#{newMember.dob}" required="true" datePattern="MM/dd/yyyy" buttonIcon="images/ellipsis.png" />
+               	<rich:calendar id="dob" value="#{newMember.dob}" required="true" datePattern="MM/dd/yyyy" buttonIcon="images/ellipsis.png" />
                 <div class="validationError"><h:message for="dob"/></div>
               </div>           
               




More information about the seam-commits mailing list