tx · 77GzLmgJoXoBthBdKB42FqQAzrQCu1kS6Q49CgdYkdfX

3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12:  -0.01400000 Waves

2020.01.30 17:06 [1907761] smart account 3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12 > SELF 0.00000000 Waves

{ "type": 13, "id": "77GzLmgJoXoBthBdKB42FqQAzrQCu1kS6Q49CgdYkdfX", "fee": 1400000, "feeAssetId": null, "timestamp": 1580392579096, "version": 1, "sender": "3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12", "senderPublicKey": "5G9pgymdyBYGnWF3oahQXQNPnVaWEthMkeFRUzHjZ7mX", "proofs": [ "4yydkYTmTvupY7ULMS7yFupoRh3rUhPrvPgdEQUovVwes9XC6KgFfKvsCxmsaJJByeskGqhsb6rZEB9B3TzMogeM", "zkyuiS4T8jeBhUjuHRmMiPndmuFbVdCWGB96if3zbUT6whc4BsGNB2FDdu9qrLhiYGpwm2f3iw7Vn2hD23eXFMG", "5PMK6QkoB9fa1txzTUfuxTUJKUPZ85JaXbyJjv21VmMHb94n5M1Y8Hke7erfUyxbv2SwoJEQGd9wvNtHhfAUzsDK" ], "script": "base64:AAIDAAAAAAAAACYIARIAEgMKAQESFgoUCAEIAQgBCAEIAQgBCAEIAQgBCAESAwoBAQAAAA4AAAAACWFzc2V0TmFtZQIAAAAHUnVzQ29pbgAAAAAHZGVjTXVsdAAAAAAAAAGGoAAAAAAKbG9ja1BlcmlvZAkAAGgAAAACAAAAAAAAKCByAAAAAAAAAAPoAAAAAAptaW5CYWxhbmNlCQAAaQAAAAIFAAAAB2RlY011bHQAAAAAAAAAAGQAAAAACm1heEJhbGFuY2UJAABoAAAAAgAAAAAAAAAnEAUAAAAHZGVjTXVsdAAAAAAJbXlBc3NldElkAQAAACDGcQ47hv7axTPQZZhvofTVQAGfvbf87qkFU76nO/l3FwAAAAALb3duZXJQdWJLZXkBAAAAIBmPdYtQSU3rSuq9j0PlAHRzCaduj+Mn0QqEe7bsOoR3AAAAAA1tYW5hZ2VyUHViS2V5AQAAACDJsM1B9/RlDuG4HIiBzCbhMPVvrk50MxJ3Ud0JPJuMcgAAAAANbGFzdEJsb2NrVGltZQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAADWZyYW1lT3BlblRpbWUJAABoAAAAAgkAAGkAAAACBQAAAA1sYXN0QmxvY2tUaW1lBQAAAApsb2NrUGVyaW9kBQAAAApsb2NrUGVyaW9kAAAAAA5mcmFtZUNsb3NlVGltZQkAAGQAAAACBQAAAA1mcmFtZU9wZW5UaW1lBQAAAApsb2NrUGVyaW9kAAAAAA5wYXlvdXRPcGVuVGltZQkAAGUAAAACBQAAAA5mcmFtZUNsb3NlVGltZQkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAGAAAAAAAAAAAPAAAAAAAAAAAPAAAAAAAAAAD6AEAAAANdG9GbG9hdFN0cmluZwAAAAIAAAADbnVtAAAABG11bHQEAAAAAnRoAgAAAAEsBAAAAAJkcAIAAAABLgoBAAAADWpvaW5UaG91c2FuZHMAAAACAAAAA2FjYwAAAAN2YWwDAwkAAAAAAAACBQAAAANhY2MCAAAAAAkAAAAAAAACBQAAAAN2YWwAAAAAAAAAAAAHAgAAAAADCQAAAAAAAAIFAAAAA2FjYwIAAAAACQABpAAAAAEFAAAAA3ZhbAkAASwAAAACCQABLAAAAAIFAAAAA2FjYwUAAAACdGgJAAEwAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAA3ZhbAAAAAAAAAAD6AAAAAAAAAAAAQoBAAAADWRyb3BSaWdodFplcm8AAAABAAAAA3N0cgMJAQAAAAIhPQAAAAIJAAEwAAAAAgUAAAADc3RyCQAAZQAAAAIJAAExAAAAAQUAAAADc3RyAAAAAAAAAAABAgAAAAEwBQAAAANzdHIJAAEvAAAAAgUAAAADc3RyCQAAZQAAAAIJAAExAAAAAQUAAAADc3RyAAAAAAAAAAABBAAAAAJpcAkAAGkAAAACBQAAAANudW0FAAAABG11bHQEAAAAAmZwCQAAagAAAAIFAAAAA251bQUAAAAEbXVsdAQAAAACcTYJAABpAAAAAgUAAAACaXAJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoBAAAAAJyNgkAAGoAAAACBQAAAAJpcAkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnE1CQAAaQAAAAIFAAAAAnI2CQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnI1CQAAagAAAAIFAAAAAnI2CQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnE0CQAAaQAAAAIFAAAAAnI1CQAAaAAAAAIJAABoAAAAAgkAAGgAAAACAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoBAAAAAJyNAkAAGoAAAACBQAAAAJyNQkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAD6AAAAAAAAAAD6AAAAAAAAAAD6AAAAAAAAAAD6AQAAAACcTMJAABpAAAAAgUAAAACcjQJAABoAAAAAgkAAGgAAAACAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAAAAAPoBAAAAAJyMwkAAGoAAAACBQAAAAJyNAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnEyCQAAaQAAAAIFAAAAAnIzCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnIyCQAAagAAAAIFAAAAAnIzCQAAaAAAAAIAAAAAAAAAA+gAAAAAAAAAA+gEAAAAAnExCQAAaQAAAAIFAAAAAnIyAAAAAAAAAAPoBAAAAAJyMQkAAGoAAAACBQAAAAJyMgAAAAAAAAAD6AQAAAACaXMEAAAADSRsaXN0MzI3ODMzMzQJAARMAAAAAgUAAAACcTYJAARMAAAAAgUAAAACcTUJAARMAAAAAgUAAAACcTQJAARMAAAAAgUAAAACcTMJAARMAAAAAgUAAAACcTIJAARMAAAAAgUAAAACcTEJAARMAAAAAgUAAAACcjEFAAAAA25pbAQAAAANJHNpemUzMjc4MzMzNAkAAZAAAAABBQAAAA0kbGlzdDMyNzgzMzM0BAAAAA0kYWNjMDMyNzgzMzM0AgAAAAADCQAAAAAAAAIFAAAADSRzaXplMzI3ODMzMzQAAAAAAAAAAAAFAAAADSRhY2MwMzI3ODMzMzQEAAAADSRhY2MxMzI3ODMzMzQJAQAAAA1qb2luVGhvdXNhbmRzAAAAAgUAAAANJGFjYzAzMjc4MzMzNAkAAZEAAAACBQAAAA0kbGlzdDMyNzgzMzM0AAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTMyNzgzMzM0AAAAAAAAAAABBQAAAA0kYWNjMTMyNzgzMzM0BAAAAA0kYWNjMjMyNzgzMzM0CQEAAAANam9pblRob3VzYW5kcwAAAAIFAAAADSRhY2MxMzI3ODMzMzQJAAGRAAAAAgUAAAANJGxpc3QzMjc4MzMzNAAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemUzMjc4MzMzNAAAAAAAAAAAAgUAAAANJGFjYzIzMjc4MzMzNAQAAAANJGFjYzMzMjc4MzMzNAkBAAAADWpvaW5UaG91c2FuZHMAAAACBQAAAA0kYWNjMjMyNzgzMzM0CQABkQAAAAIFAAAADSRsaXN0MzI3ODMzMzQAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplMzI3ODMzMzQAAAAAAAAAAAMFAAAADSRhY2MzMzI3ODMzMzQEAAAADSRhY2M0MzI3ODMzMzQJAQAAAA1qb2luVGhvdXNhbmRzAAAAAgUAAAANJGFjYzMzMjc4MzMzNAkAAZEAAAACBQAAAA0kbGlzdDMyNzgzMzM0AAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTMyNzgzMzM0AAAAAAAAAAAEBQAAAA0kYWNjNDMyNzgzMzM0BAAAAA0kYWNjNTMyNzgzMzM0CQEAAAANam9pblRob3VzYW5kcwAAAAIFAAAADSRhY2M0MzI3ODMzMzQJAAGRAAAAAgUAAAANJGxpc3QzMjc4MzMzNAAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemUzMjc4MzMzNAAAAAAAAAAABQUAAAANJGFjYzUzMjc4MzMzNAQAAAANJGFjYzYzMjc4MzMzNAkBAAAADWpvaW5UaG91c2FuZHMAAAACBQAAAA0kYWNjNTMyNzgzMzM0CQABkQAAAAIFAAAADSRsaXN0MzI3ODMzMzQAAAAAAAAAAAUDCQAAAAAAAAIFAAAADSRzaXplMzI3ODMzMzQAAAAAAAAAAAYFAAAADSRhY2M2MzI3ODMzMzQEAAAADSRhY2M3MzI3ODMzMzQJAQAAAA1qb2luVGhvdXNhbmRzAAAAAgUAAAANJGFjYzYzMjc4MzMzNAkAAZEAAAACBQAAAA0kbGlzdDMyNzgzMzM0AAAAAAAAAAAGAwkAAAAAAAACBQAAAA0kc2l6ZTMyNzgzMzM0AAAAAAAAAAAHBQAAAA0kYWNjNzMyNzgzMzM0BAAAAA0kYWNjODMyNzgzMzM0CQEAAAANam9pblRob3VzYW5kcwAAAAIFAAAADSRhY2M3MzI3ODMzMzQJAAGRAAAAAgUAAAANJGxpc3QzMjc4MzMzNAAAAAAAAAAABwkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDcEAAAAAmZzCQEAAAANZHJvcFJpZ2h0WmVybwAAAAEJAQAAAA1kcm9wUmlnaHRaZXJvAAAAAQkBAAAADWRyb3BSaWdodFplcm8AAAABCQEAAAANZHJvcFJpZ2h0WmVybwAAAAEJAQAAAA1kcm9wUmlnaHRaZXJvAAAAAQkBAAAADWRyb3BSaWdodFplcm8AAAABCQEAAAANZHJvcFJpZ2h0WmVybwAAAAEJAQAAAA1kcm9wUmlnaHRaZXJvAAAAAQkAAS8AAAACCQABMAAAAAIJAAGkAAAAAQkAAGQAAAACBQAAAAJmcAUAAAAEbXVsdAAAAAAAAAAAAQAAAAAAAAAACAkAASwAAAACAwkBAAAAAiE9AAAAAgUAAAACaXMCAAAAAAUAAAACaXMCAAAAATADCQEAAAACIT0AAAACBQAAAAJmcwIAAAAACQABLAAAAAIFAAAAAmRwBQAAAAJmcwIAAAAAAQAAABB0b0RhdGVUaW1lU3RyaW5nAAAAAQAAAAl0aW1lc3RhbXAEAAAAAnNwAgAAAAEgBAAAAAJ6egIAAAAEIFVUQwQAAAAEbm9ybQkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAB8JAARMAAAAAgAAAAAAAAAAOwkABEwAAAACAAAAAAAAAABaCQAETAAAAAIAAAAAAAAAAHgJAARMAAAAAgAAAAAAAAAAlwkABEwAAAACAAAAAAAAAAC1CQAETAAAAAIAAAAAAAAAANQJAARMAAAAAgAAAAAAAAAA8wkABEwAAAACAAAAAAAAAAERCQAETAAAAAIAAAAAAAAAATAJAARMAAAAAgAAAAAAAAABTgkABEwAAAACAAAAAAAAAAFtBQAAAANuaWwEAAAABGxlYXAJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACAAAAAAAAAAAfCQAETAAAAAIAAAAAAAAAADwJAARMAAAAAgAAAAAAAAAAWwkABEwAAAACAAAAAAAAAAB5CQAETAAAAAIAAAAAAAAAAJgJAARMAAAAAgAAAAAAAAAAtgkABEwAAAACAAAAAAAAAADVCQAETAAAAAIAAAAAAAAAAPQJAARMAAAAAgAAAAAAAAABEgkABEwAAAACAAAAAAAAAAExCQAETAAAAAIAAAAAAAAAAU8JAARMAAAAAgAAAAAAAAABbgUAAAADbmlsAwMJAABmAAAAAgD///TkixS0AAUAAAAJdGltZXN0YW1wBgkAAGYAAAACBQAAAAl0aW1lc3RhbXAAAADmd9If2/8JAAACAAAAAQIAAAA1SVNPIDg2MDE6IE9ubHkgeWVhcnMgZnJvbSAxNTgzIHRvIDk5OTkgYXJlIHBlcm1pdHRlZC4EAAAABWVwb2NoCQAAZAAAAAIJAABkAAAAAgkAAGUAAAACCQAAZAAAAAIJAABoAAAAAgAAAAAAAAAHsQAAAAAAAAABbQkAAGkAAAACAAAAAAAAAAexAAAAAAAAAAAECQAAaQAAAAIAAAAAAAAAB7EAAAAAAAAAAGQJAABpAAAAAgAAAAAAAAAHsQAAAAAAAAABkAAAAAAAAAABbgQAAAACY2UJAABkAAAAAgUAAAAJdGltZXN0YW1wCQAAaAAAAAIJAABoAAAAAgUAAAAFZXBvY2gAAAAAAAABUYAAAAAAAAAAA+gEAAAABGRhdGUEAAAAAnl5CQAAZQAAAAIJAABpAAAAAgUAAAACY2UJAABoAAAAAgAAAAAAAeGFWAAAAAAAAAAD6AAAAAAAAAAAAQQAAAADZHR5CQAAZAAAAAIJAABkAAAAAgkAAGUAAAACCQAAZAAAAAIJAABoAAAAAgUAAAACeXkAAAAAAAAAAW0JAABpAAAAAgUAAAACeXkAAAAAAAAAAAQJAABpAAAAAgUAAAACeXkAAAAAAAAAAGQJAABpAAAAAgUAAAACeXkAAAAAAAAAAZAAAAAAAAAAAW4EAAAAA3l0ZAkAAGUAAAACCQAAaQAAAAIFAAAAAmNlCQAAaAAAAAIAAAAAAAABUYAAAAAAAAAAA+gFAAAAA2R0eQQAAAAGbW9udGhzAwMDCQAAAAAAAAIJAABqAAAAAgkAAGQAAAACBQAAAAJ5eQAAAAAAAAAAAQAAAAAAAAAABAAAAAAAAAAAAAkBAAAAAiE9AAAAAgkAAGoAAAACCQAAZAAAAAIFAAAAAnl5AAAAAAAAAAABAAAAAAAAAABkAAAAAAAAAAAABwYJAAAAAAAAAgkAAGoAAAACCQAAZAAAAAIFAAAAAnl5AAAAAAAAAAABAAAAAAAAAAGQAAAAAAAAAAAABQAAAARsZWFwBQAAAARub3JtBAAAAAJtbQMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAADAkBAAAABXRocm93AAAAAAMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAACwAAAAAAAAAACwMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAACgAAAAAAAAAACgMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAACQAAAAAAAAAACQMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAACAAAAAAAAAAACAMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAABwAAAAAAAAAABwMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAABgAAAAAAAAAABgMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAABQAAAAAAAAAABQMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAABAAAAAAAAAAABAMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAAAwAAAAAAAAAAAwMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAAAgAAAAAAAAAAAgMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAAAQAAAAAAAAAAAQMJAABnAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwAAAAAAAAAAAAAAAAAAAAAAAAkBAAAABXRocm93AAAAAAQAAAACZGQJAABlAAAAAgUAAAADeXRkCQABkQAAAAIFAAAABm1vbnRocwUAAAACbW0JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAAnl5AAAAAAAAAAABAgAAAAEtCQABMAAAAAIJAAGkAAAAAQkAAGQAAAACBQAAAAJtbQAAAAAAAAAAZQAAAAAAAAAAAQIAAAABLQkAATAAAAACCQABpAAAAAEJAABkAAAAAgUAAAACZGQAAAAAAAAAAGUAAAAAAAAAAAEEAAAABHRpbWUEAAAAAnJkCQAAagAAAAIFAAAAAmNlCQAAaAAAAAIAAAAAAAABUYAAAAAAAAAAA+gEAAAAAmhoCQAAaQAAAAIFAAAAAnJkCQAAaAAAAAIAAAAAAAAADhAAAAAAAAAAA+gEAAAAAnJoCQAAagAAAAIFAAAAAnJkCQAAaAAAAAIAAAAAAAAADhAAAAAAAAAAA+gEAAAAAm1tCQAAaQAAAAIFAAAAAnJoCQAAaAAAAAIAAAAAAAAAADwAAAAAAAAAA+gEAAAAAnJtCQAAagAAAAIFAAAAAnJoCQAAaAAAAAIAAAAAAAAAADwAAAAAAAAAA+gEAAAAAnNzCQAAaQAAAAIFAAAAAnJtAAAAAAAAAAPoBAAAAAJtcwkAAGoAAAACBQAAAAJybQAAAAAAAAAD6AkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABMAAAAAIJAAGkAAAAAQkAAGQAAAACBQAAAAJoaAAAAAAAAAAAZAAAAAAAAAAAAQIAAAABOgkAATAAAAACCQABpAAAAAEJAABkAAAAAgUAAAACbW0AAAAAAAAAAGQAAAAAAAAAAAECAAAAAToJAAEwAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAAnNzAAAAAAAAAABkAAAAAAAAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARkYXRlBQAAAAJzcAUAAAAEdGltZQUAAAACenoAAAAEAAAAA2ludgEAAAAHZGVwb3NpdAAAAAAEAAAACmF0dFBheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAdVGhlcmUgaXMgbm8gYXR0YWNoZWQgcGF5bWVudCAFAAAACWFzc2V0TmFtZQIAAAABLgMJAQAAAAIhPQAAAAIIBQAAAAphdHRQYXltZW50AAAAB2Fzc2V0SWQFAAAACW15QXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAFT25seSAFAAAACWFzc2V0TmFtZQIAAAAXIGlzIGFsbG93ZWQgdG8gZGVwb3NpdC4EAAAABGRhcHAJAAJYAAAAAQgFAAAABHRoaXMAAAAFYnl0ZXMEAAAACHN1bVRvdGFsCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABGRhcHACAAAACF9iYWxhbmNlBAAAAAZjbGllbnQJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAp1cGRhdGVUaW1lBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAtfdXBkYXRldGltZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAF4BQAAAAckbWF0Y2gwBQAAAAF4AAAAAAAAAAAABAAAAAdpc09sZGVyCQAAZwAAAAIFAAAADWZyYW1lT3BlblRpbWUFAAAACnVwZGF0ZVRpbWUEAAAACGlzQWN0aXZlBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAdfc3RhdHVzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAF4BQAAAAckbWF0Y2gwBQAAAAF4BwQAAAAHYmFsYW5jZQMDBQAAAAdpc09sZGVyCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlBwAAAAAAAAAAAAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABmNsaWVudAIAAAAIX2JhbGFuY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABeAUAAAAHJG1hdGNoMAUAAAABeAAAAAAAAAAAAAQAAAAGYW1vdW50CAUAAAAKYXR0UGF5bWVudAAAAAZhbW91bnQEAAAACm5ld0JhbGFuY2UDBQAAAAhpc0FjdGl2ZQkAAGQAAAACBQAAAAdiYWxhbmNlBQAAAAZhbW91bnQFAAAABmFtb3VudAMDCQAAZgAAAAIFAAAACm1pbkJhbGFuY2UFAAAACm5ld0JhbGFuY2UGCQAAZgAAAAIFAAAACm5ld0JhbGFuY2UFAAAACm1heEJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIVRoZSBtaW5pbXVtIGFsbG93YWJsZSBiYWxhbmNlIGlzIAkBAAAADXRvRmxvYXRTdHJpbmcAAAACBQAAAAptaW5CYWxhbmNlBQAAAAdkZWNNdWx0AgAAAAEgBQAAAAlhc3NldE5hbWUCAAAAFSwgYW5kIHRoZSBtYXhpbXVtIGlzIAkBAAAADXRvRmxvYXRTdHJpbmcAAAACBQAAAAptYXhCYWxhbmNlBQAAAAdkZWNNdWx0AgAAAAEgBQAAAAlhc3NldE5hbWUCAAAAAS4EAAAACXN0YXJ0VGltZQMDBQAAAAdpc09sZGVyBQAAAAhpc0FjdGl2ZQcFAAAADWZyYW1lT3BlblRpbWUDAwUAAAAHaXNPbGRlcgkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQcFAAAADWxhc3RCbG9ja1RpbWUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAZjbGllbnQCAAAACl9zdGFydHRpbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABeAUAAAAHJG1hdGNoMAMFAAAACGlzQWN0aXZlBQAAAAF4CQAAZQAAAAIJAABkAAAAAgUAAAABeAUAAAANbGFzdEJsb2NrVGltZQUAAAAKdXBkYXRlVGltZQAAAAAAAAAAAAQAAAAMbmV3U3RhcnRUaW1lAwkAAGYAAAACBQAAAAlzdGFydFRpbWUFAAAADWxhc3RCbG9ja1RpbWUFAAAADmZyYW1lQ2xvc2VUaW1lBAAAAAliYWxXZWlnaHQJAABpAAAAAgUAAAAHYmFsYW5jZQUAAAAKbWluQmFsYW5jZQQAAAAJc3VtV2VpZ2h0CQAAaQAAAAIFAAAACm5ld0JhbGFuY2UFAAAACm1pbkJhbGFuY2UJAABkAAAAAgkAAGsAAAADBQAAAAlzdGFydFRpbWUFAAAACWJhbFdlaWdodAUAAAAJc3VtV2VpZ2h0CQAAawAAAAMFAAAADWxhc3RCbG9ja1RpbWUJAABlAAAAAgUAAAAJc3VtV2VpZ2h0BQAAAAliYWxXZWlnaHQFAAAACXN1bVdlaWdodAMFAAAACGlzQWN0aXZlCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABGRhcHACAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAACHN1bVRvdGFsBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAhfYmFsYW5jZQUAAAAKbmV3QmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAACl9zdGFydHRpbWUFAAAADG5ld1N0YXJ0VGltZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAAC191cGRhdGV0aW1lBQAAAA1sYXN0QmxvY2tUaW1lBQAAAANuaWwDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABmNsaWVudAIAAAAIX2FkZHJlc3MJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAAIc3VtVG90YWwFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAACF9iYWxhbmNlBQAAAApuZXdCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABmNsaWVudAIAAAAKX3N0YXJ0dGltZQUAAAAMbmV3U3RhcnRUaW1lCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABmNsaWVudAIAAAAHX3N0YXR1cwYJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAtfdXBkYXRldGltZQUAAAANbGFzdEJsb2NrVGltZQUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABGRhcHACAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAACHN1bVRvdGFsBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAhfYWRkcmVzcwUAAAAGY2xpZW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABmNsaWVudAIAAAAIX2JhbGFuY2UFAAAACm5ld0JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAApfc3RhcnR0aW1lBQAAAAxuZXdTdGFydFRpbWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAdfc3RhdHVzBgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAAC191cGRhdGV0aW1lBQAAAA1sYXN0QmxvY2tUaW1lBQAAAANuaWwAAAADaW52AQAAAAh3aXRoZHJhdwAAAAEAAAAKUlNDeDEwMDAwMAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA0UGxlYXNlIGRvIG5vdCBhdHRhY2ggcGF5bWVudCB3aGVuIHdpdGhkcmF3aW5nIGZ1bmRzLgQAAAAEZGFwcAkAAlgAAAABCAUAAAAEdGhpcwAAAAVieXRlcwQAAAAIc3VtVG90YWwJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEZGFwcAIAAAAIX2JhbGFuY2UEAAAACG1pblN0YWtlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABGRhcHACAAAACl9zdGFydHRpbWUEAAAABmNsaWVudAkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACnVwZGF0ZVRpbWUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAZjbGllbnQCAAAAC191cGRhdGV0aW1lAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgAAAAAAAAAAAAEAAAAB2lzT2xkZXIJAABnAAAAAgUAAAANZnJhbWVPcGVuVGltZQUAAAAKdXBkYXRlVGltZQQAAAAIaXNBY3RpdmUEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAZjbGllbnQCAAAAB19zdGF0dXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgHBAAAAAdiYWxhbmNlAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQAAAAAAAAAAAAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABmNsaWVudAIAAAAIX2JhbGFuY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABeAUAAAAHJG1hdGNoMAUAAAABeAAAAAAAAAAAAAQAAAAKZXhwaXJhdGlvbgkAAGQAAAACBQAAAAp1cGRhdGVUaW1lBQAAAApsb2NrUGVyaW9kBAAAAAZhbW91bnQDCQAAZgAAAAIFAAAAClJTQ3gxMDAwMDAAAAAAAAAAAAAFAAAAClJTQ3gxMDAwMDAFAAAAB2JhbGFuY2UEAAAACm5ld0JhbGFuY2UJAABlAAAAAgUAAAAHYmFsYW5jZQUAAAAGYW1vdW50AwMDCQAAZwAAAAIFAAAACG1pblN0YWtlAAAAAAAAAAAACQAAZwAAAAIFAAAAB2JhbGFuY2UFAAAACG1pblN0YWtlBwkAAGYAAAACBQAAAApleHBpcmF0aW9uBQAAAA1sYXN0QmxvY2tUaW1lBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAA6VW5hYmxlIHRvIHdpdGhkcmF3IGNvaW5zISBUaGUgYWNjb3VudCBpcyBsb2NrZWQgZm9yIHVwIHRvIAkBAAAAEHRvRGF0ZVRpbWVTdHJpbmcAAAABBQAAAApleHBpcmF0aW9uAgAAABAuIFBsZWFzZSB3YWl0Li4uAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQIAAAA8SXQncyBpbXBvc3NpYmxlIHRvIHdpdGhkcmF3IGEgbmVnYXRpdmUgYW1vdW50IG9yIG5vIGJhbGFuY2UuAwkAAGYAAAACBQAAAAZhbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA1SXQncyBpbXBvc3NpYmxlIHRvIHdpdGhkcmF3IG1vcmUgdGhhbiB0aGUgYmFsYW5jZSBvZiAJAAGkAAAAAQUAAAAHYmFsYW5jZQIAAAACICgJAQAAAA10b0Zsb2F0U3RyaW5nAAAAAgUAAAAHYmFsYW5jZQUAAAAHZGVjTXVsdAIAAAABIAUAAAAJYXNzZXROYW1lAgAAAAIpLgMJAABmAAAAAgUAAAAKbWluQmFsYW5jZQUAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIVRoZSBtaW5pbXVtIHdpdGhkcmF3YWwgYW1vdW50IGlzIAkAAaQAAAABBQAAAAptaW5CYWxhbmNlAgAAAAIgKAkBAAAADXRvRmxvYXRTdHJpbmcAAAACBQAAAAptaW5CYWxhbmNlBQAAAAdkZWNNdWx0AgAAAAEgBQAAAAlhc3NldE5hbWUCAAAAAikuBAAAAAlzdGFydFRpbWUDBQAAAAdpc09sZGVyBQAAAA1mcmFtZU9wZW5UaW1lBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAGY2xpZW50AgAAAApfc3RhcnR0aW1lAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgAAAAAAAAAAAAEAAAADG5ld1N0YXJ0VGltZQMJAABmAAAAAgUAAAAJc3RhcnRUaW1lBQAAAA1sYXN0QmxvY2tUaW1lBQAAAA5mcmFtZUNsb3NlVGltZQMJAABmAAAAAgUAAAAKbWluQmFsYW5jZQUAAAAKbmV3QmFsYW5jZQUAAAAJc3RhcnRUaW1lBAAAAAliYWxXZWlnaHQJAABpAAAAAgUAAAAHYmFsYW5jZQUAAAAKbWluQmFsYW5jZQQAAAAJc3VtV2VpZ2h0CQAAaQAAAAIFAAAACm5ld0JhbGFuY2UFAAAACm1pbkJhbGFuY2UJAABkAAAAAgkAAGsAAAADBQAAAAlzdGFydFRpbWUFAAAACWJhbFdlaWdodAUAAAAJc3VtV2VpZ2h0CQAAawAAAAMFAAAADWxhc3RCbG9ja1RpbWUJAABlAAAAAgUAAAAJc3VtV2VpZ2h0BQAAAAliYWxXZWlnaHQFAAAACXN1bVdlaWdodAMJAABnAAAAAgUAAAAKbmV3QmFsYW5jZQUAAAAKbWluQmFsYW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAAIX2JhbGFuY2UJAABlAAAAAgUAAAAIc3VtVG90YWwFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAACF9iYWxhbmNlBQAAAApuZXdCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABmNsaWVudAIAAAAKX3N0YXJ0dGltZQUAAAAMbmV3U3RhcnRUaW1lCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABmNsaWVudAIAAAALX3VwZGF0ZXRpbWUFAAAADWxhc3RCbG9ja1RpbWUFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAADaW52AAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAAlteUFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAAIX2JhbGFuY2UJAABlAAAAAgUAAAAIc3VtVG90YWwFAAAAB2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAApfc3RhcnR0aW1lBQAAAAxuZXdTdGFydFRpbWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAdfc3RhdHVzBwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAAC191cGRhdGV0aW1lBQAAAA1sYXN0QmxvY2tUaW1lBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAA2ludgAAAAZjYWxsZXIFAAAAB2JhbGFuY2UFAAAACW15QXNzZXRJZAUAAAADbmlsAAAAA2ludgEAAAALc2VuZFJld2FyZHMAAAAUAAAAB2NsaWVudDAAAAAHYW1vdW50MAAAAAdjbGllbnQxAAAAB2Ftb3VudDEAAAAHY2xpZW50MgAAAAdhbW91bnQyAAAAB2NsaWVudDMAAAAHYW1vdW50MwAAAAdjbGllbnQ0AAAAB2Ftb3VudDQAAAAHY2xpZW50NQAAAAdhbW91bnQ1AAAAB2NsaWVudDYAAAAHYW1vdW50NgAAAAdjbGllbnQ3AAAAB2Ftb3VudDcAAAAHY2xpZW50OAAAAAdhbW91bnQ4AAAAB2NsaWVudDkAAAAHYW1vdW50OQMDCQEAAAACIT0AAAACCAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQUAAAALb3duZXJQdWJLZXkJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5BQAAAA1tYW5hZ2VyUHViS2V5BwkAAAIAAAABAgAAADVPbmx5IHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBzZW5kIHJld2FyZHMgdG8gY3VzdG9tZXJzIQMJAABmAAAAAgUAAAAOcGF5b3V0T3BlblRpbWUFAAAADWxhc3RCbG9ja1RpbWUJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAOFRoZSB0aW1lIHRvIHNlbmQgcmV3YXJkcyBoYXMgbm90IHlldCBjb21lISBCZWdpbm5pbmcgYXQgCQEAAAAQdG9EYXRlVGltZVN0cmluZwAAAAEFAAAADnBheW91dE9wZW5UaW1lAgAAABAuIFBsZWFzZSB3YWl0Li4uBAAAAARkYXBwCQACWAAAAAEIBQAAAAR0aGlzAAAABWJ5dGVzBAAAAAhzdW1Ub3RhbAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAARkYXBwAgAAAAhfYmFsYW5jZQQAAAAJYXZhaWxhYmxlCQAAZQAAAAIJAAPrAAAAAgUAAAAEdGhpcwUAAAAJbXlBc3NldElkBQAAAAhzdW1Ub3RhbAQAAAAHcmV3YXJkcwkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAAHYW1vdW50MAUAAAAHYW1vdW50MQUAAAAHYW1vdW50MgUAAAAHYW1vdW50MwUAAAAHYW1vdW50NAUAAAAHYW1vdW50NQUAAAAHYW1vdW50NgUAAAAHYW1vdW50NwUAAAAHYW1vdW50OAUAAAAHYW1vdW50OQQAAAAKZWZmQmFsYW5jZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAUAAAAJYXZhaWxhYmxlBAAAAAphdHRQYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAMJAQAAAAIhPQAAAAIIBQAAAAphdHRQYXltZW50AAAAB2Fzc2V0SWQFAAAACW15QXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAFT25seSAFAAAACWFzc2V0TmFtZQIAAAAXIGlzIGFsbG93ZWQgdG8gZGVwb3NpdC4JAABkAAAAAgUAAAAJYXZhaWxhYmxlCAUAAAAKYXR0UGF5bWVudAAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB3Jld2FyZHMJAAACAAAAAQIAAAApWmVybyBvciBuZWdhdGl2ZSByZXdhcmRzIGFyZSBub3QgYWxsb3dlZC4DCQAAZgAAAAIFAAAAB3Jld2FyZHMFAAAACmVmZkJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADdJbnN1ZmZpY2llbnQgZWZmZWN0aXZlIGJhbGFuY2UhIFRoZSByZXF1aXJlZCBhbW91bnQgaXMgCQEAAAANdG9GbG9hdFN0cmluZwAAAAIJAABlAAAAAgUAAAAHcmV3YXJkcwUAAAAKZWZmQmFsYW5jZQUAAAAHZGVjTXVsdAIAAAABIAUAAAAJYXNzZXROYW1lAgAAAAEuBAAAAAVkYXRhOQMDCQAAAAAAAAIFAAAAB2NsaWVudDkCAAAAAS0JAAAAAAAAAgUAAAAHYW1vdW50OQAAAAAAAAAAAAcFAAAAA25pbAMJAQAAAAEhAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQ5AgAAAAdfc3RhdHVzCQAAAgAAAAECAAAAJFRoZSBzdGF0dXMgb2YgY2xpZW50ICM5IGlzIGluYWN0aXZlIQMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYW1vdW50OQkAAAIAAAABAgAAAClaZXJvIG9yIG5lZ2F0aXZlIGFtb3VudHMgYXJlIG5vdCBhbGxvd2VkLgQAAAAIYmFsYW5jZTkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50OQIAAAAIX2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50OQIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAAIYmFsYW5jZTkFAAAAB2Ftb3VudDkJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50OQIAAAAKX3N0YXJ0dGltZQUAAAAOZnJhbWVDbG9zZVRpbWUFAAAAA25pbAQAAAAFZGF0YTgDAwkAAAAAAAACBQAAAAdjbGllbnQ4AgAAAAEtCQAAAAAAAAIFAAAAB2Ftb3VudDgAAAAAAAAAAAAHBQAAAAVkYXRhOQMJAQAAAAEhAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQ4AgAAAAdfc3RhdHVzCQAAAgAAAAECAAAAJFRoZSBzdGF0dXMgb2YgY2xpZW50ICM4IGlzIGluYWN0aXZlIQMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYW1vdW50OAkAAAIAAAABAgAAAClaZXJvIG9yIG5lZ2F0aXZlIGFtb3VudHMgYXJlIG5vdCBhbGxvd2VkLgQAAAAIYmFsYW5jZTgJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50OAIAAAAIX2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50OAIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAAIYmFsYW5jZTgFAAAAB2Ftb3VudDgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50OAIAAAAKX3N0YXJ0dGltZQUAAAAOZnJhbWVDbG9zZVRpbWUFAAAABWRhdGE5BAAAAAVkYXRhNwMDCQAAAAAAAAIFAAAAB2NsaWVudDcCAAAAAS0JAAAAAAAAAgUAAAAHYW1vdW50NwAAAAAAAAAAAAcFAAAABWRhdGE4AwkBAAAAASEAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MSkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDcCAAAAB19zdGF0dXMJAAACAAAAAQIAAAAkVGhlIHN0YXR1cyBvZiBjbGllbnQgIzcgaXMgaW5hY3RpdmUhAwkAAGcAAAACAAAAAAAAAAAABQAAAAdhbW91bnQ3CQAAAgAAAAECAAAAKVplcm8gb3IgbmVnYXRpdmUgYW1vdW50cyBhcmUgbm90IGFsbG93ZWQuBAAAAAhiYWxhbmNlNwkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQ3AgAAAAhfYmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQ3AgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAAhiYWxhbmNlNwUAAAAHYW1vdW50NwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQ3AgAAAApfc3RhcnR0aW1lBQAAAA5mcmFtZUNsb3NlVGltZQUAAAAFZGF0YTgEAAAABWRhdGE2AwMJAAAAAAAAAgUAAAAHY2xpZW50NgIAAAABLQkAAAAAAAACBQAAAAdhbW91bnQ2AAAAAAAAAAAABwUAAAAFZGF0YTcDCQEAAAABIQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50NgIAAAAHX3N0YXR1cwkAAAIAAAABAgAAACRUaGUgc3RhdHVzIG9mIGNsaWVudCAjNiBpcyBpbmFjdGl2ZSEDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2Ftb3VudDYJAAACAAAAAQIAAAApWmVybyBvciBuZWdhdGl2ZSBhbW91bnRzIGFyZSBub3QgYWxsb3dlZC4EAAAACGJhbGFuY2U2CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDYCAAAACF9iYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDYCAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAACGJhbGFuY2U2BQAAAAdhbW91bnQ2CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDYCAAAACl9zdGFydHRpbWUFAAAADmZyYW1lQ2xvc2VUaW1lBQAAAAVkYXRhNwQAAAAFZGF0YTUDAwkAAAAAAAACBQAAAAdjbGllbnQ1AgAAAAEtCQAAAAAAAAIFAAAAB2Ftb3VudDUAAAAAAAAAAAAHBQAAAAVkYXRhNgMJAQAAAAEhAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQ1AgAAAAdfc3RhdHVzCQAAAgAAAAECAAAAJFRoZSBzdGF0dXMgb2YgY2xpZW50ICM1IGlzIGluYWN0aXZlIQMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYW1vdW50NQkAAAIAAAABAgAAAClaZXJvIG9yIG5lZ2F0aXZlIGFtb3VudHMgYXJlIG5vdCBhbGxvd2VkLgQAAAAIYmFsYW5jZTUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50NQIAAAAIX2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50NQIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAAIYmFsYW5jZTUFAAAAB2Ftb3VudDUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50NQIAAAAKX3N0YXJ0dGltZQUAAAAOZnJhbWVDbG9zZVRpbWUFAAAABWRhdGE2BAAAAAVkYXRhNAMDCQAAAAAAAAIFAAAAB2NsaWVudDQCAAAAAS0JAAAAAAAAAgUAAAAHYW1vdW50NAAAAAAAAAAAAAcFAAAABWRhdGE1AwkBAAAAASEAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MSkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDQCAAAAB19zdGF0dXMJAAACAAAAAQIAAAAkVGhlIHN0YXR1cyBvZiBjbGllbnQgIzQgaXMgaW5hY3RpdmUhAwkAAGcAAAACAAAAAAAAAAAABQAAAAdhbW91bnQ0CQAAAgAAAAECAAAAKVplcm8gb3IgbmVnYXRpdmUgYW1vdW50cyBhcmUgbm90IGFsbG93ZWQuBAAAAAhiYWxhbmNlNAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQ0AgAAAAhfYmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQ0AgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAAhiYWxhbmNlNAUAAAAHYW1vdW50NAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQ0AgAAAApfc3RhcnR0aW1lBQAAAA5mcmFtZUNsb3NlVGltZQUAAAAFZGF0YTUEAAAABWRhdGEzAwMJAAAAAAAAAgUAAAAHY2xpZW50MwIAAAABLQkAAAAAAAACBQAAAAdhbW91bnQzAAAAAAAAAAAABwUAAAAFZGF0YTQDCQEAAAABIQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50MwIAAAAHX3N0YXR1cwkAAAIAAAABAgAAACRUaGUgc3RhdHVzIG9mIGNsaWVudCAjMyBpcyBpbmFjdGl2ZSEDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2Ftb3VudDMJAAACAAAAAQIAAAApWmVybyBvciBuZWdhdGl2ZSBhbW91bnRzIGFyZSBub3QgYWxsb3dlZC4EAAAACGJhbGFuY2UzCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDMCAAAACF9iYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDMCAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAACGJhbGFuY2UzBQAAAAdhbW91bnQzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDMCAAAACl9zdGFydHRpbWUFAAAADmZyYW1lQ2xvc2VUaW1lBQAAAAVkYXRhNAQAAAAFZGF0YTIDAwkAAAAAAAACBQAAAAdjbGllbnQyAgAAAAEtCQAAAAAAAAIFAAAAB2Ftb3VudDIAAAAAAAAAAAAHBQAAAAVkYXRhMwMJAQAAAAEhAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQyAgAAAAdfc3RhdHVzCQAAAgAAAAECAAAAJFRoZSBzdGF0dXMgb2YgY2xpZW50ICMyIGlzIGluYWN0aXZlIQMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYW1vdW50MgkAAAIAAAABAgAAAClaZXJvIG9yIG5lZ2F0aXZlIGFtb3VudHMgYXJlIG5vdCBhbGxvd2VkLgQAAAAIYmFsYW5jZTIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50MgIAAAAIX2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50MgIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAAIYmFsYW5jZTIFAAAAB2Ftb3VudDIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAHY2xpZW50MgIAAAAKX3N0YXJ0dGltZQUAAAAOZnJhbWVDbG9zZVRpbWUFAAAABWRhdGEzBAAAAAVkYXRhMQMDCQAAAAAAAAIFAAAAB2NsaWVudDECAAAAAS0JAAAAAAAAAgUAAAAHYW1vdW50MQAAAAAAAAAAAAcFAAAABWRhdGEyAwkBAAAAASEAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MSkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDECAAAAB19zdGF0dXMJAAACAAAAAQIAAAAkVGhlIHN0YXR1cyBvZiBjbGllbnQgIzEgaXMgaW5hY3RpdmUhAwkAAGcAAAACAAAAAAAAAAAABQAAAAdhbW91bnQxCQAAAgAAAAECAAAAKVplcm8gb3IgbmVnYXRpdmUgYW1vdW50cyBhcmUgbm90IGFsbG93ZWQuBAAAAAhiYWxhbmNlMQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAdjbGllbnQxAgAAAAhfYmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQxAgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAAhiYWxhbmNlMQUAAAAHYW1vdW50MQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAdjbGllbnQxAgAAAApfc3RhcnR0aW1lBQAAAA5mcmFtZUNsb3NlVGltZQUAAAAFZGF0YTIEAAAABWRhdGEwAwMJAAAAAAAAAgUAAAAHY2xpZW50MAIAAAABLQkAAAAAAAACBQAAAAdhbW91bnQwAAAAAAAAAAAABwUAAAAFZGF0YTEDCQEAAAABIQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHY2xpZW50MAIAAAAHX3N0YXR1cwkAAAIAAAABAgAAACRUaGUgc3RhdHVzIG9mIGNsaWVudCAjMCBpcyBpbmFjdGl2ZSEDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2Ftb3VudDAJAAACAAAAAQIAAAApWmVybyBvciBuZWdhdGl2ZSBhbW91bnRzIGFyZSBub3QgYWxsb3dlZC4EAAAACGJhbGFuY2UwCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAB2NsaWVudDACAAAACF9iYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDACAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAACGJhbGFuY2UwBQAAAAdhbW91bnQwCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAB2NsaWVudDACAAAACl9zdGFydHRpbWUFAAAADmZyYW1lQ2xvc2VUaW1lBQAAAAVkYXRhMQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARkYXBwAgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAAhzdW1Ub3RhbAUAAAAHcmV3YXJkcwUAAAAFZGF0YTAAAAADaW52AQAAAAtzZXRNaW5TdGFrZQAAAAEAAAAGYW1vdW50AwMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5BQAAAAtvd25lclB1YktleQkBAAAAAiE9AAAAAggFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADW1hbmFnZXJQdWJLZXkHCQAAAgAAAAECAAAAM09ubHkgdGhlIGFkbWluaXN0cmF0b3IgY2FuIHNldCBhbmQgbW9kaWZ5IG1pblN0YWtlIQMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA2UGxlYXNlIGRvIG5vdCBhdHRhY2ggcGF5bWVudCB3aGVuIHNldHRpbmcgdXAgbWluU3Rha2UuBAAAAARkYXBwCQACWAAAAAEIBQAAAAR0aGlzAAAABWJ5dGVzAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAARkYXBwAgAAAAhfYWRkcmVzcwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARkYXBwAgAAAApfc3RhcnR0aW1lBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAALX3VwZGF0ZXRpbWUFAAAADWxhc3RCbG9ja1RpbWUFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARkYXBwAgAAAAhfYWRkcmVzcwUAAAAEZGFwcAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARkYXBwAgAAAAhfYmFsYW5jZQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARkYXBwAgAAAApfc3RhcnR0aW1lBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAAHX3N0YXR1cwcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAEZGFwcAIAAAALX3VwZGF0ZXRpbWUFAAAADWxhc3RCbG9ja1RpbWUFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwAwMDCQEAAAACIT0AAAACCAUAAAABdAAAAAdhc3NldElkBQAAAAlteUFzc2V0SWQJAQAAAAIhPQAAAAIIBQAAAAF0AAAACmZlZUFzc2V0SWQFAAAACW15QXNzZXRJZAcJAAH0AAAAAwgFAAAAAXQAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAF0AAAABnByb29mcwAAAAAAAAAAAgUAAAALb3duZXJQdWJLZXkHCQAB9AAAAAMIBQAAAAF0AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAABdAAAAAZwcm9vZnMAAAAAAAAAAAEFAAAADW1hbmFnZXJQdWJLZXkHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAMJAAH0AAAAAwgFAAAAAXMAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAFzAAAABnByb29mcwAAAAAAAAAAAgUAAAALb3duZXJQdWJLZXkJAAH0AAAAAwgFAAAAAXMAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAFzAAAABnByb29mcwAAAAAAAAAAAQUAAAANbWFuYWdlclB1YktleQcHnCZ3HQ==", "chainId": 87, "height": 1907761, "spentComplexity": 0 } View: original | compacted Prev: Ar1MZfocGruKVy2Yz7kMawjSFXRGK5E74qsPyKTvnmTu Next: CcXRbcLQXjKzZViGJQ7CfPvJiqnfTGtMWcoY7fY5KSCY Diff:
OldNewDifferences
55
66 let decMult = 100000
77
8-let lockPeriod = (2629800 * 1000)
8+let lockPeriod = (2629746 * 1000)
99
10-let minBalance = (1 * decMult)
10+let minBalance = (decMult / 100)
1111
12-let maxBalance = (1000000 * decMult)
12+let maxBalance = (10000 * decMult)
1313
1414 let myAssetId = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4'
1515
1717
1818 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
1919
20-let lastBlockTime = extract(lastBlock.timestamp)
20+let lastBlockTime = lastBlock.timestamp
2121
2222 let frameOpenTime = ((lastBlockTime / lockPeriod) * lockPeriod)
2323
2424 let frameCloseTime = (frameOpenTime + lockPeriod)
2525
26-func toFloatString (number,mult) = {
27- func separate (acc,val) = if (if ((acc == ""))
26+let payoutOpenTime = (frameCloseTime - (((24 * 60) * 60) * 1000))
27+
28+func toFloatString (num,mult) = {
29+ let th = ","
30+ let dp = "."
31+ func joinThousands (acc,val) = if (if ((acc == ""))
2832 then (val == 0)
2933 else false)
3034 then ""
3135 else if ((acc == ""))
3236 then toString(val)
33- else ((acc + ",") + takeRight(toString((val + 1000)), 3))
37+ else ((acc + th) + drop(toString((val + 1000)), 1))
3438
35- let ip = (number / mult)
36- let fp = (number % mult)
39+ func dropRightZero (str) = if ((drop(str, (size(str) - 1)) != "0"))
40+ then str
41+ else take(str, (size(str) - 1))
42+
43+ let ip = (num / mult)
44+ let fp = (num % mult)
3745 let q6 = (ip / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
3846 let r6 = (ip % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
3947 let q5 = (r6 / ((((1000 * 1000) * 1000) * 1000) * 1000))
4755 let q1 = (r2 / 1000)
4856 let r1 = (r2 % 1000)
4957 let is = {
50- let $list30633114 = [q6, q5, q4, q3, q2, q1, r1]
51- let $size30633114 = size($list30633114)
52- let $acc030633114 = ""
53- if (($size30633114 == 0))
54- then $acc030633114
58+ let $list32783334 = [q6, q5, q4, q3, q2, q1, r1]
59+ let $size32783334 = size($list32783334)
60+ let $acc032783334 = ""
61+ if (($size32783334 == 0))
62+ then $acc032783334
5563 else {
56- let $acc130633114 = separate($acc030633114, $list30633114[0])
57- if (($size30633114 == 1))
58- then $acc130633114
64+ let $acc132783334 = joinThousands($acc032783334, $list32783334[0])
65+ if (($size32783334 == 1))
66+ then $acc132783334
5967 else {
60- let $acc230633114 = separate($acc130633114, $list30633114[1])
61- if (($size30633114 == 2))
62- then $acc230633114
68+ let $acc232783334 = joinThousands($acc132783334, $list32783334[1])
69+ if (($size32783334 == 2))
70+ then $acc232783334
6371 else {
64- let $acc330633114 = separate($acc230633114, $list30633114[2])
65- if (($size30633114 == 3))
66- then $acc330633114
72+ let $acc332783334 = joinThousands($acc232783334, $list32783334[2])
73+ if (($size32783334 == 3))
74+ then $acc332783334
6775 else {
68- let $acc430633114 = separate($acc330633114, $list30633114[3])
69- if (($size30633114 == 4))
70- then $acc430633114
76+ let $acc432783334 = joinThousands($acc332783334, $list32783334[3])
77+ if (($size32783334 == 4))
78+ then $acc432783334
7179 else {
72- let $acc530633114 = separate($acc430633114, $list30633114[4])
73- if (($size30633114 == 5))
74- then $acc530633114
80+ let $acc532783334 = joinThousands($acc432783334, $list32783334[4])
81+ if (($size32783334 == 5))
82+ then $acc532783334
7583 else {
76- let $acc630633114 = separate($acc530633114, $list30633114[5])
77- if (($size30633114 == 6))
78- then $acc630633114
84+ let $acc632783334 = joinThousands($acc532783334, $list32783334[5])
85+ if (($size32783334 == 6))
86+ then $acc632783334
7987 else {
80- let $acc730633114 = separate($acc630633114, $list30633114[6])
81- if (($size30633114 == 7))
82- then $acc730633114
88+ let $acc732783334 = joinThousands($acc632783334, $list32783334[6])
89+ if (($size32783334 == 7))
90+ then $acc732783334
8391 else {
84- let $acc830633114 = separate($acc730633114, $list30633114[7])
92+ let $acc832783334 = joinThousands($acc732783334, $list32783334[7])
8593 throw("List size exceed 7")
8694 }
8795 }
92100 }
93101 }
94102 }
95- let f7 = take(drop((toString((fp + mult)) + "00000000"), 1), 8)
96- let f6 = if ((takeRight(f7, 1) == "0"))
97- then dropRight(f7, 1)
98- else f7
99- let f5 = if ((takeRight(f6, 1) == "0"))
100- then dropRight(f6, 1)
101- else f6
102- let f4 = if ((takeRight(f5, 1) == "0"))
103- then dropRight(f5, 1)
104- else f5
105- let f3 = if ((takeRight(f4, 1) == "0"))
106- then dropRight(f4, 1)
107- else f4
108- let f2 = if ((takeRight(f3, 1) == "0"))
109- then dropRight(f3, 1)
110- else f3
111- let f1 = if ((takeRight(f2, 1) == "0"))
112- then dropRight(f2, 1)
113- else f2
114- let f0 = if ((takeRight(f1, 1) == "0"))
115- then dropRight(f1, 1)
116- else f1
117- let fs = if ((takeRight(f0, 1) == "0"))
118- then dropRight(f0, 1)
119- else f0
103+ let fs = dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(take(drop(toString((fp + mult)), 1), 8)))))))))
120104 ((if ((is != ""))
121105 then is
122106 else "0") + (if ((fs != ""))
123- then ("." + fs)
107+ then (dp + fs)
124108 else ""))
109+ }
110+
111+
112+func toDateTimeString (timestamp) = {
113+ let sp = " "
114+ let zz = " UTC"
115+ let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
116+ let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
117+ if (if ((-12212553600000 > timestamp))
118+ then true
119+ else (timestamp > 253402300799999))
120+ then throw("ISO 8601: Only years from 1583 to 9999 are permitted.")
121+ else {
122+ let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
123+ let ce = (timestamp + ((epoch * 86400) * 1000))
124+ let date = {
125+ let yy = ((ce / (31556952 * 1000)) - 1)
126+ let dty = (((((yy * 365) + (yy / 4)) - (yy / 100)) + (yy / 400)) + 366)
127+ let ytd = ((ce / (86400 * 1000)) - dty)
128+ let months = if (if (if ((((yy + 1) % 4) == 0))
129+ then (((yy + 1) % 100) != 0)
130+ else false)
131+ then true
132+ else (((yy + 1) % 400) == 0))
133+ then leap
134+ else norm
135+ let mm = if ((ytd >= months[12]))
136+ then throw()
137+ else if ((ytd >= months[11]))
138+ then 11
139+ else if ((ytd >= months[10]))
140+ then 10
141+ else if ((ytd >= months[9]))
142+ then 9
143+ else if ((ytd >= months[8]))
144+ then 8
145+ else if ((ytd >= months[7]))
146+ then 7
147+ else if ((ytd >= months[6]))
148+ then 6
149+ else if ((ytd >= months[5]))
150+ then 5
151+ else if ((ytd >= months[4]))
152+ then 4
153+ else if ((ytd >= months[3]))
154+ then 3
155+ else if ((ytd >= months[2]))
156+ then 2
157+ else if ((ytd >= months[1]))
158+ then 1
159+ else if ((ytd >= months[0]))
160+ then 0
161+ else throw()
162+ let dd = (ytd - months[mm])
163+ ((((toString((yy + 1)) + "-") + drop(toString((mm + 101)), 1)) + "-") + drop(toString((dd + 101)), 1))
164+ }
165+ let time = {
166+ let rd = (ce % (86400 * 1000))
167+ let hh = (rd / (3600 * 1000))
168+ let rh = (rd % (3600 * 1000))
169+ let mm = (rh / (60 * 1000))
170+ let rm = (rh % (60 * 1000))
171+ let ss = (rm / 1000)
172+ let ms = (rm % 1000)
173+ ((((drop(toString((hh + 100)), 1) + ":") + drop(toString((mm + 100)), 1)) + ":") + drop(toString((ss + 100)), 1))
174+ }
175+ (((date + sp) + time) + zz)
176+ }
125177 }
126178
127179
159211 case _ =>
160212 0
161213 }
162- let amount = extract(attPayment.amount)
214+ let amount = attPayment.amount
163215 let newBalance = if (isActive)
164216 then (balance + amount)
165217 else amount
204256
205257 @Callable(inv)
206258 func withdraw (RSCx100000) = if (isDefined(inv.payment))
207- then throw("Please don't attach payment when withdrawing funds.")
259+ then throw("Please do not attach payment when withdrawing funds.")
208260 else {
209261 let dapp = toBase58String(this.bytes)
210262 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
239291 if (if (if ((minStake >= 0))
240292 then (balance >= minStake)
241293 else false)
242- then (expiration >= lastBlockTime)
294+ then (expiration > lastBlockTime)
243295 else false)
244- then throw((("Unable to withdraw coins! The account is locked for up to " + toString((expiration / 1000))) + " Unix timestamp..."))
296+ then throw((("Unable to withdraw coins! The account is locked for up to " + toDateTimeString(expiration)) + ". Please wait..."))
245297 else if ((0 >= amount))
246298 then throw("It's impossible to withdraw a negative amount or no balance.")
247299 else if ((amount > balance))
275327
276328
277329 @Callable(inv)
278-func setMinStake (RSCx100000) = if (if ((inv.callerPublicKey != ownerPubKey))
330+func sendRewards (client0,amount0,client1,amount1,client2,amount2,client3,amount3,client4,amount4,client5,amount5,client6,amount6,client7,amount7,client8,amount8,client9,amount9) = if (if ((inv.callerPublicKey != ownerPubKey))
279331 then (inv.callerPublicKey != managerPubKey)
280332 else false)
281- then throw("Only an administrator can set or modify minStake!")
333+ then throw("Only the administrator can send rewards to customers!")
334+ else if ((payoutOpenTime > lastBlockTime))
335+ then throw((("The time to send rewards has not yet come! Beginning at " + toDateTimeString(payoutOpenTime)) + ". Please wait..."))
336+ else {
337+ let dapp = toBase58String(this.bytes)
338+ let sumTotal = getIntegerValue(this, (dapp + "_balance"))
339+ let available = (assetBalance(this, myAssetId) - sumTotal)
340+ let rewards = (((((((((amount0 + amount1) + amount2) + amount3) + amount4) + amount5) + amount6) + amount7) + amount8) + amount9)
341+ let effBalance = if (!(isDefined(inv.payment)))
342+ then available
343+ else {
344+ let attPayment = extract(inv.payment)
345+ if ((attPayment.assetId != myAssetId))
346+ then throw((("Only " + assetName) + " is allowed to deposit."))
347+ else (available + attPayment.amount)
348+ }
349+ if ((0 >= rewards))
350+ then throw("Zero or negative rewards are not allowed.")
351+ else if ((rewards > effBalance))
352+ then throw((((("Insufficient effective balance! The required amount is " + toFloatString((rewards - effBalance), decMult)) + " ") + assetName) + "."))
353+ else {
354+ let data9 = if (if ((client9 == "-"))
355+ then (amount9 == 0)
356+ else false)
357+ then nil
358+ else if (!(getBooleanValue(this, (client9 + "_status"))))
359+ then throw("The status of client #9 is inactive!")
360+ else if ((0 >= amount9))
361+ then throw("Zero or negative amounts are not allowed.")
362+ else {
363+ let balance9 = getIntegerValue(this, (client9 + "_balance"))
364+[DataEntry((client9 + "_balance"), (balance9 + amount9)), DataEntry((client9 + "_starttime"), frameCloseTime)]
365+ }
366+ let data8 = if (if ((client8 == "-"))
367+ then (amount8 == 0)
368+ else false)
369+ then data9
370+ else if (!(getBooleanValue(this, (client8 + "_status"))))
371+ then throw("The status of client #8 is inactive!")
372+ else if ((0 >= amount8))
373+ then throw("Zero or negative amounts are not allowed.")
374+ else {
375+ let balance8 = getIntegerValue(this, (client8 + "_balance"))
376+[DataEntry((client8 + "_balance"), (balance8 + amount8)), DataEntry((client8 + "_starttime"), frameCloseTime)] :: data9
377+ }
378+ let data7 = if (if ((client7 == "-"))
379+ then (amount7 == 0)
380+ else false)
381+ then data8
382+ else if (!(getBooleanValue(this, (client7 + "_status"))))
383+ then throw("The status of client #7 is inactive!")
384+ else if ((0 >= amount7))
385+ then throw("Zero or negative amounts are not allowed.")
386+ else {
387+ let balance7 = getIntegerValue(this, (client7 + "_balance"))
388+[DataEntry((client7 + "_balance"), (balance7 + amount7)), DataEntry((client7 + "_starttime"), frameCloseTime)] :: data8
389+ }
390+ let data6 = if (if ((client6 == "-"))
391+ then (amount6 == 0)
392+ else false)
393+ then data7
394+ else if (!(getBooleanValue(this, (client6 + "_status"))))
395+ then throw("The status of client #6 is inactive!")
396+ else if ((0 >= amount6))
397+ then throw("Zero or negative amounts are not allowed.")
398+ else {
399+ let balance6 = getIntegerValue(this, (client6 + "_balance"))
400+[DataEntry((client6 + "_balance"), (balance6 + amount6)), DataEntry((client6 + "_starttime"), frameCloseTime)] :: data7
401+ }
402+ let data5 = if (if ((client5 == "-"))
403+ then (amount5 == 0)
404+ else false)
405+ then data6
406+ else if (!(getBooleanValue(this, (client5 + "_status"))))
407+ then throw("The status of client #5 is inactive!")
408+ else if ((0 >= amount5))
409+ then throw("Zero or negative amounts are not allowed.")
410+ else {
411+ let balance5 = getIntegerValue(this, (client5 + "_balance"))
412+[DataEntry((client5 + "_balance"), (balance5 + amount5)), DataEntry((client5 + "_starttime"), frameCloseTime)] :: data6
413+ }
414+ let data4 = if (if ((client4 == "-"))
415+ then (amount4 == 0)
416+ else false)
417+ then data5
418+ else if (!(getBooleanValue(this, (client4 + "_status"))))
419+ then throw("The status of client #4 is inactive!")
420+ else if ((0 >= amount4))
421+ then throw("Zero or negative amounts are not allowed.")
422+ else {
423+ let balance4 = getIntegerValue(this, (client4 + "_balance"))
424+[DataEntry((client4 + "_balance"), (balance4 + amount4)), DataEntry((client4 + "_starttime"), frameCloseTime)] :: data5
425+ }
426+ let data3 = if (if ((client3 == "-"))
427+ then (amount3 == 0)
428+ else false)
429+ then data4
430+ else if (!(getBooleanValue(this, (client3 + "_status"))))
431+ then throw("The status of client #3 is inactive!")
432+ else if ((0 >= amount3))
433+ then throw("Zero or negative amounts are not allowed.")
434+ else {
435+ let balance3 = getIntegerValue(this, (client3 + "_balance"))
436+[DataEntry((client3 + "_balance"), (balance3 + amount3)), DataEntry((client3 + "_starttime"), frameCloseTime)] :: data4
437+ }
438+ let data2 = if (if ((client2 == "-"))
439+ then (amount2 == 0)
440+ else false)
441+ then data3
442+ else if (!(getBooleanValue(this, (client2 + "_status"))))
443+ then throw("The status of client #2 is inactive!")
444+ else if ((0 >= amount2))
445+ then throw("Zero or negative amounts are not allowed.")
446+ else {
447+ let balance2 = getIntegerValue(this, (client2 + "_balance"))
448+[DataEntry((client2 + "_balance"), (balance2 + amount2)), DataEntry((client2 + "_starttime"), frameCloseTime)] :: data3
449+ }
450+ let data1 = if (if ((client1 == "-"))
451+ then (amount1 == 0)
452+ else false)
453+ then data2
454+ else if (!(getBooleanValue(this, (client1 + "_status"))))
455+ then throw("The status of client #1 is inactive!")
456+ else if ((0 >= amount1))
457+ then throw("Zero or negative amounts are not allowed.")
458+ else {
459+ let balance1 = getIntegerValue(this, (client1 + "_balance"))
460+[DataEntry((client1 + "_balance"), (balance1 + amount1)), DataEntry((client1 + "_starttime"), frameCloseTime)] :: data2
461+ }
462+ let data0 = if (if ((client0 == "-"))
463+ then (amount0 == 0)
464+ else false)
465+ then data1
466+ else if (!(getBooleanValue(this, (client0 + "_status"))))
467+ then throw("The status of client #0 is inactive!")
468+ else if ((0 >= amount0))
469+ then throw("Zero or negative amounts are not allowed.")
470+ else {
471+ let balance0 = getIntegerValue(this, (client0 + "_balance"))
472+[DataEntry((client0 + "_balance"), (balance0 + amount0)), DataEntry((client0 + "_starttime"), frameCloseTime)] :: data1
473+ }
474+ WriteSet(DataEntry((dapp + "_balance"), (sumTotal + rewards)) :: data0)
475+ }
476+ }
477+
478+
479+
480+@Callable(inv)
481+func setMinStake (amount) = if (if ((inv.callerPublicKey != ownerPubKey))
482+ then (inv.callerPublicKey != managerPubKey)
483+ else false)
484+ then throw("Only the administrator can set and modify minStake!")
282485 else if (isDefined(inv.payment))
283- then throw("Please don't attach payment when setting up minStake.")
486+ then throw("Please do not attach payment when setting up minStake.")
284487 else {
285488 let dapp = toBase58String(this.bytes)
286489 if (isDefined(getString(this, (dapp + "_address"))))
287- then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
288- else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
490+ then WriteSet([DataEntry((dapp + "_starttime"), amount), DataEntry((dapp + "_updatetime"), lastBlockTime)])
491+ else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), amount), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
289492 }
290493
291494
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let assetName = "RusCoin"
55
66 let decMult = 100000
77
8-let lockPeriod = (2629800 * 1000)
8+let lockPeriod = (2629746 * 1000)
99
10-let minBalance = (1 * decMult)
10+let minBalance = (decMult / 100)
1111
12-let maxBalance = (1000000 * decMult)
12+let maxBalance = (10000 * decMult)
1313
1414 let myAssetId = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4'
1515
1616 let ownerPubKey = base58'2in4yGNBKfitQbXbsHmL2unWrUnRo7GWyqcZXsmAzhQi'
1717
1818 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
1919
20-let lastBlockTime = extract(lastBlock.timestamp)
20+let lastBlockTime = lastBlock.timestamp
2121
2222 let frameOpenTime = ((lastBlockTime / lockPeriod) * lockPeriod)
2323
2424 let frameCloseTime = (frameOpenTime + lockPeriod)
2525
26-func toFloatString (number,mult) = {
27- func separate (acc,val) = if (if ((acc == ""))
26+let payoutOpenTime = (frameCloseTime - (((24 * 60) * 60) * 1000))
27+
28+func toFloatString (num,mult) = {
29+ let th = ","
30+ let dp = "."
31+ func joinThousands (acc,val) = if (if ((acc == ""))
2832 then (val == 0)
2933 else false)
3034 then ""
3135 else if ((acc == ""))
3236 then toString(val)
33- else ((acc + ",") + takeRight(toString((val + 1000)), 3))
37+ else ((acc + th) + drop(toString((val + 1000)), 1))
3438
35- let ip = (number / mult)
36- let fp = (number % mult)
39+ func dropRightZero (str) = if ((drop(str, (size(str) - 1)) != "0"))
40+ then str
41+ else take(str, (size(str) - 1))
42+
43+ let ip = (num / mult)
44+ let fp = (num % mult)
3745 let q6 = (ip / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
3846 let r6 = (ip % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
3947 let q5 = (r6 / ((((1000 * 1000) * 1000) * 1000) * 1000))
4048 let r5 = (r6 % ((((1000 * 1000) * 1000) * 1000) * 1000))
4149 let q4 = (r5 / (((1000 * 1000) * 1000) * 1000))
4250 let r4 = (r5 % (((1000 * 1000) * 1000) * 1000))
4351 let q3 = (r4 / ((1000 * 1000) * 1000))
4452 let r3 = (r4 % ((1000 * 1000) * 1000))
4553 let q2 = (r3 / (1000 * 1000))
4654 let r2 = (r3 % (1000 * 1000))
4755 let q1 = (r2 / 1000)
4856 let r1 = (r2 % 1000)
4957 let is = {
50- let $list30633114 = [q6, q5, q4, q3, q2, q1, r1]
51- let $size30633114 = size($list30633114)
52- let $acc030633114 = ""
53- if (($size30633114 == 0))
54- then $acc030633114
58+ let $list32783334 = [q6, q5, q4, q3, q2, q1, r1]
59+ let $size32783334 = size($list32783334)
60+ let $acc032783334 = ""
61+ if (($size32783334 == 0))
62+ then $acc032783334
5563 else {
56- let $acc130633114 = separate($acc030633114, $list30633114[0])
57- if (($size30633114 == 1))
58- then $acc130633114
64+ let $acc132783334 = joinThousands($acc032783334, $list32783334[0])
65+ if (($size32783334 == 1))
66+ then $acc132783334
5967 else {
60- let $acc230633114 = separate($acc130633114, $list30633114[1])
61- if (($size30633114 == 2))
62- then $acc230633114
68+ let $acc232783334 = joinThousands($acc132783334, $list32783334[1])
69+ if (($size32783334 == 2))
70+ then $acc232783334
6371 else {
64- let $acc330633114 = separate($acc230633114, $list30633114[2])
65- if (($size30633114 == 3))
66- then $acc330633114
72+ let $acc332783334 = joinThousands($acc232783334, $list32783334[2])
73+ if (($size32783334 == 3))
74+ then $acc332783334
6775 else {
68- let $acc430633114 = separate($acc330633114, $list30633114[3])
69- if (($size30633114 == 4))
70- then $acc430633114
76+ let $acc432783334 = joinThousands($acc332783334, $list32783334[3])
77+ if (($size32783334 == 4))
78+ then $acc432783334
7179 else {
72- let $acc530633114 = separate($acc430633114, $list30633114[4])
73- if (($size30633114 == 5))
74- then $acc530633114
80+ let $acc532783334 = joinThousands($acc432783334, $list32783334[4])
81+ if (($size32783334 == 5))
82+ then $acc532783334
7583 else {
76- let $acc630633114 = separate($acc530633114, $list30633114[5])
77- if (($size30633114 == 6))
78- then $acc630633114
84+ let $acc632783334 = joinThousands($acc532783334, $list32783334[5])
85+ if (($size32783334 == 6))
86+ then $acc632783334
7987 else {
80- let $acc730633114 = separate($acc630633114, $list30633114[6])
81- if (($size30633114 == 7))
82- then $acc730633114
88+ let $acc732783334 = joinThousands($acc632783334, $list32783334[6])
89+ if (($size32783334 == 7))
90+ then $acc732783334
8391 else {
84- let $acc830633114 = separate($acc730633114, $list30633114[7])
92+ let $acc832783334 = joinThousands($acc732783334, $list32783334[7])
8593 throw("List size exceed 7")
8694 }
8795 }
8896 }
8997 }
9098 }
9199 }
92100 }
93101 }
94102 }
95- let f7 = take(drop((toString((fp + mult)) + "00000000"), 1), 8)
96- let f6 = if ((takeRight(f7, 1) == "0"))
97- then dropRight(f7, 1)
98- else f7
99- let f5 = if ((takeRight(f6, 1) == "0"))
100- then dropRight(f6, 1)
101- else f6
102- let f4 = if ((takeRight(f5, 1) == "0"))
103- then dropRight(f5, 1)
104- else f5
105- let f3 = if ((takeRight(f4, 1) == "0"))
106- then dropRight(f4, 1)
107- else f4
108- let f2 = if ((takeRight(f3, 1) == "0"))
109- then dropRight(f3, 1)
110- else f3
111- let f1 = if ((takeRight(f2, 1) == "0"))
112- then dropRight(f2, 1)
113- else f2
114- let f0 = if ((takeRight(f1, 1) == "0"))
115- then dropRight(f1, 1)
116- else f1
117- let fs = if ((takeRight(f0, 1) == "0"))
118- then dropRight(f0, 1)
119- else f0
103+ let fs = dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(take(drop(toString((fp + mult)), 1), 8)))))))))
120104 ((if ((is != ""))
121105 then is
122106 else "0") + (if ((fs != ""))
123- then ("." + fs)
107+ then (dp + fs)
124108 else ""))
109+ }
110+
111+
112+func toDateTimeString (timestamp) = {
113+ let sp = " "
114+ let zz = " UTC"
115+ let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
116+ let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
117+ if (if ((-12212553600000 > timestamp))
118+ then true
119+ else (timestamp > 253402300799999))
120+ then throw("ISO 8601: Only years from 1583 to 9999 are permitted.")
121+ else {
122+ let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
123+ let ce = (timestamp + ((epoch * 86400) * 1000))
124+ let date = {
125+ let yy = ((ce / (31556952 * 1000)) - 1)
126+ let dty = (((((yy * 365) + (yy / 4)) - (yy / 100)) + (yy / 400)) + 366)
127+ let ytd = ((ce / (86400 * 1000)) - dty)
128+ let months = if (if (if ((((yy + 1) % 4) == 0))
129+ then (((yy + 1) % 100) != 0)
130+ else false)
131+ then true
132+ else (((yy + 1) % 400) == 0))
133+ then leap
134+ else norm
135+ let mm = if ((ytd >= months[12]))
136+ then throw()
137+ else if ((ytd >= months[11]))
138+ then 11
139+ else if ((ytd >= months[10]))
140+ then 10
141+ else if ((ytd >= months[9]))
142+ then 9
143+ else if ((ytd >= months[8]))
144+ then 8
145+ else if ((ytd >= months[7]))
146+ then 7
147+ else if ((ytd >= months[6]))
148+ then 6
149+ else if ((ytd >= months[5]))
150+ then 5
151+ else if ((ytd >= months[4]))
152+ then 4
153+ else if ((ytd >= months[3]))
154+ then 3
155+ else if ((ytd >= months[2]))
156+ then 2
157+ else if ((ytd >= months[1]))
158+ then 1
159+ else if ((ytd >= months[0]))
160+ then 0
161+ else throw()
162+ let dd = (ytd - months[mm])
163+ ((((toString((yy + 1)) + "-") + drop(toString((mm + 101)), 1)) + "-") + drop(toString((dd + 101)), 1))
164+ }
165+ let time = {
166+ let rd = (ce % (86400 * 1000))
167+ let hh = (rd / (3600 * 1000))
168+ let rh = (rd % (3600 * 1000))
169+ let mm = (rh / (60 * 1000))
170+ let rm = (rh % (60 * 1000))
171+ let ss = (rm / 1000)
172+ let ms = (rm % 1000)
173+ ((((drop(toString((hh + 100)), 1) + ":") + drop(toString((mm + 100)), 1)) + ":") + drop(toString((ss + 100)), 1))
174+ }
175+ (((date + sp) + time) + zz)
176+ }
125177 }
126178
127179
128180 @Callable(inv)
129181 func deposit () = {
130182 let attPayment = if (isDefined(inv.payment))
131183 then extract(inv.payment)
132184 else throw((("There is no attached payment " + assetName) + "."))
133185 if ((attPayment.assetId != myAssetId))
134186 then throw((("Only " + assetName) + " is allowed to deposit."))
135187 else {
136188 let dapp = toBase58String(this.bytes)
137189 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
138190 let client = toBase58String(inv.caller.bytes)
139191 let updateTime = match getInteger(this, (client + "_updatetime")) {
140192 case x: Int =>
141193 x
142194 case _ =>
143195 0
144196 }
145197 let isOlder = (frameOpenTime >= updateTime)
146198 let isActive = match getBoolean(this, (client + "_status")) {
147199 case x: Boolean =>
148200 x
149201 case _ =>
150202 false
151203 }
152204 let balance = if (if (isOlder)
153205 then !(isActive)
154206 else false)
155207 then 0
156208 else match getInteger(this, (client + "_balance")) {
157209 case x: Int =>
158210 x
159211 case _ =>
160212 0
161213 }
162- let amount = extract(attPayment.amount)
214+ let amount = attPayment.amount
163215 let newBalance = if (isActive)
164216 then (balance + amount)
165217 else amount
166218 if (if ((minBalance > newBalance))
167219 then true
168220 else (newBalance > maxBalance))
169221 then throw((((((((("The minimum allowable balance is " + toFloatString(minBalance, decMult)) + " ") + assetName) + ", and the maximum is ") + toFloatString(maxBalance, decMult)) + " ") + assetName) + "."))
170222 else {
171223 let startTime = if (if (isOlder)
172224 then isActive
173225 else false)
174226 then frameOpenTime
175227 else if (if (isOlder)
176228 then !(isActive)
177229 else false)
178230 then lastBlockTime
179231 else match getInteger(this, (client + "_starttime")) {
180232 case x: Int =>
181233 if (isActive)
182234 then x
183235 else ((x + lastBlockTime) - updateTime)
184236 case _ =>
185237 0
186238 }
187239 let newStartTime = if ((startTime > lastBlockTime))
188240 then frameCloseTime
189241 else {
190242 let balWeight = (balance / minBalance)
191243 let sumWeight = (newBalance / minBalance)
192244 (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
193245 }
194246 if (isActive)
195247 then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
196248 else if (isDefined(getString(this, (client + "_address"))))
197249 then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
198250 else WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
199251 }
200252 }
201253 }
202254
203255
204256
205257 @Callable(inv)
206258 func withdraw (RSCx100000) = if (isDefined(inv.payment))
207- then throw("Please don't attach payment when withdrawing funds.")
259+ then throw("Please do not attach payment when withdrawing funds.")
208260 else {
209261 let dapp = toBase58String(this.bytes)
210262 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
211263 let minStake = getIntegerValue(this, (dapp + "_starttime"))
212264 let client = toBase58String(inv.caller.bytes)
213265 let updateTime = match getInteger(this, (client + "_updatetime")) {
214266 case x: Int =>
215267 x
216268 case _ =>
217269 0
218270 }
219271 let isOlder = (frameOpenTime >= updateTime)
220272 let isActive = match getBoolean(this, (client + "_status")) {
221273 case x: Boolean =>
222274 x
223275 case _ =>
224276 false
225277 }
226278 let balance = if (!(isActive))
227279 then 0
228280 else match getInteger(this, (client + "_balance")) {
229281 case x: Int =>
230282 x
231283 case _ =>
232284 0
233285 }
234286 let expiration = (updateTime + lockPeriod)
235287 let amount = if ((RSCx100000 > 0))
236288 then RSCx100000
237289 else balance
238290 let newBalance = (balance - amount)
239291 if (if (if ((minStake >= 0))
240292 then (balance >= minStake)
241293 else false)
242- then (expiration >= lastBlockTime)
294+ then (expiration > lastBlockTime)
243295 else false)
244- then throw((("Unable to withdraw coins! The account is locked for up to " + toString((expiration / 1000))) + " Unix timestamp..."))
296+ then throw((("Unable to withdraw coins! The account is locked for up to " + toDateTimeString(expiration)) + ". Please wait..."))
245297 else if ((0 >= amount))
246298 then throw("It's impossible to withdraw a negative amount or no balance.")
247299 else if ((amount > balance))
248300 then throw((((((("It's impossible to withdraw more than the balance of " + toString(balance)) + " (") + toFloatString(balance, decMult)) + " ") + assetName) + ")."))
249301 else if ((minBalance > amount))
250302 then throw((((((("The minimum withdrawal amount is " + toString(minBalance)) + " (") + toFloatString(minBalance, decMult)) + " ") + assetName) + ")."))
251303 else {
252304 let startTime = if (isOlder)
253305 then frameOpenTime
254306 else match getInteger(this, (client + "_starttime")) {
255307 case x: Int =>
256308 x
257309 case _ =>
258310 0
259311 }
260312 let newStartTime = if ((startTime > lastBlockTime))
261313 then frameCloseTime
262314 else if ((minBalance > newBalance))
263315 then startTime
264316 else {
265317 let balWeight = (balance / minBalance)
266318 let sumWeight = (newBalance / minBalance)
267319 (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
268320 }
269321 if ((newBalance >= minBalance))
270322 then ScriptResult(WriteSet([DataEntry((dapp + "_balance"), (sumTotal - amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(inv.caller, amount, myAssetId)]))
271323 else ScriptResult(WriteSet([DataEntry((dapp + "_balance"), (sumTotal - balance)), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(inv.caller, balance, myAssetId)]))
272324 }
273325 }
274326
275327
276328
277329 @Callable(inv)
278-func setMinStake (RSCx100000) = if (if ((inv.callerPublicKey != ownerPubKey))
330+func sendRewards (client0,amount0,client1,amount1,client2,amount2,client3,amount3,client4,amount4,client5,amount5,client6,amount6,client7,amount7,client8,amount8,client9,amount9) = if (if ((inv.callerPublicKey != ownerPubKey))
279331 then (inv.callerPublicKey != managerPubKey)
280332 else false)
281- then throw("Only an administrator can set or modify minStake!")
333+ then throw("Only the administrator can send rewards to customers!")
334+ else if ((payoutOpenTime > lastBlockTime))
335+ then throw((("The time to send rewards has not yet come! Beginning at " + toDateTimeString(payoutOpenTime)) + ". Please wait..."))
336+ else {
337+ let dapp = toBase58String(this.bytes)
338+ let sumTotal = getIntegerValue(this, (dapp + "_balance"))
339+ let available = (assetBalance(this, myAssetId) - sumTotal)
340+ let rewards = (((((((((amount0 + amount1) + amount2) + amount3) + amount4) + amount5) + amount6) + amount7) + amount8) + amount9)
341+ let effBalance = if (!(isDefined(inv.payment)))
342+ then available
343+ else {
344+ let attPayment = extract(inv.payment)
345+ if ((attPayment.assetId != myAssetId))
346+ then throw((("Only " + assetName) + " is allowed to deposit."))
347+ else (available + attPayment.amount)
348+ }
349+ if ((0 >= rewards))
350+ then throw("Zero or negative rewards are not allowed.")
351+ else if ((rewards > effBalance))
352+ then throw((((("Insufficient effective balance! The required amount is " + toFloatString((rewards - effBalance), decMult)) + " ") + assetName) + "."))
353+ else {
354+ let data9 = if (if ((client9 == "-"))
355+ then (amount9 == 0)
356+ else false)
357+ then nil
358+ else if (!(getBooleanValue(this, (client9 + "_status"))))
359+ then throw("The status of client #9 is inactive!")
360+ else if ((0 >= amount9))
361+ then throw("Zero or negative amounts are not allowed.")
362+ else {
363+ let balance9 = getIntegerValue(this, (client9 + "_balance"))
364+[DataEntry((client9 + "_balance"), (balance9 + amount9)), DataEntry((client9 + "_starttime"), frameCloseTime)]
365+ }
366+ let data8 = if (if ((client8 == "-"))
367+ then (amount8 == 0)
368+ else false)
369+ then data9
370+ else if (!(getBooleanValue(this, (client8 + "_status"))))
371+ then throw("The status of client #8 is inactive!")
372+ else if ((0 >= amount8))
373+ then throw("Zero or negative amounts are not allowed.")
374+ else {
375+ let balance8 = getIntegerValue(this, (client8 + "_balance"))
376+[DataEntry((client8 + "_balance"), (balance8 + amount8)), DataEntry((client8 + "_starttime"), frameCloseTime)] :: data9
377+ }
378+ let data7 = if (if ((client7 == "-"))
379+ then (amount7 == 0)
380+ else false)
381+ then data8
382+ else if (!(getBooleanValue(this, (client7 + "_status"))))
383+ then throw("The status of client #7 is inactive!")
384+ else if ((0 >= amount7))
385+ then throw("Zero or negative amounts are not allowed.")
386+ else {
387+ let balance7 = getIntegerValue(this, (client7 + "_balance"))
388+[DataEntry((client7 + "_balance"), (balance7 + amount7)), DataEntry((client7 + "_starttime"), frameCloseTime)] :: data8
389+ }
390+ let data6 = if (if ((client6 == "-"))
391+ then (amount6 == 0)
392+ else false)
393+ then data7
394+ else if (!(getBooleanValue(this, (client6 + "_status"))))
395+ then throw("The status of client #6 is inactive!")
396+ else if ((0 >= amount6))
397+ then throw("Zero or negative amounts are not allowed.")
398+ else {
399+ let balance6 = getIntegerValue(this, (client6 + "_balance"))
400+[DataEntry((client6 + "_balance"), (balance6 + amount6)), DataEntry((client6 + "_starttime"), frameCloseTime)] :: data7
401+ }
402+ let data5 = if (if ((client5 == "-"))
403+ then (amount5 == 0)
404+ else false)
405+ then data6
406+ else if (!(getBooleanValue(this, (client5 + "_status"))))
407+ then throw("The status of client #5 is inactive!")
408+ else if ((0 >= amount5))
409+ then throw("Zero or negative amounts are not allowed.")
410+ else {
411+ let balance5 = getIntegerValue(this, (client5 + "_balance"))
412+[DataEntry((client5 + "_balance"), (balance5 + amount5)), DataEntry((client5 + "_starttime"), frameCloseTime)] :: data6
413+ }
414+ let data4 = if (if ((client4 == "-"))
415+ then (amount4 == 0)
416+ else false)
417+ then data5
418+ else if (!(getBooleanValue(this, (client4 + "_status"))))
419+ then throw("The status of client #4 is inactive!")
420+ else if ((0 >= amount4))
421+ then throw("Zero or negative amounts are not allowed.")
422+ else {
423+ let balance4 = getIntegerValue(this, (client4 + "_balance"))
424+[DataEntry((client4 + "_balance"), (balance4 + amount4)), DataEntry((client4 + "_starttime"), frameCloseTime)] :: data5
425+ }
426+ let data3 = if (if ((client3 == "-"))
427+ then (amount3 == 0)
428+ else false)
429+ then data4
430+ else if (!(getBooleanValue(this, (client3 + "_status"))))
431+ then throw("The status of client #3 is inactive!")
432+ else if ((0 >= amount3))
433+ then throw("Zero or negative amounts are not allowed.")
434+ else {
435+ let balance3 = getIntegerValue(this, (client3 + "_balance"))
436+[DataEntry((client3 + "_balance"), (balance3 + amount3)), DataEntry((client3 + "_starttime"), frameCloseTime)] :: data4
437+ }
438+ let data2 = if (if ((client2 == "-"))
439+ then (amount2 == 0)
440+ else false)
441+ then data3
442+ else if (!(getBooleanValue(this, (client2 + "_status"))))
443+ then throw("The status of client #2 is inactive!")
444+ else if ((0 >= amount2))
445+ then throw("Zero or negative amounts are not allowed.")
446+ else {
447+ let balance2 = getIntegerValue(this, (client2 + "_balance"))
448+[DataEntry((client2 + "_balance"), (balance2 + amount2)), DataEntry((client2 + "_starttime"), frameCloseTime)] :: data3
449+ }
450+ let data1 = if (if ((client1 == "-"))
451+ then (amount1 == 0)
452+ else false)
453+ then data2
454+ else if (!(getBooleanValue(this, (client1 + "_status"))))
455+ then throw("The status of client #1 is inactive!")
456+ else if ((0 >= amount1))
457+ then throw("Zero or negative amounts are not allowed.")
458+ else {
459+ let balance1 = getIntegerValue(this, (client1 + "_balance"))
460+[DataEntry((client1 + "_balance"), (balance1 + amount1)), DataEntry((client1 + "_starttime"), frameCloseTime)] :: data2
461+ }
462+ let data0 = if (if ((client0 == "-"))
463+ then (amount0 == 0)
464+ else false)
465+ then data1
466+ else if (!(getBooleanValue(this, (client0 + "_status"))))
467+ then throw("The status of client #0 is inactive!")
468+ else if ((0 >= amount0))
469+ then throw("Zero or negative amounts are not allowed.")
470+ else {
471+ let balance0 = getIntegerValue(this, (client0 + "_balance"))
472+[DataEntry((client0 + "_balance"), (balance0 + amount0)), DataEntry((client0 + "_starttime"), frameCloseTime)] :: data1
473+ }
474+ WriteSet(DataEntry((dapp + "_balance"), (sumTotal + rewards)) :: data0)
475+ }
476+ }
477+
478+
479+
480+@Callable(inv)
481+func setMinStake (amount) = if (if ((inv.callerPublicKey != ownerPubKey))
482+ then (inv.callerPublicKey != managerPubKey)
483+ else false)
484+ then throw("Only the administrator can set and modify minStake!")
282485 else if (isDefined(inv.payment))
283- then throw("Please don't attach payment when setting up minStake.")
486+ then throw("Please do not attach payment when setting up minStake.")
284487 else {
285488 let dapp = toBase58String(this.bytes)
286489 if (isDefined(getString(this, (dapp + "_address"))))
287- then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
288- else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
490+ then WriteSet([DataEntry((dapp + "_starttime"), amount), DataEntry((dapp + "_updatetime"), lastBlockTime)])
491+ else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), amount), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
289492 }
290493
291494
292495 @Verifier(tx)
293496 func verify () = match tx {
294497 case t: TransferTransaction =>
295498 if (if (if ((t.assetId != myAssetId))
296499 then (t.feeAssetId != myAssetId)
297500 else false)
298501 then sigVerify(t.bodyBytes, t.proofs[2], ownerPubKey)
299502 else false)
300503 then sigVerify(t.bodyBytes, t.proofs[1], managerPubKey)
301504 else false
302505 case s: SetScriptTransaction =>
303506 if (sigVerify(s.bodyBytes, s.proofs[2], ownerPubKey))
304507 then sigVerify(s.bodyBytes, s.proofs[1], managerPubKey)
305508 else false
306509 case _ =>
307510 false
308511 }
309512

github/deemru/w8io/3ef1775 
401.32 ms