package Ġcom . template . webserver Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . states . F ung ible Token Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . types . TokenType Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . utilities . iss ued By Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . utilities . of Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . utilities . without Issuer Ċ import Ġcom . r 3 . cord a . lib . tokens . money . Fi at Currency Ċ import Ġcom . template . flows .* Ċ import Ġcom . template . states . Cause Ċ import Ġcom . template . states . IO UM oney Ċ import Ġcom . template . states . IO U Token Ċ import Ġcom . template . states . Reward Token Ċ import Ġnet . cord a . core . contracts . Amount . Companion . sum Or Zero Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġnet . cord a . core . contracts . Unique Identifier . Companion . fromString Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . messaging . C ord a RP CO ps Ċ import Ġnet . cord a . core . node . NodeInfo Ċ import Ġnet . cord a . core . node . services . Attachment Id Ċ import Ġnet . cord a . core . node . services . Vault Ċ import Ġnet . cord a . core . node . services . vault . Query Criteria Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType . APPLICATION _ JSON _ VALUE Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġorg . springframework . web . multipart . Multipart File Ċ import Ġjava . io .* Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ /** Ċ Ġ* ĠDefine Ġyour ĠAPI Ġendpoints Ġhere . Ċ Ġ*/ Ċ @ RestController Ċ @ RequestMapping ("/") Ġ// ĠThe Ġpaths Ġfor ĠHTTP Ġrequests Ġare Ġrelative Ġto Ġthis Ġbase Ġpath . Ċ @ Cross Origin ( orig ins Ġ= Ġ[" http :// localhost : 3 0 0 0 "]) Ġ// ĠThe Ġpaths Ġfor ĠHTTP Ġrequests Ġare Ġrelative Ġto Ġthis Ġbase Ġpath . Ċ class ĠController () Ġ{ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġparty A Proxy : ĠC ord a RP CO ps ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġparty B Proxy : ĠC ord a RP CO ps ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġparty C Proxy : ĠC ord a RP CO ps ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġbank Proxy : ĠC ord a RP CO ps ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġ@ Qualifier (" party A Proxy ") ĊĠĠĠ Ġlateinit Ġvar Ġproxy : ĠC ord a RP CO ps ĊĊĠĠĠ Ġprivate Ġval Ġtoken Expiry Duration Ġ= ĠDuration . of Minutes ( 1 ) ĊĊĠĠĠ Ġprivate Ġval Ġcurrency Codes Ġ= ĠlistOf (" GBP ", Ġ" EUR ", Ġ" USD ") ĊĊĠĠĠ Ġprivate Ġval Ġc urrencies Ġ= Ġcurrency Codes . map { it Ġto Ġget Currency ( it )} ĊĊĠĠĠ Ġprivate Ġvar Ġreli ability Ġ= Ġmap Of (" Party A " Ġto Ġ" green ", Ġ" Party B " Ġto Ġ" green ", Ġ" Party C " Ġto Ġ" green ") ĊĊĠĠĠ Ġprivate Ġfun Ġis Not ary ( node Info : ĠNode Info ) ĊĠĠĠĠĠĠĠ Ġ= Ġproxy . not ary Id entities (). any Ġ{ Ġnode Info . is Legal Identity ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Me ( node Info : ĠNode Info ) ĊĠĠĠĠĠĠĠ Ġ= Ġnode Info . legal Id entities . first (). name . toString () Ġ== Ġmy Name () ĊĊĠĠĠ Ġprivate Ġfun Ġis Network Map ( node Info : ĠNode Info ) ĊĠĠĠĠĠĠĠ Ġ= Ġnode Info . legal Id entities . single (). name . organisation Ġ== Ġ" Network ĠMap ĠService " ĊĊĠĠĠ Ġprivate Ġfun Ġget Party ( party Name Ġ: ĠString ) ĊĠĠĠĠĠĠĠ Ġ= Ġproxy . network Map Snapshot () ĊĠĠĠĠĠĠĠ Ġ. single Ġ{ Ġit . legal Id entities . first (). name . organisation Ġ== Ġparty Name } ĊĠĠĠĠĠĠĠ Ġ. legal Id entities . first () ĊĊĠĠĠ Ġprivate Ġfun Ġmy Name () ĊĠĠĠĠĠĠĠ Ġ= Ġproxy . node Info (). legal Id entities . first (). name . toString () ĊĊĠĠĠ Ġprivate Ġfun Ġmy Party () ĊĠĠĠĠĠĠĠ Ġ= Ġproxy . node Info (). legal Id entities . first () ĊĊĠĠĠ Ġprivate Ġfun Ġget Currency ( currency Code Ġ: ĠString ) ĊĠĠĠĠĠĠĠ Ġ= ĠF iat Currency . getInstance ( currency Code ) ĊĊĠĠĠ Ġprivate Ġfun Ġto Show ( x Ġ: ĠLong ) ĊĠĠĠĠĠĠĠ Ġ= ĠĠ Ġx . toDouble () Ġ/ Ġ 1 0 0 ĊĊĠĠĠ Ġprivate Ġfun Ġget Groups ( type Ġ: ĠString ): ĠMap < Unique Identifier , ĠList < IO U Token >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( iou Tokens , Ġupdate ) Ġ= Ġproxy . vault Track ( IO U Token :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġi ou Tokens . states . map Ġ{ Ġit . state . data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġif Ġ( type Ġ== Ġ" ow ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . borrow er Ġ== Ġmy Party () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . l ender Ġ== Ġmy Party () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . cause Id Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcauses ToJson ( cause s Ġ: ĠList < Cause >) Ġ: ĠMutable List < JsonObject > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ: ĠMutable List < JsonObject > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġcauses . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" name ", Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" description ", Ġit . description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" needed Amount ", Ġto Show ( it . needed Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" currency ", Ġit . needed Amount . token . token Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" gather ed Amount ", Ġto Show ( it . gather ed Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" time Limit ", Ġit . time Limit . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" linear Id ", Ġit . linear Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" party ", Ġit . issuer . name . organisation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" reli ability ", Ġreli ability [ it . issuer . name . organisation ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cause ( cause Id Ġ: ĠUnique Identifier ) Ġ: ĠPair < Cause , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĠQuery Criteria . Linear State Query Criteria ( linear Id Ġ= ĠlistOf ( cause Id )) ĊĠĠĠĠĠĠĠ Ġval Ġcause Ġ= Ġproxy . vault Query By Criteria ( criteria , ĠCause :: class . java ). states ĊĊĠĠĠĠĠĠĠ Ġif ( cause . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( cause . single (). state . data , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconsumed Criteria Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Criteria . Linear State Query Criteria ( linear Id Ġ= ĠlistOf ( cause Id ), Ġstatus Ġ= ĠVault . State Status . CON SU MED ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconsumed Cause Ġ= Ġproxy . vault Query By Criteria ( consumed Criteria , ĠCause :: class . java ). states ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . state . data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single Ġ{ Ġit . gather ed Amount Ġ== Ġit . needed Amount Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( consumed Cause , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgroups ToJson ( groups Ġ: ĠMap < Unique Identifier , ĠList < IO U Token >> ): ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ: ĠMutable List < JsonObject > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġgroups . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Type Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . amount . token }. toSet (). single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Amount Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . amount }. sum Or Zero ( token Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( cause , Ġshow ) Ġ= Ġget Cause ( it . key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" cause Id ", Ġcause . linear Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" name ", Ġcause . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" description ", Ġcause . description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" expiration Date ", Ġit . value . first (). expiration Date . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" amount ", Ġto Show ( total Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" token ", Ġtotal Amount . token . token Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" don ated Amount ", Ġto Show ( cause . needed Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" currency ", Ġcause . needed Amount . token . token Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" show ", Ġshow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġincoming Tokens ToJson ( groups Ġ: ĠMap < Unique Identifier , ĠList < IO U Token >>) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ: ĠMutable List < JsonObject > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġgroups . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Type Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . amount . token }. toSet (). single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Amount Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . amount }. sum Or Zero ( token Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . don ated . token }. toSet (). single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdon ated Amount Ġ= Ġit . value . map { iou Token Ġ-> Ġi ou Token . don ated }. sum Or Zero ( currency ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" cause Id ", Ġit . key . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" expiration Date ", Ġit . value . first (). expiration Date . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" amount ", Ġto Show ( total Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" token ", Ġtotal Amount . token . token Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" don ated Amount ", Ġto Show ( don ated Amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" currency ", Ġdon ated Amount . token . token Identifier ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Img From Hash ( hash Ġ: ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzip Stream Ġ= ĠZip InputStream ( proxy . open Attachment ( Secure Hash . parse ( hash ))) ĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġzip Stream . next Entry ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( zip Stream . available () Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . read () ĊĠĠĠĠĠĠĠ Ġreturn Ġentry . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokens ToJson ( tokens Ġ: ĠList < Reward Token >) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ: ĠMutable List < JsonObject > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġtokens . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" amount ", Ġto Show ( it . amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" token ", Ġit . amount . token . token Identifier Ġ+ Ġ" Ġfrom Ġ" Ġ+ Ġit . amount . token . issuer . name . organisation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" image ", Ġget Img From Hash ( it . proof . single (). toString ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġi ou Money ToJson ( iou Money : ĠList < IO UM oney >) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ: ĠMutable List < JsonObject > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġi ou Money . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJsonObject () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" amount ", Ġto Show ( it . amount . quantity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" currency ", Ġit . amount . token . token Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" l ender ", Ġit . l ender . name . organisation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . addProperty (" linear Id ", Ġit . linear Id . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ node "]) ĊĠĠĠ Ġprivate Ġfun ĠgetNode (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproxy . node Info (). legal Id entities . first (). name . organisation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ peers "]) ĊĠĠĠ Ġprivate Ġfun Ġget Peers (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproxy . network Map Snapshot () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġis Not ary ( it ). not () Ġ&& Ġis Me ( it ). not () Ġ&& Ġis Network Map ( it ). not () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . legal Id entities . first (). name . organisation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ money "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġupdate Money (): ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmoney States Ġ= Ġproxy . vault Query ( F ung ible Token :: class . java ). states ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . state . data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . amount . token . issuer Ġ== Ġget Party (" Bank ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . amount . without Issuer () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġc urrencies . map { json . addProperty ( it . first , Ġto Show ( money States . filter { state Ġ-> Ġstate . token Ġ== Ġit . second }. sum Or Zero ( it . second ). quantity ))} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( json . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet ĠM appings ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ ow ed tokens "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġow ed Tokens () Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġget Groups (" ow ed ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( groups ToJson ( groups )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ incoming tokens "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġincoming Tokens () Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġget Groups (" incoming ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( incoming Tokens ToJson ( groups )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ io um oney "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġi ou Money () Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi ou Money Ġ= Ġproxy . vault Query ( IO UM oney :: class . java ). states ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map { it . state . data } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter { it . borrow er Ġ== Ġmy Party ()} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( iou Money ToJson ( iou Money )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ my cause s "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġmy Cause s () Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcauses Ġ= Ġproxy . vault Query ( Cause :: class . java ). states . map { it . state . data } ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( cause sTo Json ( cause s ). toString ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ active cause s "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġactive Cause s () Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcauses Ġ= Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGetAll Cause s Flow :: class . java ĊĠĠĠĠĠĠĠ Ġ). returnValue . get () ĊĊĠĠĠĠĠĠĠ Ġreli ability Ġ= Ġcauses . second ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( cause sTo Json ( cause s . first ). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ["/ reward tokens "], Ġproduces Ġ= Ġ[ ĠAP PLICATION _ JSON _ VALUE Ġ]) ĊĠĠĠ Ġprivate Ġfun Ġreward Tokens () Ġ: ĠResponseEntity < String >{ ĊĠĠĠĠĠĠĠ Ġval Ġreward Tokens Ġ= Ġproxy . vault Query ( Reward Token :: class . java ). states . map { it . state . data } ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( tokens ToJson ( reward Tokens )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPOST ĠM appings ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ party "]) ĊĠĠĠ Ġprivate Ġfun Ġget Party (@ RequestBody Ġpayload : ĠString ?): ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġparty Ġ= Ġconverted Object [" name "]. asString ĊĠĠĠĠĠĠĠ Ġwhen Ġ( party ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Party A " -> Ġproxy Ġ= Ġparty A Proxy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Party B " -> Ġproxy Ġ= Ġparty B Proxy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Party C " -> Ġproxy Ġ= Ġparty C Proxy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bank " Ġ Ġ-> Ġproxy Ġ= Ġbank Proxy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body (" Un re cogn ised ĠParty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . ACCEPT ED ). body (" Party Ġchanged Ġsuccessfully Ġto Ġ" Ġ+ Ġmy Name ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ issue money "]) ĊĠĠĠ Ġprivate Ġfun Ġissue Money (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġconverted Object [" amount "]. as Long ĊĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġget Currency ( converted Object [" currency "]. asString ) ĊĠĠĠĠĠĠĠ Ġval Ġparty Ġ= Ġget Party ( converted Object [" party "]. asString ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue F ung ible Token Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġof Ġcurrency , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" Money Ġhas Ġbeen Ġissued ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ issue cause "]) ĊĠĠĠ Ġprivate Ġfun Ġissue Cause (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġconverted Object [" name "]. asString ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġconverted Object [" description "]. asString ĊĊĠĠĠĠĠĠĠ Ġval Ġneeded Amount Ġ= Ġconverted Object [" needed Amount "]. as Long ĊĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġget Currency ( converted Object [" currency "]. asString ) ĊĠĠĠĠĠĠĠ Ġval Ġissued Needed Amount Ġ= Ġneeded Amount Ġof Ġcurrency Ġissued By Ġget Party (" Bank ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtotal Tokens Ġ= Ġconverted Object [" total Tokens "]. as Long ĊĠĠĠĠĠĠĠ Ġval Ġtoken Name Ġ= Ġconverted Object [" token Name "]. asString ĊĠĠĠĠĠĠĠ Ġval Ġtotal Tokens Amount Ġ= Ġtotal Tokens Ġof ĠTokenType ( token Name , Ġ 2 ) Ġissued By Ġmy Party () ĊĊĠĠĠĠĠĠĠ Ġval Ġdead Line Ġ= Ġconverted Object [" time Limit "]. asString ĊĠĠĠĠĠĠĠ Ġval Ġtime Limit Ġ= ĠLocalDateTime . parse ( dead Line , ĠDateTime Formatter . ISO _ LOCAL _ DATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. at Zone ( Zone Id . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Instant () ĊĊĠĠĠĠĠĠĠ Ġval Ġcause Ġ= ĠCause ( name , Ġdescription , Ġissued Needed Amount , Ġtotal Tokens Amount , Ġtime Limit , Ġtoken Expiry Duration ) ĊĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcause Id Ġ= Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Cause Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcause ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow (). tx . outputs OfType < Cause >(). single (). linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" Cause Ġhas Ġbeen Ġissued Ġwith Ġid : Ġ$ cause Id ") ĊĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ don ate "]) ĊĠĠĠ Ġprivate Ġfun Ġdon ate (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġconverted Object [" amount "]. as Long ĊĊĠĠĠĠĠĠĠ Ġval Ġcause Object Ġ= Ġconverted Object [" cause "] Ġas ĠJsonObject ĊĠĠĠĠĠĠĠ Ġval Ġparty Ġ= Ġget Party ( cause Object [" party "]. asString ) ĊĠĠĠĠĠĠĠ Ġval Ġcause Id Ġ= Ġfrom String ( cause Object [" linear Id "]. asString ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġget Currency ( cause Object [" currency "]. asString ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp tx Ġ= Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon ate Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġof Ġcurrency Ġissued By Ġget Party (" Bank "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcause Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ow ed " Ġ+ Ġp tx . tx . outputs OfType < IO U Token >(). single (). amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" Money Ġhas Ġbeen Ġdon ated Ġto Ġthe Ġcause Ġwith Ġid : Ġ$ cause Id ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ set tle cause "]) ĊĠĠĠ Ġprivate Ġfun Ġset tle Cause (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġcause Id Ġ= Ġfrom String ( converted Object [" linear Id "]. asString ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSet tle Cause Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcause Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" Cause Ġwith Ġid Ġ$ cause Id Ġhas Ġbeen Ġset tled Ġand Ġthe Ġmoney Ġhas Ġbeen Ġre dee med ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ request money "]) ĊĠĠĠ Ġprivate Ġfun Ġrequest Money (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġcause Id Ġ= Ġfrom String ( converted Object [" linear Id "]. asString ) ĊĊĠĠĠĠĠĠĠ Ġget Groups (" incoming "). filter Ġ{ Ġit . key Ġ== Ġcause Id Ġ}. map { it . value }. single (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO UM oney Issue Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" IO UM oney Ġstate Ġhas Ġbeen Ġissued ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ["/ rep ay "]) ĊĠĠĠ Ġprivate Ġfun Ġre pay (@ RequestBody Ġpayload : ĠString ?) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Object Ġ= ĠGson (). fromJson ( payload , ĠJsonObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġlinear Id Ġ= Ġfrom String ( converted Object [" linear Id "]. asString ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO UM oney Set tle Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" Money Ġhas Ġbeen Ġreturned Ġsuccessfully ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ set tle tokens "]) ĊĠĠĠ Ġprivate Ġfun Ġset tle Tokens (@ RequestParam (" cause Id ") Ġcause Id Ġ: ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestParam (" file ") Ġfile : ĠMultip art File ) Ġ: ĠResponseEntity < String > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġattachment Id Ġ= Ġupload File ( file ) ĊĠĠĠĠĠĠĠ Ġval Ġproof Ġ= ĠlistOf ( attachment Id ) ĊĊĠĠĠĠĠĠĠ Ġget Groups (" ow ed "). filter Ġ{ Ġit . key Ġ== Ġfrom String ( cause Id ) Ġ}. map { it . value }. single (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO U Token Set tle Flow :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproof , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . BAD _ REQUEST ). body ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). body (" All ĠIO U Tokens Ġset tled Ġsuccessfully ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload File ( file Ġ: ĠMultip art File ) Ġ: ĠSecure Hash { ĊĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġfile . original Filename ĊĠĠĠĠĠĠĠ Ġrequire ( filename Ġ!= Ġnull ) Ġ{ Ġ" File Ġname Ġmust Ġbe Ġset " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġif Ġ(!( file . contentType Ġ== Ġ" zip " Ġ|| Ġfile . contentType Ġ== Ġ" jar ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload Zip ( file . inputStream , Ġfilename ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . upload Attachment With Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar Ġ= Ġfile . inputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup loader Ġ= Ġmy Name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Ġ= Ġfilename ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload Zip ( inputStream : ĠInputStream , Ġfilename : ĠString ): ĠAttachment Id Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzip Name Ġ= Ġ"$ filename -${ UUID . randomUUID ()}. zip " ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( zip Name ). use Ġ{ Ġfile OutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip OutputStream ( file OutputStream ). use Ġ{ Ġzip OutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Entry Ġ= ĠZip Entry ( filename ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip OutputStream . put Next Entry ( zip Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( zip OutputStream , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠFileInputStream ( zip Name ). use Ġ{ Ġfile InputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġproxy . upload Attachment With Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar Ġ= Ġfile InputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup loader Ġ= Ġmy Name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Ġ= Ġfilename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( Paths . get ( zip Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }