tx · AjxmAyBmg6NhyfiEgatzbnCi3MfvUGqGVofNEry9Pjnf

3N4Pj4MutKVgrmcuX7jgyVGWoBhDyKYFZBj:  -0.01400000 Waves

2019.11.15 14:43 [766151] smart account 3N4Pj4MutKVgrmcuX7jgyVGWoBhDyKYFZBj > SELF 0.00000000 Waves

{ "type": 13, "id": "AjxmAyBmg6NhyfiEgatzbnCi3MfvUGqGVofNEry9Pjnf", "fee": 1400000, "feeAssetId": null, "timestamp": 1573818281326, "version": 1, "sender": "3N4Pj4MutKVgrmcuX7jgyVGWoBhDyKYFZBj", "senderPublicKey": "7YuxEiQSearE3DvFS84DXzV5gad9qxsq4bTy633SAYBj", "proofs": [ "UnHTE2JnkViA2msHLja3ubjEnjAZLwsa8QCYD4nZWy4bnbhdYAMEJm1x459NoUdcUAYhtx6GhKcvStHSYWQqxE9" ], "script": "base64:AAIDAAAAAAAAACwIARIAEgASBQoDCAEIEgASAwoBCBIAEgYKBAgBAQgSAwoBCBIHCgUICAEBCAAAAGYBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHAAAAAAxTRU5EVFhFWFBJUkUAAAAAAAAAAB4AAAAAD0xJU1RTUExJVFNZTUJPTAIAAAABXwAAAAAOTElTVERBVEFTWU1CT0wCAAAAASsAAAAAB1dBVkVMRVQAAAAAAAX14QAAAAAABVBBVUxJAAAAAAAAAABkAAAAAA1DUllUSUNBTFNIQVJFAAAAAAAAAAAUAAAAAAxMRUFTSU5HU0hBUkUAAAAAAAAAAFoAAAAADUxFQVNJTlRYQ09VTlQAAAAAAAAAAAoAAAAADURFRklDSVRPRkZTRVQAAAAAAAAAAAoAAAAADFdBVkVTQVNTRVRJRAIAAAAFd2F2ZXMAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAADkJvbmRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJSZXNlcnZlQ29udHJhY3RLZXkCAAAAEHJlc2VydmVfY29udHJhY3QAAAAAEkF1Y3Rpb25Db250cmFjdEtleQIAAAAQYXVjdGlvbl9jb250cmFjdAAAAAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QAAAAADlJQRENvbnRyYWN0S2V5AgAAAAxycGRfY29udHJhY3QAAAAAEUNvbnRvbENvbnRyYWN0S2V5AgAAABBjb250cm9sX2NvbnRyYWN0AAAAABZCYWxhbmNlTG9ja0ludGVydmFsS2V5AgAAABViYWxhbmNlX2xvY2tfaW50ZXJ2YWwAAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQIAAAAVbWluX3dhdmVzX3N3YXBfYW1vdW50AAAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAAAAAOTm9kZUFkZHJlc3NLZXkCAAAADG5vZGVfYWRkcmVzcwAAAAAVTm9kZU9yYWNsZVByb3ZpZGVyS2V5AgAAABRvcmFjbGVfbm9kZV9wcm92aWRlcgAAAAASTGVhc2luZ0ludGVydmFsS2V5AgAAABBsZWFzaW5nX2ludGVydmFsAAAAAA1SUERCYWxhbmNlS2V5AgAAAAtycGRfYmFsYW5jZQEAAAAYZ2V0UlBEQ29udHJhY3RCYWxhbmNlS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgUAAAANUlBEQmFsYW5jZUtleQIAAAABXwkAAlgAAAABBQAAAAdhc3NldElkAAAAABFUb3RhbE9yZGVyYm9va0tleQIAAAAPdG90YWxfb3JkZXJib29rAAAAABxUb3RhbExpcXVpZGF0aW9uT3JkZXJib29rS2V5AgAAABt0b3RhbF9saXF1aWRhdGlvbl9vcmRlcmJvb2sAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgAAAAADElzQmxvY2tlZEtleQIAAAAKaXNfYmxvY2tlZAAAAAAVTGVhc2luZ0V4cGlyZUJsb2NrS2V5AgAAABRsZWFzaW5nX2V4cGlyZV9ibG9jawAAAAAOSXNSZWJhbGFuY2VLZXkCAAAADGlzX3JlYmFsYW5jZQAAAAARTGVhc2luZ1R4Q291bnRLZXkCAAAADWxlYXNpbmdfaW5kZXgAAAAAEExlYXNpbmdBbW91bnRLZXkCAAAADmxlYXNpbmdfYW1vdW50AQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEAAAAFaW5kZXgJAAEsAAAAAgkAASwAAAACBQAAAA1QcmljZUluZGV4S2V5AgAAAAFfCQABpAAAAAEFAAAABWluZGV4AAAAAA9SUERTeW5jSW5kZXhLZXkCAAAADnJwZF9zeW5jX2luZGV4AQAAACBnZXRSUERTbmFwc2hvdENvbnRyYWN0QmFsYW5jZUtleQAAAAIAAAAFY291bnQAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA1SUERCYWxhbmNlS2V5AgAAAAFfCQACWAAAAAEFAAAAB2Fzc2V0SWQCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAAHWdldENhbmNlbExlYXNlVHhSZXNlcnZlRmVlS2V5AAAAAQAAAARoYXNoCQABLAAAAAIJAAEsAAAAAgIAAAAbY2FuY2VsX2xlYXNlX3R4X3Jlc2VydmVfZmVlAgAAAAFfBQAAAARoYXNoAQAAABpnZXRBY2NvdW50TG9ja2VkQmFsYW5jZUtleQAAAAIAAAAFb3duZXIAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAAB2Fzc2V0SWQCAAAAAV8FAAAABW93bmVyAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABAAAABW93bmVyCQABLAAAAAICAAAADmJhbGFuY2VfYmxvY2tfBQAAAAVvd25lcgEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQAAAAVjb3VudAkAASwAAAACCQABLAAAAAICAAAACnJwZF9wcm9maXQCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAAE2dldExvY2tlZEJhbGFuY2VLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAAB2Fzc2V0SWQBAAAAE2dldExlYXNlVHhTdGF0dXNLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAAA9sZWFzZV90eF9zdGF0dXMCAAAAAV8FAAAABGhhc2gBAAAAGWdldExlYXNlVHhBbW91bnRCeUhhc2hLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACBQAAABBMZWFzaW5nQW1vdW50S2V5AgAAAAFfBQAAAARoYXNoAQAAABhnZXRMZWFzZVR4Qnl0ZXNCeUhhc2hLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAAAhsZWFzZV90eAIAAAABXwUAAAAEaGFzaAEAAAAcZ2V0TGVhc2VUeEV4cGlyZVNlbmRCbG9ja0tleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAAE2xlYXNpbmdfZXhwaXJlX3NlbmQCAAAAAV8FAAAABGhhc2gBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGkAAAACCQAAaAAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAZhbW91bnQAAAAAAAAAAGQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAaQAAAAIJAABoAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAAAAAAAGQFAAAABVBBVUxJBQAAAAdXQVZFTEVUAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABAAAABmFtb3VudAkAAGkAAAACBQAAAAZhbW91bnQFAAAABVBBVUxJAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABAAAABmFtb3VudAkAAGgAAAACBQAAAAZhbW91bnQFAAAABVBBVUxJAQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAACAAAABmFtb3VudAAAAAVwcmljZQkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQEAAAAQZ2V0TG9ja2VkQmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAE2dldExvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhc3NldElkAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABZMaXF1aWRhdGlvbkNvbnRyYWN0S2V5AAAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEk5ldXRyaW5vQXNzZXRJZEtleQAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwAAAAAPcmVzZXJ2ZUNvbnRyYWN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABJSZXNlcnZlQ29udHJhY3RLZXkAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASQXVjdGlvbkNvbnRyYWN0S2V5AAAAAAtycGRDb250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAOUlBEQ29udHJhY3RLZXkAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAARQ29udG9sQ29udHJhY3RLZXkAAAAADGN1cnJlbnRQcmljZQkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAUAAAAIUHJpY2VLZXkAAAAACnByaWNlSW5kZXgJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAADVByaWNlSW5kZXhLZXkAAAAACWlzQmxvY2tlZAkBAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAADElzQmxvY2tlZEtleQAAAAAObGVhc2luZ1R4Q291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEUxlYXNpbmdUeENvdW50S2V5AAAAAAtpc1JlYmFsYW5jZQkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAADklzUmViYWxhbmNlS2V5AAAAAA9sZWFzaW5nSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEkxlYXNpbmdJbnRlcnZhbEtleQAAAAASbGVhc2luZ0V4cGlyZUJsb2NrCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVMZWFzaW5nRXhwaXJlQmxvY2tLZXkAAAAADWxlYXNpbmdBbW91bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEExlYXNpbmdBbW91bnRLZXkAAAAAC25vZGVBZGRyZXNzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA5Ob2RlQWRkcmVzc0tleQAAAAAVbm9kZU9yYWNsZVByb3ZpZGVyS2V5CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABVOb2RlT3JhY2xlUHJvdmlkZXJLZXkAAAAADHJwZFN5bmNJbmRleAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPUlBEU3luY0luZGV4S2V5AAAAABNiYWxhbmNlTG9ja0ludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABZCYWxhbmNlTG9ja0ludGVydmFsS2V5AAAAABJtaW5XYXZlc1N3YXBBbW91bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQAAAAAVbWluTmV1dHJpbm9Td2FwQW1vdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkAAAAAB3Jlc2VydmUJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMJAQAAABBnZXRMb2NrZWRCYWxhbmNlAAAAAQUAAAAMV0FWRVNBU1NFVElEAAAAABVyZXNlcnZlV2l0aG91dExlYXNpbmcJAABlAAAAAgUAAAAHcmVzZXJ2ZQUAAAANbGVhc2luZ0Ftb3VudAAAAAALYm9uZEFzc2V0SWQJAAJZAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAOQm9uZEFzc2V0SWRLZXkAAAAACmJvbmRTdXBwbHkJAABlAAAAAggJAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAAtib25kQXNzZXRJZAAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAAtib25kQXNzZXRJZAAAAAAObmV1dHJpbm9TdXBwbHkJAABkAAAAAgkAAGUAAAACCAkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQJAQAAABBnZXRMb2NrZWRCYWxhbmNlAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQAAAAAHZGVmaWNpdAkAAGUAAAACBQAAAA5uZXV0cmlub1N1cHBseQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAC3JwZENvbnRyYWN0CQEAAAAYZ2V0UlBEQ29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAAAAAAZdG90YWxMaXF1aWRhdGlvbk9yZGVyYm9vawkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2F1Y3Rpb25Db250cmFjdAUAAAAcVG90YWxMaXF1aWRhdGlvbk9yZGVyYm9va0tleQAAAAAOdG90YWxPcmRlcmJvb2sJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9hdWN0aW9uQ29udHJhY3QFAAAAEVRvdGFsT3JkZXJib29rS2V5AQAAAA9nZXRQcmljZUhpc3RvcnkAAAABAAAABWJsb2NrCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQUAAAAFYmxvY2sBAAAAFWdldEhlaWdodFByaWNlQnlJbmRleAAAAAEAAAAFaW5kZXgJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QJAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABBQAAAAVpbmRleAEAAAAaZ2V0Q2FuY2VsTGVhc2VUeFJlc2VydmVGZWUAAAABAAAABGhhc2gJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAB1nZXRDYW5jZWxMZWFzZVR4UmVzZXJ2ZUZlZUtleQAAAAEFAAAABGhhc2gBAAAAF2dldEFjY291bnRMb2NrZWRCYWxhbmNlAAAAAgAAAAVvd25lcgAAAAdhc3NldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAaZ2V0QWNjb3VudExvY2tlZEJhbGFuY2VLZXkAAAACBQAAAAVvd25lcgUAAAAHYXNzZXRJZAEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQAAAAEFAAAABW93bmVyAQAAAAxnZXRSUERQcm9maXQAAAABAAAABWNvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQUAAAAFY291bnQBAAAAEGdldExlYXNlVHhTdGF0dXMAAAABAAAABGhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABNnZXRMZWFzZVR4U3RhdHVzS2V5AAAAAQUAAAAEaGFzaAEAAAAWZ2V0TGVhc2VUeEFtb3VudEJ5SGFzaAAAAAEAAAAEaGFzaAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldExlYXNlVHhBbW91bnRCeUhhc2hLZXkAAAABBQAAAARoYXNoAQAAABVnZXRMZWFzZVR4Qnl0ZXNCeUhhc2gAAAABAAAABGhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABhnZXRMZWFzZVR4Qnl0ZXNCeUhhc2hLZXkAAAABBQAAAARoYXNoAQAAABlnZXRMZWFzZVR4RXhwaXJlU2VuZEJsb2NrAAAAAQAAAARoYXNoCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAcZ2V0TGVhc2VUeEV4cGlyZVNlbmRCbG9ja0tleQAAAAEFAAAABGhhc2gAAAAJAAAAAWkBAAAAE3N3YXBXYXZlc1RvTmV1dHJpbm8AAAAABAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAAEm1pbldhdmVzU3dhcEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAALWFuIGFtb3VudCBpcyBsZXNzIHRoYW4gbWluIGF2YWlsYWJsZSBhbW91bnQ6IAkAAaQAAAABBQAAABJtaW5XYXZlc1N3YXBBbW91bnQCAAAACSB3YXZlbGV0cwMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAASY2FuIHVzZSB3YXZlcyBvbmx5AwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWxsIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcwMJAABmAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGYXdhaXQgCQABpAAAAAEJAABlAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAIAAAAHIGJsb2NrcwMJAQAAAAIhPQAAAAIJAQAAABdnZXRBY2NvdW50TG9ja2VkQmFsYW5jZQAAAAIFAAAAB2FjY291bnQFAAAADFdBVkVTQVNTRVRJRAAAAAAAAAAAAAkAAAIAAAABAgAAACJwbGVhc2Ugd2l0aGRyYXcgbG9ja2VkIGZ1bmRzIGZpcnN0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAaZ2V0QWNjb3VudExvY2tlZEJhbGFuY2VLZXkAAAACBQAAAAdhY2NvdW50BQAAAAxXQVZFU0FTU0VUSUQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAHYWNjb3VudAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAE2JhbGFuY2VMb2NrSW50ZXJ2YWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAMV0FWRVNBU1NFVElECQAAZAAAAAIJAQAAABBnZXRMb2NrZWRCYWxhbmNlAAAAAQUAAAAMV0FWRVNBU1NFVElECAUAAAADcG10AAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAE3N3YXBOZXV0cmlub1RvV2F2ZXMAAAAABAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAALWFuIGFtb3VudCBpcyBsZXNzIHRoYW4gbWluIGF2YWlsYWJsZSBhbW91bnQ6IAkAAaQAAAABBQAAABVtaW5OZXV0cmlub1N3YXBBbW91bnQCAAAADyBuZXV0cmlubyBjZW50cwMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAD25ldXRyaW5vQXNzZXRJZAkAAAIAAAABAgAAAChjYW4gdXNlIGFwcHJvcHJpYXRlIG5ldXRyaW5vIHRva2VucyBvbmx5AwkAAGYAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZhd2FpdCAJAAGkAAAAAQkAAGUAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0AgAAAAcgYmxvY2tzAwkBAAAAAiE9AAAAAgkBAAAAF2dldEFjY291bnRMb2NrZWRCYWxhbmNlAAAAAgUAAAAHYWNjb3VudAUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAAAAAAAACQAAAgAAAAECAAAAInBsZWFzZSB3aXRoZHJhdyBsb2NrZWQgZnVuZHMgZmlyc3QEAAAAEG5ld0xvY2tlZEJhbGFuY2UJAABkAAAAAgkBAAAAEGdldExvY2tlZEJhbGFuY2UAAAABBQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcIBQAAAANwbXQAAAAGYW1vdW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAaZ2V0QWNjb3VudExvY2tlZEJhbGFuY2VLZXkAAAACBQAAAAdhY2NvdW50BQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAHYWNjb3VudAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAE2JhbGFuY2VMb2NrSW50ZXJ2YWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nBQAAABBuZXdMb2NrZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5Jc1JlYmFsYW5jZUtleQMJAABnAAAAAgUAAAAVcmVzZXJ2ZVdpdGhvdXRMZWFzaW5nCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAEG5ld0xvY2tlZEJhbGFuY2UFAAAADGN1cnJlbnRQcmljZQcGBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAADAAAAB2FjY291bnQAAAAFaW5kZXgAAAANbG9ja2VkQXNzZXRJZAQAAAAMdW5sb2NrSGVpZ2h0CQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAQAAAANbG9ja2VkQmFsYW5jZQkBAAAAF2dldEFjY291bnRMb2NrZWRCYWxhbmNlAAAAAgUAAAAHYWNjb3VudAUAAAANbG9ja2VkQXNzZXRJZAQAAAALaW5kZXhIZWlnaHQJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABBQAAAAVpbmRleAQAAAAPbmV4dEluZGV4SGVpZ2h0CQEAAAAVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AAAAAQkAAGQAAAACBQAAAAVpbmRleAAAAAAAAAAAAQQAAAAMcHJpY2VCeUluZGV4CQEAAAAPZ2V0UHJpY2VIaXN0b3J5AAAAAQUAAAALaW5kZXhIZWlnaHQEAAAABmFtb3VudAMJAAAAAAAAAgUAAAANbG9ja2VkQXNzZXRJZAUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAADWxvY2tlZEJhbGFuY2UFAAAADHByaWNlQnlJbmRleAkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAA1sb2NrZWRCYWxhbmNlBQAAAAxwcmljZUJ5SW5kZXgDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAFWJhbGFuY2UgZXF1YWxzIHplcm8gKAUAAAANbG9ja2VkQXNzZXRJZAIAAAABKQMJAABmAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEXBsZWFzZSB3YWl0IGZvcjogCQABpAAAAAEFAAAADHVubG9ja0hlaWdodAIAAAAlIGJsb2NrIGhlaWdodCB0byB3aXRoZHJhdyBXQVZFUyBmdW5kcwMDAwkAAGYAAAACBQAAAAVpbmRleAUAAAAKcHJpY2VJbmRleAYJAABmAAAAAgUAAAALaW5kZXhIZWlnaHQFAAAADHVubG9ja0hlaWdodAYDCQEAAAACIT0AAAACBQAAAA9uZXh0SW5kZXhIZWlnaHQAAAAAAAAAAAAJAABnAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAA9uZXh0SW5kZXhIZWlnaHQHCQAAAgAAAAECAAAAG2ludmFsaWQgcHJpY2UgaGlzdG9yeSBpbmRleAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABpnZXRBY2NvdW50TG9ja2VkQmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAADWxvY2tlZEFzc2V0SWQAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAANbG9ja2VkQXNzZXRJZAkAAGUAAAACCQEAAAAQZ2V0TG9ja2VkQmFsYW5jZQAAAAEFAAAADWxvY2tlZEFzc2V0SWQFAAAADWxvY2tlZEJhbGFuY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQFAAAABmFtb3VudAMJAAAAAAAAAgUAAAANbG9ja2VkQXNzZXRJZAUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nBQAAAAR1bml0BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAABF0cmFuc2ZlclRvQXVjdGlvbgAAAAAEAAAAEWRlZmljaXRCb25kQW1vdW50CQAAZQAAAAIJAABlAAAAAgkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEFAAAAB2RlZmljaXQJAAPrAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA9hdWN0aW9uQ29udHJhY3QFAAAAC2JvbmRBc3NldElkBQAAABl0b3RhbExpcXVpZGF0aW9uT3JkZXJib29rBAAAAAtzdXJwbHVzQm9uZAkAAGUAAAACCQAAZQAAAAIJAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABBQAAAAdzdXJwbHVzCQAD6wAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAADnRvdGFsT3JkZXJib29rAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWxsIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcwMJAABnAAAAAgUAAAARZGVmaWNpdEJvbmRBbW91bnQJAABpAAAAAgkAAGgAAAACBQAAAA5uZXV0cmlub1N1cHBseQUAAAANREVGSUNJVE9GRlNFVAAAAAAAAAAAZAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAD2F1Y3Rpb25Db250cmFjdAUAAAARZGVmaWNpdEJvbmRBbW91bnQFAAAAC2JvbmRBc3NldElkBQAAAANuaWwDCQAAZgAAAAIFAAAAC3N1cnBsdXNCb25kAAAAAAAAAAAACQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAATbGlxdWlkYXRpb25Db250cmFjdAkBAAAAFWNvbnZlcnRCb25kVG9OZXV0cmlubwAAAAEFAAAAC3N1cnBsdXNCb25kBQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACVib25kIHdlcmUgZ2VuZXJhdGVkIG9yIGRvIG5vdCBuZWVkIGl0AAAAAWkBAAAACHRyYW5zZmVyAAAAAQAAAAdhY2NvdW50BAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQIBQAAAANwbXQAAAAGYW1vdW50CAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAApub2RlUmV3YXJkAAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCAUAAAABaQAAAAdwYXltZW50AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAC25vZGVBZGRyZXNzCQAAAgAAAAECAAAAR29ubHkgbm9kZSBhY2NvdW50IGlzIGFibGUgdG8gdHJhbnNmZXIgc3Rha2luZyByZXdhcmRzIGZyb20gbWFpbiBhY2NvdW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABl3YXZlcyB0b2tlbnMgb25seSBhbGxvd2VkBAAAAAZhbW91bnQJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAADGN1cnJlbnRQcmljZQQAAAAPbmV3UnBkU3luY0luZGV4CQAAZAAAAAIFAAAADHJwZFN5bmNJbmRleAAAAAAAAAAAAQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD1JQRFN5bmNJbmRleEtleQUAAAAPbmV3UnBkU3luY0luZGV4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQUAAAAMcnBkU3luY0luZGV4BQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAACBnZXRSUERTbmFwc2hvdENvbnRyYWN0QmFsYW5jZUtleQAAAAIFAAAADHJwZFN5bmNJbmRleAUAAAAPbmV1dHJpbm9Bc3NldElkCQEAAAAVZ2V0UlBEQ29udHJhY3RCYWxhbmNlAAAAAQUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAtycGRDb250cmFjdAUAAAAGYW1v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ZWVSZXNlcnZlCQAAZAAAAAIFAAAADWxlYXNpbmdBbW91bnQFAAAABmFtb3VudAUAAAAVcmVzZXJ2ZVdpdGhvdXRMZWFzaW5nAgAAAAEpCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAdZ2V0Q2FuY2VsTGVhc2VUeFJlc2VydmVGZWVLZXkAAAABBQAAAAZ0eEhhc2gFAAAAA2ZlZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARTGVhc2luZ1R4Q291bnRLZXkDCQAAAAAAAAIJAQAAABBnZXRMZWFzZVR4U3RhdHVzAAAAAQUAAAAGdHhIYXNoAgAAAAAJAABkAAAAAgUAAAAObGVhc2luZ1R4Q291bnQAAAAAAAAAAAEFAAAADmxlYXNpbmdUeENvdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABBMZWFzaW5nQW1vdW50S2V5CQAAZAAAAAIFAAAADWxlYXNpbmdBbW91bnQFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAVTGVhc2luZ0V4cGlyZUJsb2NrS2V5AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAEmxlYXNpbmdFeHBpcmVCbG9jawkAAGQAAAACBQAAAAZoZWlnaHQFAAAAD2xlYXNpbmdJbnRlcnZhbAUAAAASbGVhc2luZ0V4cGlyZUJsb2NrCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATZ2V0TGVhc2VUeFN0YXR1c0tleQAAAAEFAAAABnR4SGFzaAUAAAADTkVXCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAcZ2V0TGVhc2VUeEV4cGlyZVNlbmRCbG9ja0tleQAAAAEFAAAABnR4SGFzaAkAAGQAAAACBQAAAAZoZWlnaHQFAAAADFNFTkRUWEVYUElSRQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGWdldExlYXNlVHhBbW91bnRCeUhhc2hLZXkAAAABBQAAAAZ0eEhhc2gFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldExlYXNlVHhCeXRlc0J5SGFzaEtleQAAAAEFAAAABnR4SGFzaAkAAloAAAABBQAAAAd0eEJ5dGVzBQAAAANuaWwAAAABaQEAAAASY2FuY2VsU3R1Y2tMZWFzZVR4AAAAAQAAAAZ0eEhhc2gDAwMJAAAAAAAAAgkBAAAAEGdldExlYXNlVHhTdGF0dXMAAAABBQAAAAZ0eEhhc2gFAAAAA05FVwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+kAAAABCQACWQAAAAEFAAAABnR4SGFzaAcJAABmAAAAAgUAAAAGaGVpZ2h0CQEAAAAZZ2V0TGVhc2VUeEV4cGlyZVNlbmRCbG9jawAAAAEFAAAABnR4SGFzaAcEAAAABmFtb3VudAkBAAAAFmdldExlYXNlVHhBbW91bnRCeUhhc2gAAAABBQAAAAZ0eEhhc2gJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEUxlYXNpbmdUeENvdW50S2V5CQAAZQAAAAIFAAAADmxlYXNpbmdUeENvdW50AAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABBMZWFzaW5nQW1vdW50S2V5CQAAZQAAAAIFAAAADWxlYXNpbmdBbW91bnQFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAE2dldExlYXNlVHhTdGF0dXNLZXkAAAABBQAAAAZ0eEhhc2gFAAAACENBTkNFTEVECQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5Jc1JlYmFsYW5jZUtleQMJAABnAAAAAgkAAGUAAAACBQAAABVyZXNlcnZlV2l0aG91dExlYXNpbmcFAAAABmFtb3VudAkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACCQEAAAAQZ2V0TG9ja2VkQmFsYW5jZQAAAAEFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwUAAAAMY3VycmVudFByaWNlBwYFAAAAA25pbAkAAAIAAAABAgAAAA9pbnZhbGlkIHR4IGhhc2gAAAABaQEAAAAVcmVnaXN0cmF0aW9uVW5sZWFzZVR4AAAABQAAAA1jaGFpbklkU3RyaW5nAAAAD3NlbmRlclB1Ymxp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", "chainId": 84, "height": 766151, "spentComplexity": 0 } View: original | compacted Prev: 8M7Vhsc4YYVbpyUyxpUrXehUV5fmMbv4EeiPLXN9b3qS Next: none Diff:
OldNewDifferences
4646
4747
4848 func i (h,b) = {
49- let c = getString(this, b)
49+ let c = getString(addressFromStringValue(h), b)
5050 if ($isInstanceOf(c, "String"))
5151 then {
5252 let d = c
5656 }
5757
5858
59-let j = "_"
60-
61-let k = "+"
62-
63-let l = 100000000
64-
65-let m = 100
66-
67-let n = "canceled"
68-
69-let o = "new"
70-
71-let p = "filled"
72-
73-let q = "neutrino_asset_id"
74-
75-let r = "bond_asset_id"
76-
77-let s = "auction_contract"
78-
79-let t = "rpd_contract"
80-
81-let u = "balance_lock_interval"
82-
83-let v = "vote_interval"
84-
85-let w = "min_waves_swap_amount"
86-
87-let x = "min_neutrino_swap_amount"
88-
89-let y = "price_offset"
90-
91-let z = "providing_interval"
92-
93-let A = "price"
94-
95-let B = "neutrino_"
96-
97-let C = "waves_"
98-
99-let D = "balance_block_"
100-
101-let E = "orderbook"
102-
103-let F = "order_total_"
104-
105-let G = "order_owner_"
106-
107-let H = "order_height_"
108-
109-let I = "order_filled_total_"
110-
111-let J = "order_status_"
112-
113-let K = "rpd_sync_index"
114-
115-let L = "rpd_profit"
116-
117-let M = "rpd_balance"
118-
119-let N = "is_blocked"
120-
121-let O = "black_swarm_price"
122-
123-let P = "admin_vote_"
124-
125-let Q = "admin_vote_price_"
126-
127-let R = "vote_expire_block"
128-
129-let S = "admin_"
130-
131-let T = "is_pending_price"
132-
133-let U = "oracle_"
134-
135-let V = "oracle_is_provide_"
136-
137-let W = "oracle_price_provide_"
138-
139-let X = "providing_expire_block"
140-
141-let Y = "leasetx"
142-
143-let Z = "is_leasing_profit"
144-
145-func aa (ab) = (S + toString(ab))
146-
147-
148-func ac (ad) = (P + ad)
149-
150-
151-func ae (ad) = (Q + ad)
152-
153-
154-func af (ab) = (U + toString(ab))
155-
156-
157-func ag (ad) = (V + ad)
158-
159-
160-func ah (ad) = (W + ad)
161-
162-
163-func ai (ab,aj) = ((((M + "_") + toBase58String(aj)) + "_") + toString(ab))
164-
165-
166-func ak (aj) = ((M + "_") + toBase58String(aj))
167-
168-
169-func al (ab) = ((L + "_") + toString(ab))
170-
171-
172-func am (ad) = (B + ad)
173-
174-
175-func an (ad) = (C + ad)
176-
177-
178-func ao (ad) = (D + ad)
179-
180-
181-func ap (aq) = ((O + "_") + toString(aq))
182-
183-
184-func ar (aq) = ((A + "_") + toString(aq))
185-
186-
187-func as (at) = ((Y + "_") + at)
188-
189-
190-func au (at) = ((Z + "_") + at)
191-
192-
193-func av (aw) = (F + aw)
194-
195-
196-func ax (aw) = (G + aw)
197-
198-
199-func ay (aw) = (H + aw)
200-
201-
202-func az (aw) = (J + aw)
203-
204-
205-func aA (aw) = (I + aw)
206-
207-
208-let aB = a(A)
209-
210-func aC (aD) = ((((aD * 100) / aB) * l) / m)
211-
212-
213-func aE (aD) = ((((aD * aB) / 100) * m) / l)
214-
215-
216-func aF (aD) = (aD / m)
217-
218-
219-func aG (aD) = (aD * m)
220-
221-
222-func aH (aD) = aF(aE(aD))
223-
224-
225-let aI = a(z)
226-
227-let aJ = a(X)
228-
229-let aK = f(T)
230-
231-let aL = a(y)
232-
233-let aM = a(K)
234-
235-let aN = a(v)
236-
237-let aO = a(R)
238-
239-let aP = a(u)
240-
241-let aQ = f(N)
242-
243-let aR = a(w)
244-
245-let aS = a(x)
246-
247-let aT = fromBase58String(e(q))
248-
249-let aU = e(s)
250-
251-let aV = e(t)
252-
253-let aW = wavesBalance(this)
254-
255-let aX = e(E)
256-
257-let aY = fromBase58String(e(r))
258-
259-let aZ = {
260- let ba = extract(assetInfo(aY))
261- (ba.quantity - assetBalance(this, aY))
262- }
263-
264-let bb = {
265- let ba = extract(assetInfo(aT))
266- (ba.quantity - assetBalance(this, aT))
267- }
268-
269-let bc = (aE(aW) - bb)
270-
271-let bd = e(af(0))
272-
273-let be = e(af(1))
274-
275-let bf = e(af(2))
276-
277-let bg = e(aa(0))
278-
279-let bh = e(aa(1))
280-
281-let bi = e(aa(2))
282-
283-func bj (ad) = i(aV, as(ad))
284-
285-
286-func bk (aj) = g(aV, ak(aj))
287-
288-
289-func bl (at) = f(au(at))
290-
291-
292-func bm (ad) = if (f(ac(ad)))
293- then 1
294- else 0
295-
296-
297-func bn (ad) = a(ae(ad))
298-
299-
300-func bo (ad) = f(ag(ad))
301-
302-
303-func bp (ad) = if (bo(ad))
304- then 1
305- else 0
306-
307-
308-func bq (ad) = a(ah(ad))
309-
310-
311-func br (ad) = a(an(ad))
312-
313-
314-func bs (ad) = a(am(ad))
315-
316-
317-func bt (ad) = a(ao(ad))
318-
319-
320-func bu (bv) = a(av(bv))
321-
322-
323-func bw (bv) = e(ax(bv))
324-
325-
326-func bx (bv) = a(aA(bv))
327-
328-
329-func by (ab) = a(al(ab))
330-
331-
332-func bz (bv) = (bv + j)
333-
334-
335-func bA (aw) = (aX + bz(aw))
336-
337-
338-func bB (aw) = {
339- let bC = split(aX, bz(aw))
340- (bC[0] + bC[1])
59+func j (h,b) = {
60+ let c = getBoolean(addressFromStringValue(h), b)
61+ if ($isInstanceOf(c, "Boolean"))
62+ then {
63+ let d = c
64+ d
65+ }
66+ else false
34167 }
34268
34369
344-@Callable(bD)
345-func setCurrentPrice (bE) = {
346- let bF = toString(bD.caller)
347- let bG = (((bp(bd) + bp(be)) + bp(bf)) + 1)
348- if (aQ)
349- then throw("contract is blocked")
350- else if (if (if ((bF != bd))
351- then (bF != be)
352- else false)
353- then (bF != bf)
354- else false)
355- then throw("permission denied")
356- else if (if ((aJ >= height))
357- then bo(bF)
358- else false)
359- then throw("price is already provided")
360- else if (if ((height > aJ))
361- then aK
362- else false)
363- then throw("use finilizeCurrentPrice")
364- else WriteSet([DataEntry(ah(bF), bE), DataEntry(X, if ((height > aJ))
365- then (height + aI)
366- else aJ), DataEntry(ag(bd), if ((height > aJ))
367- then false
368- else bo(bd)), DataEntry(ag(be), if ((height > aJ))
369- then false
370- else bo(be)), DataEntry(ag(bf), if ((height > aJ))
371- then false
372- else bo(bf)), DataEntry(ag(bF), true), DataEntry(T, if (if ((aJ >= height))
373- then (bG >= 2)
374- else false)
375- then true
376- else aK)])
70+let k = 30
71+
72+let l = "_"
73+
74+let m = "+"
75+
76+let n = 100000000
77+
78+let o = 100
79+
80+let p = 20
81+
82+let q = 90
83+
84+let r = 10
85+
86+let s = 10
87+
88+let t = "waves"
89+
90+let u = "canceled"
91+
92+let v = "new"
93+
94+let w = "neutrino_asset_id"
95+
96+let x = "bond_asset_id"
97+
98+let y = "reserve_contract"
99+
100+let z = "auction_contract"
101+
102+let A = "liquidation_contract"
103+
104+let B = "rpd_contract"
105+
106+let C = "control_contract"
107+
108+let D = "balance_lock_interval"
109+
110+let E = "min_waves_swap_amount"
111+
112+let F = "min_neutrino_swap_amount"
113+
114+let G = "node_address"
115+
116+let H = "oracle_node_provider"
117+
118+let I = "leasing_interval"
119+
120+let J = "rpd_balance"
121+
122+func K (L) = ((J + "_") + toBase58String(L))
123+
124+
125+let M = "total_orderbook"
126+
127+let N = "total_liquidation_orderbook"
128+
129+let O = "price"
130+
131+let P = "price_index"
132+
133+let Q = "is_blocked"
134+
135+let R = "leasing_expire_block"
136+
137+let S = "is_rebalance"
138+
139+let T = "leasing_index"
140+
141+let U = "leasing_amount"
142+
143+func V (W) = ((O + "_") + toString(W))
144+
145+
146+func X (Y) = ((P + "_") + toString(Y))
147+
148+
149+let Z = "rpd_sync_index"
150+
151+func aa (ab,L) = ((((J + "_") + toBase58String(L)) + "_") + toString(ab))
152+
153+
154+func ac (ad) = (("cancel_lease_tx_reserve_fee" + "_") + ad)
155+
156+
157+func ae (af,L) = ((("balance_" + L) + "_") + af)
158+
159+
160+func ag (af) = ("balance_block_" + af)
161+
162+
163+func ah (ab) = (("rpd_profit" + "_") + toString(ab))
164+
165+
166+func ai (L) = ("balance_" + L)
167+
168+
169+func aj (ad) = (("lease_tx_status" + "_") + ad)
170+
171+
172+func ak (ad) = ((U + "_") + ad)
173+
174+
175+func al (ad) = (("lease_tx" + "_") + ad)
176+
177+
178+func am (ad) = (("leasing_expire_send" + "_") + ad)
179+
180+
181+func an (ao,ap) = ((((ao * 100) / ap) * n) / o)
182+
183+
184+func aq (ao,ap) = ((((ao * ap) / 100) * o) / n)
185+
186+
187+func ar (ao) = (ao / o)
188+
189+
190+func as (ao) = (ao * o)
191+
192+
193+func at (ao,ap) = ar(aq(ao, ap))
194+
195+
196+func au (L) = a(ai(L))
197+
198+
199+let av = e(A)
200+
201+let aw = e(w)
202+
203+let ax = fromBase58String(aw)
204+
205+let ay = e(y)
206+
207+let az = e(z)
208+
209+let aA = e(B)
210+
211+let aB = e(C)
212+
213+let aC = g(aB, O)
214+
215+let aD = g(aB, P)
216+
217+let aE = j(aB, Q)
218+
219+let aF = a(T)
220+
221+let aG = f(S)
222+
223+let aH = a(I)
224+
225+let aI = a(R)
226+
227+let aJ = a(U)
228+
229+let aK = e(G)
230+
231+let aL = e(H)
232+
233+let aM = a(Z)
234+
235+let aN = a(D)
236+
237+let aO = a(E)
238+
239+let aP = a(F)
240+
241+let aQ = (wavesBalance(this) - au(t))
242+
243+let aR = (aQ - aJ)
244+
245+let aS = fromBase58String(e(x))
246+
247+let aT = (extract(assetInfo(aS)).quantity - assetBalance(this, aS))
248+
249+let aU = ((extract(assetInfo(ax)).quantity - assetBalance(this, ax)) + au(aw))
250+
251+let aV = (aq(aQ, aC) - aU)
252+
253+let aW = (aU - aq(aQ, aC))
254+
255+func aX (L) = g(aA, K(L))
256+
257+
258+let aY = g(az, N)
259+
260+let aZ = g(az, M)
261+
262+func ba (W) = g(aB, V(W))
263+
264+
265+func bb (Y) = g(aB, X(Y))
266+
267+
268+func bc (ad) = a(ac(ad))
269+
270+
271+func bd (af,L) = a(ae(af, L))
272+
273+
274+func be (af) = a(ag(af))
275+
276+
277+func bf (ab) = a(ah(ab))
278+
279+
280+func bg (ad) = e(aj(ad))
281+
282+
283+func bh (ad) = a(ak(ad))
284+
285+
286+func bi (ad) = e(al(ad))
287+
288+
289+func bj (ad) = a(am(ad))
290+
291+
292+@Callable(bk)
293+func swapWavesToNeutrino () = {
294+ let bl = extract(bk.payment)
295+ let bm = toString(bk.caller)
296+ if ((aO > bl.amount))
297+ then throw((("an amount is less than min available amount: " + toString(aO)) + " wavelets"))
298+ else if (isDefined(bl.assetId))
299+ then throw("can use waves only")
300+ else if (aE)
301+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
302+ else if ((be(bm) > height))
303+ then throw((("await " + toString((be(bm) - height))) + " blocks"))
304+ else if ((bd(bm, t) != 0))
305+ then throw("please withdraw locked funds first")
306+ else WriteSet([DataEntry(ae(bm, t), bl.amount), DataEntry(ag(bm), (height + aN)), DataEntry(ai(t), (au(t) + bl.amount))])
377307 }
378308
379309
380310
381-@Callable(bD)
382-func finilizeCurrentPrice () = {
383- let bF = toString(bD.caller)
384- let bG = ((bp(bd) + bp(be)) + bp(bf))
385- let bE = ((((bq(bd) * bp(bd)) + (bq(be) * bp(be))) + (bq(bf) * bp(bf))) / bG)
386- if (aQ)
387- then throw("contract is blocked")
388- else if (if (if ((bF != bd))
389- then (bF != be)
390- else false)
391- then (bF != bf)
392- else false)
393- then throw("permission denied")
394- else if (if (!(aK))
395- then true
396- else (aJ >= height))
397- then throw("wait for the end of the price providing")
398- else if ((2 > bG))
399- then throw("2/3 oracles need to set a price")
400- else if (if ((bE >= (aB + ((aB * aL) / 100))))
401- then true
402- else ((aB - ((aB * aL) / 100)) >= bE))
403- then WriteSet([DataEntry(N, true), DataEntry(ap(height), bE)])
404- else WriteSet([DataEntry(A, bE), DataEntry(ar(height), bE), DataEntry(T, false)])
311+@Callable(bk)
312+func swapNeutrinoToWaves () = {
313+ let bl = extract(bk.payment)
314+ let bm = toString(bk.caller)
315+ if ((aP > bl.amount))
316+ then throw((("an amount is less than min available amount: " + toString(aP)) + " neutrino cents"))
317+ else if (aE)
318+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
319+ else if ((bl.assetId != ax))
320+ then throw("can use appropriate neutrino tokens only")
321+ else if ((be(bm) > height))
322+ then throw((("await " + toString((be(bm) - height))) + " blocks"))
323+ else if ((bd(bm, aw) != 0))
324+ then throw("please withdraw locked funds first")
325+ else {
326+ let bn = (au(aw) + bl.amount)
327+ WriteSet([DataEntry(ae(bm, aw), bl.amount), DataEntry(ag(bm), (height + aN)), DataEntry(ai(aw), bn), DataEntry(S, if ((aR >= an(bn, aC)))
328+ then false
329+ else true)])
330+ }
405331 }
406332
407333
408334
409-@Callable(bD)
410-func adminUnlock (bE) = {
411- let bF = toString(bD.caller)
412- let bH = if ((bF != bg))
413- then bm(bg)
414- else 0
415- let bI = if ((bF != bh))
416- then bm(bh)
417- else 0
418- let bJ = if ((bF != bi))
419- then bm(bi)
420- else 0
421- let bK = if (((bn(bg) * bH) == bE))
422- then 1
423- else 0
424- let bL = if (((bn(bh) * bI) == bE))
425- then 1
426- else 0
427- let bM = if (((bn(bi) * bJ) == bE))
428- then 1
429- else 0
430- if (!(aQ))
431- then throw("Contract is not blocked")
432- else if (if (((((bK + bL) + bM) + 1) >= 2))
433- then (aO >= height)
434- else false)
435- then WriteSet([DataEntry(N, false), DataEntry(A, bE), DataEntry(ar(height), bE), DataEntry(ac(bg), false), DataEntry(ac(bh), false), DataEntry(ac(bi), false), DataEntry(R, 0), DataEntry(X, 0), DataEntry(T, false)])
436- else WriteSet([DataEntry(ae(bF), bE), DataEntry(R, if ((height > aO))
437- then (height + aN)
438- else aO), DataEntry(ac(bg), if ((height > aO))
439- then false
440- else (bH == 1)), DataEntry(ac(bh), if ((height > aO))
441- then false
442- else (bI == 1)), DataEntry(ac(bi), if ((height > aO))
443- then false
444- else (bJ == 1)), DataEntry(ac(bF), true)])
335+@Callable(bk)
336+func withdraw (bm,Y,bo) = {
337+ let bp = be(bm)
338+ let bq = bd(bm, bo)
339+ let br = bb(Y)
340+ let bs = bb((Y + 1))
341+ let bt = ba(br)
342+ let ao = if ((bo == aw))
343+ then an(bq, bt)
344+ else aq(bq, bt)
345+ if (aE)
346+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
347+ else if ((0 >= ao))
348+ then throw((("balance equals zero (" + bo) + ")"))
349+ else if ((bp > height))
350+ then throw((("please wait for: " + toString(bp)) + " block height to withdraw WAVES funds"))
351+ else if (if (if ((Y > aD))
352+ then true
353+ else (br > bp))
354+ then true
355+ else if ((bs != 0))
356+ then (bp >= bs)
357+ else false)
358+ then throw("invalid price history index")
359+ else ScriptResult(WriteSet([DataEntry(ae(bm, bo), 0), DataEntry(ai(bo), (au(bo) - bq))]), TransferSet([ScriptTransfer(addressFromStringValue(bm), ao, if ((bo == aw))
360+ then unit
361+ else ax)]))
445362 }
446363
447364
448365
449-@Callable(bD)
450-func adminLock () = {
451- let bF = toString(bD.caller)
452- let bH = if ((bF != bg))
453- then bm(bg)
454- else 1
455- let bI = if ((bF != bh))
456- then bm(bh)
457- else 1
458- let bJ = if ((bF != bi))
459- then bm(bi)
460- else 1
461- if (aQ)
462- then throw("Contract is blocked")
463- else if ((((bH + bI) + bJ) >= 2))
464- then WriteSet([DataEntry(N, true), DataEntry(ac(bg), false), DataEntry(ac(bh), false), DataEntry(ac(bi), false), DataEntry(R, 0)])
465- else WriteSet([DataEntry(R, if ((height > aO))
466- then (height + aN)
467- else aO), DataEntry(ac(bg), if ((height > aO))
468- then false
469- else (bH == 1)), DataEntry(ac(bh), if ((height > aO))
470- then false
471- else (bI == 1)), DataEntry(ac(bi), if ((height > aO))
472- then false
473- else (bJ == 1))])
366+@Callable(bk)
367+func transferToAuction () = {
368+ let bu = ((ar(aW) - assetBalance(addressFromStringValue(az), aS)) - aY)
369+ let bv = ((ar(aV) - assetBalance(addressFromStringValue(az), ax)) - aZ)
370+ if (aE)
371+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
372+ else if ((bu >= ((aU * s) / 100)))
373+ then TransferSet([ScriptTransfer(addressFromStringValue(az), bu, aS)])
374+ else if ((bv > 0))
375+ then TransferSet([ScriptTransfer(addressFromStringValue(av), as(bv), ax)])
376+ else throw("bond were generated or do not need it")
474377 }
475378
476379
477380
478-@Callable(bD)
479-func swapWavesToNeutrino () = {
480- let bN = extract(bD.payment)
481- if ((aR > bN.amount))
482- then throw("amount less min")
483- else if (isDefined(bN.assetId))
484- then throw("can use waves only")
485- else if (aQ)
486- then throw("contract is blocked")
381+@Callable(bk)
382+func transfer (bm) = {
383+ let bl = extract(bk.payment)
384+ TransferSet([ScriptTransfer(addressFromStringValue(bm), bl.amount, bl.assetId)])
385+ }
386+
387+
388+
389+@Callable(bk)
390+func nodeReward () = {
391+ let bl = value(bk.payment)
392+ if ((bk.caller != addressFromStringValue(aK)))
393+ then throw("only node account is able to transfer staking rewards from main account")
394+ else if (isDefined(bl.assetId))
395+ then throw("waves tokens only allowed")
396+ else {
397+ let ao = aq(bl.amount, aC)
398+ let bw = (aM + 1)
399+ ScriptResult(WriteSet([DataEntry(Z, bw), DataEntry(ah(aM), ao), DataEntry(aa(aM, ax), aX(ax))]), TransferSet([ScriptTransfer(addressFromStringValue(aA), ao, ax)]))
400+ }
401+ }
402+
403+
404+
405+@Callable(bk)
406+func registrationLeaseTx (bx,by,bz,bA) = {
407+ let bB = (((aQ * q) / 100) - an(au(aw), aC))
408+ let ao = (bB / r)
409+ let bC = (((((base58'3h1H' + fromBase58String(bx)) + fromBase58String(aK)) + toBytes(ao)) + toBytes(by)) + toBytes(bz))
410+ let bD = blake2b256(bC)
411+ let bE = toBase58String(bD)
412+ let bl = extract(bk.payment)
413+ if ((toString(bk.caller) == aL))
414+ then throw("invalid caller")
415+ else if (isDefined(bl.assetId))
416+ then throw("invalid paymtn asset")
417+ else if ((bA != bE))
418+ then throw((("invalid tx hash(amount:" + toString(ao)) + ")"))
419+ else if ((aF >= r))
420+ then throw("the number of leasing transactions is equal to the maximum")
421+ else if ((this != addressFromPublicKey(fromBase58String(bx))))
422+ then throw("invalid pubKey")
423+ else if (if ((lastBlock.timestamp > bz))
424+ then true
425+ else (bz > (lastBlock.timestamp + 5400000)))
426+ then throw((("invalid timestamp(lastBlock: " + toString(lastBlock.timestamp)) + ")"))
427+ else if ((bg(bE) != ""))
428+ then throw("tx is exist")
429+ else if ((bl.amount != (by * 2)))
430+ then throw("invalid payment amount")
431+ else if (if ((by > 1000000))
432+ then true
433+ else (500000 > by))
434+ then throw("invalid fee")
435+ else if (((bB - (aJ + ao)) > aR))
436+ then throw((("invalid amount(result:" + toString(((bB - (aJ + ao)) > aR))) + ")"))
437+ else WriteSet([DataEntry(ac(bE), by), DataEntry(T, if ((bg(bE) == ""))
438+ then (aF + 1)
439+ else aF), DataEntry(U, (aJ + ao)), DataEntry(R, if ((height > aI))
440+ then (height + aH)
441+ else aI), DataEntry(aj(bE), v), DataEntry(am(bE), (height + k)), DataEntry(ak(bE), ao), DataEntry(al(bE), toBase64String(bC))])
442+ }
443+
444+
445+
446+@Callable(bk)
447+func cancelStuckLeaseTx (bE) = if (if (if ((bg(bE) == v))
448+ then !(isDefined(transactionHeightById(fromBase58String(bE))))
449+ else false)
450+ then (height > bj(bE))
451+ else false)
452+ then {
453+ let ao = bh(bE)
454+ WriteSet([DataEntry(T, (aF - 1)), DataEntry(U, (aJ - ao)), DataEntry(aj(bE), u), DataEntry(S, if (((aR - ao) >= an(au(aw), aC)))
455+ then false
456+ else true)])
457+ }
458+ else throw("invalid tx hash")
459+
460+
461+
462+@Callable(bk)
463+func registrationUnleaseTx (bF,bx,by,bz,bA) = {
464+ let bC = (((((base58'gm' + toBytes(bF)) + fromBase58String(bx)) + toBytes(by)) + toBytes(bz)) + fromBase58String(bA))
465+ let bE = blake2b256(bC)
466+ if ((bg(bA) != v))
467+ then throw("invalid tx status")
468+ else if ((this != addressFromPublicKey(fromBase58String(bx))))
469+ then throw("invalid pubKey")
470+ else if (!(isDefined(transactionHeightById(bE))))
471+ then throw("blockchain does not contain this transaction")
487472 else {
488- let aD = aE(bN.amount)
489- TransferSet([ScriptTransfer(bD.caller, aD, aT)])
473+ let ao = bh(bA)
474+ WriteSet([DataEntry(T, (aF - 1)), DataEntry(U, (aJ - ao)), DataEntry(aj(bA), u), DataEntry(S, if (((aR - ao) >= an(au(aw), aC)))
475+ then false
476+ else true)])
490477 }
491478 }
492479
493480
494-
495-@Callable(bD)
496-func swapNeutrinoToWaves () = {
497- let bN = extract(bD.payment)
498- if ((aS > bN.amount))
499- then throw("amount less min")
500- else if (aQ)
501- then throw("contract is blocked")
502- else if ((bN.assetId != aT))
503- then throw("can use neutrino only")
504- else {
505- let bF = toBase58String(bD.caller.bytes)
506- let aD = aC(bN.amount)
507- WriteSet([DataEntry(an(bF), (br(bF) + aD)), DataEntry(ao(bF), (height + aP))])
508- }
509- }
510-
511-
512-
513-@Callable(bD)
514-func withdraw (bF) = if ((bt(bF) > height))
515- then throw("wait a couple of blocks for withdraw")
516- else ScriptResult(WriteSet([DataEntry(an(bF), 0), DataEntry(am(bF), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(bF), bs(bF), aT), ScriptTransfer(addressFromStringValue(bF), br(bF), unit)]))
517-
518-
519-
520-@Callable(bD)
521-func generateBond () = {
522- let bO = (bb - aE(aW))
523- let bP = assetBalance(addressFromStringValue(aU), aY)
524- let aD = (aF(bO) - bP)
525- if (aQ)
526- then throw("contract is blocked")
527- else if ((aD > 0))
528- then TransferSet([ScriptTransfer(addressFromStringValue(aU), aD, aY)])
529- else throw("bond were generated or do not need it")
530- }
531-
532-
533-
534-@Callable(bD)
535-func setOrder () = {
536- let bN = extract(bD.payment)
537- let bQ = toBase58String(keccak256(((toBytes(bN.amount) + bD.caller.bytes) + toBytes(height))))
538- if ((bN.assetId != aY))
539- then throw("can use bond only")
540- else if ((bw(bQ) != ""))
541- then throw("order exists")
542- else WriteSet([DataEntry(E, bA(bQ)), DataEntry(av(bQ), bN.amount), DataEntry(ax(bQ), toString(bD.caller)), DataEntry(ay(bQ), height), DataEntry(az(bQ), o)])
543- }
544-
545-
546-
547-@Callable(bD)
548-func cancelOrder (aw) = {
549- let ad = bw(aw)
550- let aD = (bu(aw) - bx(aw))
551- if ((ad != toString(bD.caller)))
552- then throw("permission denied")
553- else ScriptResult(WriteSet([DataEntry(E, bB(aw)), DataEntry(az(aw), n)]), TransferSet([ScriptTransfer(bD.caller, aD, aY)]))
554- }
555-
556-
557-
558-@Callable(bD)
559-func addLeasingCheck (bv) = {
560- let bR = value(transferTransactionById(fromBase58String(bv)))
561- if (if ((bR.recipient != addressFromStringValue(aV)))
562- then true
563- else bl(bv))
564- then throw("invalid transaction id")
565- else {
566- let aD = aE(bR.amount)
567- let bS = (aM + 1)
568- ScriptResult(WriteSet([DataEntry(K, bS), DataEntry(al(aM), aD), DataEntry(ai(aM, aT), bk(aT)), DataEntry(ai(aM, aY), bk(aY)), DataEntry(au(bv), true)]), TransferSet([ScriptTransfer(addressFromStringValue(aV), aD, aT)]))
569- }
570- }
571-
572-
573-
574-@Callable(bD)
575-func executeOrder () = {
576- let aw = split(aX, j)[0]
577- let bT = bu(aw)
578- let bU = bw(aw)
579- let bV = bx(aw)
580- if (aQ)
581- then throw("contract is blocked")
582- else if ((0 >= bc))
583- then throw("surplus is less than zero")
584- else if ((bU == ""))
585- then {
586- let bS = (aM + 1)
587- ScriptResult(WriteSet([DataEntry(K, bS), DataEntry(al(aM), bc), DataEntry(ai(aM, aT), bk(aT)), DataEntry(ai(aM, aY), bk(aY))]), TransferSet([ScriptTransfer(addressFromStringValue(aV), bc, aT)]))
588- }
589- else {
590- let aD = (bT - bV)
591- let bW = aF(bc)
592- let bX = if ((bW >= aD))
593- then p
594- else o
595- let bY = if ((bW >= aD))
596- then bT
597- else bW
598- ScriptResult(WriteSet([DataEntry(E, bB(aw)), DataEntry(aA(aw), (bV + bY)), DataEntry(az(aw), bX)]), TransferSet([ScriptTransfer(addressFromStringValue(bU), aG(bY), aT)]))
599- }
600- }
601-
602-
603-
604-@Callable(bD)
605-func transfer (bF) = {
606- let bN = extract(bD.payment)
607- if (isDefined(bN.assetId))
608- then throw("can use waves only at the moment")
609- else TransferSet([ScriptTransfer(addressFromStringValue(bF), bN.amount, unit)])
610- }
611-
612-
613-@Verifier(bR)
614-func bZ () = {
615- let c = bR
481+@Verifier(bG)
482+func bH () = {
483+ let bI = toBase58String(bG.id)
484+ let c = bG
616485 if ($isInstanceOf(c, "LeaseTransaction"))
617486 then {
618- let ca = c
619- sigVerify(bR.bodyBytes, bR.proofs[0], fromBase58String(bj(toBase58String(ca.id))))
487+ let bJ = c
488+ if (if ((aI >= height))
489+ then (bj(bI) >= height)
490+ else false)
491+ then (bg(bI) == v)
492+ else false
620493 }
621494 else if ($isInstanceOf(c, "LeaseCancelTransaction"))
622495 then {
623- let cb = c
624- sigVerify(bR.bodyBytes, bR.proofs[0], fromBase58String(bj(toBase58String(cb.leaseId))))
496+ let bK = c
497+ let bL = toBase58String(bK.leaseId)
498+ if (if (if ((height > aI))
499+ then true
500+ else aG)
501+ then (bK.fee == bc(bL))
502+ else false)
503+ then (bg(bL) == v)
504+ else false
625505 }
626- else sigVerify(bR.bodyBytes, bR.proofs[0], bR.senderPublicKey)
506+ else sigVerify(bG.bodyBytes, bG.proofs[0], bG.senderPublicKey)
627507 }
628508
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = {
55 let c = getInteger(this, b)
66 if ($isInstanceOf(c, "Int"))
77 then {
88 let d = c
99 d
1010 }
1111 else 0
1212 }
1313
1414
1515 func e (b) = {
1616 let c = getString(this, b)
1717 if ($isInstanceOf(c, "String"))
1818 then {
1919 let d = c
2020 d
2121 }
2222 else ""
2323 }
2424
2525
2626 func f (b) = {
2727 let c = getBoolean(this, b)
2828 if ($isInstanceOf(c, "Boolean"))
2929 then {
3030 let d = c
3131 d
3232 }
3333 else false
3434 }
3535
3636
3737 func g (h,b) = {
3838 let c = getInteger(addressFromStringValue(h), b)
3939 if ($isInstanceOf(c, "Int"))
4040 then {
4141 let d = c
4242 d
4343 }
4444 else 0
4545 }
4646
4747
4848 func i (h,b) = {
49- let c = getString(this, b)
49+ let c = getString(addressFromStringValue(h), b)
5050 if ($isInstanceOf(c, "String"))
5151 then {
5252 let d = c
5353 d
5454 }
5555 else ""
5656 }
5757
5858
59-let j = "_"
60-
61-let k = "+"
62-
63-let l = 100000000
64-
65-let m = 100
66-
67-let n = "canceled"
68-
69-let o = "new"
70-
71-let p = "filled"
72-
73-let q = "neutrino_asset_id"
74-
75-let r = "bond_asset_id"
76-
77-let s = "auction_contract"
78-
79-let t = "rpd_contract"
80-
81-let u = "balance_lock_interval"
82-
83-let v = "vote_interval"
84-
85-let w = "min_waves_swap_amount"
86-
87-let x = "min_neutrino_swap_amount"
88-
89-let y = "price_offset"
90-
91-let z = "providing_interval"
92-
93-let A = "price"
94-
95-let B = "neutrino_"
96-
97-let C = "waves_"
98-
99-let D = "balance_block_"
100-
101-let E = "orderbook"
102-
103-let F = "order_total_"
104-
105-let G = "order_owner_"
106-
107-let H = "order_height_"
108-
109-let I = "order_filled_total_"
110-
111-let J = "order_status_"
112-
113-let K = "rpd_sync_index"
114-
115-let L = "rpd_profit"
116-
117-let M = "rpd_balance"
118-
119-let N = "is_blocked"
120-
121-let O = "black_swarm_price"
122-
123-let P = "admin_vote_"
124-
125-let Q = "admin_vote_price_"
126-
127-let R = "vote_expire_block"
128-
129-let S = "admin_"
130-
131-let T = "is_pending_price"
132-
133-let U = "oracle_"
134-
135-let V = "oracle_is_provide_"
136-
137-let W = "oracle_price_provide_"
138-
139-let X = "providing_expire_block"
140-
141-let Y = "leasetx"
142-
143-let Z = "is_leasing_profit"
144-
145-func aa (ab) = (S + toString(ab))
146-
147-
148-func ac (ad) = (P + ad)
149-
150-
151-func ae (ad) = (Q + ad)
152-
153-
154-func af (ab) = (U + toString(ab))
155-
156-
157-func ag (ad) = (V + ad)
158-
159-
160-func ah (ad) = (W + ad)
161-
162-
163-func ai (ab,aj) = ((((M + "_") + toBase58String(aj)) + "_") + toString(ab))
164-
165-
166-func ak (aj) = ((M + "_") + toBase58String(aj))
167-
168-
169-func al (ab) = ((L + "_") + toString(ab))
170-
171-
172-func am (ad) = (B + ad)
173-
174-
175-func an (ad) = (C + ad)
176-
177-
178-func ao (ad) = (D + ad)
179-
180-
181-func ap (aq) = ((O + "_") + toString(aq))
182-
183-
184-func ar (aq) = ((A + "_") + toString(aq))
185-
186-
187-func as (at) = ((Y + "_") + at)
188-
189-
190-func au (at) = ((Z + "_") + at)
191-
192-
193-func av (aw) = (F + aw)
194-
195-
196-func ax (aw) = (G + aw)
197-
198-
199-func ay (aw) = (H + aw)
200-
201-
202-func az (aw) = (J + aw)
203-
204-
205-func aA (aw) = (I + aw)
206-
207-
208-let aB = a(A)
209-
210-func aC (aD) = ((((aD * 100) / aB) * l) / m)
211-
212-
213-func aE (aD) = ((((aD * aB) / 100) * m) / l)
214-
215-
216-func aF (aD) = (aD / m)
217-
218-
219-func aG (aD) = (aD * m)
220-
221-
222-func aH (aD) = aF(aE(aD))
223-
224-
225-let aI = a(z)
226-
227-let aJ = a(X)
228-
229-let aK = f(T)
230-
231-let aL = a(y)
232-
233-let aM = a(K)
234-
235-let aN = a(v)
236-
237-let aO = a(R)
238-
239-let aP = a(u)
240-
241-let aQ = f(N)
242-
243-let aR = a(w)
244-
245-let aS = a(x)
246-
247-let aT = fromBase58String(e(q))
248-
249-let aU = e(s)
250-
251-let aV = e(t)
252-
253-let aW = wavesBalance(this)
254-
255-let aX = e(E)
256-
257-let aY = fromBase58String(e(r))
258-
259-let aZ = {
260- let ba = extract(assetInfo(aY))
261- (ba.quantity - assetBalance(this, aY))
262- }
263-
264-let bb = {
265- let ba = extract(assetInfo(aT))
266- (ba.quantity - assetBalance(this, aT))
267- }
268-
269-let bc = (aE(aW) - bb)
270-
271-let bd = e(af(0))
272-
273-let be = e(af(1))
274-
275-let bf = e(af(2))
276-
277-let bg = e(aa(0))
278-
279-let bh = e(aa(1))
280-
281-let bi = e(aa(2))
282-
283-func bj (ad) = i(aV, as(ad))
284-
285-
286-func bk (aj) = g(aV, ak(aj))
287-
288-
289-func bl (at) = f(au(at))
290-
291-
292-func bm (ad) = if (f(ac(ad)))
293- then 1
294- else 0
295-
296-
297-func bn (ad) = a(ae(ad))
298-
299-
300-func bo (ad) = f(ag(ad))
301-
302-
303-func bp (ad) = if (bo(ad))
304- then 1
305- else 0
306-
307-
308-func bq (ad) = a(ah(ad))
309-
310-
311-func br (ad) = a(an(ad))
312-
313-
314-func bs (ad) = a(am(ad))
315-
316-
317-func bt (ad) = a(ao(ad))
318-
319-
320-func bu (bv) = a(av(bv))
321-
322-
323-func bw (bv) = e(ax(bv))
324-
325-
326-func bx (bv) = a(aA(bv))
327-
328-
329-func by (ab) = a(al(ab))
330-
331-
332-func bz (bv) = (bv + j)
333-
334-
335-func bA (aw) = (aX + bz(aw))
336-
337-
338-func bB (aw) = {
339- let bC = split(aX, bz(aw))
340- (bC[0] + bC[1])
59+func j (h,b) = {
60+ let c = getBoolean(addressFromStringValue(h), b)
61+ if ($isInstanceOf(c, "Boolean"))
62+ then {
63+ let d = c
64+ d
65+ }
66+ else false
34167 }
34268
34369
344-@Callable(bD)
345-func setCurrentPrice (bE) = {
346- let bF = toString(bD.caller)
347- let bG = (((bp(bd) + bp(be)) + bp(bf)) + 1)
348- if (aQ)
349- then throw("contract is blocked")
350- else if (if (if ((bF != bd))
351- then (bF != be)
352- else false)
353- then (bF != bf)
354- else false)
355- then throw("permission denied")
356- else if (if ((aJ >= height))
357- then bo(bF)
358- else false)
359- then throw("price is already provided")
360- else if (if ((height > aJ))
361- then aK
362- else false)
363- then throw("use finilizeCurrentPrice")
364- else WriteSet([DataEntry(ah(bF), bE), DataEntry(X, if ((height > aJ))
365- then (height + aI)
366- else aJ), DataEntry(ag(bd), if ((height > aJ))
367- then false
368- else bo(bd)), DataEntry(ag(be), if ((height > aJ))
369- then false
370- else bo(be)), DataEntry(ag(bf), if ((height > aJ))
371- then false
372- else bo(bf)), DataEntry(ag(bF), true), DataEntry(T, if (if ((aJ >= height))
373- then (bG >= 2)
374- else false)
375- then true
376- else aK)])
70+let k = 30
71+
72+let l = "_"
73+
74+let m = "+"
75+
76+let n = 100000000
77+
78+let o = 100
79+
80+let p = 20
81+
82+let q = 90
83+
84+let r = 10
85+
86+let s = 10
87+
88+let t = "waves"
89+
90+let u = "canceled"
91+
92+let v = "new"
93+
94+let w = "neutrino_asset_id"
95+
96+let x = "bond_asset_id"
97+
98+let y = "reserve_contract"
99+
100+let z = "auction_contract"
101+
102+let A = "liquidation_contract"
103+
104+let B = "rpd_contract"
105+
106+let C = "control_contract"
107+
108+let D = "balance_lock_interval"
109+
110+let E = "min_waves_swap_amount"
111+
112+let F = "min_neutrino_swap_amount"
113+
114+let G = "node_address"
115+
116+let H = "oracle_node_provider"
117+
118+let I = "leasing_interval"
119+
120+let J = "rpd_balance"
121+
122+func K (L) = ((J + "_") + toBase58String(L))
123+
124+
125+let M = "total_orderbook"
126+
127+let N = "total_liquidation_orderbook"
128+
129+let O = "price"
130+
131+let P = "price_index"
132+
133+let Q = "is_blocked"
134+
135+let R = "leasing_expire_block"
136+
137+let S = "is_rebalance"
138+
139+let T = "leasing_index"
140+
141+let U = "leasing_amount"
142+
143+func V (W) = ((O + "_") + toString(W))
144+
145+
146+func X (Y) = ((P + "_") + toString(Y))
147+
148+
149+let Z = "rpd_sync_index"
150+
151+func aa (ab,L) = ((((J + "_") + toBase58String(L)) + "_") + toString(ab))
152+
153+
154+func ac (ad) = (("cancel_lease_tx_reserve_fee" + "_") + ad)
155+
156+
157+func ae (af,L) = ((("balance_" + L) + "_") + af)
158+
159+
160+func ag (af) = ("balance_block_" + af)
161+
162+
163+func ah (ab) = (("rpd_profit" + "_") + toString(ab))
164+
165+
166+func ai (L) = ("balance_" + L)
167+
168+
169+func aj (ad) = (("lease_tx_status" + "_") + ad)
170+
171+
172+func ak (ad) = ((U + "_") + ad)
173+
174+
175+func al (ad) = (("lease_tx" + "_") + ad)
176+
177+
178+func am (ad) = (("leasing_expire_send" + "_") + ad)
179+
180+
181+func an (ao,ap) = ((((ao * 100) / ap) * n) / o)
182+
183+
184+func aq (ao,ap) = ((((ao * ap) / 100) * o) / n)
185+
186+
187+func ar (ao) = (ao / o)
188+
189+
190+func as (ao) = (ao * o)
191+
192+
193+func at (ao,ap) = ar(aq(ao, ap))
194+
195+
196+func au (L) = a(ai(L))
197+
198+
199+let av = e(A)
200+
201+let aw = e(w)
202+
203+let ax = fromBase58String(aw)
204+
205+let ay = e(y)
206+
207+let az = e(z)
208+
209+let aA = e(B)
210+
211+let aB = e(C)
212+
213+let aC = g(aB, O)
214+
215+let aD = g(aB, P)
216+
217+let aE = j(aB, Q)
218+
219+let aF = a(T)
220+
221+let aG = f(S)
222+
223+let aH = a(I)
224+
225+let aI = a(R)
226+
227+let aJ = a(U)
228+
229+let aK = e(G)
230+
231+let aL = e(H)
232+
233+let aM = a(Z)
234+
235+let aN = a(D)
236+
237+let aO = a(E)
238+
239+let aP = a(F)
240+
241+let aQ = (wavesBalance(this) - au(t))
242+
243+let aR = (aQ - aJ)
244+
245+let aS = fromBase58String(e(x))
246+
247+let aT = (extract(assetInfo(aS)).quantity - assetBalance(this, aS))
248+
249+let aU = ((extract(assetInfo(ax)).quantity - assetBalance(this, ax)) + au(aw))
250+
251+let aV = (aq(aQ, aC) - aU)
252+
253+let aW = (aU - aq(aQ, aC))
254+
255+func aX (L) = g(aA, K(L))
256+
257+
258+let aY = g(az, N)
259+
260+let aZ = g(az, M)
261+
262+func ba (W) = g(aB, V(W))
263+
264+
265+func bb (Y) = g(aB, X(Y))
266+
267+
268+func bc (ad) = a(ac(ad))
269+
270+
271+func bd (af,L) = a(ae(af, L))
272+
273+
274+func be (af) = a(ag(af))
275+
276+
277+func bf (ab) = a(ah(ab))
278+
279+
280+func bg (ad) = e(aj(ad))
281+
282+
283+func bh (ad) = a(ak(ad))
284+
285+
286+func bi (ad) = e(al(ad))
287+
288+
289+func bj (ad) = a(am(ad))
290+
291+
292+@Callable(bk)
293+func swapWavesToNeutrino () = {
294+ let bl = extract(bk.payment)
295+ let bm = toString(bk.caller)
296+ if ((aO > bl.amount))
297+ then throw((("an amount is less than min available amount: " + toString(aO)) + " wavelets"))
298+ else if (isDefined(bl.assetId))
299+ then throw("can use waves only")
300+ else if (aE)
301+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
302+ else if ((be(bm) > height))
303+ then throw((("await " + toString((be(bm) - height))) + " blocks"))
304+ else if ((bd(bm, t) != 0))
305+ then throw("please withdraw locked funds first")
306+ else WriteSet([DataEntry(ae(bm, t), bl.amount), DataEntry(ag(bm), (height + aN)), DataEntry(ai(t), (au(t) + bl.amount))])
377307 }
378308
379309
380310
381-@Callable(bD)
382-func finilizeCurrentPrice () = {
383- let bF = toString(bD.caller)
384- let bG = ((bp(bd) + bp(be)) + bp(bf))
385- let bE = ((((bq(bd) * bp(bd)) + (bq(be) * bp(be))) + (bq(bf) * bp(bf))) / bG)
386- if (aQ)
387- then throw("contract is blocked")
388- else if (if (if ((bF != bd))
389- then (bF != be)
390- else false)
391- then (bF != bf)
392- else false)
393- then throw("permission denied")
394- else if (if (!(aK))
395- then true
396- else (aJ >= height))
397- then throw("wait for the end of the price providing")
398- else if ((2 > bG))
399- then throw("2/3 oracles need to set a price")
400- else if (if ((bE >= (aB + ((aB * aL) / 100))))
401- then true
402- else ((aB - ((aB * aL) / 100)) >= bE))
403- then WriteSet([DataEntry(N, true), DataEntry(ap(height), bE)])
404- else WriteSet([DataEntry(A, bE), DataEntry(ar(height), bE), DataEntry(T, false)])
311+@Callable(bk)
312+func swapNeutrinoToWaves () = {
313+ let bl = extract(bk.payment)
314+ let bm = toString(bk.caller)
315+ if ((aP > bl.amount))
316+ then throw((("an amount is less than min available amount: " + toString(aP)) + " neutrino cents"))
317+ else if (aE)
318+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
319+ else if ((bl.assetId != ax))
320+ then throw("can use appropriate neutrino tokens only")
321+ else if ((be(bm) > height))
322+ then throw((("await " + toString((be(bm) - height))) + " blocks"))
323+ else if ((bd(bm, aw) != 0))
324+ then throw("please withdraw locked funds first")
325+ else {
326+ let bn = (au(aw) + bl.amount)
327+ WriteSet([DataEntry(ae(bm, aw), bl.amount), DataEntry(ag(bm), (height + aN)), DataEntry(ai(aw), bn), DataEntry(S, if ((aR >= an(bn, aC)))
328+ then false
329+ else true)])
330+ }
405331 }
406332
407333
408334
409-@Callable(bD)
410-func adminUnlock (bE) = {
411- let bF = toString(bD.caller)
412- let bH = if ((bF != bg))
413- then bm(bg)
414- else 0
415- let bI = if ((bF != bh))
416- then bm(bh)
417- else 0
418- let bJ = if ((bF != bi))
419- then bm(bi)
420- else 0
421- let bK = if (((bn(bg) * bH) == bE))
422- then 1
423- else 0
424- let bL = if (((bn(bh) * bI) == bE))
425- then 1
426- else 0
427- let bM = if (((bn(bi) * bJ) == bE))
428- then 1
429- else 0
430- if (!(aQ))
431- then throw("Contract is not blocked")
432- else if (if (((((bK + bL) + bM) + 1) >= 2))
433- then (aO >= height)
434- else false)
435- then WriteSet([DataEntry(N, false), DataEntry(A, bE), DataEntry(ar(height), bE), DataEntry(ac(bg), false), DataEntry(ac(bh), false), DataEntry(ac(bi), false), DataEntry(R, 0), DataEntry(X, 0), DataEntry(T, false)])
436- else WriteSet([DataEntry(ae(bF), bE), DataEntry(R, if ((height > aO))
437- then (height + aN)
438- else aO), DataEntry(ac(bg), if ((height > aO))
439- then false
440- else (bH == 1)), DataEntry(ac(bh), if ((height > aO))
441- then false
442- else (bI == 1)), DataEntry(ac(bi), if ((height > aO))
443- then false
444- else (bJ == 1)), DataEntry(ac(bF), true)])
335+@Callable(bk)
336+func withdraw (bm,Y,bo) = {
337+ let bp = be(bm)
338+ let bq = bd(bm, bo)
339+ let br = bb(Y)
340+ let bs = bb((Y + 1))
341+ let bt = ba(br)
342+ let ao = if ((bo == aw))
343+ then an(bq, bt)
344+ else aq(bq, bt)
345+ if (aE)
346+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
347+ else if ((0 >= ao))
348+ then throw((("balance equals zero (" + bo) + ")"))
349+ else if ((bp > height))
350+ then throw((("please wait for: " + toString(bp)) + " block height to withdraw WAVES funds"))
351+ else if (if (if ((Y > aD))
352+ then true
353+ else (br > bp))
354+ then true
355+ else if ((bs != 0))
356+ then (bp >= bs)
357+ else false)
358+ then throw("invalid price history index")
359+ else ScriptResult(WriteSet([DataEntry(ae(bm, bo), 0), DataEntry(ai(bo), (au(bo) - bq))]), TransferSet([ScriptTransfer(addressFromStringValue(bm), ao, if ((bo == aw))
360+ then unit
361+ else ax)]))
445362 }
446363
447364
448365
449-@Callable(bD)
450-func adminLock () = {
451- let bF = toString(bD.caller)
452- let bH = if ((bF != bg))
453- then bm(bg)
454- else 1
455- let bI = if ((bF != bh))
456- then bm(bh)
457- else 1
458- let bJ = if ((bF != bi))
459- then bm(bi)
460- else 1
461- if (aQ)
462- then throw("Contract is blocked")
463- else if ((((bH + bI) + bJ) >= 2))
464- then WriteSet([DataEntry(N, true), DataEntry(ac(bg), false), DataEntry(ac(bh), false), DataEntry(ac(bi), false), DataEntry(R, 0)])
465- else WriteSet([DataEntry(R, if ((height > aO))
466- then (height + aN)
467- else aO), DataEntry(ac(bg), if ((height > aO))
468- then false
469- else (bH == 1)), DataEntry(ac(bh), if ((height > aO))
470- then false
471- else (bI == 1)), DataEntry(ac(bi), if ((height > aO))
472- then false
473- else (bJ == 1))])
366+@Callable(bk)
367+func transferToAuction () = {
368+ let bu = ((ar(aW) - assetBalance(addressFromStringValue(az), aS)) - aY)
369+ let bv = ((ar(aV) - assetBalance(addressFromStringValue(az), ax)) - aZ)
370+ if (aE)
371+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
372+ else if ((bu >= ((aU * s) / 100)))
373+ then TransferSet([ScriptTransfer(addressFromStringValue(az), bu, aS)])
374+ else if ((bv > 0))
375+ then TransferSet([ScriptTransfer(addressFromStringValue(av), as(bv), ax)])
376+ else throw("bond were generated or do not need it")
474377 }
475378
476379
477380
478-@Callable(bD)
479-func swapWavesToNeutrino () = {
480- let bN = extract(bD.payment)
481- if ((aR > bN.amount))
482- then throw("amount less min")
483- else if (isDefined(bN.assetId))
484- then throw("can use waves only")
485- else if (aQ)
486- then throw("contract is blocked")
381+@Callable(bk)
382+func transfer (bm) = {
383+ let bl = extract(bk.payment)
384+ TransferSet([ScriptTransfer(addressFromStringValue(bm), bl.amount, bl.assetId)])
385+ }
386+
387+
388+
389+@Callable(bk)
390+func nodeReward () = {
391+ let bl = value(bk.payment)
392+ if ((bk.caller != addressFromStringValue(aK)))
393+ then throw("only node account is able to transfer staking rewards from main account")
394+ else if (isDefined(bl.assetId))
395+ then throw("waves tokens only allowed")
396+ else {
397+ let ao = aq(bl.amount, aC)
398+ let bw = (aM + 1)
399+ ScriptResult(WriteSet([DataEntry(Z, bw), DataEntry(ah(aM), ao), DataEntry(aa(aM, ax), aX(ax))]), TransferSet([ScriptTransfer(addressFromStringValue(aA), ao, ax)]))
400+ }
401+ }
402+
403+
404+
405+@Callable(bk)
406+func registrationLeaseTx (bx,by,bz,bA) = {
407+ let bB = (((aQ * q) / 100) - an(au(aw), aC))
408+ let ao = (bB / r)
409+ let bC = (((((base58'3h1H' + fromBase58String(bx)) + fromBase58String(aK)) + toBytes(ao)) + toBytes(by)) + toBytes(bz))
410+ let bD = blake2b256(bC)
411+ let bE = toBase58String(bD)
412+ let bl = extract(bk.payment)
413+ if ((toString(bk.caller) == aL))
414+ then throw("invalid caller")
415+ else if (isDefined(bl.assetId))
416+ then throw("invalid paymtn asset")
417+ else if ((bA != bE))
418+ then throw((("invalid tx hash(amount:" + toString(ao)) + ")"))
419+ else if ((aF >= r))
420+ then throw("the number of leasing transactions is equal to the maximum")
421+ else if ((this != addressFromPublicKey(fromBase58String(bx))))
422+ then throw("invalid pubKey")
423+ else if (if ((lastBlock.timestamp > bz))
424+ then true
425+ else (bz > (lastBlock.timestamp + 5400000)))
426+ then throw((("invalid timestamp(lastBlock: " + toString(lastBlock.timestamp)) + ")"))
427+ else if ((bg(bE) != ""))
428+ then throw("tx is exist")
429+ else if ((bl.amount != (by * 2)))
430+ then throw("invalid payment amount")
431+ else if (if ((by > 1000000))
432+ then true
433+ else (500000 > by))
434+ then throw("invalid fee")
435+ else if (((bB - (aJ + ao)) > aR))
436+ then throw((("invalid amount(result:" + toString(((bB - (aJ + ao)) > aR))) + ")"))
437+ else WriteSet([DataEntry(ac(bE), by), DataEntry(T, if ((bg(bE) == ""))
438+ then (aF + 1)
439+ else aF), DataEntry(U, (aJ + ao)), DataEntry(R, if ((height > aI))
440+ then (height + aH)
441+ else aI), DataEntry(aj(bE), v), DataEntry(am(bE), (height + k)), DataEntry(ak(bE), ao), DataEntry(al(bE), toBase64String(bC))])
442+ }
443+
444+
445+
446+@Callable(bk)
447+func cancelStuckLeaseTx (bE) = if (if (if ((bg(bE) == v))
448+ then !(isDefined(transactionHeightById(fromBase58String(bE))))
449+ else false)
450+ then (height > bj(bE))
451+ else false)
452+ then {
453+ let ao = bh(bE)
454+ WriteSet([DataEntry(T, (aF - 1)), DataEntry(U, (aJ - ao)), DataEntry(aj(bE), u), DataEntry(S, if (((aR - ao) >= an(au(aw), aC)))
455+ then false
456+ else true)])
457+ }
458+ else throw("invalid tx hash")
459+
460+
461+
462+@Callable(bk)
463+func registrationUnleaseTx (bF,bx,by,bz,bA) = {
464+ let bC = (((((base58'gm' + toBytes(bF)) + fromBase58String(bx)) + toBytes(by)) + toBytes(bz)) + fromBase58String(bA))
465+ let bE = blake2b256(bC)
466+ if ((bg(bA) != v))
467+ then throw("invalid tx status")
468+ else if ((this != addressFromPublicKey(fromBase58String(bx))))
469+ then throw("invalid pubKey")
470+ else if (!(isDefined(transactionHeightById(bE))))
471+ then throw("blockchain does not contain this transaction")
487472 else {
488- let aD = aE(bN.amount)
489- TransferSet([ScriptTransfer(bD.caller, aD, aT)])
473+ let ao = bh(bA)
474+ WriteSet([DataEntry(T, (aF - 1)), DataEntry(U, (aJ - ao)), DataEntry(aj(bA), u), DataEntry(S, if (((aR - ao) >= an(au(aw), aC)))
475+ then false
476+ else true)])
490477 }
491478 }
492479
493480
494-
495-@Callable(bD)
496-func swapNeutrinoToWaves () = {
497- let bN = extract(bD.payment)
498- if ((aS > bN.amount))
499- then throw("amount less min")
500- else if (aQ)
501- then throw("contract is blocked")
502- else if ((bN.assetId != aT))
503- then throw("can use neutrino only")
504- else {
505- let bF = toBase58String(bD.caller.bytes)
506- let aD = aC(bN.amount)
507- WriteSet([DataEntry(an(bF), (br(bF) + aD)), DataEntry(ao(bF), (height + aP))])
508- }
509- }
510-
511-
512-
513-@Callable(bD)
514-func withdraw (bF) = if ((bt(bF) > height))
515- then throw("wait a couple of blocks for withdraw")
516- else ScriptResult(WriteSet([DataEntry(an(bF), 0), DataEntry(am(bF), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(bF), bs(bF), aT), ScriptTransfer(addressFromStringValue(bF), br(bF), unit)]))
517-
518-
519-
520-@Callable(bD)
521-func generateBond () = {
522- let bO = (bb - aE(aW))
523- let bP = assetBalance(addressFromStringValue(aU), aY)
524- let aD = (aF(bO) - bP)
525- if (aQ)
526- then throw("contract is blocked")
527- else if ((aD > 0))
528- then TransferSet([ScriptTransfer(addressFromStringValue(aU), aD, aY)])
529- else throw("bond were generated or do not need it")
530- }
531-
532-
533-
534-@Callable(bD)
535-func setOrder () = {
536- let bN = extract(bD.payment)
537- let bQ = toBase58String(keccak256(((toBytes(bN.amount) + bD.caller.bytes) + toBytes(height))))
538- if ((bN.assetId != aY))
539- then throw("can use bond only")
540- else if ((bw(bQ) != ""))
541- then throw("order exists")
542- else WriteSet([DataEntry(E, bA(bQ)), DataEntry(av(bQ), bN.amount), DataEntry(ax(bQ), toString(bD.caller)), DataEntry(ay(bQ), height), DataEntry(az(bQ), o)])
543- }
544-
545-
546-
547-@Callable(bD)
548-func cancelOrder (aw) = {
549- let ad = bw(aw)
550- let aD = (bu(aw) - bx(aw))
551- if ((ad != toString(bD.caller)))
552- then throw("permission denied")
553- else ScriptResult(WriteSet([DataEntry(E, bB(aw)), DataEntry(az(aw), n)]), TransferSet([ScriptTransfer(bD.caller, aD, aY)]))
554- }
555-
556-
557-
558-@Callable(bD)
559-func addLeasingCheck (bv) = {
560- let bR = value(transferTransactionById(fromBase58String(bv)))
561- if (if ((bR.recipient != addressFromStringValue(aV)))
562- then true
563- else bl(bv))
564- then throw("invalid transaction id")
565- else {
566- let aD = aE(bR.amount)
567- let bS = (aM + 1)
568- ScriptResult(WriteSet([DataEntry(K, bS), DataEntry(al(aM), aD), DataEntry(ai(aM, aT), bk(aT)), DataEntry(ai(aM, aY), bk(aY)), DataEntry(au(bv), true)]), TransferSet([ScriptTransfer(addressFromStringValue(aV), aD, aT)]))
569- }
570- }
571-
572-
573-
574-@Callable(bD)
575-func executeOrder () = {
576- let aw = split(aX, j)[0]
577- let bT = bu(aw)
578- let bU = bw(aw)
579- let bV = bx(aw)
580- if (aQ)
581- then throw("contract is blocked")
582- else if ((0 >= bc))
583- then throw("surplus is less than zero")
584- else if ((bU == ""))
585- then {
586- let bS = (aM + 1)
587- ScriptResult(WriteSet([DataEntry(K, bS), DataEntry(al(aM), bc), DataEntry(ai(aM, aT), bk(aT)), DataEntry(ai(aM, aY), bk(aY))]), TransferSet([ScriptTransfer(addressFromStringValue(aV), bc, aT)]))
588- }
589- else {
590- let aD = (bT - bV)
591- let bW = aF(bc)
592- let bX = if ((bW >= aD))
593- then p
594- else o
595- let bY = if ((bW >= aD))
596- then bT
597- else bW
598- ScriptResult(WriteSet([DataEntry(E, bB(aw)), DataEntry(aA(aw), (bV + bY)), DataEntry(az(aw), bX)]), TransferSet([ScriptTransfer(addressFromStringValue(bU), aG(bY), aT)]))
599- }
600- }
601-
602-
603-
604-@Callable(bD)
605-func transfer (bF) = {
606- let bN = extract(bD.payment)
607- if (isDefined(bN.assetId))
608- then throw("can use waves only at the moment")
609- else TransferSet([ScriptTransfer(addressFromStringValue(bF), bN.amount, unit)])
610- }
611-
612-
613-@Verifier(bR)
614-func bZ () = {
615- let c = bR
481+@Verifier(bG)
482+func bH () = {
483+ let bI = toBase58String(bG.id)
484+ let c = bG
616485 if ($isInstanceOf(c, "LeaseTransaction"))
617486 then {
618- let ca = c
619- sigVerify(bR.bodyBytes, bR.proofs[0], fromBase58String(bj(toBase58String(ca.id))))
487+ let bJ = c
488+ if (if ((aI >= height))
489+ then (bj(bI) >= height)
490+ else false)
491+ then (bg(bI) == v)
492+ else false
620493 }
621494 else if ($isInstanceOf(c, "LeaseCancelTransaction"))
622495 then {
623- let cb = c
624- sigVerify(bR.bodyBytes, bR.proofs[0], fromBase58String(bj(toBase58String(cb.leaseId))))
496+ let bK = c
497+ let bL = toBase58String(bK.leaseId)
498+ if (if (if ((height > aI))
499+ then true
500+ else aG)
501+ then (bK.fee == bc(bL))
502+ else false)
503+ then (bg(bL) == v)
504+ else false
625505 }
626- else sigVerify(bR.bodyBytes, bR.proofs[0], bR.senderPublicKey)
506+ else sigVerify(bG.bodyBytes, bG.proofs[0], bG.senderPublicKey)
627507 }
628508

github/deemru/w8io/169f3d6 
91.49 ms