tx · dVMkCyzvEiRQ6mJupstEwWws5e9SBsENr7j72X9DQB8

3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z:  -0.02200000 Waves

2025.02.15 00:49 [3503939] smart account 3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z > SELF 0.00000000 Waves

{ "type": 13, "id": "dVMkCyzvEiRQ6mJupstEwWws5e9SBsENr7j72X9DQB8", "fee": 2200000, "feeAssetId": null, "timestamp": 1739569823621, "version": 2, "chainId": 84, "sender": "3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z", "senderPublicKey": "5CoDbXxoqnvJpx9GrS6M4G5GYJXh9rcoiXJz7RYTPVkL", "proofs": [ "3uqjAT1ZZ8P1XKf7M3SkEY7Jchsay3DZg4iGwVuEmdKpaUybg4bVfQyTVxGHfurLdVLzsD8Qaqd1eEbEmwsAE5vT" ], "script": "base64:BgIzCAISCgoIAQgEAhEYFBISBQoDCAgIEgASAwoBARIAEgASABIDCgEBEgASAwoBCBIDCgEIQwADTTE2AICAhP6m3uERAAJNOACAwtcvAA5TVEFLRVJTX0FNT1VOVACAgMHfybe4BAALVEVBTV9BTU9VTlQAgICapuqv4wEADU1BUktFVF9BTU9VTlQAgICc5f2e1AoAD1JFU0VSVkVEX0FNT1VOVACAgI2T9ddxAAtZRUFSX0JMT0NLUwkAaAIA7QIAoAsAE1RFQU1fVkVTVElOR19QRVJJT0QFC1lFQVJfQkxPQ0tTAAxTVEFLRV9QRVJJT0QJAGgCAAUFC1lFQVJfQkxPQ0tTAAtCTEVTU19QUklDRQCA5JfQEgANTE9UVEVSWV9QUklDRQCA0NvD9AIAE0RFRkFVTFRfRk9NT19QRVJJT0QAPAAPTUlOX0ZPTU9fUEVSSU9EAAIADFJBTkRPTV9ERUxBWQACABRDVVJSRU5UX0pBQ0tQT1RfUEVSQwAyABFORVhUX0pBQ0tQT1RfUEVSQwAUAAlURUFNX1BFUkMACgAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACXd4RmFjdG9yeQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1A2OHpOaXVmc3UxdmlacHUxYVkzY2RhaFJSS2N2VjVOOTMDCQAAAgEBVAUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM042TEhqZkdiNkZnY3k3WXNWY054R3lQVGo0OVhiUUFpanEJAAIBAg1Vbmtub3duIGNoYWluAAhVU0RUX1BQVAIsRzVXV1d6elZzV1J5ekdmMzJ4b2pibmZwN2dYYldyZ3FKVDhSY1ZXRWZMbUMADmdvcmNBc3NldElkS2V5Agtnb3JjQXNzZXRJZAALZ29yY0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoQgBBQ5nb3JjQXNzZXRJZEtleQIWR09SQyBpcyBub3QgaXNzdWVkIHlldAAMaXNzdWVUaW1lS2V5Aglpc3N1ZVRpbWUAEXRlYW1BbW91bnRMZWZ0S2V5Ag50ZWFtQW1vdW50TGVmdAAWbGFzdFRlYW1WZXN0aW5nVGltZUtleQITbGFzdFRlYW1WZXN0aW5nVGltZQAVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5AhJzdGFrZXJzQW1vdW50VG90YWwAFHN0YWtlcnNBbW91bnRMZWZ0S2V5AhFzdGFrZXJzQW1vdW50TGVmdAAUc3Rha2VkQW1vdW50VG90YWxLZXkCC3N0YWtlZFRvdGFsARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBGFkZHIJAKwCAgINc3Rha2VkQW1vdW50XwUEYWRkcgEWbGFzdENsYWltVGltZUJ5VXNlcktleQEEYWRkcgkArAICAg5sYXN0Q2xhaW1UaW1lXwUEYWRkcgAMZm9tb0Vwb2NoS2V5Aglmb21vRXBvY2gAEWN1cnJGb21vUGVyaW9kS2V5Ag5jdXJyRm9tb1BlcmlvZAAPbGFzdEZvbW9UaW1lS2V5AgxsYXN0Rm9tb1RpbWUAEmN1cnJGb21vSmFja3BvdEtleQIPY3VyckZvbW9KYWNrcG90ABJuZXh0Rm9tb0phY2twb3RLZXkCD25leHRGb21vSmFja3BvdAARbGFzdEZvbW9QbGF5ZXJLZXkCDmxhc3RGb21vUGxheWVyABFsYXN0Rm9tb1dpbm5lcktleQIObGFzdEZvbW9XaW5uZXIAF2xhc3RGb21vV2lubmVyQW1vdW50S2V5AhRsYXN0Rm9tb1dpbm5lckFtb3VudAAVbGFzdEZvbW9XaW5uZXJUaW1lS2V5AhJsYXN0Rm9tb1dpbm5lclRpbWUAEXRlYW1XYWxsZXRBZGRyS2V5Ag50ZWFtV2FsbGV0QWRkcgANYnJva2VyQWRkcktleQIKYnJva2VyQWRkcgAOcmVzZXJ2ZUFkZHJLZXkCC3Jlc2VydmVBZGRyAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgIPZmluaXNoQmxvY2tGb3JfBQdhZGRyZXNzAQhrZXlHdWVzcwEHYWRkcmVzcwkArAICAglndWVzc0Zvcl8FB2FkZHJlc3MBB2tleVNhbHQBB2FkZHJlc3MJAKwCAgIIc2FsdEZvcl8FB2FkZHJlc3MAFWN1cnJMb3R0ZXJ5SmFja3BvdEtleQISY3VyckxvdHRlcnlKYWNrcG90ABVuZXh0TG90dGVyeUphY2twb3RLZXkCEm5leHRMb3R0ZXJ5SmFja3BvdAAUbGFzdExvdHRlcnlXaW5uZXJLZXkCEWxhc3RMb3R0ZXJ5V2lubmVyABpsYXN0TG90dGVyeVdpbm5lckFtb3VudEtleQIXbGFzdExvdHRlcnlXaW5uZXJBbW91bnQAGGxhc3RMb3R0ZXJ5V2lubmVyVGltZUtleQIVbGFzdExvdHRlcnlXaW5uZXJUaW1lABdmb21vTnVtVW5pcXVlUGxheWVyc0tleQIUZm9tb051bVVuaXF1ZVBsYXllcnMAFWZvbW9Ub3RhbE51bVN0YWtlc0tleQISZm9tb1RvdGFsTnVtU3Rha2VzABhmb21vVG90YWxTdGFrZWRBbW91bnRLZXkCFWZvbW9Ub3RhbFN0YWtlZEFtb3VudAAVZm9tb1RvdGFsV29uQW1vdW50S2V5AhJmb21vVG90YWxXb25BbW91bnQBFGZvbW9Vc2VyTnVtU3Rha2VzS2V5AQdhZGRyZXNzCQCsAgICEmZvbW9Vc2VyTnVtU3Rha2VzXwUHYWRkcmVzcwEXZm9tb1VzZXJTdGFrZWRBbW91bnRLZXkBB2FkZHJlc3MJAKwCAgIVZm9tb1VzZXJTdGFrZWRBbW91bnRfBQdhZGRyZXNzARJmb21vVXNlck51bVdpbnNLZXkBB2FkZHJlc3MJAKwCAgIQZm9tb1VzZXJOdW1XaW5zXwUHYWRkcmVzcwEUZm9tb1VzZXJXb25BbW91bnRLZXkBB2FkZHJlc3MJAKwCAgISZm9tb1VzZXJXb25BbW91bnRfBQdhZGRyZXNzABlmb21vRmF2b3JpdGVCeU51bUdhbWVzS2V5AhZmb21vRmF2b3JpdGVCeU51bUdhbWVzABdmb21vRmF2b3JpdGVCeUFtb3VudEtleQIUZm9tb0Zhdm9yaXRlQnlBbW91bnQBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJZ29yY1N0YXRzAQt1c2VyQWRkck9wdAQJaXNzdWVUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUMaXNzdWVUaW1lS2V5AhZHT1JDIGlzIG5vdCBpc3N1ZWQgeWV0BBFub3dMaW1pdGVkVmVzdGluZwkAlwMBCQDMCAIFBmhlaWdodAkAzAgCCQBkAgUJaXNzdWVUaW1lBRNURUFNX1ZFU1RJTkdfUEVSSU9EBQNuaWwEE2xhc3RUZWFtVmVzdGluZ1RpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRZsYXN0VGVhbVZlc3RpbmdUaW1lS2V5Ah1Db25zdHJ1Y3RvciBpcyBub3QgY2FsbGVkIHlldAQNdmVzdGluZ0Ftb3VudAkAawMFC1RFQU1fQU1PVU5UCQBlAgURbm93TGltaXRlZFZlc3RpbmcFE2xhc3RUZWFtVmVzdGluZ1RpbWUFE1RFQU1fVkVTVElOR19QRVJJT0QEDnRlYW1BbW91bnRMZWZ0CQBlAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRF0ZWFtQW1vdW50TGVmdEtleQAABQ12ZXN0aW5nQW1vdW50BA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUc3Rha2Vyc0Ftb3VudExlZnRLZXkAAAQMbGFzdFVzZXJUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEJARZsYXN0Q2xhaW1UaW1lQnlVc2VyS2V5AQULdXNlckFkZHJPcHQA////////////AQMJAGYCAAAFDGxhc3RVc2VyVGltZQkAlgoEAAAFD2Ftb3VudExlZnRUb3RhbAUNdmVzdGluZ0Ftb3VudAUOdGVhbUFtb3VudExlZnQEEW5vd0xpbWl0ZWRTdGFraW5nCQCXAwEJAMwIAgUGaGVpZ2h0CQDMCAIJAGQCBQlpc3N1ZVRpbWUFDFNUQUtFX1BFUklPRAUDbmlsBAp1c2VyU2hhcmVzCQELdmFsdWVPckVsc2UCCQCfCAEJARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBQt1c2VyQWRkck9wdAAABAt0b3RhbFNoYXJlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQAABBJzdGFrZXJzQW1vdW50VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5BQ5TVEFLRVJTX0FNT1VOVAQMdXNlclRlbXBvcmFsCQBrAwUSc3Rha2Vyc0Ftb3VudFRvdGFsCQBlAgURbm93TGltaXRlZFN0YWtpbmcFDGxhc3RVc2VyVGltZQUMU1RBS0VfUEVSSU9EBAp1c2VyQW1vdW50AwkBAiE9AgULdG90YWxTaGFyZXMAAAkAawMFDHVzZXJUZW1wb3JhbAUKdXNlclNoYXJlcwULdG90YWxTaGFyZXMAAAkAlgoEBQp1c2VyQW1vdW50CQBlAgUPYW1vdW50TGVmdFRvdGFsBQp1c2VyQW1vdW50BQ12ZXN0aW5nQW1vdW50BQ50ZWFtQW1vdW50TGVmdAEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBDWdldE5ld0xlYWRlcnMDDW9sZExlYWRlcnNTdHIHbmV3QWRkcgluZXdBbW91bnQEDG5ld0NhbmRpZGF0ZQkArAICCQCsAgIFB25ld0FkZHICAV8JAKQDAQUJbmV3QW1vdW50AwkAAAIFDW9sZExlYWRlcnNTdHICAAkAzAgCBQxuZXdDYW5kaWRhdGUFA25pbAoBDHNvcnRCeUFtb3VudAIDYWNjAmVsBAthZGRyX2Ftb3VudAkAtQkCBQJlbAIBXwQEYWRkcgkAkQMCBQthZGRyX2Ftb3VudAAABAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQthZGRyX2Ftb3VudAABAwgFA2FjYwJfMgMJAAACBQRhZGRyBQduZXdBZGRyBQNhY2MJAJQKAgkAzQgCCAUDYWNjAl8xBQJlbAYDCQAAAgUEYWRkcgUHbmV3QWRkcgkAlAoCCQDNCAIIBQNhY2MCXzEFDG5ld0NhbmRpZGF0ZQYDCQBmAgUGYW1vdW50BQluZXdBbW91bnQJAJQKAgkAzQgCCAUDYWNjAl8xBQJlbAcJAJQKAgkAzQgCCQDNCAIIBQNhY2MCXzEFDG5ld0NhbmRpZGF0ZQUCZWwGBAZyZXN1bHQKAAIkbAkAtQkCBQ1vbGRMZWFkZXJzU3RyAgE6CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxzb3J0QnlBbW91bnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDMJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMEA2FycggFBnJlc3VsdAJfMQMIBQZyZXN1bHQCXzIDCQBmAgkAkAMBBQNhcnIAAwkAzAgCCQCRAwIFA2FycgAACQDMCAIJAJEDAgUDYXJyAAEJAMwIAgkAkQMCBQNhcnIAAgUDbmlsBQNhcnIDCQBnAgkAkAMBBQNhcnIAAwUDYXJyCQDNCAIFA2FycgUMbmV3Q2FuZGlkYXRlAQxmb21vSW50ZXJuYWwBAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC2dvcmNBc3NldElkCQACAQITR09SQyBwYXltZW50cyBvbmx5IQQGY2hhbmdlCQBlAgUDYW10BQtCTEVTU19QUklDRQMJAGYCAAAFBmNoYW5nZQkAAgEJAKwCAgkArAICCQCsAgICFllvdSBuZWVkIHRvIHNhY3JpZmljZSAJAQpmaXhlZFBvaW50AgULQkxFU1NfUFJJQ0UACAIWIEdPUkMsIGJ1dCBJIHNlZSBvbmx5IAkBCmZpeGVkUG9pbnQCBQNhbXQACAQNY2hhbmdlQWN0aW9ucwMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQULZ29yY0Fzc2V0SWQFA25pbAUDbmlsBAxsYXN0Rm9tb1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPbGFzdEZvbW9UaW1lS2V5AAAEDmxhc3RGb21vUGxheWVyCQELdmFsdWVPckVsc2UCCQCiCAEFEWxhc3RGb21vUGxheWVyS2V5AgAEEmxhc3RGb21vTnVtV2luc0tleQkBEmZvbW9Vc2VyTnVtV2luc0tleQEFDmxhc3RGb21vUGxheWVyBBRsYXN0Rm9tb1dvbkFtb3VudEtleQkBFGZvbW9Vc2VyV29uQW1vdW50S2V5AQUObGFzdEZvbW9QbGF5ZXIED2xhc3RGb21vTnVtV2lucwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJsYXN0Rm9tb051bVdpbnNLZXkAAAQRbGFzdEZvbW9Xb25BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUbGFzdEZvbW9Xb25BbW91bnRLZXkAAAQQZGVsdGFDdXJySmFja3BvdAkAawMFC0JMRVNTX1BSSUNFBRRDVVJSRU5UX0pBQ0tQT1RfUEVSQwBkBBBkZWx0YU5leHRKYWNrcG90CQBrAwULQkxFU1NfUFJJQ0UFEU5FWFRfSkFDS1BPVF9QRVJDAGQED2RlbHRhVGVhbUFtb3VudAkAawMFC0JMRVNTX1BSSUNFBQlURUFNX1BFUkMAZAQSZGVsdGFTdGFrZXJzQW1vdW50CQBlAgkAZQIJAGUCBQtCTEVTU19QUklDRQUQZGVsdGFDdXJySmFja3BvdAUQZGVsdGFOZXh0SmFja3BvdAUPZGVsdGFUZWFtQW1vdW50BAlmb21vRXBvY2gJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUMZm9tb0Vwb2NoS2V5AAAEDmN1cnJGb21vUGVyaW9kCQELdmFsdWVPckVsc2UCCQCfCAEFEWN1cnJGb21vUGVyaW9kS2V5BRNERUZBVUxUX0ZPTU9fUEVSSU9EBA5uZXh0Rm9tb1BlcmlvZAkAlgMBCQDMCAIFD01JTl9GT01PX1BFUklPRAkAzAgCCQBlAgUOY3VyckZvbW9QZXJpb2QAAQUDbmlsBA9mb21vQ3VyckphY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSY3VyckZvbW9KYWNrcG90S2V5AAAED2ZvbW9OZXh0SmFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJuZXh0Rm9tb0phY2twb3RLZXkAAAQPb2xkTGVhZGVyc0J5TnVtCQELdmFsdWVPckVsc2UCCQCiCAEFGWZvbW9GYXZvcml0ZUJ5TnVtR2FtZXNLZXkCAAQSb2xkTGVhZGVyc0J5QW1vdW50CQELdmFsdWVPckVsc2UCCQCiCAEFF2ZvbW9GYXZvcml0ZUJ5QW1vdW50S2V5AgAEC2ZvbW9BY3Rpb25zAwMDCQBmAgUGaGVpZ2h0CQBkAgUMbGFzdEZvbW9UaW1lBQ5jdXJyRm9tb1BlcmlvZAkAZgIFD2ZvbW9DdXJySmFja3BvdAAABwkBAiE9AgUObGFzdEZvbW9QbGF5ZXICAAcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUObGFzdEZvbW9QbGF5ZXIFD2ZvbW9DdXJySmFja3BvdAULZ29yY0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgURbGFzdEZvbW9XaW5uZXJLZXkFDmxhc3RGb21vUGxheWVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdsYXN0Rm9tb1dpbm5lckFtb3VudEtleQUPZm9tb0N1cnJKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVsYXN0Rm9tb1dpbm5lclRpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJjdXJyRm9tb0phY2twb3RLZXkJAGQCBQ9mb21vTmV4dEphY2twb3QFEGRlbHRhQ3VyckphY2twb3QJAMwIAgkBDEludGVnZXJFbnRyeQIFEm5leHRGb21vSmFja3BvdEtleQUQZGVsdGFOZXh0SmFja3BvdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMZm9tb0Vwb2NoS2V5CQBkAgUJZm9tb0Vwb2NoAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFEWN1cnJGb21vUGVyaW9kS2V5BRNERUZBVUxUX0ZPTU9fUEVSSU9ECQDMCAIJAQtTdHJpbmdFbnRyeQIFGWZvbW9GYXZvcml0ZUJ5TnVtR2FtZXNLZXkJALkJAgkBDWdldE5ld0xlYWRlcnMDBQ9vbGRMZWFkZXJzQnlOdW0FDmxhc3RGb21vUGxheWVyCQBkAgUPbGFzdEZvbW9OdW1XaW5zAAECAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUXZm9tb0Zhdm9yaXRlQnlBbW91bnRLZXkJALkJAgkBDWdldE5ld0xlYWRlcnMDBRJvbGRMZWFkZXJzQnlBbW91bnQFDmxhc3RGb21vUGxheWVyCQBkAgURbGFzdEZvbW9Xb25BbW91bnQFD2ZvbW9DdXJySmFja3BvdAIBOgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSbGFzdEZvbW9OdW1XaW5zS2V5CQBkAgUPbGFzdEZvbW9OdW1XaW5zAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFFGxhc3RGb21vV29uQW1vdW50S2V5CQBkAgURbGFzdEZvbW9Xb25BbW91bnQFD2ZvbW9DdXJySmFja3BvdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVZm9tb1RvdGFsV29uQW1vdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVmb21vVG90YWxXb25BbW91bnRLZXkAAAUPZm9tb0N1cnJKYWNrcG90BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFEmN1cnJGb21vSmFja3BvdEtleQkAZAIFD2ZvbW9DdXJySmFja3BvdAUQZGVsdGFDdXJySmFja3BvdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSbmV4dEZvbW9KYWNrcG90S2V5CQBkAgUPZm9tb05leHRKYWNrcG90BRBkZWx0YU5leHRKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFjdXJyRm9tb1BlcmlvZEtleQUObmV4dEZvbW9QZXJpb2QFA25pbAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEFGZvbW9OdW1VbmlxdWVQbGF5ZXJzCQELdmFsdWVPckVsc2UCCQCfCAEFF2ZvbW9OdW1VbmlxdWVQbGF5ZXJzS2V5AAAEEHVzZXJOdW1TdGFrZXNLZXkJARRmb21vVXNlck51bVN0YWtlc0tleQEFBGFkZHIEE3VzZXJTdGFrZWRBbW91bnRLZXkJARdmb21vVXNlclN0YWtlZEFtb3VudEtleQEFBGFkZHIEDXVzZXJOdW1TdGFrZXMJAJ8IAQUQdXNlck51bVN0YWtlc0tleQQMc3RhdHNBY3Rpb25zCQDOCAIDCQEJaXNEZWZpbmVkAQUNdXNlck51bVN0YWtlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQdXNlck51bVN0YWtlc0tleQkAZAIJAQV2YWx1ZQEFDXVzZXJOdW1TdGFrZXMAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUTdXNlclN0YWtlZEFtb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTdXNlclN0YWtlZEFtb3VudEtleQAABQtCTEVTU19QUklDRQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdmb21vTnVtVW5pcXVlUGxheWVyc0tleQkAZAIFFGZvbW9OdW1VbmlxdWVQbGF5ZXJzAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFEHVzZXJOdW1TdGFrZXNLZXkAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUTdXNlclN0YWtlZEFtb3VudEtleQULQkxFU1NfUFJJQ0UFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVZm9tb1RvdGFsTnVtU3Rha2VzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVmb21vVG90YWxOdW1TdGFrZXNLZXkAAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhmb21vVG90YWxTdGFrZWRBbW91bnRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFGGZvbW9Ub3RhbFN0YWtlZEFtb3VudEtleQAABQtCTEVTU19QUklDRQUDbmlsCQDOCAIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9sYXN0Rm9tb1RpbWVLZXkFBmhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCBRFsYXN0Rm9tb1BsYXllcktleQkApQgBCAUBaQZjYWxsZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURdGVhbVdhbGxldEFkZHJLZXkFD2RlbHRhVGVhbUFtb3VudAULZ29yY0Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5CQBkAgkBEUBleHRyTmF0aXZlKDEwNTUpAQUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFEmRlbHRhU3Rha2Vyc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5CQBkAgkBEUBleHRyTmF0aXZlKDEwNTUpAQUVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5BRJkZWx0YVN0YWtlcnNBbW91bnQFA25pbAUNY2hhbmdlQWN0aW9ucwULZm9tb0FjdGlvbnMFDHN0YXRzQWN0aW9ucwEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJANQWAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQEOd2FsbGV0SW50ZXJuYWwBDnVzZXJBZGRyZXNzT3B0BARhZGRyCQCmCAEFDnVzZXJBZGRyZXNzT3B0BAdiYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAO8HAQkBBXZhbHVlAQUEYWRkcgkBDkJhbGFuY2VEZXRhaWxzBAAAAAAAAAAABAtnb3JjQmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFC2dvcmNBc3NldElkAAAECnN0YWtlZEdvcmMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFXN0YWtlZEFtb3VudEJ5VXNlcktleQEFDnVzZXJBZGRyZXNzT3B0AAAJAMwIAgkArAICAhQlcyVkX193YXZlc0JhbGFuY2VfXwkApAMBCAUHYmFsYW5jZQlhdmFpbGFibGUJAMwIAgkArAICAhMlcyVkX19nb3JjQmFsYW5jZV9fCQCkAwEFC2dvcmNCYWxhbmNlCQDMCAIJAKwCAgISJXMlZF9fc3Rha2VkR29yY19fCQCkAwEFCnN0YWtlZEdvcmMFA25pbAsBaQEIdGVzdEFyZ3MIBmludFZhbAZzdHJWYWwHYm9vbFZhbAZiaW5WYWwGYXJySW50BmFyclN0cgdhcnJCb29sBmFyckJpbgUDbmlsAWkBDWNvbnN0cnVjdG9yVjEDDnRlYW1XYWxsZXRBZGRyCmJyb2tlckFkZHILcmVzZXJ2ZUFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMaXNzdWVkQW1vdW50BQNNMTYEBWlzc3VlCQDDCAcCBEdPUkMCtQFNZW1lIGNvaW4gYnkgR29kIG9mIFJhbmRvbSBDaGFuY2UuIFZpc2l0IGh0dHBzOi8vZ29yYy5tZW1lLCBzYWNyaWZpY2UgdG8gdGhlIEdvZCBvZiBSYW5kb20gYW5kIHlvdSB3aWxsIHJlY2VpdmUgYW4gYW5zd2VyIHRvIGFueSBxdWVzdGlvbiBvciBhIGJsZXNzaW5nLiBMdWNreSBvbmUgZ2V0cyBhIEdpZnQgb2YgR29kBQxpc3N1ZWRBbW91bnQACAcFBHVuaXQAAAQHYXNzZXRJZAkAuAgBBQVpc3N1ZQkAzAgCBQVpc3N1ZQkAzAgCCQELQmluYXJ5RW50cnkCBQ5nb3JjQXNzZXRJZEtleQUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMaXNzdWVUaW1lS2V5BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5BQ5TVEFLRVJTX0FNT1VOVAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5BQ5TVEFLRVJTX0FNT1VOVAkAzAgCCQEMSW50ZWdlckVudHJ5AgURdGVhbUFtb3VudExlZnRLZXkFC1RFQU1fQU1PVU5UCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZsYXN0VGVhbVZlc3RpbmdUaW1lS2V5BQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgURdGVhbVdhbGxldEFkZHJLZXkFDnRlYW1XYWxsZXRBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWJyb2tlckFkZHJLZXkFCmJyb2tlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUOcmVzZXJ2ZUFkZHJLZXkFC3Jlc2VydmVBZGRyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3Jlc2VydmVBZGRyBQ9SRVNFUlZFRF9BTU9VTlQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKYnJva2VyQWRkcgUNTUFSS0VUX0FNT1VOVAUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMZm9tb0Vwb2NoS2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEWN1cnJGb21vUGVyaW9kS2V5BRNERUZBVUxUX0ZPTU9fUEVSSU9EBQNuaWwBaQEJc3Rha2VHb3JjAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQtnb3JjQXNzZXRJZAkAAgECE0dPUkMgcGF5bWVudHMgb25seSEEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBA0kdDAxNDY2NTE0NzQ3CQEJZ29yY1N0YXRzAQUEYWRkcgQKdXNlckFtb3VudAgFDSR0MDE0NjY1MTQ3NDcCXzEED2Ftb3VudExlZnRUb3RhbAgFDSR0MDE0NjY1MTQ3NDcCXzIEDXZlc3RpbmdBbW91bnQIBQ0kdDAxNDY2NTE0NzQ3Al8zBA50ZWFtQW1vdW50TGVmdAgFDSR0MDE0NjY1MTQ3NDcCXzQEDXVzZXJBbW91bnRLZXkJARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBQRhZGRyBAxjbGFpbUFjdGlvbnMDCQBmAgUKdXNlckFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKdXNlckFtb3VudAULZ29yY0Fzc2V0SWQFA25pbAUDbmlsBA52ZXN0aW5nQWN0aW9ucwMJAGYCBQ12ZXN0aW5nQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURdGVhbVdhbGxldEFkZHJLZXkFDXZlc3RpbmdBbW91bnQFC2dvcmNBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF0ZWFtQW1vdW50TGVmdEtleQUOdGVhbUFtb3VudExlZnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFmxhc3RUZWFtVmVzdGluZ1RpbWVLZXkFBmhlaWdodAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFDGNsYWltQWN0aW9ucwUOdmVzdGluZ0FjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlZEFtb3VudFRvdGFsS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQAABQNhbXQJAMwIAgkBDEludGVnZXJFbnRyeQIFDXVzZXJBbW91bnRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDXVzZXJBbW91bnRLZXkAAAUDYW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWbGFzdENsYWltVGltZUJ5VXNlcktleQEFBGFkZHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFD2Ftb3VudExlZnRUb3RhbAUDbmlsBQp1c2VyQW1vdW50AWkBC3Vuc3Rha2VHb3JjAQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAMJAGcCAAAFBmFtb3VudAkAAgECGUFtb3VudCBzaG91bGQgYmUgcG9zaXRpdmUEBGFkZHIJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEDXVzZXJBbW91bnRLZXkJARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBQRhZGRyBAlvbGRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNdXNlckFtb3VudEtleQAAAwkAZgIAAAkAZQIFCW9sZEFtb3VudAUGYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAQpmaXhlZFBvaW50AgUJb2xkQW1vdW50AAgCHyBHT1JDIHN0YWtlZCwgdHJpZWQgdG8gdW5zdGFrZSAJAQpmaXhlZFBvaW50AgUGYW1vdW50AAgEDSR0MDE2MDYzMTYxNDUJAQlnb3JjU3RhdHMBBQRhZGRyBAp1c2VyQW1vdW50CAUNJHQwMTYwNjMxNjE0NQJfMQQPYW1vdW50TGVmdFRvdGFsCAUNJHQwMTYwNjMxNjE0NQJfMgQNdmVzdGluZ0Ftb3VudAgFDSR0MDE2MDYzMTYxNDUCXzMEDnRlYW1BbW91bnRMZWZ0CAUNJHQwMTYwNjMxNjE0NQJfNAQMY2xhaW1BY3Rpb25zAwkAZgIFCnVzZXJBbW91bnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCnVzZXJBbW91bnQFC2dvcmNBc3NldElkBQNuaWwFA25pbAQOdmVzdGluZ0FjdGlvbnMDCQBmAgUNdmVzdGluZ0Ftb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEXRlYW1XYWxsZXRBZGRyS2V5BQ12ZXN0aW5nQW1vdW50BQtnb3JjQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURdGVhbUFtb3VudExlZnRLZXkFDnRlYW1BbW91bnRMZWZ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZsYXN0VGVhbVZlc3RpbmdUaW1lS2V5BQZoZWlnaHQFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQxjbGFpbUFjdGlvbnMFDnZlc3RpbmdBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZWRBbW91bnRUb3RhbEtleQkAZQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQIOTm8gR09SQyBzdGFrZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdXNlckFtb3VudEtleQkAZQIFCW9sZEFtb3VudAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWbGFzdENsYWltVGltZUJ5VXNlcktleQEFBGFkZHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFD2Ftb3VudExlZnRUb3RhbAUDbmlsAAABaQEJY2xhaW1Hb3JjAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBA0kdDAxNzA2NDE3MTQ2CQEJZ29yY1N0YXRzAQUEYWRkcgQKdXNlckFtb3VudAgFDSR0MDE3MDY0MTcxNDYCXzEED2Ftb3VudExlZnRUb3RhbAgFDSR0MDE3MDY0MTcxNDYCXzIEDXZlc3RpbmdBbW91bnQIBQ0kdDAxNzA2NDE3MTQ2Al8zBA50ZWFtQW1vdW50TGVmdAgFDSR0MDE3MDY0MTcxNDYCXzQEDGNsYWltQWN0aW9ucwMJAGYCBQp1c2VyQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp1c2VyQW1vdW50BQtnb3JjQXNzZXRJZAUDbmlsBQNuaWwEDnZlc3RpbmdBY3Rpb25zAwkAZgIFDXZlc3RpbmdBbW91bnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRF0ZWFtV2FsbGV0QWRkcktleQUNdmVzdGluZ0Ftb3VudAULZ29yY0Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEXRlYW1BbW91bnRMZWZ0S2V5BQ50ZWFtQW1vdW50TGVmdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWbGFzdFRlYW1WZXN0aW5nVGltZUtleQUGaGVpZ2h0BQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUMY2xhaW1BY3Rpb25zBQ52ZXN0aW5nQWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmxhc3RDbGFpbVRpbWVCeVVzZXJLZXkBBQRhZGRyBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5BQ9hbW91bnRMZWZ0VG90YWwFA25pbAUKdXNlckFtb3VudAFpAQhhbnN3ZXJNZQAJAJQKAgkBDGZvbW9JbnRlcm5hbAEFAWkJALEJAQgFAWkNdHJhbnNhY3Rpb25JZAFpAQdibGVzc01lAAkAlAoCCQEMZm9tb0ludGVybmFsAQUBaQAqAWkBC2NvbW1pdEd1ZXNzAQVndWVzcwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQUEYWRkcgQIZ3Vlc3NLZXkJAQhrZXlHdWVzcwEFBGFkZHIDCQEJaXNEZWZpbmVkAQkAnwgBBQlmaW5pc2hLZXkJAAIBAiVZb3UgYWxyZWFkeSBtYWRlIGEgYmV0LCBwbGVhc2UgdXNlIGl0AwMJAGYCAAAFBWd1ZXNzBgkAZgIFBWd1ZXNzAAsJAAIBAiVUaGUgbnVtYmVyIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQtnb3JjQXNzZXRJZAkAAgECE0dPUkMgcGF5bWVudHMgb25seSEEBmNoYW5nZQkAZQIFA2FtdAUNTE9UVEVSWV9QUklDRQMJAGYCAAAFBmNoYW5nZQkAAgEJAKwCAgkArAICCQCsAgICFllvdSBuZWVkIHRvIHNhY3JpZmljZSAJAQpmaXhlZFBvaW50AgUNTE9UVEVSWV9QUklDRQAIAhYgR09SQywgYnV0IEkgc2VlIG9ubHkgCQEKZml4ZWRQb2ludAIFA2FtdAAIBA1jaGFuZ2VBY3Rpb25zAwkAZgIFBmNoYW5nZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGY2hhbmdlBQtnb3JjQXNzZXRJZAUDbmlsBQNuaWwEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQxSQU5ET01fREVMQVkEEGRlbHRhQ3VyckphY2twb3QJAGsDBQ1MT1RURVJZX1BSSUNFBRRDVVJSRU5UX0pBQ0tQT1RfUEVSQwBkBBBkZWx0YU5leHRKYWNrcG90CQBrAwUNTE9UVEVSWV9QUklDRQURTkVYVF9KQUNLUE9UX1BFUkMAZAQPZGVsdGFUZWFtQW1vdW50CQBrAwUNTE9UVEVSWV9QUklDRQUJVEVBTV9QRVJDAGQEEmRlbHRhU3Rha2Vyc0Ftb3VudAkAZQIJAGUCCQBlAgUNTE9UVEVSWV9QUklDRQUQZGVsdGFDdXJySmFja3BvdAUQZGVsdGFOZXh0SmFja3BvdAUPZGVsdGFUZWFtQW1vdW50CQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJZmluaXNoS2V5BQtmaW5pc2hCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUIZ3Vlc3NLZXkFBWd1ZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVjdXJyTG90dGVyeUphY2twb3RLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFFWN1cnJMb3R0ZXJ5SmFja3BvdEtleQAABRBkZWx0YUN1cnJKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVuZXh0TG90dGVyeUphY2twb3RLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFFW5leHRMb3R0ZXJ5SmFja3BvdEtleQAABRBkZWx0YU5leHRKYWNrcG90CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEXRlYW1XYWxsZXRBZGRyS2V5BQ9kZWx0YVRlYW1BbW91bnQFC2dvcmNBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZXJzQW1vdW50TGVmdEtleQkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEFFHN0YWtlcnNBbW91bnRMZWZ0S2V5BRJkZWx0YVN0YWtlcnNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFXN0YWtlcnNBbW91bnRUb3RhbEtleQkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEFFXN0YWtlcnNBbW91bnRUb3RhbEtleQUSZGVsdGFTdGFrZXJzQW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlTYWx0AQUEYWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQNuaWwFDWNoYW5nZUFjdGlvbnMFC2ZpbmlzaEJsb2NrAWkBDGd1ZXNzTG90dGVyeQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIECWZpbmlzaEtleQkBCWtleUNvbW1pdAEFBGFkZHIECGd1ZXNzS2V5CQEIa2V5R3Vlc3MBBQRhZGRyBAVndWVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFCGd1ZXNzS2V5AhdZb3UgaGF2ZSBub3QgbWFkZSBhIGJldAQLZmluaXNoQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQlmaW5pc2hLZXkCF1lvdSBoYXZlIG5vdCBtYWRlIGEgYmV0AwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBCQCsAgICNFJhbmRvbSBudW1iZXIgaXMgbm90IHJlYWR5IHlldCwgd2FpdCB1bnRpbCBoZWlnaHQgPSAJAKQDAQULZmluaXNoQmxvY2sEB2VudHJvcHkJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEFC2ZpbmlzaEJsb2NrA3ZyZgQHc2FsdEtleQkBB2tleVNhbHQBBQRhZGRyBARzYWx0CQDZBAEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUHc2FsdEtleQIHREVGQVVMVAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMADAUEc2FsdAUHZW50cm9weQQLY3VyckphY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVY3VyckxvdHRlcnlKYWNrcG90S2V5AAAECndpbkFjdGlvbnMDCQAAAgUEcmFuZAUFZ3Vlc3MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtjdXJySmFja3BvdAULZ29yY0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUUbGFzdExvdHRlcnlXaW5uZXJLZXkFBGFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIFGmxhc3RMb3R0ZXJ5V2lubmVyQW1vdW50S2V5BQtjdXJySmFja3BvdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUYbGFzdExvdHRlcnlXaW5uZXJUaW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVY3VyckxvdHRlcnlKYWNrcG90S2V5CQELdmFsdWVPckVsc2UCCQCfCAEFFW5leHRMb3R0ZXJ5SmFja3BvdEtleQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVuZXh0TG90dGVyeUphY2twb3RLZXkAAAUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEFCWZpbmlzaEtleQkAzAgCCQELRGVsZXRlRW50cnkBBQhndWVzc0tleQkAzAgCCQELRGVsZXRlRW50cnkBBQdzYWx0S2V5BQNuaWwFCndpbkFjdGlvbnMFBHJhbmQBaQENc3RhdHNSRUFET05MWQELdXNlckFkZHJPcHQEDSR0MDIxOTExMjIwMDAJAQlnb3JjU3RhdHMBBQt1c2VyQWRkck9wdAQKdXNlckFtb3VudAgFDSR0MDIxOTExMjIwMDACXzEED2Ftb3VudExlZnRUb3RhbAgFDSR0MDIxOTExMjIwMDACXzIEDXZlc3RpbmdBbW91bnQIBQ0kdDAyMTkxMTIyMDAwAl8zBA50ZWFtQW1vdW50TGVmdAgFDSR0MDIxOTExMjIwMDACXzQED2N1cnJGb21vSmFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJjdXJyRm9tb0phY2twb3RLZXkAAAQPbmV4dEZvbW9KYWNrcG90CQELdmFsdWVPckVsc2UCCQCfCAEFEm5leHRGb21vSmFja3BvdEtleQAABAxsYXN0Rm9tb1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPbGFzdEZvbW9UaW1lS2V5AAAEDmxhc3RGb21vUGxheWVyCQELdmFsdWVPckVsc2UCCQCiCAEFEWxhc3RGb21vUGxheWVyS2V5AgAECWZvbW9FcG9jaAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQxmb21vRXBvY2hLZXkAAAQOY3VyckZvbW9QZXJpb2QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQURY3VyckZvbW9QZXJpb2RLZXkFE0RFRkFVTFRfRk9NT19QRVJJT0QEEmN1cnJMb3R0ZXJ5SmFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVjdXJyTG90dGVyeUphY2twb3RLZXkAAAQSbmV4dExvdHRlcnlKYWNrcG90CQELdmFsdWVPckVsc2UCCQCfCAEFFW5leHRMb3R0ZXJ5SmFja3BvdEtleQAABAlmaW5pc2hLZXkJAQlrZXlDb21taXQBBQt1c2VyQWRkck9wdAQIZ3Vlc3NLZXkJAQhrZXlHdWVzcwEFC3VzZXJBZGRyT3B0BAVndWVzcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhndWVzc0tleQD///////////8BBAtmaW5pc2hCbG9jawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlmaW5pc2hLZXkA////////////AQQObGFzdEZvbW9XaW5uZXIJAQt2YWx1ZU9yRWxzZQIJAKIIAQURbGFzdEZvbW9XaW5uZXJLZXkCAAQUbGFzdEZvbW9XaW5uZXJBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUXbGFzdEZvbW9XaW5uZXJBbW91bnRLZXkAAAQSbGFzdEZvbW9XaW5uZXJUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFFWxhc3RGb21vV2lubmVyVGltZUtleQAABBFsYXN0TG90dGVyeVdpbm5lcgkBC3ZhbHVlT3JFbHNlAgkAoggBBRRsYXN0TG90dGVyeVdpbm5lcktleQIABBdsYXN0TG90dGVyeVdpbm5lckFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRpsYXN0TG90dGVyeVdpbm5lckFtb3VudEtleQAABBVsYXN0TG90dGVyeVdpbm5lclRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUYbGFzdExvdHRlcnlXaW5uZXJUaW1lS2V5AAAED2dvcmNTdGFrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQAABBRmb21vTnVtVW5pcXVlUGxheWVycwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRdmb21vTnVtVW5pcXVlUGxheWVyc0tleQAABBJmb21vVG90YWxOdW1TdGFrZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVZm9tb1RvdGFsTnVtU3Rha2VzS2V5AAAEFWZvbW9Ub3RhbFN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRhmb21vVG90YWxTdGFrZWRBbW91bnRLZXkAAAQRZm9tb1VzZXJOdW1TdGFrZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFGZvbW9Vc2VyTnVtU3Rha2VzS2V5AQULdXNlckFkZHJPcHQAAAQUZm9tb1VzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBF2ZvbW9Vc2VyU3Rha2VkQW1vdW50S2V5AQULdXNlckFkZHJPcHQAAAQPZm9tb1VzZXJOdW1XaW5zCQELdmFsdWVPckVsc2UCCQCfCAEJARJmb21vVXNlck51bVdpbnNLZXkBBQt1c2VyQWRkck9wdAAABBFmb21vVXNlcldvbkFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEUZm9tb1VzZXJXb25BbW91bnRLZXkBBQt1c2VyQWRkck9wdAAABBZmb21vRmF2b3JpdGVCeU51bUdhbWVzCQELdmFsdWVPckVsc2UCCQCiCAEFGWZvbW9GYXZvcml0ZUJ5TnVtR2FtZXNLZXkCAAQUZm9tb0Zhdm9yaXRlQnlBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAKIIAQUXZm9tb0Zhdm9yaXRlQnlBbW91bnRLZXkCAAQPZ29yY1ByaWNlV2F2ZXM4AwkAAAIFBWNoYWluAQFXCQEFYXNJbnQBCQD8BwQFCXd4RmFjdG9yeQIVc3dhcENhbGN1bGF0ZVJFQURPTkxZCQDMCAIAgMLXLwkAzAgCCQDYBAEFC2dvcmNBc3NldElkCQDMCAICBVdBVkVTBQNuaWwFA25pbACgnAEED3dhdmVzUHJpY2VVc2R0NgMJAAACBQVjaGFpbgEBVwkBBWFzSW50AQkA/AcEBQl3eEZhY3RvcnkCFXN3YXBDYWxjdWxhdGVSRUFET05MWQkAzAgCAIDC1y8JAMwIAgIFV0FWRVMJAMwIAgUIVVNEVF9QUFQFA25pbAUDbmlsAICjw0cEBGNhcDgJAGQCCQBkAgUNTUFSS0VUX0FNT1VOVAUPUkVTRVJWRURfQU1PVU5UCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEXRlYW1XYWxsZXRBZGRyS2V5BQtnb3JjQXNzZXRJZAQKbWFya2V0Q2FwNgkAawMJAGsDBQRjYXA4BQ9nb3JjUHJpY2VXYXZlczgFAk04BQ93YXZlc1ByaWNlVXNkdDYFAk04CQCUCgIFA25pbAkAzAgCCQCsAgICFyVzJWRfX3RlYW1BdmFpbFRvVmVzdF9fCQCkAwEFDXZlc3RpbmdBbW91bnQJAMwIAgkArAICAhYlcyVkX190ZWFtQW1vdW50TGVmdF9fCQCkAwEFDnRlYW1BbW91bnRMZWZ0CQDMCAIJAKwCAgIYJXMlZF9fZ29yY0F2YWlsVG9DbGFpbV9fCQCkAwEFCnVzZXJBbW91bnQJAMwIAgkArAICAhElcyVkX19mb21vRXBvY2hfXwkApAMBBQlmb21vRXBvY2gJAMwIAgkArAICAhYlcyVkX19jdXJyRm9tb1BlcmlvZF9fCQCkAwEFDmN1cnJGb21vUGVyaW9kCQDMCAIJAKwCAgIdJXMlZF9fY3VyckZvbW9KYWNrcG90QW1vdW50X18JAKQDAQUPY3VyckZvbW9KYWNrcG90CQDMCAIJAKwCAgIdJXMlZF9fbmV4dEZvbW9KYWNrcG90QW1vdW50X18JAKQDAQUPbmV4dEZvbW9KYWNrcG90CQDMCAIJAKwCAgIgJXMlZF9fY3VyckxvdHRlcnlKYWNrcG90QW1vdW50X18JAKQDAQUSY3VyckxvdHRlcnlKYWNrcG90CQDMCAIJAKwCAgIgJXMlZF9fbmV4dExvdHRlcnlKYWNrcG90QW1vdW50X18JAKQDAQUSbmV4dExvdHRlcnlKYWNrcG90CQDMCAIJAKwCAgIUJXMlZF9fbGFzdEZvbW9UaW1lX18JAKQDAQUMbGFzdEZvbW9UaW1lCQDMCAIJAKwCAgIWJXMlc19fbGFzdEZvbW9QbGF5ZXJfXwUObGFzdEZvbW9QbGF5ZXIJAMwIAgkArAICAhclcyVkX19hbW91bnRMZWZ0VG90YWxfXwkApAMBBQ9hbW91bnRMZWZ0VG90YWwJAMwIAgkArAICAhMlcyVkX19maW5pc2hCbG9ja19fCQCkAwEFC2ZpbmlzaEJsb2NrCQDMCAIJAKwCAgINJXMlZF9fZ3Vlc3NfXwkApAMBBQVndWVzcwkAzAgCCQCsAgICFiVzJXNfX2xhc3RGb21vV2lubmVyX18FDmxhc3RGb21vV2lubmVyCQDMCAIJAKwCAgIcJXMlZF9fbGFzdEZvbW9XaW5uZXJBbW91bnRfXwkApAMBBRRsYXN0Rm9tb1dpbm5lckFtb3VudAkAzAgCCQCsAgICGiVzJWRfX2xhc3RGb21vV2lubmVyVGltZV9fCQCkAwEFEmxhc3RGb21vV2lubmVyVGltZQkAzAgCCQCsAgICGSVzJXNfX2xhc3RMb3R0ZXJ5V2lubmVyX18FEWxhc3RMb3R0ZXJ5V2lubmVyCQDMCAIJAKwCAgIfJXMlZF9fbGFzdExvdHRlcnlXaW5uZXJBbW91bnRfXwkApAMBBRdsYXN0TG90dGVyeVdpbm5lckFtb3VudAkAzAgCCQCsAgICHSVzJWRfX2xhc3RMb3R0ZXJ5V2lubmVyVGltZV9fCQCkAwEFFWxhc3RMb3R0ZXJ5V2lubmVyVGltZQkAzAgCCQCsAgICEiVzJWRfX2dvcmNJc3N1ZWRfXwkApAMBBQNNMTYJAMwIAgkArAICAhclcyVkX19nb3JjU3Rha2VkVG90YWxfXwkApAMBBQ9nb3JjU3Rha2VkVG90YWwJAMwIAgkArAICAhwlcyVkX19mb21vTnVtVW5pcXVlUGxheWVyc19fCQCkAwEFFGZvbW9OdW1VbmlxdWVQbGF5ZXJzCQDMCAIJAKwCAgIaJXMlZF9fZm9tb1RvdGFsTnVtU3Rha2VzX18JAKQDAQUSZm9tb1RvdGFsTnVtU3Rha2VzCQDMCAIJAKwCAgIdJXMlZF9fZm9tb1RvdGFsU3Rha2VkQW1vdW50X18JAKQDAQUVZm9tb1RvdGFsU3Rha2VkQW1vdW50CQDMCAIJAKwCAgIZJXMlZF9fZm9tb1VzZXJOdW1TdGFrZXNfXwkApAMBBRFmb21vVXNlck51bVN0YWtlcwkAzAgCCQCsAgICHCVzJWRfX2ZvbW9Vc2VyU3Rha2VkQW1vdW50X18JAKQDAQUUZm9tb1VzZXJTdGFrZWRBbW91bnQJAMwIAgkArAICAhclcyVkX19mb21vVXNlck51bVdpbnNfXwkApAMBBQ9mb21vVXNlck51bVdpbnMJAMwIAgkArAICAhklcyVkX19mb21vVXNlcldvbkFtb3VudF9fCQCkAwEFEWZvbW9Vc2VyV29uQW1vdW50CQDMCAIJAKwCAgIeJXMlc19fZm9tb0Zhdm9yaXRlQnlOdW1HYW1lc19fBRZmb21vRmF2b3JpdGVCeU51bUdhbWVzCQDMCAIJAKwCAgIcJXMlc19fZm9tb0Zhdm9yaXRlQnlBbW91bnRfXwUUZm9tb0Zhdm9yaXRlQnlBbW91bnQJAMwIAgkArAICAholcyVkX19mb21vVG90YWxXb25BbW91bnRfXwkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFFWZvbW9Ub3RhbFdvbkFtb3VudEtleQAACQDMCAIJAKwCAgISJXMlZF9fYmxlc3NQcmljZV9fCQCkAwEFC0JMRVNTX1BSSUNFCQDMCAIJAKwCAgIRJXMlZF9fbWFya2V0Q2FwX18JAKQDAQUKbWFya2V0Q2FwNgUDbmlsAWkBEndhbGxldEluZm9SRUFET05MWQEOdXNlckFkZHJlc3NPcHQJAJQKAgUDbmlsCQEOd2FsbGV0SW50ZXJuYWwBBQ51c2VyQWRkcmVzc09wdACEd2PC", "height": 3503939, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4C3bSP5p4iRhQCmtPftj9VaaoZDsPsVxLXZTHGvVKdTh Next: GpgrwSep6MQBf2L23KTPVKhmM2xvrbj3diNobq85AVUV Diff:
OldNewDifferences
3535
3636 let TEAM_PERC = 10
3737
38-let wxFactory = addressFromStringValue("3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93")
38+let chain = take(drop(this.bytes, 1), 1)
39+
40+let wxFactory = match chain {
41+ case _ =>
42+ if ((base58'2W' == $match0))
43+ then addressFromStringValue("3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93")
44+ else if ((base58'2T' == $match0))
45+ then addressFromStringValue("3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq")
46+ else throw("Unknown chain")
47+}
3948
4049 let USDT_PPT = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC"
4150
321330 then throw("GORC payments only!")
322331 else {
323332 let addr = toString(i.caller)
324- let $t01446914551 = gorcStats(addr)
325- let userAmount = $t01446914551._1
326- let amountLeftTotal = $t01446914551._2
327- let vestingAmount = $t01446914551._3
328- let teamAmountLeft = $t01446914551._4
333+ let $t01466514747 = gorcStats(addr)
334+ let userAmount = $t01466514747._1
335+ let amountLeftTotal = $t01466514747._2
336+ let vestingAmount = $t01466514747._3
337+ let teamAmountLeft = $t01466514747._4
329338 let userAmountKey = stakedAmountByUserKey(addr)
330339 let claimActions = if ((userAmount > 0))
331340 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
354363 if ((0 > (oldAmount - amount)))
355364 then throw(((("You have only " + fixedPoint(oldAmount, 8)) + " GORC staked, tried to unstake ") + fixedPoint(amount, 8)))
356365 else {
357- let $t01586715949 = gorcStats(addr)
358- let userAmount = $t01586715949._1
359- let amountLeftTotal = $t01586715949._2
360- let vestingAmount = $t01586715949._3
361- let teamAmountLeft = $t01586715949._4
366+ let $t01606316145 = gorcStats(addr)
367+ let userAmount = $t01606316145._1
368+ let amountLeftTotal = $t01606316145._2
369+ let vestingAmount = $t01606316145._3
370+ let teamAmountLeft = $t01606316145._4
362371 let claimActions = if ((userAmount > 0))
363372 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
364373 else nil
379388 then throw("No payments required")
380389 else {
381390 let addr = toString(i.caller)
382- let $t01686816950 = gorcStats(addr)
383- let userAmount = $t01686816950._1
384- let amountLeftTotal = $t01686816950._2
385- let vestingAmount = $t01686816950._3
386- let teamAmountLeft = $t01686816950._4
391+ let $t01706417146 = gorcStats(addr)
392+ let userAmount = $t01706417146._1
393+ let amountLeftTotal = $t01706417146._2
394+ let vestingAmount = $t01706417146._3
395+ let teamAmountLeft = $t01706417146._4
387396 let claimActions = if ((userAmount > 0))
388397 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
389398 else nil
476485
477486 @Callable(i)
478487 func statsREADONLY (userAddrOpt) = {
479- let $t02171521804 = gorcStats(userAddrOpt)
480- let userAmount = $t02171521804._1
481- let amountLeftTotal = $t02171521804._2
482- let vestingAmount = $t02171521804._3
483- let teamAmountLeft = $t02171521804._4
488+ let $t02191122000 = gorcStats(userAddrOpt)
489+ let userAmount = $t02191122000._1
490+ let amountLeftTotal = $t02191122000._2
491+ let vestingAmount = $t02191122000._3
492+ let teamAmountLeft = $t02191122000._4
484493 let currFomoJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
485494 let nextFomoJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
486495 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
509518 let fomoUserWonAmount = valueOrElse(getInteger(fomoUserWonAmountKey(userAddrOpt)), 0)
510519 let fomoFavoriteByNumGames = valueOrElse(getString(fomoFavoriteByNumGamesKey), "")
511520 let fomoFavoriteByAmount = valueOrElse(getString(fomoFavoriteByAmountKey), "")
512- let gorcPriceWaves8 = asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, toBase58String(gorcAssetId), "WAVES"], nil))
513- let wavesPriceUsdt6 = asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, "WAVES", USDT_PPT], nil))
521+ let gorcPriceWaves8 = if ((chain == base58'2W'))
522+ then asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, toBase58String(gorcAssetId), "WAVES"], nil))
523+ else 20000
524+ let wavesPriceUsdt6 = if ((chain == base58'2W'))
525+ then asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, "WAVES", USDT_PPT], nil))
526+ else 150000000
514527 let cap8 = ((MARKET_AMOUNT + RESERVED_AMOUNT) + assetBalance(addressFromStringValue(getStringValue(teamWalletAddrKey)), gorcAssetId))
515528 let marketCap6 = fraction(fraction(cap8, gorcPriceWaves8, M8), wavesPriceUsdt6, M8)
516529 $Tuple2(nil, [("%s%d__teamAvailToVest__" + toString(vestingAmount)), ("%s%d__teamAmountLeft__" + toString(teamAmountLeft)), ("%s%d__gorcAvailToClaim__" + toString(userAmount)), ("%s%d__fomoEpoch__" + toString(fomoEpoch)), ("%s%d__currFomoPeriod__" + toString(currFomoPeriod)), ("%s%d__currFomoJackpotAmount__" + toString(currFomoJackpot)), ("%s%d__nextFomoJackpotAmount__" + toString(nextFomoJackpot)), ("%s%d__currLotteryJackpotAmount__" + toString(currLotteryJackpot)), ("%s%d__nextLotteryJackpotAmount__" + toString(nextLotteryJackpot)), ("%s%d__lastFomoTime__" + toString(lastFomoTime)), ("%s%s__lastFomoPlayer__" + lastFomoPlayer), ("%s%d__amountLeftTotal__" + toString(amountLeftTotal)), ("%s%d__finishBlock__" + toString(finishBlock)), ("%s%d__guess__" + toString(guess)), ("%s%s__lastFomoWinner__" + lastFomoWinner), ("%s%d__lastFomoWinnerAmount__" + toString(lastFomoWinnerAmount)), ("%s%d__lastFomoWinnerTime__" + toString(lastFomoWinnerTime)), ("%s%s__lastLotteryWinner__" + lastLotteryWinner), ("%s%d__lastLotteryWinnerAmount__" + toString(lastLotteryWinnerAmount)), ("%s%d__lastLotteryWinnerTime__" + toString(lastLotteryWinnerTime)), ("%s%d__gorcIssued__" + toString(M16)), ("%s%d__gorcStakedTotal__" + toString(gorcStakedTotal)), ("%s%d__fomoNumUniquePlayers__" + toString(fomoNumUniquePlayers)), ("%s%d__fomoTotalNumStakes__" + toString(fomoTotalNumStakes)), ("%s%d__fomoTotalStakedAmount__" + toString(fomoTotalStakedAmount)), ("%s%d__fomoUserNumStakes__" + toString(fomoUserNumStakes)), ("%s%d__fomoUserStakedAmount__" + toString(fomoUserStakedAmount)), ("%s%d__fomoUserNumWins__" + toString(fomoUserNumWins)), ("%s%d__fomoUserWonAmount__" + toString(fomoUserWonAmount)), ("%s%s__fomoFavoriteByNumGames__" + fomoFavoriteByNumGames), ("%s%s__fomoFavoriteByAmount__" + fomoFavoriteByAmount), ("%s%d__fomoTotalWonAmount__" + toString(valueOrElse(getInteger(fomoTotalWonAmountKey), 0))), ("%s%d__blessPrice__" + toString(BLESS_PRICE)), ("%s%d__marketCap__" + toString(marketCap6))])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let M16 = 10000000000000000
55
66 let M8 = 100000000
77
88 let STAKERS_AMOUNT = 2500000000000000
99
1010 let TEAM_AMOUNT = 1000000000000000
1111
1212 let MARKET_AMOUNT = 6000000000000000
1313
1414 let RESERVED_AMOUNT = 500000000000000
1515
1616 let YEAR_BLOCKS = (365 * 1440)
1717
1818 let TEAM_VESTING_PERIOD = YEAR_BLOCKS
1919
2020 let STAKE_PERIOD = (5 * YEAR_BLOCKS)
2121
2222 let BLESS_PRICE = 5000000000
2323
2424 let LOTTERY_PRICE = 100000000000
2525
2626 let DEFAULT_FOMO_PERIOD = 60
2727
2828 let MIN_FOMO_PERIOD = 2
2929
3030 let RANDOM_DELAY = 2
3131
3232 let CURRENT_JACKPOT_PERC = 50
3333
3434 let NEXT_JACKPOT_PERC = 20
3535
3636 let TEAM_PERC = 10
3737
38-let wxFactory = addressFromStringValue("3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93")
38+let chain = take(drop(this.bytes, 1), 1)
39+
40+let wxFactory = match chain {
41+ case _ =>
42+ if ((base58'2W' == $match0))
43+ then addressFromStringValue("3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93")
44+ else if ((base58'2T' == $match0))
45+ then addressFromStringValue("3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq")
46+ else throw("Unknown chain")
47+}
3948
4049 let USDT_PPT = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC"
4150
4251 let gorcAssetIdKey = "gorcAssetId"
4352
4453 let gorcAssetId = valueOrErrorMessage(getBinary(gorcAssetIdKey), "GORC is not issued yet")
4554
4655 let issueTimeKey = "issueTime"
4756
4857 let teamAmountLeftKey = "teamAmountLeft"
4958
5059 let lastTeamVestingTimeKey = "lastTeamVestingTime"
5160
5261 let stakersAmountTotalKey = "stakersAmountTotal"
5362
5463 let stakersAmountLeftKey = "stakersAmountLeft"
5564
5665 let stakedAmountTotalKey = "stakedTotal"
5766
5867 func stakedAmountByUserKey (addr) = ("stakedAmount_" + addr)
5968
6069
6170 func lastClaimTimeByUserKey (addr) = ("lastClaimTime_" + addr)
6271
6372
6473 let fomoEpochKey = "fomoEpoch"
6574
6675 let currFomoPeriodKey = "currFomoPeriod"
6776
6877 let lastFomoTimeKey = "lastFomoTime"
6978
7079 let currFomoJackpotKey = "currFomoJackpot"
7180
7281 let nextFomoJackpotKey = "nextFomoJackpot"
7382
7483 let lastFomoPlayerKey = "lastFomoPlayer"
7584
7685 let lastFomoWinnerKey = "lastFomoWinner"
7786
7887 let lastFomoWinnerAmountKey = "lastFomoWinnerAmount"
7988
8089 let lastFomoWinnerTimeKey = "lastFomoWinnerTime"
8190
8291 let teamWalletAddrKey = "teamWalletAddr"
8392
8493 let brokerAddrKey = "brokerAddr"
8594
8695 let reserveAddrKey = "reserveAddr"
8796
8897 func keyCommit (address) = ("finishBlockFor_" + address)
8998
9099
91100 func keyGuess (address) = ("guessFor_" + address)
92101
93102
94103 func keySalt (address) = ("saltFor_" + address)
95104
96105
97106 let currLotteryJackpotKey = "currLotteryJackpot"
98107
99108 let nextLotteryJackpotKey = "nextLotteryJackpot"
100109
101110 let lastLotteryWinnerKey = "lastLotteryWinner"
102111
103112 let lastLotteryWinnerAmountKey = "lastLotteryWinnerAmount"
104113
105114 let lastLotteryWinnerTimeKey = "lastLotteryWinnerTime"
106115
107116 let fomoNumUniquePlayersKey = "fomoNumUniquePlayers"
108117
109118 let fomoTotalNumStakesKey = "fomoTotalNumStakes"
110119
111120 let fomoTotalStakedAmountKey = "fomoTotalStakedAmount"
112121
113122 let fomoTotalWonAmountKey = "fomoTotalWonAmount"
114123
115124 func fomoUserNumStakesKey (address) = ("fomoUserNumStakes_" + address)
116125
117126
118127 func fomoUserStakedAmountKey (address) = ("fomoUserStakedAmount_" + address)
119128
120129
121130 func fomoUserNumWinsKey (address) = ("fomoUserNumWins_" + address)
122131
123132
124133 func fomoUserWonAmountKey (address) = ("fomoUserWonAmount_" + address)
125134
126135
127136 let fomoFavoriteByNumGamesKey = "fomoFavoriteByNumGames"
128137
129138 let fomoFavoriteByAmountKey = "fomoFavoriteByAmount"
130139
131140 func asInt (v) = match v {
132141 case n: Int =>
133142 n
134143 case _ =>
135144 throw("fail to cast into Int")
136145 }
137146
138147
139148 func gorcStats (userAddrOpt) = {
140149 let issueTime = valueOrErrorMessage(getInteger(issueTimeKey), "GORC is not issued yet")
141150 let nowLimitedVesting = min([height, (issueTime + TEAM_VESTING_PERIOD)])
142151 let lastTeamVestingTime = valueOrErrorMessage(getInteger(lastTeamVestingTimeKey), "Constructor is not called yet")
143152 let vestingAmount = fraction(TEAM_AMOUNT, (nowLimitedVesting - lastTeamVestingTime), TEAM_VESTING_PERIOD)
144153 let teamAmountLeft = (valueOrElse(getInteger(teamAmountLeftKey), 0) - vestingAmount)
145154 let amountLeftTotal = valueOrElse(getInteger(stakersAmountLeftKey), 0)
146155 let lastUserTime = valueOrElse(getInteger(lastClaimTimeByUserKey(userAddrOpt)), -1)
147156 if ((0 > lastUserTime))
148157 then $Tuple4(0, amountLeftTotal, vestingAmount, teamAmountLeft)
149158 else {
150159 let nowLimitedStaking = min([height, (issueTime + STAKE_PERIOD)])
151160 let userShares = valueOrElse(getInteger(stakedAmountByUserKey(userAddrOpt)), 0)
152161 let totalShares = valueOrElse(getInteger(stakedAmountTotalKey), 0)
153162 let stakersAmountTotal = valueOrElse(getInteger(stakersAmountTotalKey), STAKERS_AMOUNT)
154163 let userTemporal = fraction(stakersAmountTotal, (nowLimitedStaking - lastUserTime), STAKE_PERIOD)
155164 let userAmount = if ((totalShares != 0))
156165 then fraction(userTemporal, userShares, totalShares)
157166 else 0
158167 $Tuple4(userAmount, (amountLeftTotal - userAmount), vestingAmount, teamAmountLeft)
159168 }
160169 }
161170
162171
163172 func fixedPoint (val,decimals) = {
164173 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
165174 let lowPart = toString((val % tenPow))
166175 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
167176 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
168177 }
169178
170179
171180 func getNewLeaders (oldLeadersStr,newAddr,newAmount) = {
172181 let newCandidate = ((newAddr + "_") + toString(newAmount))
173182 if ((oldLeadersStr == ""))
174183 then [newCandidate]
175184 else {
176185 func sortByAmount (acc,el) = {
177186 let addr_amount = split(el, "_")
178187 let addr = addr_amount[0]
179188 let amount = parseIntValue(addr_amount[1])
180189 if (acc._2)
181190 then if ((addr == newAddr))
182191 then acc
183192 else $Tuple2((acc._1 :+ el), true)
184193 else if ((addr == newAddr))
185194 then $Tuple2((acc._1 :+ newCandidate), true)
186195 else if ((amount > newAmount))
187196 then $Tuple2((acc._1 :+ el), false)
188197 else $Tuple2(((acc._1 :+ newCandidate) :+ el), true)
189198 }
190199
191200 let result = {
192201 let $l = split(oldLeadersStr, ":")
193202 let $s = size($l)
194203 let $acc0 = $Tuple2(nil, false)
195204 func $f0_1 ($a,$i) = if (($i >= $s))
196205 then $a
197206 else sortByAmount($a, $l[$i])
198207
199208 func $f0_2 ($a,$i) = if (($i >= $s))
200209 then $a
201210 else throw("List size exceeds 3")
202211
203212 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
204213 }
205214 let arr = result._1
206215 if (result._2)
207216 then if ((size(arr) > 3))
208217 then [arr[0], arr[1], arr[2]]
209218 else arr
210219 else if ((size(arr) >= 3))
211220 then arr
212221 else (arr :+ newCandidate)
213222 }
214223 }
215224
216225
217226 func fomoInternal (i) = if ((size(i.payments) != 1))
218227 then throw("exactly 1 payment must be attached")
219228 else {
220229 let pmt = i.payments[0]
221230 let amt = pmt.amount
222231 if (if (!(isDefined(pmt.assetId)))
223232 then true
224233 else (value(pmt.assetId) != gorcAssetId))
225234 then throw("GORC payments only!")
226235 else {
227236 let change = (amt - BLESS_PRICE)
228237 if ((0 > change))
229238 then throw(((("You need to sacrifice " + fixedPoint(BLESS_PRICE, 8)) + " GORC, but I see only ") + fixedPoint(amt, 8)))
230239 else {
231240 let changeActions = if ((change > 0))
232241 then [ScriptTransfer(i.caller, change, gorcAssetId)]
233242 else nil
234243 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
235244 let lastFomoPlayer = valueOrElse(getString(lastFomoPlayerKey), "")
236245 let lastFomoNumWinsKey = fomoUserNumWinsKey(lastFomoPlayer)
237246 let lastFomoWonAmountKey = fomoUserWonAmountKey(lastFomoPlayer)
238247 let lastFomoNumWins = valueOrElse(getInteger(lastFomoNumWinsKey), 0)
239248 let lastFomoWonAmount = valueOrElse(getInteger(lastFomoWonAmountKey), 0)
240249 let deltaCurrJackpot = fraction(BLESS_PRICE, CURRENT_JACKPOT_PERC, 100)
241250 let deltaNextJackpot = fraction(BLESS_PRICE, NEXT_JACKPOT_PERC, 100)
242251 let deltaTeamAmount = fraction(BLESS_PRICE, TEAM_PERC, 100)
243252 let deltaStakersAmount = (((BLESS_PRICE - deltaCurrJackpot) - deltaNextJackpot) - deltaTeamAmount)
244253 let fomoEpoch = valueOrElse(getInteger(fomoEpochKey), 0)
245254 let currFomoPeriod = valueOrElse(getInteger(currFomoPeriodKey), DEFAULT_FOMO_PERIOD)
246255 let nextFomoPeriod = max([MIN_FOMO_PERIOD, (currFomoPeriod - 1)])
247256 let fomoCurrJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
248257 let fomoNextJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
249258 let oldLeadersByNum = valueOrElse(getString(fomoFavoriteByNumGamesKey), "")
250259 let oldLeadersByAmount = valueOrElse(getString(fomoFavoriteByAmountKey), "")
251260 let fomoActions = if (if (if ((height > (lastFomoTime + currFomoPeriod)))
252261 then (fomoCurrJackpot > 0)
253262 else false)
254263 then (lastFomoPlayer != "")
255264 else false)
256265 then [ScriptTransfer(addressFromStringValue(lastFomoPlayer), fomoCurrJackpot, gorcAssetId), StringEntry(lastFomoWinnerKey, lastFomoPlayer), IntegerEntry(lastFomoWinnerAmountKey, fomoCurrJackpot), IntegerEntry(lastFomoWinnerTimeKey, lastBlock.timestamp), IntegerEntry(currFomoJackpotKey, (fomoNextJackpot + deltaCurrJackpot)), IntegerEntry(nextFomoJackpotKey, deltaNextJackpot), IntegerEntry(fomoEpochKey, (fomoEpoch + 1)), IntegerEntry(currFomoPeriodKey, DEFAULT_FOMO_PERIOD), StringEntry(fomoFavoriteByNumGamesKey, makeString(getNewLeaders(oldLeadersByNum, lastFomoPlayer, (lastFomoNumWins + 1)), ":")), StringEntry(fomoFavoriteByAmountKey, makeString(getNewLeaders(oldLeadersByAmount, lastFomoPlayer, (lastFomoWonAmount + fomoCurrJackpot)), ":")), IntegerEntry(lastFomoNumWinsKey, (lastFomoNumWins + 1)), IntegerEntry(lastFomoWonAmountKey, (lastFomoWonAmount + fomoCurrJackpot)), IntegerEntry(fomoTotalWonAmountKey, (valueOrElse(getInteger(fomoTotalWonAmountKey), 0) + fomoCurrJackpot))]
257266 else [IntegerEntry(currFomoJackpotKey, (fomoCurrJackpot + deltaCurrJackpot)), IntegerEntry(nextFomoJackpotKey, (fomoNextJackpot + deltaNextJackpot)), IntegerEntry(currFomoPeriodKey, nextFomoPeriod)]
258267 let addr = toString(i.caller)
259268 let fomoNumUniquePlayers = valueOrElse(getInteger(fomoNumUniquePlayersKey), 0)
260269 let userNumStakesKey = fomoUserNumStakesKey(addr)
261270 let userStakedAmountKey = fomoUserStakedAmountKey(addr)
262271 let userNumStakes = getInteger(userNumStakesKey)
263272 let statsActions = ((if (isDefined(userNumStakes))
264273 then [IntegerEntry(userNumStakesKey, (value(userNumStakes) + 1)), IntegerEntry(userStakedAmountKey, (valueOrElse(getInteger(userStakedAmountKey), 0) + BLESS_PRICE))]
265274 else [IntegerEntry(fomoNumUniquePlayersKey, (fomoNumUniquePlayers + 1)), IntegerEntry(userNumStakesKey, 1), IntegerEntry(userStakedAmountKey, BLESS_PRICE)]) ++ [IntegerEntry(fomoTotalNumStakesKey, (valueOrElse(getInteger(fomoTotalNumStakesKey), 0) + 1)), IntegerEntry(fomoTotalStakedAmountKey, (valueOrElse(getInteger(fomoTotalStakedAmountKey), 0) + BLESS_PRICE))])
266275 ((([IntegerEntry(lastFomoTimeKey, height), StringEntry(lastFomoPlayerKey, toString(i.caller)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount))] ++ changeActions) ++ fomoActions) ++ statsActions)
267276 }
268277 }
269278 }
270279
271280
272281 func getRandomNumber (maxValue,salt,entropy) = if ((0 >= maxValue))
273282 then throw("maxValue should be > 0")
274283 else {
275284 let randomHash = sha256_16Kb((salt + entropy))
276285 (toInt(randomHash) % maxValue)
277286 }
278287
279288
280289 func walletInternal (userAddressOpt) = {
281290 let addr = addressFromString(userAddressOpt)
282291 let balance = if (isDefined(addr))
283292 then wavesBalance(value(addr))
284293 else BalanceDetails(0, 0, 0, 0)
285294 let gorcBalance = if (isDefined(addr))
286295 then assetBalance(value(addr), gorcAssetId)
287296 else 0
288297 let stakedGorc = valueOrElse(getInteger(stakedAmountByUserKey(userAddressOpt)), 0)
289298 [("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__gorcBalance__" + toString(gorcBalance)), ("%s%d__stakedGorc__" + toString(stakedGorc))]
290299 }
291300
292301
293302 @Callable(i)
294303 func testArgs (intVal,strVal,boolVal,binVal,arrInt,arrStr,arrBool,arrBin) = nil
295304
296305
297306
298307 @Callable(i)
299308 func constructorV1 (teamWalletAddr,brokerAddr,reserveAddr) = if ((i.caller != this))
300309 then throw("Permission denied")
301310 else {
302311 let issuedAmount = M16
303312 let issue = Issue("GORC", "Meme coin by God of Random Chance. Visit https://gorc.meme, sacrifice to the God of Random and you will receive an answer to any question or a blessing. Lucky one gets a Gift of God", issuedAmount, 8, false, unit, 0)
304313 let assetId = calculateAssetId(issue)
305314 [issue, BinaryEntry(gorcAssetIdKey, assetId), IntegerEntry(issueTimeKey, height), IntegerEntry(stakersAmountLeftKey, STAKERS_AMOUNT), IntegerEntry(stakersAmountTotalKey, STAKERS_AMOUNT), IntegerEntry(teamAmountLeftKey, TEAM_AMOUNT), IntegerEntry(lastTeamVestingTimeKey, height), StringEntry(teamWalletAddrKey, teamWalletAddr), StringEntry(brokerAddrKey, brokerAddr), StringEntry(reserveAddrKey, reserveAddr), ScriptTransfer(addressFromStringValue(reserveAddr), RESERVED_AMOUNT, assetId), ScriptTransfer(addressFromStringValue(brokerAddr), MARKET_AMOUNT, assetId), IntegerEntry(fomoEpochKey, 0), IntegerEntry(currFomoPeriodKey, DEFAULT_FOMO_PERIOD)]
306315 }
307316
308317
309318
310319 @Callable(i)
311320 func stakeGorc () = if ((i.caller != this))
312321 then throw("Permission denied")
313322 else if ((size(i.payments) != 1))
314323 then throw("exactly 1 payment must be attached")
315324 else {
316325 let pmt = i.payments[0]
317326 let amt = pmt.amount
318327 if (if (!(isDefined(pmt.assetId)))
319328 then true
320329 else (value(pmt.assetId) != gorcAssetId))
321330 then throw("GORC payments only!")
322331 else {
323332 let addr = toString(i.caller)
324- let $t01446914551 = gorcStats(addr)
325- let userAmount = $t01446914551._1
326- let amountLeftTotal = $t01446914551._2
327- let vestingAmount = $t01446914551._3
328- let teamAmountLeft = $t01446914551._4
333+ let $t01466514747 = gorcStats(addr)
334+ let userAmount = $t01466514747._1
335+ let amountLeftTotal = $t01466514747._2
336+ let vestingAmount = $t01466514747._3
337+ let teamAmountLeft = $t01466514747._4
329338 let userAmountKey = stakedAmountByUserKey(addr)
330339 let claimActions = if ((userAmount > 0))
331340 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
332341 else nil
333342 let vestingActions = if ((vestingAmount > 0))
334343 then [ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), vestingAmount, gorcAssetId), IntegerEntry(teamAmountLeftKey, teamAmountLeft), IntegerEntry(lastTeamVestingTimeKey, height)]
335344 else nil
336345 $Tuple2(((claimActions ++ vestingActions) ++ [IntegerEntry(stakedAmountTotalKey, (valueOrElse(getInteger(stakedAmountTotalKey), 0) + amt)), IntegerEntry(userAmountKey, (valueOrElse(getInteger(userAmountKey), 0) + amt)), IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), userAmount)
337346 }
338347 }
339348
340349
341350
342351 @Callable(i)
343352 func unstakeGorc (amount) = if ((i.caller != this))
344353 then throw("Permission denied")
345354 else if ((0 >= amount))
346355 then throw("Amount should be positive")
347356 else {
348357 let addr = toString(i.caller)
349358 if ((size(i.payments) != 0))
350359 then throw("No payments required")
351360 else {
352361 let userAmountKey = stakedAmountByUserKey(addr)
353362 let oldAmount = valueOrElse(getInteger(userAmountKey), 0)
354363 if ((0 > (oldAmount - amount)))
355364 then throw(((("You have only " + fixedPoint(oldAmount, 8)) + " GORC staked, tried to unstake ") + fixedPoint(amount, 8)))
356365 else {
357- let $t01586715949 = gorcStats(addr)
358- let userAmount = $t01586715949._1
359- let amountLeftTotal = $t01586715949._2
360- let vestingAmount = $t01586715949._3
361- let teamAmountLeft = $t01586715949._4
366+ let $t01606316145 = gorcStats(addr)
367+ let userAmount = $t01606316145._1
368+ let amountLeftTotal = $t01606316145._2
369+ let vestingAmount = $t01606316145._3
370+ let teamAmountLeft = $t01606316145._4
362371 let claimActions = if ((userAmount > 0))
363372 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
364373 else nil
365374 let vestingActions = if ((vestingAmount > 0))
366375 then [ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), vestingAmount, gorcAssetId), IntegerEntry(teamAmountLeftKey, teamAmountLeft), IntegerEntry(lastTeamVestingTimeKey, height)]
367376 else nil
368377 $Tuple2(((claimActions ++ vestingActions) ++ [IntegerEntry(stakedAmountTotalKey, (valueOrErrorMessage(getInteger(stakedAmountTotalKey), "No GORC staked") - amount)), IntegerEntry(userAmountKey, (oldAmount - amount)), IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), 0)
369378 }
370379 }
371380 }
372381
373382
374383
375384 @Callable(i)
376385 func claimGorc () = if ((i.caller != this))
377386 then throw("Permission denied")
378387 else if ((size(i.payments) != 0))
379388 then throw("No payments required")
380389 else {
381390 let addr = toString(i.caller)
382- let $t01686816950 = gorcStats(addr)
383- let userAmount = $t01686816950._1
384- let amountLeftTotal = $t01686816950._2
385- let vestingAmount = $t01686816950._3
386- let teamAmountLeft = $t01686816950._4
391+ let $t01706417146 = gorcStats(addr)
392+ let userAmount = $t01706417146._1
393+ let amountLeftTotal = $t01706417146._2
394+ let vestingAmount = $t01706417146._3
395+ let teamAmountLeft = $t01706417146._4
387396 let claimActions = if ((userAmount > 0))
388397 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
389398 else nil
390399 let vestingActions = if ((vestingAmount > 0))
391400 then [ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), vestingAmount, gorcAssetId), IntegerEntry(teamAmountLeftKey, teamAmountLeft), IntegerEntry(lastTeamVestingTimeKey, height)]
392401 else nil
393402 $Tuple2(((claimActions ++ vestingActions) ++ [IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), userAmount)
394403 }
395404
396405
397406
398407 @Callable(i)
399408 func answerMe () = $Tuple2(fomoInternal(i), toInt(i.transactionId))
400409
401410
402411
403412 @Callable(i)
404413 func blessMe () = $Tuple2(fomoInternal(i), 42)
405414
406415
407416
408417 @Callable(i)
409418 func commitGuess (guess) = if ((i.caller != this))
410419 then throw("Permission denied")
411420 else {
412421 let addr = toString(i.caller)
413422 let finishKey = keyCommit(addr)
414423 let guessKey = keyGuess(addr)
415424 if (isDefined(getInteger(finishKey)))
416425 then throw("You already made a bet, please use it")
417426 else if (if ((0 > guess))
418427 then true
419428 else (guess > 11))
420429 then throw("The number should be between 0 and 11")
421430 else if ((size(i.payments) != 1))
422431 then throw("exactly 1 payment must be attached")
423432 else {
424433 let pmt = i.payments[0]
425434 let amt = pmt.amount
426435 if (if (!(isDefined(pmt.assetId)))
427436 then true
428437 else (value(pmt.assetId) != gorcAssetId))
429438 then throw("GORC payments only!")
430439 else {
431440 let change = (amt - LOTTERY_PRICE)
432441 if ((0 > change))
433442 then throw(((("You need to sacrifice " + fixedPoint(LOTTERY_PRICE, 8)) + " GORC, but I see only ") + fixedPoint(amt, 8)))
434443 else {
435444 let changeActions = if ((change > 0))
436445 then [ScriptTransfer(i.caller, change, gorcAssetId)]
437446 else nil
438447 let finishBlock = (height + RANDOM_DELAY)
439448 let deltaCurrJackpot = fraction(LOTTERY_PRICE, CURRENT_JACKPOT_PERC, 100)
440449 let deltaNextJackpot = fraction(LOTTERY_PRICE, NEXT_JACKPOT_PERC, 100)
441450 let deltaTeamAmount = fraction(LOTTERY_PRICE, TEAM_PERC, 100)
442451 let deltaStakersAmount = (((LOTTERY_PRICE - deltaCurrJackpot) - deltaNextJackpot) - deltaTeamAmount)
443452 $Tuple2(([IntegerEntry(finishKey, finishBlock), IntegerEntry(guessKey, guess), IntegerEntry(currLotteryJackpotKey, (valueOrElse(getInteger(currLotteryJackpotKey), 0) + deltaCurrJackpot)), IntegerEntry(nextLotteryJackpotKey, (valueOrElse(getInteger(nextLotteryJackpotKey), 0) + deltaNextJackpot)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount)), StringEntry(keySalt(addr), toBase58String(i.transactionId))] ++ changeActions), finishBlock)
444453 }
445454 }
446455 }
447456 }
448457
449458
450459
451460 @Callable(i)
452461 func guessLottery () = if ((i.caller != this))
453462 then throw("Permission denied")
454463 else {
455464 let addr = toString(i.caller)
456465 let finishKey = keyCommit(addr)
457466 let guessKey = keyGuess(addr)
458467 let guess = valueOrErrorMessage(getInteger(guessKey), "You have not made a bet")
459468 let finishBlock = valueOrErrorMessage(getInteger(finishKey), "You have not made a bet")
460469 if ((finishBlock > height))
461470 then throw(("Random number is not ready yet, wait until height = " + toString(finishBlock)))
462471 else {
463472 let entropy = value(value(blockInfoByHeight(finishBlock)).vrf)
464473 let saltKey = keySalt(addr)
465474 let salt = fromBase58String(valueOrElse(getString(saltKey), "DEFAULT"))
466475 let rand = getRandomNumber(12, salt, entropy)
467476 let currJackpot = valueOrElse(getInteger(currLotteryJackpotKey), 0)
468477 let winActions = if ((rand == guess))
469478 then [ScriptTransfer(i.caller, currJackpot, gorcAssetId), StringEntry(lastLotteryWinnerKey, addr), IntegerEntry(lastLotteryWinnerAmountKey, currJackpot), IntegerEntry(lastLotteryWinnerTimeKey, lastBlock.timestamp), IntegerEntry(currLotteryJackpotKey, valueOrElse(getInteger(nextLotteryJackpotKey), 0)), IntegerEntry(nextLotteryJackpotKey, 0)]
470479 else nil
471480 $Tuple2(([DeleteEntry(finishKey), DeleteEntry(guessKey), DeleteEntry(saltKey)] ++ winActions), rand)
472481 }
473482 }
474483
475484
476485
477486 @Callable(i)
478487 func statsREADONLY (userAddrOpt) = {
479- let $t02171521804 = gorcStats(userAddrOpt)
480- let userAmount = $t02171521804._1
481- let amountLeftTotal = $t02171521804._2
482- let vestingAmount = $t02171521804._3
483- let teamAmountLeft = $t02171521804._4
488+ let $t02191122000 = gorcStats(userAddrOpt)
489+ let userAmount = $t02191122000._1
490+ let amountLeftTotal = $t02191122000._2
491+ let vestingAmount = $t02191122000._3
492+ let teamAmountLeft = $t02191122000._4
484493 let currFomoJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
485494 let nextFomoJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
486495 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
487496 let lastFomoPlayer = valueOrElse(getString(lastFomoPlayerKey), "")
488497 let fomoEpoch = valueOrElse(getInteger(fomoEpochKey), 0)
489498 let currFomoPeriod = valueOrElse(getInteger(currFomoPeriodKey), DEFAULT_FOMO_PERIOD)
490499 let currLotteryJackpot = valueOrElse(getInteger(currLotteryJackpotKey), 0)
491500 let nextLotteryJackpot = valueOrElse(getInteger(nextLotteryJackpotKey), 0)
492501 let finishKey = keyCommit(userAddrOpt)
493502 let guessKey = keyGuess(userAddrOpt)
494503 let guess = valueOrElse(getInteger(guessKey), -1)
495504 let finishBlock = valueOrElse(getInteger(finishKey), -1)
496505 let lastFomoWinner = valueOrElse(getString(lastFomoWinnerKey), "")
497506 let lastFomoWinnerAmount = valueOrElse(getInteger(lastFomoWinnerAmountKey), 0)
498507 let lastFomoWinnerTime = valueOrElse(getInteger(lastFomoWinnerTimeKey), 0)
499508 let lastLotteryWinner = valueOrElse(getString(lastLotteryWinnerKey), "")
500509 let lastLotteryWinnerAmount = valueOrElse(getInteger(lastLotteryWinnerAmountKey), 0)
501510 let lastLotteryWinnerTime = valueOrElse(getInteger(lastLotteryWinnerTimeKey), 0)
502511 let gorcStakedTotal = valueOrElse(getInteger(stakedAmountTotalKey), 0)
503512 let fomoNumUniquePlayers = valueOrElse(getInteger(fomoNumUniquePlayersKey), 0)
504513 let fomoTotalNumStakes = valueOrElse(getInteger(fomoTotalNumStakesKey), 0)
505514 let fomoTotalStakedAmount = valueOrElse(getInteger(fomoTotalStakedAmountKey), 0)
506515 let fomoUserNumStakes = valueOrElse(getInteger(fomoUserNumStakesKey(userAddrOpt)), 0)
507516 let fomoUserStakedAmount = valueOrElse(getInteger(fomoUserStakedAmountKey(userAddrOpt)), 0)
508517 let fomoUserNumWins = valueOrElse(getInteger(fomoUserNumWinsKey(userAddrOpt)), 0)
509518 let fomoUserWonAmount = valueOrElse(getInteger(fomoUserWonAmountKey(userAddrOpt)), 0)
510519 let fomoFavoriteByNumGames = valueOrElse(getString(fomoFavoriteByNumGamesKey), "")
511520 let fomoFavoriteByAmount = valueOrElse(getString(fomoFavoriteByAmountKey), "")
512- let gorcPriceWaves8 = asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, toBase58String(gorcAssetId), "WAVES"], nil))
513- let wavesPriceUsdt6 = asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, "WAVES", USDT_PPT], nil))
521+ let gorcPriceWaves8 = if ((chain == base58'2W'))
522+ then asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, toBase58String(gorcAssetId), "WAVES"], nil))
523+ else 20000
524+ let wavesPriceUsdt6 = if ((chain == base58'2W'))
525+ then asInt(invoke(wxFactory, "swapCalculateREADONLY", [100000000, "WAVES", USDT_PPT], nil))
526+ else 150000000
514527 let cap8 = ((MARKET_AMOUNT + RESERVED_AMOUNT) + assetBalance(addressFromStringValue(getStringValue(teamWalletAddrKey)), gorcAssetId))
515528 let marketCap6 = fraction(fraction(cap8, gorcPriceWaves8, M8), wavesPriceUsdt6, M8)
516529 $Tuple2(nil, [("%s%d__teamAvailToVest__" + toString(vestingAmount)), ("%s%d__teamAmountLeft__" + toString(teamAmountLeft)), ("%s%d__gorcAvailToClaim__" + toString(userAmount)), ("%s%d__fomoEpoch__" + toString(fomoEpoch)), ("%s%d__currFomoPeriod__" + toString(currFomoPeriod)), ("%s%d__currFomoJackpotAmount__" + toString(currFomoJackpot)), ("%s%d__nextFomoJackpotAmount__" + toString(nextFomoJackpot)), ("%s%d__currLotteryJackpotAmount__" + toString(currLotteryJackpot)), ("%s%d__nextLotteryJackpotAmount__" + toString(nextLotteryJackpot)), ("%s%d__lastFomoTime__" + toString(lastFomoTime)), ("%s%s__lastFomoPlayer__" + lastFomoPlayer), ("%s%d__amountLeftTotal__" + toString(amountLeftTotal)), ("%s%d__finishBlock__" + toString(finishBlock)), ("%s%d__guess__" + toString(guess)), ("%s%s__lastFomoWinner__" + lastFomoWinner), ("%s%d__lastFomoWinnerAmount__" + toString(lastFomoWinnerAmount)), ("%s%d__lastFomoWinnerTime__" + toString(lastFomoWinnerTime)), ("%s%s__lastLotteryWinner__" + lastLotteryWinner), ("%s%d__lastLotteryWinnerAmount__" + toString(lastLotteryWinnerAmount)), ("%s%d__lastLotteryWinnerTime__" + toString(lastLotteryWinnerTime)), ("%s%d__gorcIssued__" + toString(M16)), ("%s%d__gorcStakedTotal__" + toString(gorcStakedTotal)), ("%s%d__fomoNumUniquePlayers__" + toString(fomoNumUniquePlayers)), ("%s%d__fomoTotalNumStakes__" + toString(fomoTotalNumStakes)), ("%s%d__fomoTotalStakedAmount__" + toString(fomoTotalStakedAmount)), ("%s%d__fomoUserNumStakes__" + toString(fomoUserNumStakes)), ("%s%d__fomoUserStakedAmount__" + toString(fomoUserStakedAmount)), ("%s%d__fomoUserNumWins__" + toString(fomoUserNumWins)), ("%s%d__fomoUserWonAmount__" + toString(fomoUserWonAmount)), ("%s%s__fomoFavoriteByNumGames__" + fomoFavoriteByNumGames), ("%s%s__fomoFavoriteByAmount__" + fomoFavoriteByAmount), ("%s%d__fomoTotalWonAmount__" + toString(valueOrElse(getInteger(fomoTotalWonAmountKey), 0))), ("%s%d__blessPrice__" + toString(BLESS_PRICE)), ("%s%d__marketCap__" + toString(marketCap6))])
517530 }
518531
519532
520533
521534 @Callable(i)
522535 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
523536
524537

github/deemru/w8io/169f3d6 
60.31 ms