tx · 54vbnaqZsxsDCEAu2RsW9izsjHKAH2ihSHeffkvyVwd2

3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J:  -0.02600000 Waves

2023.03.28 07:50 [2509346] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves

{ "type": 13, "id": "54vbnaqZsxsDCEAu2RsW9izsjHKAH2ihSHeffkvyVwd2", "fee": 2600000, "feeAssetId": null, "timestamp": 1679979009472, "version": 2, "chainId": 84, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "7aHqa8YaJDiBMHAAhErjjKLqfupsRsFYWc7iWgNMps3h5voLWD5Gjtbx4aeiqsEsuopbxijFLtKyPvgsumMyFet", "3a7GW1sz4vQwAcm1c6gR1JZqcHNUrkg2dE1hhBkWt7Faz6WVJej6Dwvf2SSZNSkekFhTJxJy6CSixSYDXAfG4rb9", "5XnzNWA5J7yZWZ3TA8pQ422qFdgBC5Lf1hNnMChfCzV3mD3gcQ1apZF961nzp3T5pvMZW7UsNHYuRgdMrSuskthp" ], "script": "base64:BgIpCAISBwoFCAgBAQgSABIDCgEBEgASABIAEgMKAQgSBAoCCAESBAoCCAFUAAlzZXBhcmF0b3ICAl9fAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABk1VTFRYNgkAtgIBBQVNVUxUNgAGTVVMVFg4CQC2AgEFBU1VTFQ4AAdNVUxUWDE4CQC2AgEAgICQu7rWrfANAApXQVZFU0lEU1RSAgVXQVZFUwAHV0FWRVNJRAkA2QQBBQpXQVZFU0lEU1RSAAlEQVlNSUxMSVMAgLiZKQAJTUFYQkFTS0VUAAkAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAA0BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAKwCAgkArAICCQCsAgIJAKwCAgIKbWFuZGF0b3J5IAkApQgBBQdhZGRyZXNzAgEuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAERa2V5Q29udHJvbEFkZHJlc3MAAhwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzAQ1rZXlDb250cm9sQ2ZnAAIRJXNfX2NvbnRyb2xDb25maWcBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQdjb250cm9sCQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQdjb250cm9sCQENa2V5Q29udHJvbENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgpjb250cm9sQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKY29udHJvbENmZwUDaWR4CQCsAgICLUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgAD2NvbnRyb2xDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQERa2V5Q29udHJvbEFkZHJlc3MAAiMzTjROUzdkNEpvOWE2RjE0TGlGVUtLWVZkVWtrZjJlUDRaeAAKY29udHJvbENmZwkBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQUPY29udHJvbENvbnRyYWN0AAxtYXRoQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRVJZHhDb250cm9sQ2ZnTWF0aERhcHAAEG5ldXRyaW5vQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAA9hdWN0aW9uQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAQxrZXlCb25kQXNzZXQAAg1ib25kX2Fzc2V0X2lkARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIbJXMlc191c2VyR25zYnRSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAhslc19fbmV1dHJpbm9Db250cmFjdEFkZHJlc3MBFmtleU1hdGhDb250cmFjdEFkZHJlc3MAAhAlc19fbWF0aENvbnRyYWN0ARBrZXlNaW5Mb2NrQW1vdW50AAIRJXNfX21pbkxvY2tBbW91bnQBC2tleUhhbGZMaWZlAAIMJXNfX2hhbGZMaWZlARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICBmFtb3VudAUDbmlsBQlzZXBhcmF0b3IBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIFc3RhcnQFA25pbAUJc2VwYXJhdG9yARBrZXlIaXN0b3J5UmVjb3JkAwR0eXBlC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFBHR5cGUJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCCQDYBAEFBHR4SWQFA25pbAUJc2VwYXJhdG9yARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICEWFjdGl2ZVRvdGFsTG9ja2VkBQNuaWwFCXNlcGFyYXRvcgESa2V5U3RhdHNMb2Nrc0NvdW50AAkAuQkCCQDMCAICBCVzJXMJAMwIAgIFc3RhdHMJAMwIAgIKbG9ja3NDb3VudAUDbmlsBQlzZXBhcmF0b3IBEmtleVN0YXRzVXNlcnNDb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICEGFjdGl2ZVVzZXJzQ291bnQFA25pbAUJc2VwYXJhdG9yARdrZXlTdGF0c0RlcG9zaXRBbXRCeURheQEJdGltZXN0YW1wCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICBXN0YXRzCQDMCAICD2RlcG9zaXRBbXRCeURheQkAzAgCCQCkAwEFCXRpbWVzdGFtcAUDbmlsBQlzZXBhcmF0b3IBGGtleVN0YXRzRGVwb3NpdEFtdFRvdGFscwAJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIFc3RhdHMJAMwIAgIQZGVwb3NpdEFtdFRvdGFscwUDbmlsBQlzZXBhcmF0b3IBDWtleU5leHRQZXJpb2QAAg4lc19fbmV4dFBlcmlvZAEYa2V5U3VwcG9ydGVkUmV3YXJkQXNzZXRzAAIVc3VwcG9ydGVkUmV3YXJkQXNzZXRzARFrZXlEZXBvc2l0TnVtTGFzdAAJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIDZGVwCQDMCAICB2xhc3ROdW0FA25pbAUJc2VwYXJhdG9yARtrZXlVc2VyUmV3YXJkRnJvbURlcG9zaXROdW0BC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEXVzZXJSd2RGcm9tRGVwTnVtCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgpkZXBvc2l0TnVtA3RrbgkAuQkCCQDMCAICBCVzJWQJAMwIAgIVcndkUGVyTnNidFN1bUJ5RGVwTnVtCQDMCAIJAKQDAQUKZGVwb3NpdE51bQkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yAQlrZXlSZXdhcmQCC3VzZXJBZGRyZXNzA3RrbgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgNyd2QJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUDdGtuBQNuaWwFCXNlcGFyYXRvcgEKa2V5Q2xhaW1lZAILdXNlckFkZHJlc3MDdGtuCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICA2NsbQkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yARdrZXlOb3REaXN0cmlidXRlZFJld2FyZAEDdGtuCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg5ub3REaXN0cmlidXRlZAkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yAQV0b1gxOAIHb3JpZ1ZhbAhvcmlnTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFB01VTFRYMTgFCG9yaWdNdWx0AQxnZXRJbnRPclplcm8BA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwBDGdldEludE9yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUDa2V5CQCsAgIJAKwCAgIPTWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEMZ2V0U3RyT3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwBD3RvQWRkcmVzc09yRmFpbAEKYWRkcmVzc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFCmFkZHJlc3NTdHIJAKwCAgIhY291bGRuJ3QgcGFyc2UgcGFzc2VkIGFkZHJlc3NTdHI9BQphZGRyZXNzU3RyAQt0b0Fzc2V0VmVjdAEIYXNzZXRTdHIDCQAAAgUIYXNzZXRTdHIFCldBVkVTSURTVFIFBHVuaXQJANkEAQUIYXNzZXRTdHIBBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARNmb3JtYXRIaXN0b3J5UmVjb3JkBAlvbGRBbW91bnQIb2xkU3RhcnQJbmV3QW1vdW50CG5ld1N0YXJ0CQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFCW9sZEFtb3VudAkAzAgCCQCkAwEFCG9sZFN0YXJ0CQDMCAIJAKQDAQUJbmV3QW1vdW50CQDMCAIJAKQDAQUIbmV3U3RhcnQFA25pbAUJc2VwYXJhdG9yARhmb3JtYXRDbGFpbUhpc3RvcnlSZWNvcmQCBHVzZXIOY2xhaW1lZFJld2FyZHMJALkJAgkAzAgCAgglcyVkJWQlcwkAzAgCBQR1c2VyCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCBQ5jbGFpbWVkUmV3YXJkcwUDbmlsBQlzZXBhcmF0b3IBEkhpc3RvcnlSZWNvcmRFbnRyeQcEdHlwZQt1c2VyQWRkcmVzcwR0eElkCW9sZEFtb3VudAhvbGRTdGFydAluZXdBbW91bnQIbmV3U3RhcnQJAQtTdHJpbmdFbnRyeQIJARBrZXlIaXN0b3J5UmVjb3JkAwUEdHlwZQULdXNlckFkZHJlc3MFBHR4SWQJARNmb3JtYXRIaXN0b3J5UmVjb3JkBAUJb2xkQW1vdW50BQhvbGRTdGFydAUJbmV3QW1vdW50BQhuZXdTdGFydAERQ2xhaW1IaXN0b3J5RW50cnkDC3VzZXJBZGRyZXNzBHR4SWQOY2xhaW1lZFJld2FyZHMJAQtTdHJpbmdFbnRyeQIJARBrZXlIaXN0b3J5UmVjb3JkAwIFY2xhaW0FC3VzZXJBZGRyZXNzBQR0eElkCQEYZm9ybWF0Q2xhaW1IaXN0b3J5UmVjb3JkAgkApQgBBQt1c2VyQWRkcmVzcwUOY2xhaW1lZFJld2FyZHMBC1N0YXRzUmVzdWx0Aw50b3RhbExvY2tlZEluYwxsb2NrQ291bnRJbmMNdXNlcnNDb3VudEluYwQKbG9ja3NDb3VudAkBDGdldEludE9yWmVybwEJARJrZXlTdGF0c0xvY2tzQ291bnQABAp1c2Vyc0NvdW50CQEMZ2V0SW50T3JaZXJvAQkBEmtleVN0YXRzVXNlcnNDb3VudAAEC3RvdGFsQW1vdW50CQEMZ2V0SW50T3JaZXJvAQkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAQOdG90YWxBbW91bnROZXcJAGQCBQt0b3RhbEFtb3VudAUOdG90YWxMb2NrZWRJbmMJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVN0YXRzTG9ja3NDb3VudAAJAGQCBQpsb2Nrc0NvdW50BQxsb2NrQ291bnRJbmMJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlTdGF0c1VzZXJzQ291bnQACQBkAgUKdXNlcnNDb3VudAUNdXNlcnNDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAUOdG90YWxBbW91bnROZXcFA25pbAULdG90YWxBbW91bnQFDnRvdGFsQW1vdW50TmV3AQ9Mb2NrUGFyYW1zRW50cnkDC3VzZXJBZGRyZXNzBmFtb3VudAVzdGFydAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQt1c2VyQWRkcmVzcwUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQVzdGFydAUDbmlsAQ9nZXRQYXJhbXNPckZhaWwACQCVCgMJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUQbmV1dHJpbm9Db250cmFjdAkBDGtleUJvbmRBc3NldAAJAQxnZXRJbnRPckZhaWwBCQEQa2V5TWluTG9ja0Ftb3VudAAJAQxnZXRJbnRPckZhaWwBCQELa2V5SGFsZkxpZmUAAQxpc0FjdGl2ZVVzZXIBC3VzZXJBZGRyZXNzCQBmAgkBDGdldEludE9yRWxzZQIJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MAAAAAARNnZXRVc2VyUGFyYW1zT3JVbml0AQt1c2VyQWRkcmVzcwMJAQxpc0FjdGl2ZVVzZXIBBQt1c2VyQWRkcmVzcwkAlQoDBwkBDGdldEludE9yRmFpbAEJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MJAQxnZXRJbnRPckZhaWwBCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQR1bml0ARNnZXRVc2VyUGFyYW1zT3JGYWlsAQt1c2VyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCsAgIJAKwCAgIFVXNlciAJAKUIAQULdXNlckFkZHJlc3MCDyBpcyBub3QgZGVmaW5lZAASc3VwcG9ydGVkQXNzZXRzU3RyCQEMZ2V0U3RyT3JFbHNlAgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwACAAATc3VwcG9ydGVkQXNzZXRzTGlzdAkAtQkCBRJzdXBwb3J0ZWRBc3NldHNTdHICAV8BCmNhbGNSZXdhcmQFC3VzZXJBZGRyZXNzB2Fzc2V0SWQNc3Rha2VkQW1vdW50WA5kZXBvc2l0TnVtVXNlcg5kZXBvc2l0TnVtTGFzdAQXcmV3YXJkUGVyTnNidFN1bUxhc3RLRVkJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ5kZXBvc2l0TnVtTGFzdAUHYXNzZXRJZAQKc3VtTGFzdFgxOAkApwMBCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQdhc3NldElkAgEwBApzdW1Vc2VyWDE4CQCnAwEJAQxnZXRTdHJPckVsc2UCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUOZGVwb3NpdE51bVVzZXIFB2Fzc2V0SWQCATAEEXJld2FyZER5bmFtaWNQYXJ0CQCgAwEJALwCAwkAuAICBQpzdW1MYXN0WDE4BQpzdW1Vc2VyWDE4BQ1zdGFrZWRBbW91bnRYBQdNVUxUWDE4BBNyZXdhcmRDYWNoZWRQYXJ0S0VZCQEJa2V5UmV3YXJkAgULdXNlckFkZHJlc3MFB2Fzc2V0SWQEEHJld2FyZENhY2hlZFBhcnQJAQxnZXRJbnRPckVsc2UCBRNyZXdhcmRDYWNoZWRQYXJ0S0VZAAAJAJYKBAkAZAIFEHJld2FyZENhY2hlZFBhcnQFEXJld2FyZER5bmFtaWNQYXJ0BRByZXdhcmRDYWNoZWRQYXJ0BRFyZXdhcmREeW5hbWljUGFydAUTcmV3YXJkQ2FjaGVkUGFydEtFWQEMdG9TdGFydE9mRGF5AQl0aW1lc3RhbXAJAGgCCQBpAgUJdGltZXN0YW1wBQlEQVlNSUxMSVMFCURBWU1JTExJUwETZmluZEVsZW1lbnRQb3NpdGlvbgMDc3JjB2VsZW1lbnQDc2VwBAxlbGVtZW50U3RhcnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQNzcmMFB2VsZW1lbnQJAKwCAgkArAICCQCsAgICFnRoZXJlIGlzIG5vIHN1YnN0cmluZyAFB2VsZW1lbnQCBCBpbiAFA3NyYwMJAAACBQxlbGVtZW50U3RhcnQAAAAABARsZWZ0CQCvAgIFA3NyYwUMZWxlbWVudFN0YXJ0CQBlAgkAkAMBCQC1CQIFBGxlZnQFA3NlcAABABNEZXBvc2l0VG90YWxzUFJFRklYAiQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQAEWRlZmF1bHRUb3RhbHNEQVRBCQCsAgIFE0RlcG9zaXRUb3RhbHNQUkVGSVgCNl9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMAEHcGFkTGlzdAECaW4ECGN1cnJTaXplCQBlAgkAkAMBBQJpbgABCgEKbGlzdFBhZGRlcgIDYWNjA2lkeAMJAGYCBQhjdXJyU2l6ZQUDaWR4BQNhY2MJAM0IAgUDYWNjAgEwCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFAmluCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpsaXN0UGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgEJcGFkU3RyaW5nAQJpbgQIY3VyclNpemUJAGUCCQCQAwEJALwJAgUCaW4FA1NFUAABCgEJc3RyUGFkZGVyAgNhY2MDaWR4AwkAZgIFCGN1cnJTaXplBQNpZHgFA2FjYwkArAICBQNhY2MCA19fMAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQJpbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3RyUGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgENUmV3YXJkRW50cmllcwMJaXNOZXdVc2VyC3VzZXJBZGRyZXNzDHN0YWtlZEFtb3VudAQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFC3VzZXJBZGRyZXNzBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAIFYWNjdW0FYXNzZXQEDSR0MDEwMjYwMTAzOTUJAQpjYWxjUmV3YXJkBQULdXNlckFkZHJlc3MFBWFzc2V0BQ1zdGFrZWRBbW91bnRYBQ5kZXBvc2l0TnVtVXNlcgUOZGVwb3NpdE51bUxhc3QEC3Jld2FyZFRvdGFsCAUNJHQwMTAyNjAxMDM5NQJfMQQGY2FjaGVkCAUNJHQwMTAyNjAxMDM5NQJfMgQHZHluYW1pYwgFDSR0MDEwMjYwMTAzOTUCXzMEE3Jld2FyZENhY2hlZFBhcnRLRVkIBQ0kdDAxMDI2MDEwMzk1Al80CQDNCAIFBWFjY3VtCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQULcmV3YXJkVG90YWwDAwkAAAIFDmRlcG9zaXROdW1MYXN0AP///////////wEJAAACBQ5kZXBvc2l0TnVtVXNlcgD///////////8BBwUDbmlsAwMJAAACBQ5kZXBvc2l0TnVtTGFzdAD///////////8BCQBmAgUOZGVwb3NpdE51bVVzZXIA////////////AQcJAAIBAi9pbnZhbGlkIGRlcG9zaXROdW1MYXN0IGFuZCBkZXBvc2l0TnVtVXNlciBzdGF0ZQMDCQBmAgUOZGVwb3NpdE51bUxhc3QA////////////AQkAZwIFDmRlcG9zaXROdW1Vc2VyAP///////////wEHAwUJaXNOZXdVc2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0BQNuaWwJAM0IAgoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARtmb3JFYWNoQXNzZXRDYWNoZVVzZXJSZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDkJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0CQACAQkArAICCQCsAgIJAKwCAgIkdW5jb3ZlcmVkIGNvbmRpdGlvbjogZGVwb3NpdE51bUxhc3Q9CQCkAwEFDmRlcG9zaXROdW1MYXN0AhAgZGVwb3NpdE51bVVzZXI9CQCkAwEFDmRlcG9zaXROdW1Vc2VyASJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AgN0a24JYW1vdW50SW5jBBdub3REaXN0cmlidXRlZFJld2FyZEtFWQkBF2tleU5vdERpc3RyaWJ1dGVkUmV3YXJkAQUDdGtuBBRub3REaXN0cmlidXRlZFJld2FyZAkBDGdldEludE9yRWxzZQIFF25vdERpc3RyaWJ1dGVkUmV3YXJkS0VZAAAJAQxJbnRlZ2VyRW50cnkCBRdub3REaXN0cmlidXRlZFJld2FyZEtFWQkAZAIFFG5vdERpc3RyaWJ1dGVkUmV3YXJkBQlhbW91bnRJbmMBC2NvbW1vbkNsYWltAgt1c2VyQWRkcmVzcwFpBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhlwYXltZW50cyBhcmUgbm90IGFjY2VwdGVkBA0kdDAxMzMzNjEzNDQxCQELdmFsdWVPckVsc2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCVCgMGAAAAAAQJaXNOZXdVc2VyCAUNJHQwMTMzMzYxMzQ0MQJfMQQMc3Rha2VkQW1vdW50CAUNJHQwMTMzMzYxMzQ0MQJfMgQMc3Rha2luZ1N0YXJ0CAUNJHQwMTMzMzYxMzQ0MQJfMwQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFDnVzZXJBZGRyZXNzU3RyBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQCBWFjY3VtBWFzc2V0BA0kdDAxMzgxMjEzOTUwCQEKY2FsY1Jld2FyZAUFDnVzZXJBZGRyZXNzU3RyBQVhc3NldAUNc3Rha2VkQW1vdW50WAUOZGVwb3NpdE51bVVzZXIFDmRlcG9zaXROdW1MYXN0BAtyZXdhcmRUb3RhbAgFDSR0MDEzODEyMTM5NTACXzEEBmNhY2hlZAgFDSR0MDEzODEyMTM5NTACXzIEB2R5bmFtaWMIBQ0kdDAxMzgxMjEzOTUwAl8zBBNyZXdhcmRDYWNoZWRQYXJ0S0VZCAUNJHQwMTM4MTIxMzk1MAJfNAQKY2xhaW1lZEtFWQkBCmtleUNsYWltZWQCBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQEDSR0MDE0MDEwMTQwNDcFBWFjY3VtBARkYXRhCAUNJHQwMTQwMTAxNDA0NwJfMQQRY2xhaW1lZEFtdEJ5QXNzZXQIBQ0kdDAxNDAxMDE0MDQ3Al8yBAduZXdQYXJ0CQC5CQIJAMwIAgUFYXNzZXQJAMwIAgkApAMBBQtyZXdhcmRUb3RhbAUDbmlsAgE6BBRjbGFpbWVkQW10QnlBc3NldE5ldwkAuQkCCQDMCAIFEWNsYWltZWRBbXRCeUFzc2V0CQDMCAIFB25ld1BhcnQFA25pbAIBXwMJAGcCAAAFC3Jld2FyZFRvdGFsCQCUCgIFBGRhdGEFFGNsYWltZWRBbXRCeUFzc2V0TmV3CQCUCgIJAM0IAgkAzQgCCQDNCAIFBGRhdGEJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQtyZXdhcmRUb3RhbAkBC3RvQXNzZXRWZWN0AQUFYXNzZXQJAQxJbnRlZ2VyRW50cnkCBQpjbGFpbWVkS0VZCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpjbGFpbWVkS0VZAAAFC3Jld2FyZFRvdGFsCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQAABRRjbGFpbWVkQW10QnlBc3NldE5ldwQNJHQwMTQ1MDcxNDYyMAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwCAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQJdHJhbnNmZXJzCAUNJHQwMTQ1MDcxNDYyMAJfMQQXY2xhaW1lZEFtdEJ5QXNzZXRSZXN1bHQIBQ0kdDAxNDUwNzE0NjIwAl8yAwkAZwIAAAkAkAMBBQl0cmFuc2ZlcnMJAJQKAgUDbmlsAAAJAJQKAgkAzQgCCQDNCAIFCXRyYW5zZmVycwkBDEludGVnZXJFbnRyeQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUOZGVwb3NpdE51bUxhc3QJARFDbGFpbUhpc3RvcnlFbnRyeQMFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQCwAgIFF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0AAEJAJADAQUJdHJhbnNmZXJzCQFpAQ1jb25zdHJ1Y3RvclYxBRduZXV0cmlub0NvbnRyYWN0QWRkcmVzcxNtYXRoQ29udHJhY3RBZGRyZXNzDW1pbkxvY2tBbW91bnQIaGFsZkxpZmUVc3VwcG9ydGVkUmV3YXJkQXNzZXRzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleU5ldXRyaW5vQ29udHJhY3RBZGRyZXNzAAUXbmV1dHJpbm9Db250cmFjdEFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleU1hdGhDb250cmFjdEFkZHJlc3MABRNtYXRoQ29udHJhY3RBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5TWluTG9ja0Ftb3VudAAFDW1pbkxvY2tBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtrZXlIYWxmTGlmZQAFCGhhbGZMaWZlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMABRVzdXBwb3J0ZWRSZXdhcmRBc3NldHMFA25pbAFpAQVzdGFrZQAEDSR0MDE1NDcxMTU1MzMJAQ9nZXRQYXJhbXNPckZhaWwABAtib25kQXNzZXRJZAgFDSR0MDE1NDcxMTU1MzMCXzEEDW1pbkxvY2tBbW91bnQIBQ0kdDAxNTQ3MTE1NTMzAl8yBAhoYWxmTGlmZQgFDSR0MDE1NDcxMTU1MzMCXzMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhVJbnZhbGlkIHBheW1lbnRzIHNpemUEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CAUHcGF5bWVudAZhbW91bnQEE2ludmFsaWRBc3NldE1lc3NhZ2UJAKwCAgkArAICAg9JbnZhbGlkIGFzc2V0LiAJANgEAQULYm9uZEFzc2V0SWQCDCBpcyBleHBlY3RlZAQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUHcGF5bWVudAdhc3NldElkBRNpbnZhbGlkQXNzZXRNZXNzYWdlAwkBAiE9AgUHYXNzZXRJZAULYm9uZEFzc2V0SWQJAAIBBRNpbnZhbGlkQXNzZXRNZXNzYWdlBAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDSR0MDE2MDc1MTYxODIJAQt2YWx1ZU9yRWxzZQIJARNnZXRVc2VyUGFyYW1zT3JVbml0AQULdXNlckFkZHJlc3MJAJUKAwYAAAD///////////8BBAlpc05ld1VzZXIIBQ0kdDAxNjA3NTE2MTgyAl8xBApsb2NrQW1vdW50CAUNJHQwMTYwNzUxNjE4MgJfMgQPbG9ja1N0YXJ0SGVpZ2h0CAUNJHQwMTYwNzUxNjE4MgJfMwQMbWVyZ2VkQW1vdW50AwUJaXNOZXdVc2VyBQZhbW91bnQJAGQCBQZhbW91bnQFCmxvY2tBbW91bnQEEW1lcmdlZFN0YXJ0SGVpZ2h0AwUJaXNOZXdVc2VyBQZoZWlnaHQJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AhNtZXJnZVN0YWtlc1JFQURPTkxZCQDMCAIFBmFtb3VudAkAzAgCBQZoZWlnaHQJAMwIAgUKbG9ja0Ftb3VudAkAzAgCBQ9sb2NrU3RhcnRIZWlnaHQJAMwIAgUIaGFsZkxpZmUFA25pbAUDbmlsAwkAZgIFDW1pbkxvY2tBbW91bnQFDG1lcmdlZEFtb3VudAkAAgEJAKwCAgITTWluIGxvY2sgYW1vdW50IGlzIAkApAMBBQ1taW5Mb2NrQW1vdW50BA0kdDAxNjU0MzE2NjQ1CQELU3RhdHNSZXN1bHQDBQZhbW91bnQAAQMFCWlzTmV3VXNlcgABAAAEDHN0YXRzRW50cmllcwgFDSR0MDE2NTQzMTY2NDUCXzEEC3RvdGFsU3Rha2VkCAUNJHQwMTY1NDMxNjY0NQJfMgQOdG90YWxTdGFrZWROZXcIBQ0kdDAxNjU0MzE2NjQ1Al8zCQDOCAIJAM4IAgkAzggCCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgVzdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFCmxvY2tBbW91bnQFD2xvY2tTdGFydEhlaWdodAUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAUDbmlsCQENUmV3YXJkRW50cmllcwMFCWlzTmV3VXNlcgUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAUMc3RhdHNFbnRyaWVzAWkBB3Vuc3Rha2UBBmFtb3VudAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECI3Vuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50BAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwQNJHQwMTcxMzExNzE5MwkBD2dldFBhcmFtc09yRmFpbAAEC2JvbmRBc3NldElkCAUNJHQwMTcxMzExNzE5MwJfMQQNbWluTG9ja0Ftb3VudAgFDSR0MDE3MTMxMTcxOTMCXzIECGhhbGZMaWZlCAUNJHQwMTcxMzExNzE5MwJfMwQNJHQwMTcxOTYxNzI3MAkBE2dldFVzZXJQYXJhbXNPckZhaWwBBQt1c2VyQWRkcmVzcwQJaXNOZXdVc2VyCAUNJHQwMTcxOTYxNzI3MAJfMQQKbG9ja0Ftb3VudAgFDSR0MDE3MTk2MTcyNzACXzIECWxvY2tTdGFydAgFDSR0MDE3MTk2MTcyNzACXzMDCQBnAgAABQpsb2NrQW1vdW50CQACAQISTm90aGluZyB0byB1bnN0YWtlAwkAZgIFBmFtb3VudAUKbG9ja0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICClJlcXVlc3RlZCAJAKQDAQUGYW1vdW50AhIsIGJ1dCBzdGFrZWQgb25seSAJAKQDAQUKbG9ja0Ftb3VudAQBdAgJAQV2YWx1ZQEJAO0HAQUGaGVpZ2h0CXRpbWVzdGFtcAQLcmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEFDnVzZXJBZGRyZXNzU3RyAAADCQBnAgULcmVsZWFzZVRpbWUFAXQJAAIBCQCsAgICO1lvdXIgZ05zYnQgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFC3JlbGVhc2VUaW1lBA9jb21pc3Npb25BbW91bnQJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AiFnZXRVbnN0YWtlQ29taXNzaW9uQW1vdW50UkVBRE9OTFkJAMwIAgUGYW1vdW50CQDMCAIFCWxvY2tTdGFydAkAzAgCBQhoYWxmTGlmZQUDbmlsBQNuaWwEDSR0MDE3OTExMTgwNjUJAQtTdGF0c1Jlc3VsdAMJAQEtAQUGYW1vdW50AwkAAAIFBmFtb3VudAUKbG9ja0Ftb3VudAD///////////8BAAADCQAAAgUGYW1vdW50BQpsb2NrQW1vdW50AP///////////wEAAAQMc3RhdHNFbnRyaWVzCAUNJHQwMTc5MTExODA2NQJfMQQLdG90YWxTdGFrZWQIBQ0kdDAxNzkxMTE4MDY1Al8yBA50b3RhbFN0YWtlZE5ldwgFDSR0MDE3OTExMTgwNjUCXzMJAM4IAgkAzggCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MJAGUCBQZhbW91bnQFD2NvbWlzc2lvbkFtb3VudAULYm9uZEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPYXVjdGlvbkNvbnRyYWN0BQ9jb21pc3Npb25BbW91bnQFC2JvbmRBc3NldElkCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgd1bnN0YWtlBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAUKbG9ja0Ftb3VudAUJbG9ja1N0YXJ0CQBlAgUKbG9ja0Ftb3VudAUGYW1vdW50BQlsb2NrU3RhcnQFA25pbAkBDVJld2FyZEVudHJpZXMDBwUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwkAZQIFCmxvY2tBbW91bnQFBmFtb3VudAUJbG9ja1N0YXJ0BQxzdGF0c0VudHJpZXMBaQEHZGVwb3NpdAAEC3RvdGFsU3Rha2VkCQEMZ2V0SW50T3JFbHNlAgkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAAAAwkAZgIAAAULdG90YWxTdGFrZWQJAAIBAhtUT0RPOiBjYXNlIGlzIG5vdCBzdXBwb3J0ZWQEEWRlcG9zaXROdW1MYXN0S0VZCQERa2V5RGVwb3NpdE51bUxhc3QABA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIFEWRlcG9zaXROdW1MYXN0S0VZAP///////////wEEDWRlcG9zaXROdW1OZXcJAGQCBQ5kZXBvc2l0TnVtTGFzdAABBAl0b3RhbHNLRVkJARhrZXlTdGF0c0RlcG9zaXRBbXRUb3RhbHMABAhieURheUtFWQkBF2tleVN0YXRzRGVwb3NpdEFtdEJ5RGF5AQkBDHRvU3RhcnRPZkRheQEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBApjdXJyVG90YWxzCQEHcGFkTGlzdAEJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQl0b3RhbHNLRVkFEWRlZmF1bHRUb3RhbHNEQVRBBQNTRVAKAQNkZXACA2FjYwNwbXQEBmFtb3VudAgFA3BtdAZhbW91bnQEDXBtdEFzc2V0SWRTdHIJANgEAQkBC3ZhbHVlT3JFbHNlAggFA3BtdAdhc3NldElkBQdXQVZFU0lEAwkBASEBCQEIY29udGFpbnMCBRJzdXBwb3J0ZWRBc3NldHNTdHIFDXBtdEFzc2V0SWRTdHIJAAIBCQCsAgIJAKwCAgUSc3VwcG9ydGVkQXNzZXRzU3RyAhEgZG9lc24ndCBjb250YWluIAUNcG10QXNzZXRJZFN0cgMJAAACBQt0b3RhbFN0YWtlZAAACQCWCgQJAM0IAggFA2FjYwJfMQkBIkluY3JlbWVudE5vdERpc3RyaWJ1dGVkUmV3YXJkRW50cnkCBQ1wbXRBc3NldElkU3RyBQZhbW91bnQJAM0IAggFA2FjYwJfMgUNcG10QXNzZXRJZFN0cgkAzQgCCAUDYWNjAl8zCQC2AgEAAAkAzQgCCAUDYWNjAl80BQZhbW91bnQEEHJld2FyZFBlck5zYnRYMTgJALwCAwkAtgIBBQZhbW91bnQFB01VTFRYMTgJALYCAQULdG90YWxTdGFrZWQJAJYKBAgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yBQ1wbXRBc3NldElkU3RyCQDNCAIIBQNhY2MCXzMFEHJld2FyZFBlck5zYnRYMTgJAM0IAggFA2FjYwJfNAUGYW1vdW50BApwbXRzUmVzdWx0CgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA2RlcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgoBGXJlZnJlc2hSZXdhcmRVcGRhdGVUb3RhbHMCBWFjY3VtCW5leHRBc3NldAQBawgFBWFjY3VtAl8zBApzdW1MYXN0U3RyCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQluZXh0QXNzZXQCATAEA2lkeAkAzwgCCAUKcG10c1Jlc3VsdAJfMgUJbmV4dEFzc2V0BANzdW0DCQEJaXNEZWZpbmVkAQUDaWR4BAFqCQEFdmFsdWUBBQNpZHgECnN0YXRzRGVsdGEJAJEDAggFCnBtdHNSZXN1bHQCXzQFAWoJAJQKAgkApgMBCQC3AgIJAKcDAQUKc3VtTGFzdFN0cgkAkQMCCAUKcG10c1Jlc3VsdAJfMwUBagkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJUb3RhbHMJAGQCBQFrAAEFCnN0YXRzRGVsdGEJAJQKAgUKc3VtTGFzdFN0cgkAkQMCBQpjdXJyVG90YWxzCQBkAgUBawABCQCVCgMJAM0IAggFBWFjY3VtAl8xCQELU3RyaW5nRW50cnkCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUNZGVwb3NpdE51bU5ldwUJbmV4dEFzc2V0CAUDc3VtAl8xCQCsAgIJAKwCAggFBWFjY3VtAl8yBQNTRVAIBQNzdW0CXzIJAGQCBQFrAAEEDGFzc2V0c1Jlc3VsdAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFE0RlcG9zaXRUb3RhbHNQUkVGSVgAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEZcmVmcmVzaFJld2FyZFVwZGF0ZVRvdGFscwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQGdG90YWxzCQEJcGFkU3RyaW5nAQgFDGFzc2V0c1Jlc3VsdAJfMgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQpwbXRzUmVzdWx0Al8xCAUMYXNzZXRzUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgURZGVwb3NpdE51bUxhc3RLRVkFDWRlcG9zaXROdW1OZXcJAQtTdHJpbmdFbnRyeQIFCXRvdGFsc0tFWQUGdG90YWxzCQELU3RyaW5nRW50cnkCBQhieURheUtFWQUGdG90YWxzBQ1kZXBvc2l0TnVtTmV3AWkBDGNsYWltUmV3YXJkcwAJAQtjb21tb25DbGFpbQIIBQFpBmNhbGxlcgUBaQFpARpjbGFpbVJld2FyZHNCeU9yaWdpbkNhbGxlcgAJAQtjb21tb25DbGFpbQIIBQFpDG9yaWdpbkNhbGxlcgUBaQFpARh1bmNsYWltZWRSZXdhcmRzUkVBRE9OTFkBDnVzZXJBZGRyZXNzU3RyCgEWZm9yRWFjaEFzc2V0WmVyb1Jld2FyZAIFYWNjdW0FYXNzZXQJAKwCAgkArAICBQVhY2N1bQkAuQkCCQDMCAIFBWFzc2V0CQDMCAICATAJAMwIAgIBMAUDbmlsAgE6AgFfBBJ1bmNsYWltZWRSZXdhcmRTdHIDCQAAAgUOdXNlckFkZHJlc3NTdHICAAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZmb3JFYWNoQXNzZXRaZXJvUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEDSR0MDIxOTE0MjIwMTkJAQt2YWx1ZU9yRWxzZQIJARNnZXRVc2VyUGFyYW1zT3JVbml0AQULdXNlckFkZHJlc3MJAJUKAwYAAAAABAlpc05ld1VzZXIIBQ0kdDAyMTkxNDIyMDE5Al8xBAxzdGFrZWRBbW91bnQIBQ0kdDAyMTkxNDIyMDE5Al8yBAxzdGFraW5nU3RhcnQIBQ0kdDAyMTkxNDIyMDE5Al8zBA1zdGFrZWRBbW91bnRYCQC2AgEFDHN0YWtlZEFtb3VudAQbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZCQEba2V5VXNlclJld2FyZEZyb21EZXBvc2l0TnVtAQUOdXNlckFkZHJlc3NTdHIEDmRlcG9zaXROdW1Vc2VyCQEMZ2V0SW50T3JFbHNlAgUbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZAP///////////wEEDmRlcG9zaXROdW1MYXN0CQEMZ2V0SW50T3JFbHNlAgkBEWtleURlcG9zaXROdW1MYXN0AAD///////////8BCgEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFYWNjdW0FYXNzZXQEDSR0MDIyMzY1MjI1MDMJAQpjYWxjUmV3YXJkBQUOdXNlckFkZHJlc3NTdHIFBWFzc2V0BQ1zdGFrZWRBbW91bnRYBQ5kZXBvc2l0TnVtVXNlcgUOZGVwb3NpdE51bUxhc3QEC3Jld2FyZFRvdGFsCAUNJHQwMjIzNjUyMjUwMwJfMQQGY2FjaGVkCAUNJHQwMjIzNjUyMjUwMwJfMgQHZHluYW1pYwgFDSR0MDIyMzY1MjI1MDMCXzMEE3Jld2FyZENhY2hlZFBhcnRLRVkIBQ0kdDAyMjM2NTIyNTAzAl80BAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCfCAEJAQprZXlDbGFpbWVkAgUOdXNlckFkZHJlc3NTdHIFBWFzc2V0AAAJAKwCAgkArAICBQVhY2N1bQkAuQkCCQDMCAIFBWFzc2V0CQDMCAIJAKQDAQULcmV3YXJkVG90YWwJAMwIAgkApAMBBQdjbGFpbWVkBQNuaWwCAToCAV8KAAIkbAUTc3VwcG9ydGVkQXNzZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQkAlAoCBQNuaWwJALMCAgUSdW5jbGFpbWVkUmV3YXJkU3RyAAEBaQEYbnNidFVuc3Rha2luZ1NZU1JFQURPTkxZAhV1c2VyQWRkcmVzc1N0ck9yRW1wdHkLdW5zdGFrZUFtdFAEC3Jlc3VsdEFycmF5AwkAAAIFFXVzZXJBZGRyZXNzU3RyT3JFbXB0eQIACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAUDbmlsBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVdXNlckFkZHJlc3NTdHJPckVtcHR5BAdjZmdEQVRBCQEPZ2V0UGFyYW1zT3JGYWlsAAQLbnNidEFzc2V0SWQIBQdjZmdEQVRBAl8xBA1taW5Mb2NrQW1vdW50CAUHY2ZnREFUQQJfMgQIaGFsZkxpZmUIBQdjZmdEQVRBAl8zBAh1c2VyREFUQQkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFCHVzZXJEQVRBAl8xBAxzdGFrZWRBbW91bnQIBQh1c2VyREFUQQJfMgQJbG9ja1N0YXJ0CAUIdXNlckRBVEECXzMECnVuc3Rha2VBbXQDCQBmAgULdW5zdGFrZUFtdFAFDHN0YWtlZEFtb3VudAUMc3Rha2VkQW1vdW50BQt1bnN0YWtlQW10UAQPc3Rha2VkQW1vdW50TkVXCQBlAgUMc3Rha2VkQW1vdW50BQp1bnN0YWtlQW10BA9jb21pc3Npb25BbW91bnQDCQAAAgUKdW5zdGFrZUFtdAAAAAAJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AiFnZXRVbnN0YWtlQ29taXNzaW9uQW1vdW50UkVBRE9OTFkJAMwIAgUKdW5zdGFrZUFtdAkAzAgCBQlsb2NrU3RhcnQJAMwIAgUIaGFsZkxpZmUFA25pbAUDbmlsBA1yZWNlaXZlQW1vdW50CQBlAgUKdW5zdGFrZUFtdAUPY29taXNzaW9uQW1vdW50CQDMCAIFDHN0YWtlZEFtb3VudAkAzAgCBQ9zdGFrZWRBbW91bnRORVcJAMwIAgUNcmVjZWl2ZUFtb3VudAkAzAgCBQ9jb21pc3Npb25BbW91bnQFA25pbAkAlAoCBQNuaWwFC3Jlc3VsdEFycmF5AWkBFm5zYnRTdGFraW5nU1lTUkVBRE9OTFkCDnVzZXJBZGRyZXNzU3RyCG5zYnREaWZmBAx0b3RhbE5zYnRBbXQJAQxnZXRJbnRPckVsc2UCCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAADCQAAAgUOdXNlckFkZHJlc3NTdHICAAkAlAoCBQNuaWwJAMwIAgAACQDMCAIFDHRvdGFsTnNidEFtdAkAzAgCAAAFA25pbAQLdXNlckFkZHJlc3MJAQ90b0FkZHJlc3NPckZhaWwBBQ51c2VyQWRkcmVzc1N0cgQNJHQwMjQxODEyNDI4NQkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFDSR0MDI0MTgxMjQyODUCXzEEC3VzZXJOc2J0QW10CAUNJHQwMjQxODEyNDI4NQJfMgQMc3Rha2luZ1N0YXJ0CAUNJHQwMjQxODEyNDI4NQJfMwkAlAoCBQNuaWwJAMwIAgULdXNlck5zYnRBbXQJAMwIAgUMdG90YWxOc2J0QW10CQDMCAIFDHN0YWtpbmdTdGFydAUDbmlsAQJ0eAEGdmVyaWZ5AAQTcHViS2V5QWRtaW5zTGlzdFN0cgkAuQkCCQDMCAICLEV4dEVFSzE5bm1LajltQ3BuV3l2RUVKRllBVExNY1ZFTXZvaGhVSGt5SE5tCQDMCAICLEV2NXB5NUZmQlFYOWNacFlLbmZRclRCNDlCeWY4UW1wWldlRFZSaW00eVY3CQDMCAICLERVdXVMalh1OThuQndaYzdmcXdDVGp0QTNublJ3Z1Ria01TcjVTVTJObURSCQDMCAICLERVdXVMalh1OThuQndaYzdmcXdDVGp0QTNublJ3Z1Ria01TcjVTVTJObURSBQNuaWwFA1NFUAQQcHViS2V5QWRtaW5zTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD2NvbnRyb2xDb250cmFjdAIMJXNfX211bHRpc2lnBRNwdWJLZXlBZG1pbnNMaXN0U3RyBQNTRVAEBWNvdW50CQBkAgkAZAIJAGQCAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAAABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAABAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAIAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAwkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAwACAAAJAGcCBQVjb3VudAADPesTaA==", "height": 2509346, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 32JFwnf7GdUEubdXkiaZAtk2NbjLGeR7u62jk65CWptU Next: E9gAqUH1Z8mkHbm3WA7PuJ6LcJtfqf8YPasCL2gwpmhC Diff:
OldNewDifferences
2121
2222 let j = 86400000
2323
24-let k = 1
24+let k = 9
2525
26-let l = 2
26+let l = 1
2727
28-let m = 3
28+let m = 2
2929
30-let n = 4
30+let n = 3
3131
32-let o = 5
32+let o = 4
3333
34-let p = 6
34+let p = 5
3535
36-let q = 7
36+let q = 6
3737
38-let r = 8
38+let r = 7
3939
40-let s = 9
40+let s = 8
4141
42-let t = 13
42+let t = 9
4343
44-func u (v,w) = valueOrErrorMessage(getString(v, w), (((("mandatory " + toString(v)) + ".") + w) + " is not defined"))
44+let u = 13
45+
46+func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
4547
4648
47-func x () = "%s%s__config__controlAddress"
49+func y () = "%s%s__config__controlAddress"
4850
4951
50-func y () = "%s__controlConfig"
52+func z () = "%s__controlConfig"
5153
5254
53-func z (A) = split_4C(u(A, y()), b)
55+func A (B) = split_4C(v(B, z()), b)
5456
5557
56-func B (C,D) = valueOrErrorMessage(addressFromString(C[D]), ("Control cfg doesn't contain address at index " + toString(D)))
58+func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E)))
5759
5860
59-let E = addressFromStringValue(valueOrElse(getString(this, x()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
61+let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
6062
61-let C = z(E)
63+let D = A(F)
6264
63-let F = B(C, n)
65+let G = C(D, o)
6466
65-let G = B(C, k)
67+let H = C(D, l)
6668
67-let H = B(C, l)
69+let I = C(D, m)
6870
69-let I = B(C, t)
71+let J = C(D, u)
7072
71-func J () = "bond_asset_id"
73+func K () = "bond_asset_id"
7274
7375
74-func K (L) = ("%s%s_userGnsbtReleaseTime__" + L)
76+func L (M) = ("%s%s_userGnsbtReleaseTime__" + M)
7577
7678
77-func M () = "%s__neutrinoContractAddress"
79+func N () = "%s__neutrinoContractAddress"
7880
7981
80-func N () = "%s__mathContract"
82+func O () = "%s__mathContract"
8183
8284
83-func O () = "%s__minLockAmount"
85+func P () = "%s__minLockAmount"
8486
8587
86-func P () = "%s__halfLife"
88+func Q () = "%s__halfLife"
8789
8890
89-func Q (R) = makeString(["%s%s%s", "paramByUser", toString(R), "amount"], a)
91+func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a)
9092
9193
92-func S (R) = makeString(["%s%s%s", "paramByUser", toString(R), "start"], a)
94+func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a)
9395
9496
95-func T (U,R,V) = makeString(["%s%s%s%s", "history", U, toString(R), toBase58String(V)], a)
97+func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a)
9698
9799
98-func W () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
100+func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
99101
100102
101-func X () = makeString(["%s%s", "stats", "locksCount"], a)
103+func Y () = makeString(["%s%s", "stats", "locksCount"], a)
102104
103105
104-func Y () = makeString(["%s%s", "stats", "activeUsersCount"], a)
106+func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a)
105107
106108
107-func Z (aa) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(aa)], a)
109+func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a)
108110
109111
110-func ab () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
112+func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
111113
112114
113-func ac () = "%s__nextPeriod"
115+func ad () = "%s__nextPeriod"
114116
115117
116-func ad () = "supportedRewardAssets"
118+func ae () = "supportedRewardAssets"
117119
118120
119-func ae () = makeString(["%s%s%s", "dep", "lastNum"], a)
121+func af () = makeString(["%s%s%s", "dep", "lastNum"], a)
120122
121123
122-func af (R) = makeString(["%s%s%s", "userRwdFromDepNum", R], a)
124+func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a)
123125
124126
125-func ag (ah,ai) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ah), ai], a)
127+func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a)
126128
127129
128-func aj (R,ai) = makeString(["%s%s%s", "rwd", R, ai], a)
130+func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a)
129131
130132
131-func ak (R,ai) = makeString(["%s%s%s", "clm", R, ai], a)
133+func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a)
132134
133135
134-func al (ai) = makeString(["%s%s", "notDistributed", ai], a)
136+func am (aj) = makeString(["%s%s", "notDistributed", aj], a)
135137
136138
137-func am (an,ao) = fraction(toBigInt(an), g, ao)
139+func an (ao,ap) = fraction(toBigInt(ao), g, ap)
138140
139141
140-func ap (w) = valueOrElse(getInteger(this, w), 0)
142+func aq (x) = valueOrElse(getInteger(this, x), 0)
141143
142144
143-func aq (w,ar) = valueOrElse(getInteger(this, w), ar)
145+func ar (x,as) = valueOrElse(getInteger(this, x), as)
144146
145147
146-func as (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
148+func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
147149
148150
149-func at (w,ar) = valueOrElse(getString(this, w), ar)
151+func au (x,as) = valueOrElse(getString(this, x), as)
150152
151153
152-func au (av) = valueOrErrorMessage(addressFromString(av), ("couldn't parse passed addressStr=" + av))
154+func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw))
153155
154156
155-func aw (ax) = if ((ax == h))
157+func ax (ay) = if ((ay == h))
156158 then unit
157- else fromBase58String(ax)
159+ else fromBase58String(ay)
158160
159161
160-func ay (az) = {
161- let aA = az
162- if ($isInstanceOf(aA, "Int"))
162+func az (aA) = {
163+ let aB = aA
164+ if ($isInstanceOf(aB, "Int"))
163165 then {
164- let aB = aA
165- aB
166+ let aC = aB
167+ aC
166168 }
167169 else throw("fail to cast into Int")
168170 }
169171
170172
171-func aC (aD,aE,aF,aG) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aD), toString(aE), toString(aF), toString(aG)], a)
173+func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a)
172174
173175
174-func aH (aI,aJ) = makeString(["%s%d%d%s", aI, toString(lastBlock.height), toString(lastBlock.timestamp), aJ], a)
176+func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a)
175177
176178
177-func aK (U,R,V,aD,aE,aF,aG) = StringEntry(T(U, R, V), aC(aD, aE, aF, aG))
179+func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH))
178180
179181
180-func aL (R,V,aJ) = StringEntry(T("claim", R, V), aH(toString(R), aJ))
182+func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK))
181183
182184
183-func aM (aN,aO,aP) = {
184- let aQ = ap(X())
185- let aR = ap(Y())
186- let aS = ap(W())
187- let aT = (aS + aN)
188- $Tuple3([IntegerEntry(X(), (aQ + aO)), IntegerEntry(Y(), (aR + aP)), IntegerEntry(W(), aT)], aS, aT)
185+func aN (aO,aP,aQ) = {
186+ let aR = aq(Y())
187+ let aS = aq(Z())
188+ let aT = aq(X())
189+ let aU = (aT + aO)
190+ $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU)
189191 }
190192
191193
192-func aU (R,aV,aW) = [IntegerEntry(Q(R), aV), IntegerEntry(S(R), aW)]
194+func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)]
193195
194196
195-func aX () = $Tuple3(fromBase58String(getStringValue(G, J())), as(O()), as(P()))
197+func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q()))
196198
197199
198-func aY (R) = (aq(Q(R), 0) > 0)
200+func aZ (S) = (ar(R(S), 0) > 0)
199201
200202
201-func aZ (R) = if (aY(R))
202- then $Tuple3(false, as(Q(R)), as(S(R)))
203+func ba (S) = if (aZ(S))
204+ then $Tuple3(false, at(R(S)), at(T(S)))
203205 else unit
204206
205207
206-func ba (R) = valueOrErrorMessage(aZ(R), (("User " + toString(R)) + " is not defined"))
208+func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined"))
207209
208210
209-let bb = at(ad(), "")
211+let bc = au(ae(), "")
210212
211-let bc = split(bb, "_")
213+let bd = split(bc, "_")
212214
213-func bd (R,be,bf,bg,bh) = {
214- let bi = ag(bh, be)
215- let bj = parseBigIntValue(at(ag(bh, be), "0"))
216- let bk = parseBigIntValue(at(ag(bg, be), "0"))
217- let bl = toInt(fraction((bj - bk), bf, g))
218- let bm = aj(R, be)
219- let bn = aq(bm, 0)
220- $Tuple4((bn + bl), bn, bl, bm)
215+func be (S,bf,bg,bh,bi) = {
216+ let bj = ah(bi, bf)
217+ let bk = parseBigIntValue(au(ah(bi, bf), "0"))
218+ let bl = parseBigIntValue(au(ah(bh, bf), "0"))
219+ let bm = toInt(fraction((bk - bl), bg, g))
220+ let bn = ak(S, bf)
221+ let bo = ar(bn, 0)
222+ $Tuple4((bo + bm), bo, bm, bn)
221223 }
222224
223225
224-func bo (aa) = ((aa / j) * j)
226+func bp (ab) = ((ab / j) * j)
225227
226228
227-func bp (bq,br,bs) = {
228- let bt = valueOrErrorMessage(indexOf(bq, br), ((("there is no substring " + br) + " in ") + bq))
229- if ((bt == 0))
229+func bq (br,bs,bt) = {
230+ let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br))
231+ if ((bu == 0))
230232 then 0
231233 else {
232- let bu = take(bq, bt)
233- (size(split(bu, bs)) - 1)
234+ let bv = take(br, bu)
235+ (size(split(bv, bt)) - 1)
234236 }
235237 }
236238
237239
238-let bv = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
240+let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
239241
240-let bw = (bv + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
242+let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
241243
242-func bx (by,R,bz) = {
243- let bf = toBigInt(bz)
244- let bA = af(R)
245- let bg = aq(bA, -1)
246- let bh = aq(ae(), -1)
247- func bB (bC,bD) = {
248- let bE = bd(R, bD, bf, bg, bh)
249- let bF = bE._1
250- let bG = bE._2
251- let bH = bE._3
252- let bm = bE._4
253- (bC :+ IntegerEntry(bm, bF))
254- }
244+func by (bz) = {
245+ let bA = (size(bz) - 1)
246+ func bB (bC,E) = if ((bA > E))
247+ then bC
248+ else (bC :+ "0")
255249
256- if (if ((bh == -1))
257- then (bg == -1)
258- else false)
259- then nil
260- else if (if ((bh == -1))
261- then (bg > -1)
262- else false)
263- then throw("invalid depositNumLast and depositNumUser state")
264- else if (if ((bh > -1))
265- then (bg >= -1)
266- else false)
267- then if (by)
268- then [IntegerEntry(bA, bh)]
269- else ({
270- let bI = bc
271- let bJ = size(bI)
272- let bK = nil
273- func bL (bM,bN) = if ((bN >= bJ))
274- then bM
275- else bB(bM, bI[bN])
250+ let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
251+ let bE = size(bD)
252+ let bF = bz
253+ func bG (bH,bI) = if ((bI >= bE))
254+ then bH
255+ else bB(bH, bD[bI])
276256
277- func bO (bM,bN) = if ((bN >= bJ))
278- then bM
279- else throw("List size exceeds 9")
257+ func bJ (bH,bI) = if ((bI >= bE))
258+ then bH
259+ else throw("List size exceeds 18")
280260
281- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
282- } :+ IntegerEntry(bA, bh))
283- else throw(((("uncovered condition: depositNumLast=" + toString(bh)) + " depositNumUser=") + toString(bg)))
261+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
284262 }
285263
286264
287-func bP (ai,bQ) = {
288- let bR = al(ai)
289- let bS = aq(bR, 0)
290- IntegerEntry(bR, (bS + bQ))
265+func bK (bz) = {
266+ let bA = (size(split_4C(bz, b)) - 1)
267+ func bL (bC,E) = if ((bA > E))
268+ then bC
269+ else (bC + "__0")
270+
271+ let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
272+ let bE = size(bD)
273+ let bF = bz
274+ func bG (bH,bI) = if ((bI >= bE))
275+ then bH
276+ else bL(bH, bD[bI])
277+
278+ func bJ (bH,bI) = if ((bI >= bE))
279+ then bH
280+ else throw("List size exceeds 18")
281+
282+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
291283 }
292284
293285
294-func bT (R,bU) = {
295- let bV = toString(R)
296- if ((size(bU.payments) > 0))
286+func bM (bN,S,bO) = {
287+ let bg = toBigInt(bO)
288+ let bP = ag(S)
289+ let bh = ar(bP, -1)
290+ let bi = ar(af(), -1)
291+ func bQ (bR,bS) = {
292+ let bT = be(S, bS, bg, bh, bi)
293+ let bU = bT._1
294+ let bV = bT._2
295+ let bW = bT._3
296+ let bn = bT._4
297+ (bR :+ IntegerEntry(bn, bU))
298+ }
299+
300+ if (if ((bi == -1))
301+ then (bh == -1)
302+ else false)
303+ then nil
304+ else if (if ((bi == -1))
305+ then (bh > -1)
306+ else false)
307+ then throw("invalid depositNumLast and depositNumUser state")
308+ else if (if ((bi > -1))
309+ then (bh >= -1)
310+ else false)
311+ then if (bN)
312+ then [IntegerEntry(bP, bi)]
313+ else ({
314+ let bD = bd
315+ let bE = size(bD)
316+ let bF = nil
317+ func bG (bH,bI) = if ((bI >= bE))
318+ then bH
319+ else bQ(bH, bD[bI])
320+
321+ func bJ (bH,bI) = if ((bI >= bE))
322+ then bH
323+ else throw("List size exceeds 9")
324+
325+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
326+ } :+ IntegerEntry(bP, bi))
327+ else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh)))
328+ }
329+
330+
331+func bX (aj,bY) = {
332+ let bZ = am(aj)
333+ let ca = ar(bZ, 0)
334+ IntegerEntry(bZ, (ca + bY))
335+ }
336+
337+
338+func cb (S,cc) = {
339+ let cd = toString(S)
340+ if ((size(cc.payments) > 0))
297341 then throw("payments are not accepted")
298342 else {
299- let bW = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
300- let by = bW._1
301- let bz = bW._2
302- let bX = bW._3
303- let bf = toBigInt(bz)
304- let bA = af(bV)
305- let bg = aq(bA, -1)
306- let bh = aq(ae(), -1)
307- func bY (bC,bD) = {
308- let bZ = bd(bV, bD, bf, bg, bh)
309- let bF = bZ._1
310- let bG = bZ._2
311- let bH = bZ._3
312- let bm = bZ._4
313- let ca = ak(bV, bD)
314- let cb = bC
315- let cc = cb._1
316- let cd = cb._2
317- let ce = makeString([bD, toString(bF)], ":")
318- let cf = makeString([cd, ce], "_")
319- if ((0 >= bF))
320- then $Tuple2(cc, cf)
321- else $Tuple2((((cc :+ ScriptTransfer(R, bF, aw(bD))) :+ IntegerEntry(ca, (valueOrElse(getInteger(ca), 0) + bF))) :+ IntegerEntry(bm, 0)), cf)
343+ let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0))
344+ let bN = ce._1
345+ let bO = ce._2
346+ let cf = ce._3
347+ let bg = toBigInt(bO)
348+ let bP = ag(cd)
349+ let bh = ar(bP, -1)
350+ let bi = ar(af(), -1)
351+ func cg (bR,bS) = {
352+ let ch = be(cd, bS, bg, bh, bi)
353+ let bU = ch._1
354+ let bV = ch._2
355+ let bW = ch._3
356+ let bn = ch._4
357+ let ci = al(cd, bS)
358+ let cj = bR
359+ let ck = cj._1
360+ let cl = cj._2
361+ let cm = makeString([bS, toString(bU)], ":")
362+ let cn = makeString([cl, cm], "_")
363+ if ((0 >= bU))
364+ then $Tuple2(ck, cn)
365+ else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn)
322366 }
323367
324- let cg = {
325- let bI = bc
326- let bJ = size(bI)
327- let bK = $Tuple2(nil, "")
328- func bL (bM,bN) = if ((bN >= bJ))
329- then bM
330- else bY(bM, bI[bN])
368+ let co = {
369+ let bD = bd
370+ let bE = size(bD)
371+ let bF = $Tuple2(nil, "")
372+ func bG (bH,bI) = if ((bI >= bE))
373+ then bH
374+ else cg(bH, bD[bI])
331375
332- func bO (bM,bN) = if ((bN >= bJ))
333- then bM
376+ func bJ (bH,bI) = if ((bI >= bE))
377+ then bH
334378 else throw("List size exceeds 9")
335379
336- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
380+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
337381 }
338- let ch = cg._1
339- let ci = cg._2
340- if ((0 >= size(ch)))
382+ let cp = co._1
383+ let cq = co._2
384+ if ((0 >= size(cp)))
341385 then $Tuple2(nil, 0)
342- else $Tuple2(((ch :+ IntegerEntry(bA, bh)) :+ aL(R, bU.transactionId, drop(ci, 1))), size(ch))
386+ else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp))
343387 }
344388 }
345389
346390
347-@Callable(bU)
348-func constructorV1 (cj,ck,cl,cm,cn) = if ((bU.caller != this))
391+@Callable(cc)
392+func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this))
349393 then throw("Permission denied")
350- else [StringEntry(M(), cj), StringEntry(N(), ck), IntegerEntry(O(), cl), IntegerEntry(P(), cm), StringEntry(ad(), cn)]
394+ else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)]
351395
352396
353397
354-@Callable(bU)
398+@Callable(cc)
355399 func stake () = {
356- let co = aX()
357- let cp = co._1
358- let cl = co._2
359- let cm = co._3
360- if ((size(bU.payments) != 1))
400+ let cw = aY()
401+ let cx = cw._1
402+ let ct = cw._2
403+ let cu = cw._3
404+ if ((size(cc.payments) != 1))
361405 then throw("Invalid payments size")
362406 else {
363- let cq = bU.payments[0]
364- let aV = cq.amount
365- let cr = (("Invalid asset. " + toBase58String(cp)) + " is expected")
366- let be = valueOrErrorMessage(cq.assetId, cr)
367- if ((be != cp))
368- then throw(cr)
407+ let cy = cc.payments[0]
408+ let aW = cy.amount
409+ let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected")
410+ let bf = valueOrErrorMessage(cy.assetId, cz)
411+ if ((bf != cx))
412+ then throw(cz)
369413 else {
370- let R = bU.caller
371- let bV = toString(bU.caller)
372- let cs = valueOrElse(aZ(R), $Tuple3(true, 0, -1))
373- let by = cs._1
374- let ct = cs._2
375- let cu = cs._3
376- let cv = if (by)
377- then aV
378- else (aV + ct)
379- let cw = if (by)
414+ let S = cc.caller
415+ let cd = toString(cc.caller)
416+ let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1))
417+ let bN = cA._1
418+ let cB = cA._2
419+ let cC = cA._3
420+ let cD = if (bN)
421+ then aW
422+ else (aW + cB)
423+ let cE = if (bN)
380424 then height
381- else ay(invoke(F, "mergeStakesREADONLY", [aV, height, ct, cu, cm], nil))
382- if ((cl > cv))
383- then throw(("Min lock amount is " + toString(cl)))
425+ else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil))
426+ if ((ct > cD))
427+ then throw(("Min lock amount is " + toString(ct)))
384428 else {
385- let cx = aM(aV, 1, if (by)
429+ let cF = aN(aW, 1, if (bN)
386430 then 1
387431 else 0)
388- let cy = cx._1
389- let cz = cx._2
390- let cA = cx._3
391- ((([aK("stake", R, bU.transactionId, ct, cu, cv, cw)] ++ bx(by, bV, ct)) ++ aU(R, cv, cw)) ++ cy)
432+ let cG = cF._1
433+ let cH = cF._2
434+ let cI = cF._3
435+ ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG)
392436 }
393437 }
394438 }
396440
397441
398442
399-@Callable(bU)
400-func unstake (aV) = if ((size(bU.payments) != 0))
443+@Callable(cc)
444+func unstake (aW) = if ((size(cc.payments) != 0))
401445 then throw("unstake doesn't require any payment")
402446 else {
403- let R = bU.caller
404- let bV = toString(R)
405- let cB = aX()
406- let cp = cB._1
407- let cl = cB._2
408- let cm = cB._3
409- let cC = ba(R)
410- let by = cC._1
411- let ct = cC._2
412- let cD = cC._3
413- if ((0 >= ct))
447+ let S = cc.caller
448+ let cd = toString(S)
449+ let cJ = aY()
450+ let cx = cJ._1
451+ let ct = cJ._2
452+ let cu = cJ._3
453+ let cK = bb(S)
454+ let bN = cK._1
455+ let cB = cK._2
456+ let cL = cK._3
457+ if ((0 >= cB))
414458 then throw("Nothing to unstake")
415- else if ((aV > ct))
416- then throw(((("Requested " + toString(aV)) + ", but staked only ") + toString(ct)))
459+ else if ((aW > cB))
460+ then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB)))
417461 else {
418- let cE = value(blockInfoByHeight(height)).timestamp
419- let cF = valueOrElse(getInteger(I, K(bV)), 0)
420- if ((cF >= cE))
421- then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cF)))
462+ let cM = value(blockInfoByHeight(height)).timestamp
463+ let cN = valueOrElse(getInteger(J, L(cd)), 0)
464+ if ((cN >= cM))
465+ then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN)))
422466 else {
423- let cG = ay(invoke(F, "getUnstakeComissionAmountREADONLY", [aV, cD, cm], nil))
424- let cH = aM(-(aV), if ((aV == ct))
467+ let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil))
468+ let cP = aN(-(aW), if ((aW == cB))
425469 then -1
426- else 0, if ((aV == ct))
470+ else 0, if ((aW == cB))
427471 then -1
428472 else 0)
429- let cy = cH._1
430- let cz = cH._2
431- let cA = cH._3
432- ((([ScriptTransfer(R, (aV - cG), cp), ScriptTransfer(H, cG, cp), aK("unstake", R, bU.transactionId, ct, cD, (ct - aV), cD)] ++ bx(false, bV, ct)) ++ aU(R, (ct - aV), cD)) ++ cy)
473+ let cG = cP._1
474+ let cH = cP._2
475+ let cI = cP._3
476+ ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG)
433477 }
434478 }
435479 }
436480
437481
438482
439-@Callable(bU)
483+@Callable(cc)
440484 func deposit () = {
441- let cz = aq(W(), 0)
442- if ((0 > cz))
485+ let cH = ar(X(), 0)
486+ if ((0 > cH))
443487 then throw("TODO: case is not supported")
444488 else {
445- let cI = ae()
446- let bh = aq(cI, -1)
447- let cJ = (bh + 1)
448- let cK = ab()
449- let cL = Z(bo(lastBlock.timestamp))
450- let cM = split(valueOrElse(getString(cK), bw), b)
451- let cN = split(valueOrElse(getString(cL), bw), b)
452- func cO (cP,cQ) = {
453- let aV = cQ.amount
454- let cR = toBase58String(valueOrElse(cQ.assetId, i))
455- if (!(contains(bb, cR)))
456- then throw(((bb + " doesn't contain ") + cR))
457- else if ((cz == 0))
458- then $Tuple4((cP._1 :+ bP(cR, aV)), (cP._2 :+ cR), (cP._3 :+ toBigInt(0)), (cP._4 :+ aV))
489+ let cQ = af()
490+ let bi = ar(cQ, -1)
491+ let cR = (bi + 1)
492+ let cS = ac()
493+ let cT = aa(bp(lastBlock.timestamp))
494+ let cU = by(split(valueOrElse(getString(cS), bx), b))
495+ func cV (bC,cW) = {
496+ let aW = cW.amount
497+ let cX = toBase58String(valueOrElse(cW.assetId, i))
498+ if (!(contains(bc, cX)))
499+ then throw(((bc + " doesn't contain ") + cX))
500+ else if ((cH == 0))
501+ then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW))
459502 else {
460- let cS = fraction(toBigInt(aV), g, toBigInt(cz))
461- $Tuple4(cP._1, (cP._2 :+ cR), (cP._3 :+ cS), (cP._4 :+ aV))
503+ let cY = fraction(toBigInt(aW), g, toBigInt(cH))
504+ $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW))
462505 }
463506 }
464507
465- let cT = {
466- let bI = bU.payments
467- let bJ = size(bI)
468- let bK = $Tuple4(nil, nil, nil, nil)
469- func bL (bM,bN) = if ((bN >= bJ))
470- then bM
471- else cO(bM, bI[bN])
508+ let cZ = {
509+ let bD = cc.payments
510+ let bE = size(bD)
511+ let bF = $Tuple4(nil, nil, nil, nil)
512+ func bG (bH,bI) = if ((bI >= bE))
513+ then bH
514+ else cV(bH, bD[bI])
472515
473- func bO (bM,bN) = if ((bN >= bJ))
474- then bM
516+ func bJ (bH,bI) = if ((bI >= bE))
517+ then bH
475518 else throw("List size exceeds 10")
476519
477- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
520+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
478521 }
479- func cU (bC,cV) = {
480- let cW = bC._4
481- let cX = at(ag(bh, cV), "0")
482- let D = indexOf(cT._2, cV)
483- let cY = if (isDefined(D))
522+ func da (bR,db) = {
523+ let dc = bR._3
524+ let dd = au(ah(bi, db), "0")
525+ let E = indexOf(cZ._2, db)
526+ let de = if (isDefined(E))
484527 then {
485- let cZ = value(D)
486- let da = cT._4[cZ]
487- $Tuple3(toString((parseBigIntValue(cX) + cT._3[cZ])), toString((parseIntValue(cM[(cW + 1)]) + da)), toString((parseIntValue(cN[(cW + 1)]) + da)))
528+ let df = value(E)
529+ let dg = cZ._4[df]
530+ $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg)))
488531 }
489- else $Tuple3(cX, cM[(cW + 1)], cN[(cW + 1)])
490- $Tuple4((bC._1 :+ StringEntry(ag(cJ, cV), cY._1)), ((bC._2 + b) + cY._2), ((bC._3 + b) + cY._3), (cW + 1))
532+ else $Tuple2(dd, cU[(dc + 1)])
533+ $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1))
491534 }
492535
493- let db = {
494- let bI = bc
495- let bJ = size(bI)
496- let bK = $Tuple4(nil, bv, bv, 0)
497- func dc (bM,bN) = if ((bN >= bJ))
498- then bM
499- else cU(bM, bI[bN])
536+ let dh = {
537+ let bD = bd
538+ let bE = size(bD)
539+ let bF = $Tuple3(nil, bw, 0)
540+ func di (bH,bI) = if ((bI >= bE))
541+ then bH
542+ else da(bH, bD[bI])
500543
501- func dd (bM,bN) = if ((bN >= bJ))
502- then bM
544+ func dj (bH,bI) = if ((bI >= bE))
545+ then bH
503546 else throw("List size exceeds 9")
504547
505- dd(dc(dc(dc(dc(dc(dc(dc(dc(dc(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
548+ dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
506549 }
507- $Tuple2(((((cT._1 ++ db._1) :+ IntegerEntry(cI, cJ)) :+ StringEntry(cK, db._2)) :+ StringEntry(cL, db._3)), cJ)
550+ let dk = bK(dh._2)
551+ $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR)
508552 }
509553 }
510554
511555
512556
513-@Callable(bU)
514-func claimRewards () = bT(bU.caller, bU)
557+@Callable(cc)
558+func claimRewards () = cb(cc.caller, cc)
515559
516560
517561
518-@Callable(bU)
519-func claimRewardsByOriginCaller () = bT(bU.originCaller, bU)
562+@Callable(cc)
563+func claimRewardsByOriginCaller () = cb(cc.originCaller, cc)
520564
521565
522566
523-@Callable(bU)
524-func unclaimedRewardsREADONLY (bV) = {
525- func de (bC,bD) = ((bC + makeString([bD, "0", "0"], ":")) + "_")
567+@Callable(cc)
568+func unclaimedRewardsREADONLY (cd) = {
569+ func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_")
526570
527- let df = if ((bV == ""))
571+ let dm = if ((cd == ""))
528572 then {
529- let bI = bc
530- let bJ = size(bI)
531- let bK = ""
532- func bL (bM,bN) = if ((bN >= bJ))
533- then bM
534- else de(bM, bI[bN])
573+ let bD = bd
574+ let bE = size(bD)
575+ let bF = ""
576+ func bG (bH,bI) = if ((bI >= bE))
577+ then bH
578+ else dl(bH, bD[bI])
535579
536- func bO (bM,bN) = if ((bN >= bJ))
537- then bM
580+ func bJ (bH,bI) = if ((bI >= bE))
581+ then bH
538582 else throw("List size exceeds 9")
539583
540- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
584+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
541585 }
542586 else {
543- let R = addressFromStringValue(bV)
544- let dg = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
545- let by = dg._1
546- let bz = dg._2
547- let bX = dg._3
548- let bf = toBigInt(bz)
549- let bA = af(bV)
550- let bg = aq(bA, -1)
551- let bh = aq(ae(), -1)
552- func bY (bC,bD) = {
553- let dh = bd(bV, bD, bf, bg, bh)
554- let bF = dh._1
555- let bG = dh._2
556- let bH = dh._3
557- let bm = dh._4
558- let di = valueOrElse(getInteger(ak(bV, bD)), 0)
559- ((bC + makeString([bD, toString(bF), toString(di)], ":")) + "_")
587+ let S = addressFromStringValue(cd)
588+ let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0))
589+ let bN = dn._1
590+ let bO = dn._2
591+ let cf = dn._3
592+ let bg = toBigInt(bO)
593+ let bP = ag(cd)
594+ let bh = ar(bP, -1)
595+ let bi = ar(af(), -1)
596+ func cg (bR,bS) = {
597+ let do = be(cd, bS, bg, bh, bi)
598+ let bU = do._1
599+ let bV = do._2
600+ let bW = do._3
601+ let bn = do._4
602+ let dp = valueOrElse(getInteger(al(cd, bS)), 0)
603+ ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_")
560604 }
561605
562- let bI = bc
563- let bJ = size(bI)
564- let bK = ""
565- func bL (bM,bN) = if ((bN >= bJ))
566- then bM
567- else bY(bM, bI[bN])
606+ let bD = bd
607+ let bE = size(bD)
608+ let bF = ""
609+ func bG (bH,bI) = if ((bI >= bE))
610+ then bH
611+ else cg(bH, bD[bI])
568612
569- func bO (bM,bN) = if ((bN >= bJ))
570- then bM
613+ func bJ (bH,bI) = if ((bI >= bE))
614+ then bH
571615 else throw("List size exceeds 9")
572616
573- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
617+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
574618 }
575- $Tuple2(nil, dropRight(df, 1))
619+ $Tuple2(nil, dropRight(dm, 1))
576620 }
577621
578622
579623
580-@Callable(bU)
581-func nsbtUnstakingSYSREADONLY (dj,dk) = {
582- let dl = if ((dj == ""))
624+@Callable(cc)
625+func nsbtUnstakingSYSREADONLY (dq,dr) = {
626+ let ds = if ((dq == ""))
583627 then [0, 0, 0, 0]
584628 else {
585- let R = addressFromStringValue(dj)
586- let dm = aX()
587- let dn = dm._1
588- let cl = dm._2
589- let cm = dm._3
590- let do = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
591- let by = do._1
592- let bz = do._2
593- let cD = do._3
594- let dp = if ((dk > bz))
595- then bz
596- else dk
597- let dq = (bz - dp)
598- let cG = if ((dp == 0))
629+ let S = addressFromStringValue(dq)
630+ let dt = aY()
631+ let du = dt._1
632+ let ct = dt._2
633+ let cu = dt._3
634+ let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0))
635+ let bN = dv._1
636+ let bO = dv._2
637+ let cL = dv._3
638+ let dw = if ((dr > bO))
639+ then bO
640+ else dr
641+ let dx = (bO - dw)
642+ let cO = if ((dw == 0))
599643 then 0
600- else ay(invoke(F, "getUnstakeComissionAmountREADONLY", [dp, cD, cm], nil))
601- let dr = (dp - cG)
602-[bz, dq, dr, cG]
644+ else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil))
645+ let dy = (dw - cO)
646+[bO, dx, dy, cO]
603647 }
604- $Tuple2(nil, dl)
648+ $Tuple2(nil, ds)
605649 }
606650
607651
608652
609-@Callable(bU)
610-func nsbtStakingSYSREADONLY (bV,ds) = {
611- let dt = aq(W(), 0)
612- if ((bV == ""))
613- then $Tuple2(nil, [0, dt, 0])
653+@Callable(cc)
654+func nsbtStakingSYSREADONLY (cd,dz) = {
655+ let dA = ar(X(), 0)
656+ if ((cd == ""))
657+ then $Tuple2(nil, [0, dA, 0])
614658 else {
615- let R = au(bV)
616- let du = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
617- let by = du._1
618- let dv = du._2
619- let bX = du._3
620- $Tuple2(nil, [dv, dt, bX])
659+ let S = av(cd)
660+ let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0))
661+ let bN = dB._1
662+ let dC = dB._2
663+ let cf = dB._3
664+ $Tuple2(nil, [dC, dA, cf])
621665 }
622666 }
623667
624668
625-@Verifier(dw)
626-func dx () = {
627- let dy = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
628- let dz = split(valueOrElse(getString(E, "%s__multisig"), dy), b)
629- let dA = ((((if (sigVerify(dw.bodyBytes, dw.proofs[0], fromBase58String(dz[0])))
669+@Verifier(dD)
670+func dE () = {
671+ let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
672+ let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b)
673+ let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0])))
630674 then 1
631- else 0) + (if (sigVerify(dw.bodyBytes, dw.proofs[1], fromBase58String(dz[1])))
675+ else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1])))
632676 then 1
633- else 0)) + (if (sigVerify(dw.bodyBytes, dw.proofs[2], fromBase58String(dz[2])))
677+ else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2])))
634678 then 1
635- else 0)) + (if (sigVerify(dw.bodyBytes, dw.proofs[3], fromBase58String(dz[3])))
679+ else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3])))
636680 then 2
637681 else 0))
638- (dA >= 3)
682+ (dH >= 3)
639683 }
640684
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = "__"
77
88 let c = 1000000
99
1010 let d = 100000000
1111
1212 let e = toBigInt(c)
1313
1414 let f = toBigInt(d)
1515
1616 let g = toBigInt(1000000000000000000)
1717
1818 let h = "WAVES"
1919
2020 let i = fromBase58String(h)
2121
2222 let j = 86400000
2323
24-let k = 1
24+let k = 9
2525
26-let l = 2
26+let l = 1
2727
28-let m = 3
28+let m = 2
2929
30-let n = 4
30+let n = 3
3131
32-let o = 5
32+let o = 4
3333
34-let p = 6
34+let p = 5
3535
36-let q = 7
36+let q = 6
3737
38-let r = 8
38+let r = 7
3939
40-let s = 9
40+let s = 8
4141
42-let t = 13
42+let t = 9
4343
44-func u (v,w) = valueOrErrorMessage(getString(v, w), (((("mandatory " + toString(v)) + ".") + w) + " is not defined"))
44+let u = 13
45+
46+func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
4547
4648
47-func x () = "%s%s__config__controlAddress"
49+func y () = "%s%s__config__controlAddress"
4850
4951
50-func y () = "%s__controlConfig"
52+func z () = "%s__controlConfig"
5153
5254
53-func z (A) = split_4C(u(A, y()), b)
55+func A (B) = split_4C(v(B, z()), b)
5456
5557
56-func B (C,D) = valueOrErrorMessage(addressFromString(C[D]), ("Control cfg doesn't contain address at index " + toString(D)))
58+func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E)))
5759
5860
59-let E = addressFromStringValue(valueOrElse(getString(this, x()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
61+let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
6062
61-let C = z(E)
63+let D = A(F)
6264
63-let F = B(C, n)
65+let G = C(D, o)
6466
65-let G = B(C, k)
67+let H = C(D, l)
6668
67-let H = B(C, l)
69+let I = C(D, m)
6870
69-let I = B(C, t)
71+let J = C(D, u)
7072
71-func J () = "bond_asset_id"
73+func K () = "bond_asset_id"
7274
7375
74-func K (L) = ("%s%s_userGnsbtReleaseTime__" + L)
76+func L (M) = ("%s%s_userGnsbtReleaseTime__" + M)
7577
7678
77-func M () = "%s__neutrinoContractAddress"
79+func N () = "%s__neutrinoContractAddress"
7880
7981
80-func N () = "%s__mathContract"
82+func O () = "%s__mathContract"
8183
8284
83-func O () = "%s__minLockAmount"
85+func P () = "%s__minLockAmount"
8486
8587
86-func P () = "%s__halfLife"
88+func Q () = "%s__halfLife"
8789
8890
89-func Q (R) = makeString(["%s%s%s", "paramByUser", toString(R), "amount"], a)
91+func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a)
9092
9193
92-func S (R) = makeString(["%s%s%s", "paramByUser", toString(R), "start"], a)
94+func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a)
9395
9496
95-func T (U,R,V) = makeString(["%s%s%s%s", "history", U, toString(R), toBase58String(V)], a)
97+func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a)
9698
9799
98-func W () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
100+func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
99101
100102
101-func X () = makeString(["%s%s", "stats", "locksCount"], a)
103+func Y () = makeString(["%s%s", "stats", "locksCount"], a)
102104
103105
104-func Y () = makeString(["%s%s", "stats", "activeUsersCount"], a)
106+func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a)
105107
106108
107-func Z (aa) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(aa)], a)
109+func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a)
108110
109111
110-func ab () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
112+func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
111113
112114
113-func ac () = "%s__nextPeriod"
115+func ad () = "%s__nextPeriod"
114116
115117
116-func ad () = "supportedRewardAssets"
118+func ae () = "supportedRewardAssets"
117119
118120
119-func ae () = makeString(["%s%s%s", "dep", "lastNum"], a)
121+func af () = makeString(["%s%s%s", "dep", "lastNum"], a)
120122
121123
122-func af (R) = makeString(["%s%s%s", "userRwdFromDepNum", R], a)
124+func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a)
123125
124126
125-func ag (ah,ai) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ah), ai], a)
127+func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a)
126128
127129
128-func aj (R,ai) = makeString(["%s%s%s", "rwd", R, ai], a)
130+func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a)
129131
130132
131-func ak (R,ai) = makeString(["%s%s%s", "clm", R, ai], a)
133+func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a)
132134
133135
134-func al (ai) = makeString(["%s%s", "notDistributed", ai], a)
136+func am (aj) = makeString(["%s%s", "notDistributed", aj], a)
135137
136138
137-func am (an,ao) = fraction(toBigInt(an), g, ao)
139+func an (ao,ap) = fraction(toBigInt(ao), g, ap)
138140
139141
140-func ap (w) = valueOrElse(getInteger(this, w), 0)
142+func aq (x) = valueOrElse(getInteger(this, x), 0)
141143
142144
143-func aq (w,ar) = valueOrElse(getInteger(this, w), ar)
145+func ar (x,as) = valueOrElse(getInteger(this, x), as)
144146
145147
146-func as (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
148+func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
147149
148150
149-func at (w,ar) = valueOrElse(getString(this, w), ar)
151+func au (x,as) = valueOrElse(getString(this, x), as)
150152
151153
152-func au (av) = valueOrErrorMessage(addressFromString(av), ("couldn't parse passed addressStr=" + av))
154+func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw))
153155
154156
155-func aw (ax) = if ((ax == h))
157+func ax (ay) = if ((ay == h))
156158 then unit
157- else fromBase58String(ax)
159+ else fromBase58String(ay)
158160
159161
160-func ay (az) = {
161- let aA = az
162- if ($isInstanceOf(aA, "Int"))
162+func az (aA) = {
163+ let aB = aA
164+ if ($isInstanceOf(aB, "Int"))
163165 then {
164- let aB = aA
165- aB
166+ let aC = aB
167+ aC
166168 }
167169 else throw("fail to cast into Int")
168170 }
169171
170172
171-func aC (aD,aE,aF,aG) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aD), toString(aE), toString(aF), toString(aG)], a)
173+func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a)
172174
173175
174-func aH (aI,aJ) = makeString(["%s%d%d%s", aI, toString(lastBlock.height), toString(lastBlock.timestamp), aJ], a)
176+func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a)
175177
176178
177-func aK (U,R,V,aD,aE,aF,aG) = StringEntry(T(U, R, V), aC(aD, aE, aF, aG))
179+func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH))
178180
179181
180-func aL (R,V,aJ) = StringEntry(T("claim", R, V), aH(toString(R), aJ))
182+func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK))
181183
182184
183-func aM (aN,aO,aP) = {
184- let aQ = ap(X())
185- let aR = ap(Y())
186- let aS = ap(W())
187- let aT = (aS + aN)
188- $Tuple3([IntegerEntry(X(), (aQ + aO)), IntegerEntry(Y(), (aR + aP)), IntegerEntry(W(), aT)], aS, aT)
185+func aN (aO,aP,aQ) = {
186+ let aR = aq(Y())
187+ let aS = aq(Z())
188+ let aT = aq(X())
189+ let aU = (aT + aO)
190+ $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU)
189191 }
190192
191193
192-func aU (R,aV,aW) = [IntegerEntry(Q(R), aV), IntegerEntry(S(R), aW)]
194+func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)]
193195
194196
195-func aX () = $Tuple3(fromBase58String(getStringValue(G, J())), as(O()), as(P()))
197+func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q()))
196198
197199
198-func aY (R) = (aq(Q(R), 0) > 0)
200+func aZ (S) = (ar(R(S), 0) > 0)
199201
200202
201-func aZ (R) = if (aY(R))
202- then $Tuple3(false, as(Q(R)), as(S(R)))
203+func ba (S) = if (aZ(S))
204+ then $Tuple3(false, at(R(S)), at(T(S)))
203205 else unit
204206
205207
206-func ba (R) = valueOrErrorMessage(aZ(R), (("User " + toString(R)) + " is not defined"))
208+func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined"))
207209
208210
209-let bb = at(ad(), "")
211+let bc = au(ae(), "")
210212
211-let bc = split(bb, "_")
213+let bd = split(bc, "_")
212214
213-func bd (R,be,bf,bg,bh) = {
214- let bi = ag(bh, be)
215- let bj = parseBigIntValue(at(ag(bh, be), "0"))
216- let bk = parseBigIntValue(at(ag(bg, be), "0"))
217- let bl = toInt(fraction((bj - bk), bf, g))
218- let bm = aj(R, be)
219- let bn = aq(bm, 0)
220- $Tuple4((bn + bl), bn, bl, bm)
215+func be (S,bf,bg,bh,bi) = {
216+ let bj = ah(bi, bf)
217+ let bk = parseBigIntValue(au(ah(bi, bf), "0"))
218+ let bl = parseBigIntValue(au(ah(bh, bf), "0"))
219+ let bm = toInt(fraction((bk - bl), bg, g))
220+ let bn = ak(S, bf)
221+ let bo = ar(bn, 0)
222+ $Tuple4((bo + bm), bo, bm, bn)
221223 }
222224
223225
224-func bo (aa) = ((aa / j) * j)
226+func bp (ab) = ((ab / j) * j)
225227
226228
227-func bp (bq,br,bs) = {
228- let bt = valueOrErrorMessage(indexOf(bq, br), ((("there is no substring " + br) + " in ") + bq))
229- if ((bt == 0))
229+func bq (br,bs,bt) = {
230+ let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br))
231+ if ((bu == 0))
230232 then 0
231233 else {
232- let bu = take(bq, bt)
233- (size(split(bu, bs)) - 1)
234+ let bv = take(br, bu)
235+ (size(split(bv, bt)) - 1)
234236 }
235237 }
236238
237239
238-let bv = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
240+let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
239241
240-let bw = (bv + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
242+let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
241243
242-func bx (by,R,bz) = {
243- let bf = toBigInt(bz)
244- let bA = af(R)
245- let bg = aq(bA, -1)
246- let bh = aq(ae(), -1)
247- func bB (bC,bD) = {
248- let bE = bd(R, bD, bf, bg, bh)
249- let bF = bE._1
250- let bG = bE._2
251- let bH = bE._3
252- let bm = bE._4
253- (bC :+ IntegerEntry(bm, bF))
254- }
244+func by (bz) = {
245+ let bA = (size(bz) - 1)
246+ func bB (bC,E) = if ((bA > E))
247+ then bC
248+ else (bC :+ "0")
255249
256- if (if ((bh == -1))
257- then (bg == -1)
258- else false)
259- then nil
260- else if (if ((bh == -1))
261- then (bg > -1)
262- else false)
263- then throw("invalid depositNumLast and depositNumUser state")
264- else if (if ((bh > -1))
265- then (bg >= -1)
266- else false)
267- then if (by)
268- then [IntegerEntry(bA, bh)]
269- else ({
270- let bI = bc
271- let bJ = size(bI)
272- let bK = nil
273- func bL (bM,bN) = if ((bN >= bJ))
274- then bM
275- else bB(bM, bI[bN])
250+ let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
251+ let bE = size(bD)
252+ let bF = bz
253+ func bG (bH,bI) = if ((bI >= bE))
254+ then bH
255+ else bB(bH, bD[bI])
276256
277- func bO (bM,bN) = if ((bN >= bJ))
278- then bM
279- else throw("List size exceeds 9")
257+ func bJ (bH,bI) = if ((bI >= bE))
258+ then bH
259+ else throw("List size exceeds 18")
280260
281- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
282- } :+ IntegerEntry(bA, bh))
283- else throw(((("uncovered condition: depositNumLast=" + toString(bh)) + " depositNumUser=") + toString(bg)))
261+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
284262 }
285263
286264
287-func bP (ai,bQ) = {
288- let bR = al(ai)
289- let bS = aq(bR, 0)
290- IntegerEntry(bR, (bS + bQ))
265+func bK (bz) = {
266+ let bA = (size(split_4C(bz, b)) - 1)
267+ func bL (bC,E) = if ((bA > E))
268+ then bC
269+ else (bC + "__0")
270+
271+ let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
272+ let bE = size(bD)
273+ let bF = bz
274+ func bG (bH,bI) = if ((bI >= bE))
275+ then bH
276+ else bL(bH, bD[bI])
277+
278+ func bJ (bH,bI) = if ((bI >= bE))
279+ then bH
280+ else throw("List size exceeds 18")
281+
282+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
291283 }
292284
293285
294-func bT (R,bU) = {
295- let bV = toString(R)
296- if ((size(bU.payments) > 0))
286+func bM (bN,S,bO) = {
287+ let bg = toBigInt(bO)
288+ let bP = ag(S)
289+ let bh = ar(bP, -1)
290+ let bi = ar(af(), -1)
291+ func bQ (bR,bS) = {
292+ let bT = be(S, bS, bg, bh, bi)
293+ let bU = bT._1
294+ let bV = bT._2
295+ let bW = bT._3
296+ let bn = bT._4
297+ (bR :+ IntegerEntry(bn, bU))
298+ }
299+
300+ if (if ((bi == -1))
301+ then (bh == -1)
302+ else false)
303+ then nil
304+ else if (if ((bi == -1))
305+ then (bh > -1)
306+ else false)
307+ then throw("invalid depositNumLast and depositNumUser state")
308+ else if (if ((bi > -1))
309+ then (bh >= -1)
310+ else false)
311+ then if (bN)
312+ then [IntegerEntry(bP, bi)]
313+ else ({
314+ let bD = bd
315+ let bE = size(bD)
316+ let bF = nil
317+ func bG (bH,bI) = if ((bI >= bE))
318+ then bH
319+ else bQ(bH, bD[bI])
320+
321+ func bJ (bH,bI) = if ((bI >= bE))
322+ then bH
323+ else throw("List size exceeds 9")
324+
325+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
326+ } :+ IntegerEntry(bP, bi))
327+ else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh)))
328+ }
329+
330+
331+func bX (aj,bY) = {
332+ let bZ = am(aj)
333+ let ca = ar(bZ, 0)
334+ IntegerEntry(bZ, (ca + bY))
335+ }
336+
337+
338+func cb (S,cc) = {
339+ let cd = toString(S)
340+ if ((size(cc.payments) > 0))
297341 then throw("payments are not accepted")
298342 else {
299- let bW = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
300- let by = bW._1
301- let bz = bW._2
302- let bX = bW._3
303- let bf = toBigInt(bz)
304- let bA = af(bV)
305- let bg = aq(bA, -1)
306- let bh = aq(ae(), -1)
307- func bY (bC,bD) = {
308- let bZ = bd(bV, bD, bf, bg, bh)
309- let bF = bZ._1
310- let bG = bZ._2
311- let bH = bZ._3
312- let bm = bZ._4
313- let ca = ak(bV, bD)
314- let cb = bC
315- let cc = cb._1
316- let cd = cb._2
317- let ce = makeString([bD, toString(bF)], ":")
318- let cf = makeString([cd, ce], "_")
319- if ((0 >= bF))
320- then $Tuple2(cc, cf)
321- else $Tuple2((((cc :+ ScriptTransfer(R, bF, aw(bD))) :+ IntegerEntry(ca, (valueOrElse(getInteger(ca), 0) + bF))) :+ IntegerEntry(bm, 0)), cf)
343+ let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0))
344+ let bN = ce._1
345+ let bO = ce._2
346+ let cf = ce._3
347+ let bg = toBigInt(bO)
348+ let bP = ag(cd)
349+ let bh = ar(bP, -1)
350+ let bi = ar(af(), -1)
351+ func cg (bR,bS) = {
352+ let ch = be(cd, bS, bg, bh, bi)
353+ let bU = ch._1
354+ let bV = ch._2
355+ let bW = ch._3
356+ let bn = ch._4
357+ let ci = al(cd, bS)
358+ let cj = bR
359+ let ck = cj._1
360+ let cl = cj._2
361+ let cm = makeString([bS, toString(bU)], ":")
362+ let cn = makeString([cl, cm], "_")
363+ if ((0 >= bU))
364+ then $Tuple2(ck, cn)
365+ else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn)
322366 }
323367
324- let cg = {
325- let bI = bc
326- let bJ = size(bI)
327- let bK = $Tuple2(nil, "")
328- func bL (bM,bN) = if ((bN >= bJ))
329- then bM
330- else bY(bM, bI[bN])
368+ let co = {
369+ let bD = bd
370+ let bE = size(bD)
371+ let bF = $Tuple2(nil, "")
372+ func bG (bH,bI) = if ((bI >= bE))
373+ then bH
374+ else cg(bH, bD[bI])
331375
332- func bO (bM,bN) = if ((bN >= bJ))
333- then bM
376+ func bJ (bH,bI) = if ((bI >= bE))
377+ then bH
334378 else throw("List size exceeds 9")
335379
336- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
380+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
337381 }
338- let ch = cg._1
339- let ci = cg._2
340- if ((0 >= size(ch)))
382+ let cp = co._1
383+ let cq = co._2
384+ if ((0 >= size(cp)))
341385 then $Tuple2(nil, 0)
342- else $Tuple2(((ch :+ IntegerEntry(bA, bh)) :+ aL(R, bU.transactionId, drop(ci, 1))), size(ch))
386+ else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp))
343387 }
344388 }
345389
346390
347-@Callable(bU)
348-func constructorV1 (cj,ck,cl,cm,cn) = if ((bU.caller != this))
391+@Callable(cc)
392+func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this))
349393 then throw("Permission denied")
350- else [StringEntry(M(), cj), StringEntry(N(), ck), IntegerEntry(O(), cl), IntegerEntry(P(), cm), StringEntry(ad(), cn)]
394+ else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)]
351395
352396
353397
354-@Callable(bU)
398+@Callable(cc)
355399 func stake () = {
356- let co = aX()
357- let cp = co._1
358- let cl = co._2
359- let cm = co._3
360- if ((size(bU.payments) != 1))
400+ let cw = aY()
401+ let cx = cw._1
402+ let ct = cw._2
403+ let cu = cw._3
404+ if ((size(cc.payments) != 1))
361405 then throw("Invalid payments size")
362406 else {
363- let cq = bU.payments[0]
364- let aV = cq.amount
365- let cr = (("Invalid asset. " + toBase58String(cp)) + " is expected")
366- let be = valueOrErrorMessage(cq.assetId, cr)
367- if ((be != cp))
368- then throw(cr)
407+ let cy = cc.payments[0]
408+ let aW = cy.amount
409+ let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected")
410+ let bf = valueOrErrorMessage(cy.assetId, cz)
411+ if ((bf != cx))
412+ then throw(cz)
369413 else {
370- let R = bU.caller
371- let bV = toString(bU.caller)
372- let cs = valueOrElse(aZ(R), $Tuple3(true, 0, -1))
373- let by = cs._1
374- let ct = cs._2
375- let cu = cs._3
376- let cv = if (by)
377- then aV
378- else (aV + ct)
379- let cw = if (by)
414+ let S = cc.caller
415+ let cd = toString(cc.caller)
416+ let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1))
417+ let bN = cA._1
418+ let cB = cA._2
419+ let cC = cA._3
420+ let cD = if (bN)
421+ then aW
422+ else (aW + cB)
423+ let cE = if (bN)
380424 then height
381- else ay(invoke(F, "mergeStakesREADONLY", [aV, height, ct, cu, cm], nil))
382- if ((cl > cv))
383- then throw(("Min lock amount is " + toString(cl)))
425+ else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil))
426+ if ((ct > cD))
427+ then throw(("Min lock amount is " + toString(ct)))
384428 else {
385- let cx = aM(aV, 1, if (by)
429+ let cF = aN(aW, 1, if (bN)
386430 then 1
387431 else 0)
388- let cy = cx._1
389- let cz = cx._2
390- let cA = cx._3
391- ((([aK("stake", R, bU.transactionId, ct, cu, cv, cw)] ++ bx(by, bV, ct)) ++ aU(R, cv, cw)) ++ cy)
432+ let cG = cF._1
433+ let cH = cF._2
434+ let cI = cF._3
435+ ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG)
392436 }
393437 }
394438 }
395439 }
396440
397441
398442
399-@Callable(bU)
400-func unstake (aV) = if ((size(bU.payments) != 0))
443+@Callable(cc)
444+func unstake (aW) = if ((size(cc.payments) != 0))
401445 then throw("unstake doesn't require any payment")
402446 else {
403- let R = bU.caller
404- let bV = toString(R)
405- let cB = aX()
406- let cp = cB._1
407- let cl = cB._2
408- let cm = cB._3
409- let cC = ba(R)
410- let by = cC._1
411- let ct = cC._2
412- let cD = cC._3
413- if ((0 >= ct))
447+ let S = cc.caller
448+ let cd = toString(S)
449+ let cJ = aY()
450+ let cx = cJ._1
451+ let ct = cJ._2
452+ let cu = cJ._3
453+ let cK = bb(S)
454+ let bN = cK._1
455+ let cB = cK._2
456+ let cL = cK._3
457+ if ((0 >= cB))
414458 then throw("Nothing to unstake")
415- else if ((aV > ct))
416- then throw(((("Requested " + toString(aV)) + ", but staked only ") + toString(ct)))
459+ else if ((aW > cB))
460+ then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB)))
417461 else {
418- let cE = value(blockInfoByHeight(height)).timestamp
419- let cF = valueOrElse(getInteger(I, K(bV)), 0)
420- if ((cF >= cE))
421- then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cF)))
462+ let cM = value(blockInfoByHeight(height)).timestamp
463+ let cN = valueOrElse(getInteger(J, L(cd)), 0)
464+ if ((cN >= cM))
465+ then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN)))
422466 else {
423- let cG = ay(invoke(F, "getUnstakeComissionAmountREADONLY", [aV, cD, cm], nil))
424- let cH = aM(-(aV), if ((aV == ct))
467+ let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil))
468+ let cP = aN(-(aW), if ((aW == cB))
425469 then -1
426- else 0, if ((aV == ct))
470+ else 0, if ((aW == cB))
427471 then -1
428472 else 0)
429- let cy = cH._1
430- let cz = cH._2
431- let cA = cH._3
432- ((([ScriptTransfer(R, (aV - cG), cp), ScriptTransfer(H, cG, cp), aK("unstake", R, bU.transactionId, ct, cD, (ct - aV), cD)] ++ bx(false, bV, ct)) ++ aU(R, (ct - aV), cD)) ++ cy)
473+ let cG = cP._1
474+ let cH = cP._2
475+ let cI = cP._3
476+ ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG)
433477 }
434478 }
435479 }
436480
437481
438482
439-@Callable(bU)
483+@Callable(cc)
440484 func deposit () = {
441- let cz = aq(W(), 0)
442- if ((0 > cz))
485+ let cH = ar(X(), 0)
486+ if ((0 > cH))
443487 then throw("TODO: case is not supported")
444488 else {
445- let cI = ae()
446- let bh = aq(cI, -1)
447- let cJ = (bh + 1)
448- let cK = ab()
449- let cL = Z(bo(lastBlock.timestamp))
450- let cM = split(valueOrElse(getString(cK), bw), b)
451- let cN = split(valueOrElse(getString(cL), bw), b)
452- func cO (cP,cQ) = {
453- let aV = cQ.amount
454- let cR = toBase58String(valueOrElse(cQ.assetId, i))
455- if (!(contains(bb, cR)))
456- then throw(((bb + " doesn't contain ") + cR))
457- else if ((cz == 0))
458- then $Tuple4((cP._1 :+ bP(cR, aV)), (cP._2 :+ cR), (cP._3 :+ toBigInt(0)), (cP._4 :+ aV))
489+ let cQ = af()
490+ let bi = ar(cQ, -1)
491+ let cR = (bi + 1)
492+ let cS = ac()
493+ let cT = aa(bp(lastBlock.timestamp))
494+ let cU = by(split(valueOrElse(getString(cS), bx), b))
495+ func cV (bC,cW) = {
496+ let aW = cW.amount
497+ let cX = toBase58String(valueOrElse(cW.assetId, i))
498+ if (!(contains(bc, cX)))
499+ then throw(((bc + " doesn't contain ") + cX))
500+ else if ((cH == 0))
501+ then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW))
459502 else {
460- let cS = fraction(toBigInt(aV), g, toBigInt(cz))
461- $Tuple4(cP._1, (cP._2 :+ cR), (cP._3 :+ cS), (cP._4 :+ aV))
503+ let cY = fraction(toBigInt(aW), g, toBigInt(cH))
504+ $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW))
462505 }
463506 }
464507
465- let cT = {
466- let bI = bU.payments
467- let bJ = size(bI)
468- let bK = $Tuple4(nil, nil, nil, nil)
469- func bL (bM,bN) = if ((bN >= bJ))
470- then bM
471- else cO(bM, bI[bN])
508+ let cZ = {
509+ let bD = cc.payments
510+ let bE = size(bD)
511+ let bF = $Tuple4(nil, nil, nil, nil)
512+ func bG (bH,bI) = if ((bI >= bE))
513+ then bH
514+ else cV(bH, bD[bI])
472515
473- func bO (bM,bN) = if ((bN >= bJ))
474- then bM
516+ func bJ (bH,bI) = if ((bI >= bE))
517+ then bH
475518 else throw("List size exceeds 10")
476519
477- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
520+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
478521 }
479- func cU (bC,cV) = {
480- let cW = bC._4
481- let cX = at(ag(bh, cV), "0")
482- let D = indexOf(cT._2, cV)
483- let cY = if (isDefined(D))
522+ func da (bR,db) = {
523+ let dc = bR._3
524+ let dd = au(ah(bi, db), "0")
525+ let E = indexOf(cZ._2, db)
526+ let de = if (isDefined(E))
484527 then {
485- let cZ = value(D)
486- let da = cT._4[cZ]
487- $Tuple3(toString((parseBigIntValue(cX) + cT._3[cZ])), toString((parseIntValue(cM[(cW + 1)]) + da)), toString((parseIntValue(cN[(cW + 1)]) + da)))
528+ let df = value(E)
529+ let dg = cZ._4[df]
530+ $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg)))
488531 }
489- else $Tuple3(cX, cM[(cW + 1)], cN[(cW + 1)])
490- $Tuple4((bC._1 :+ StringEntry(ag(cJ, cV), cY._1)), ((bC._2 + b) + cY._2), ((bC._3 + b) + cY._3), (cW + 1))
532+ else $Tuple2(dd, cU[(dc + 1)])
533+ $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1))
491534 }
492535
493- let db = {
494- let bI = bc
495- let bJ = size(bI)
496- let bK = $Tuple4(nil, bv, bv, 0)
497- func dc (bM,bN) = if ((bN >= bJ))
498- then bM
499- else cU(bM, bI[bN])
536+ let dh = {
537+ let bD = bd
538+ let bE = size(bD)
539+ let bF = $Tuple3(nil, bw, 0)
540+ func di (bH,bI) = if ((bI >= bE))
541+ then bH
542+ else da(bH, bD[bI])
500543
501- func dd (bM,bN) = if ((bN >= bJ))
502- then bM
544+ func dj (bH,bI) = if ((bI >= bE))
545+ then bH
503546 else throw("List size exceeds 9")
504547
505- dd(dc(dc(dc(dc(dc(dc(dc(dc(dc(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
548+ dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
506549 }
507- $Tuple2(((((cT._1 ++ db._1) :+ IntegerEntry(cI, cJ)) :+ StringEntry(cK, db._2)) :+ StringEntry(cL, db._3)), cJ)
550+ let dk = bK(dh._2)
551+ $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR)
508552 }
509553 }
510554
511555
512556
513-@Callable(bU)
514-func claimRewards () = bT(bU.caller, bU)
557+@Callable(cc)
558+func claimRewards () = cb(cc.caller, cc)
515559
516560
517561
518-@Callable(bU)
519-func claimRewardsByOriginCaller () = bT(bU.originCaller, bU)
562+@Callable(cc)
563+func claimRewardsByOriginCaller () = cb(cc.originCaller, cc)
520564
521565
522566
523-@Callable(bU)
524-func unclaimedRewardsREADONLY (bV) = {
525- func de (bC,bD) = ((bC + makeString([bD, "0", "0"], ":")) + "_")
567+@Callable(cc)
568+func unclaimedRewardsREADONLY (cd) = {
569+ func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_")
526570
527- let df = if ((bV == ""))
571+ let dm = if ((cd == ""))
528572 then {
529- let bI = bc
530- let bJ = size(bI)
531- let bK = ""
532- func bL (bM,bN) = if ((bN >= bJ))
533- then bM
534- else de(bM, bI[bN])
573+ let bD = bd
574+ let bE = size(bD)
575+ let bF = ""
576+ func bG (bH,bI) = if ((bI >= bE))
577+ then bH
578+ else dl(bH, bD[bI])
535579
536- func bO (bM,bN) = if ((bN >= bJ))
537- then bM
580+ func bJ (bH,bI) = if ((bI >= bE))
581+ then bH
538582 else throw("List size exceeds 9")
539583
540- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
584+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
541585 }
542586 else {
543- let R = addressFromStringValue(bV)
544- let dg = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
545- let by = dg._1
546- let bz = dg._2
547- let bX = dg._3
548- let bf = toBigInt(bz)
549- let bA = af(bV)
550- let bg = aq(bA, -1)
551- let bh = aq(ae(), -1)
552- func bY (bC,bD) = {
553- let dh = bd(bV, bD, bf, bg, bh)
554- let bF = dh._1
555- let bG = dh._2
556- let bH = dh._3
557- let bm = dh._4
558- let di = valueOrElse(getInteger(ak(bV, bD)), 0)
559- ((bC + makeString([bD, toString(bF), toString(di)], ":")) + "_")
587+ let S = addressFromStringValue(cd)
588+ let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0))
589+ let bN = dn._1
590+ let bO = dn._2
591+ let cf = dn._3
592+ let bg = toBigInt(bO)
593+ let bP = ag(cd)
594+ let bh = ar(bP, -1)
595+ let bi = ar(af(), -1)
596+ func cg (bR,bS) = {
597+ let do = be(cd, bS, bg, bh, bi)
598+ let bU = do._1
599+ let bV = do._2
600+ let bW = do._3
601+ let bn = do._4
602+ let dp = valueOrElse(getInteger(al(cd, bS)), 0)
603+ ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_")
560604 }
561605
562- let bI = bc
563- let bJ = size(bI)
564- let bK = ""
565- func bL (bM,bN) = if ((bN >= bJ))
566- then bM
567- else bY(bM, bI[bN])
606+ let bD = bd
607+ let bE = size(bD)
608+ let bF = ""
609+ func bG (bH,bI) = if ((bI >= bE))
610+ then bH
611+ else cg(bH, bD[bI])
568612
569- func bO (bM,bN) = if ((bN >= bJ))
570- then bM
613+ func bJ (bH,bI) = if ((bI >= bE))
614+ then bH
571615 else throw("List size exceeds 9")
572616
573- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
617+ bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
574618 }
575- $Tuple2(nil, dropRight(df, 1))
619+ $Tuple2(nil, dropRight(dm, 1))
576620 }
577621
578622
579623
580-@Callable(bU)
581-func nsbtUnstakingSYSREADONLY (dj,dk) = {
582- let dl = if ((dj == ""))
624+@Callable(cc)
625+func nsbtUnstakingSYSREADONLY (dq,dr) = {
626+ let ds = if ((dq == ""))
583627 then [0, 0, 0, 0]
584628 else {
585- let R = addressFromStringValue(dj)
586- let dm = aX()
587- let dn = dm._1
588- let cl = dm._2
589- let cm = dm._3
590- let do = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
591- let by = do._1
592- let bz = do._2
593- let cD = do._3
594- let dp = if ((dk > bz))
595- then bz
596- else dk
597- let dq = (bz - dp)
598- let cG = if ((dp == 0))
629+ let S = addressFromStringValue(dq)
630+ let dt = aY()
631+ let du = dt._1
632+ let ct = dt._2
633+ let cu = dt._3
634+ let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0))
635+ let bN = dv._1
636+ let bO = dv._2
637+ let cL = dv._3
638+ let dw = if ((dr > bO))
639+ then bO
640+ else dr
641+ let dx = (bO - dw)
642+ let cO = if ((dw == 0))
599643 then 0
600- else ay(invoke(F, "getUnstakeComissionAmountREADONLY", [dp, cD, cm], nil))
601- let dr = (dp - cG)
602-[bz, dq, dr, cG]
644+ else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil))
645+ let dy = (dw - cO)
646+[bO, dx, dy, cO]
603647 }
604- $Tuple2(nil, dl)
648+ $Tuple2(nil, ds)
605649 }
606650
607651
608652
609-@Callable(bU)
610-func nsbtStakingSYSREADONLY (bV,ds) = {
611- let dt = aq(W(), 0)
612- if ((bV == ""))
613- then $Tuple2(nil, [0, dt, 0])
653+@Callable(cc)
654+func nsbtStakingSYSREADONLY (cd,dz) = {
655+ let dA = ar(X(), 0)
656+ if ((cd == ""))
657+ then $Tuple2(nil, [0, dA, 0])
614658 else {
615- let R = au(bV)
616- let du = valueOrElse(aZ(R), $Tuple3(true, 0, 0))
617- let by = du._1
618- let dv = du._2
619- let bX = du._3
620- $Tuple2(nil, [dv, dt, bX])
659+ let S = av(cd)
660+ let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0))
661+ let bN = dB._1
662+ let dC = dB._2
663+ let cf = dB._3
664+ $Tuple2(nil, [dC, dA, cf])
621665 }
622666 }
623667
624668
625-@Verifier(dw)
626-func dx () = {
627- let dy = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
628- let dz = split(valueOrElse(getString(E, "%s__multisig"), dy), b)
629- let dA = ((((if (sigVerify(dw.bodyBytes, dw.proofs[0], fromBase58String(dz[0])))
669+@Verifier(dD)
670+func dE () = {
671+ let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
672+ let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b)
673+ let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0])))
630674 then 1
631- else 0) + (if (sigVerify(dw.bodyBytes, dw.proofs[1], fromBase58String(dz[1])))
675+ else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1])))
632676 then 1
633- else 0)) + (if (sigVerify(dw.bodyBytes, dw.proofs[2], fromBase58String(dz[2])))
677+ else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2])))
634678 then 1
635- else 0)) + (if (sigVerify(dw.bodyBytes, dw.proofs[3], fromBase58String(dz[3])))
679+ else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3])))
636680 then 2
637681 else 0))
638- (dA >= 3)
682+ (dH >= 3)
639683 }
640684

github/deemru/w8io/873ac7e 
270.13 ms