tx · 2V66ayuceomPtycJq1dZKenYVewFUuAR3XRcxwPU6bi4

3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ:  -0.03700000 Waves

2023.05.24 17:20 [2592174] smart account 3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ > SELF 0.00000000 Waves

{ "type": 13, "id": "2V66ayuceomPtycJq1dZKenYVewFUuAR3XRcxwPU6bi4", "fee": 3700000, "feeAssetId": null, "timestamp": 1684938025304, "version": 2, "chainId": 84, "sender": "3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ", "senderPublicKey": "2NgVCitn1k18yzwhrzdQXHDEygzSkjbXS4A1koTt14db", "proofs": [ "5fa3V6PYiN6To2eG2WM5XYLqmND33YA5KzbCCndTjx8qVQcGa4EkvdsNwNV3PqQhYb2S42c2so9ArmF2qgWZYFDe" ], "script": "base64:BgI8CAISABIFCgMICAESABIDCgEBEgASABIAEgMKAQESAwoBARIDCgEBEgASABIAEgMKAQgSAwoBCBIDCgEIYAANa190b3RhbFN1cHBseQINa190b3RhbFN1cHBseQAPa19yZXdhcmRCYWxhbmNlAg9rX3Jld2FyZEJhbGFuY2UAD2tfbG9ja2VkQmFsYW5jZQIPa19sb2NrZWRCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlAA9rX2V4Y2Vzc0JhbGFuY2UCD2tfZXhjZXNzQmFsYW5jZQAMa192YXVsdEFzc2V0AgxrX3ZhdWx0QXNzZXQAFGtfdmF1bHRBc3NldERlY2ltYWxzAhRrX3ZhdWx0QXNzZXREZWNpbWFscwAUa19tYXhTcG90VXRpbGl6YXRpb24CFGtfbWF4U3BvdFV0aWxpemF0aW9uAAZrX3JhdGUCBmtfcmF0ZQAQa19sYXN0VXBkYXRlVGltZQIQa19sYXN0VXBkYXRlVGltZQAWa19yZXdhcmRQZXJUb2tlblN0b3JlZAIWa19yZXdhcmRQZXJUb2tlblN0b3JlZAAMa19yZXdhcmRSYXRlAgxrX3Jld2FyZFJhdGUADmtfcGVyaW9kRmluaXNoAg5rX3BlcmlvZEZpbmlzaAAUa191c2VyUmV3YXJkUGVyVG9rZW4CFGtfdXNlclJld2FyZFBlclRva2VuAAxrX3VzZXJSZXdhcmQCDGtfdXNlclJld2FyZAAJa19iYWxhbmNlAglrX2JhbGFuY2UADmtfYXZlcmFnZV9yYXRlAg5rX2F2ZXJhZ2VfcmF0ZQAQa193aXRoZHJhd19saW1pdAIQa193aXRoZHJhd19saW1pdAAUa19sYXN0X3dpdGhkcmF3X2RhdGUCFGtfbGFzdF93aXRoZHJhd19kYXRlABRrX3dpdGhkcmF3X2luX3BlcmlvZAIUa193aXRoZHJhd19pbl9wZXJpb2QADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAFa19hbW0CBWtfYW1tABJrX2dvdmVybmFuY2VfYXNzZXQCC2tfZ292X2Fzc2V0AA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwARa19tYW5hZ2VyX2FkZHJlc3MCEWtfbWFuYWdlcl9hZGRyZXNzAA5rX3Nwb3RfYWRkcmVzcwIOa19zcG90X2FkZHJlc3MAFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhRrX2NvbGxhdGVyYWxfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AhtDb29yZGluYXRvciBhZGRyZXNzIGludmFsaWQBDGFkbWluQWRkcmVzcwAJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwIVQWRtaW4gYWRkcmVzcyBub3Qgc2V0AQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwELc3BvdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFDmtfc3BvdF9hZGRyZXNzAhRTcG90IGFkZHJlc3Mgbm90IHNldAIUU3BvdCBhZGRyZXNzIGludmFsaWQBD2dvdmVybmFuY2VBc3NldAAJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZ292ZXJuYW5jZV9hc3NldAIYR292ZXJuYW5jZSBhc3NldCBub3Qgc2V0AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ12YXVsdEFzc2V0U3RyAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtfdmF1bHRBc3NldAITVmF1bHQgYXNzZXQgbm90IHNldAEKdmF1bHRBc3NldAAEC19hc3NldElkU3RyCQENdmF1bHRBc3NldFN0cgADCQAAAgULX2Fzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFC19hc3NldElkU3RyARJ2YXVsdEFzc2V0RGVjaW1hbHMACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUUa192YXVsdEFzc2V0RGVjaW1hbHMCHFZhdWx0IGFzc2V0IGRlY2ltYWxzIG5vdCBzZXQBDm1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABRFrX21hbmFnZXJfYWRkcmVzcwIXTWFuYWdlciBhZGRyZXNzIG5vdCBzZXQCF01hbmFnZXIgYWRkcmVzcyBpbnZhbGlkAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAoACgAIRFVSQVRJT04JAGgCCQBoAgkAaAIABwA8ADwAGAAKTk9fQUREUkVTUwIAAAlOT19TVEFLRVIAAAERYXNzZXRGcm9tRGVjaW1hbHMBB19hbW91bnQEDWFzc2V0RGVjaW1hbHMJARJ2YXVsdEFzc2V0RGVjaW1hbHMAAwkAAAIFDWFzc2V0RGVjaW1hbHMABgkAaQIFB19hbW91bnQAZAMJAAACBQ1hc3NldERlY2ltYWxzAAgFB19hbW91bnQJAAIBAhZJbnZhbGlkIGFzc2V0IGRlY2ltYWxzAQ9hc3NldFRvRGVjaW1hbHMBB19hbW91bnQEDWFzc2V0RGVjaW1hbHMJARJ2YXVsdEFzc2V0RGVjaW1hbHMAAwkAAAIFDWFzc2V0RGVjaW1hbHMABgkAaAIFB19hbW91bnQAZAMJAAACBQ1hc3NldERlY2ltYWxzAAgFB19hbW91bnQJAAIBAhZJbnZhbGlkIGFzc2V0IGRlY2ltYWxzAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBG1pbnYCAl94Al95AwkAZgIFAl94BQJfeQUCX3kFAl94AA9XSVRIRFJBV19QRVJJT0QJAGgCAICjBQDoBwATV0lUSERSQVdfUEVSX1BFUklPRAkBBGRpdmQCCQBoAgABBQxERUNJTUFMX1VOSVQJAGgCAAQFDERFQ0lNQUxfVU5JVAEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQRpbnQwAQFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWsAAAEEaW50MQEBawkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQxERUNJTUFMX1VOSVQBC3RvdGFsU3VwcGx5AAkBBGludDABBQ1rX3RvdGFsU3VwcGx5AQRyYXRlAAkBBGludDEBBQZrX3JhdGUBCWJhbGFuY2VPZgEHX3N0YWtlcgkBBGludDABCQEOdG9Db21wb3NpdGVLZXkCBQlrX2JhbGFuY2UFB19zdGFrZXIBC2F2ZXJhZ2VSYXRlAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfYXZlcmFnZV9yYXRlBQdfc3Rha2VyAQ13aXRoZHJhd0xpbWl0AQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfd2l0aGRyYXdfbGltaXQFB19zdGFrZXIBEXdpdGhkcmF3bkluUGVyaW9kAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFFGtfd2l0aGRyYXdfaW5fcGVyaW9kBQdfc3Rha2VyARFsYXN0V2l0aGRyYXduRGF0ZQEHX3N0YWtlcgkBBGludDABCQEOdG9Db21wb3NpdGVLZXkCBRRrX2xhc3Rfd2l0aGRyYXdfZGF0ZQUHX3N0YWtlcgELZnJlZUJhbGFuY2UACQEEaW50MAEFDWtfZnJlZUJhbGFuY2UBDWxvY2tlZEJhbGFuY2UACQEEaW50MAEFD2tfbG9ja2VkQmFsYW5jZQENZXhjZXNzQmFsYW5jZQAJAQRpbnQwAQUPa19leGNlc3NCYWxhbmNlARRyZXdhcmRQZXJUb2tlblN0b3JlZAAJAQRpbnQwAQUWa19yZXdhcmRQZXJUb2tlblN0b3JlZAEObGFzdFVwZGF0ZVRpbWUACQEEaW50MAEFEGtfbGFzdFVwZGF0ZVRpbWUBCnJld2FyZFJhdGUACQEEaW50MAEFDGtfcmV3YXJkUmF0ZQEMcGVyaW9kRmluaXNoAAkBBGludDABBQ5rX3BlcmlvZEZpbmlzaAENcmV3YXJkQmFsYW5jZQAJAQRpbnQwAQUPa19yZXdhcmRCYWxhbmNlAQdyZXdhcmRzAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdXNlclJld2FyZAUHX3N0YWtlcgEWdXNlclJld2FyZFBlclRva2VuUGFpZAEHX3N0YWtlcgkBBGludDABCQEOdG9Db21wb3NpdGVLZXkCBRRrX3VzZXJSZXdhcmRQZXJUb2tlbgUHX3N0YWtlcgESbWF4U3BvdFV0aWxpemF0aW9uAAkBBGludDABBRRrX21heFNwb3RVdGlsaXphdGlvbgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHARBjdXJyZW50VGltZXN0YW1wAAgFCWxhc3RCbG9jawl0aW1lc3RhbXABE2N1cnJlbnRUaW1lc3RhbXBTZWMACQBpAgkBEGN1cnJlbnRUaW1lc3RhbXAAAOgHARRnZXRXaXRoZHJhd0xpbWl0TGVmdAEHX3N0YWtlcgQLY3VycmVudERhdGUJARBjdXJyZW50VGltZXN0YW1wAAQQbGFzdFdpdGhkcmF3RGF0ZQkBEWxhc3RXaXRoZHJhd25EYXRlAQUHX3N0YWtlcgQLJHQwNjI2NTY1ODYDCQBmAgkAZQIFC2N1cnJlbnREYXRlBRBsYXN0V2l0aGRyYXdEYXRlBQ9XSVRIRFJBV19QRVJJT0QJAJUKAwULY3VycmVudERhdGUJAQ13aXRoZHJhd0xpbWl0AQUHX3N0YWtlcgAACQCVCgMFEGxhc3RXaXRoZHJhd0RhdGUJAGUCCQENd2l0aGRyYXdMaW1pdAEFB19zdGFrZXIJARF3aXRoZHJhd25JblBlcmlvZAEFB19zdGFrZXIJARF3aXRoZHJhd25JblBlcmlvZAEFB19zdGFrZXIEFG5ld0xhc3RXaXRoZHJhd25EYXRlCAULJHQwNjI2NTY1ODYCXzEEEXdpdGhkcmF3TGltaXRMZWZ0CAULJHQwNjI2NTY1ODYCXzIEGGFscmVhZHlXaXRoZHJhd25JblBlcmlvZAgFCyR0MDYyNjU2NTg2Al8zCQCVCgMFFG5ld0xhc3RXaXRoZHJhd25EYXRlBRF3aXRoZHJhd0xpbWl0TGVmdAUYYWxyZWFkeVdpdGhkcmF3bkluUGVyaW9kAQ5jb21wdXRlTmV3UmF0ZQETX2Ftb3VudE9mUXVvdGVBc3NldAQHbmV3UmF0ZQMJAGYCCQELdG90YWxTdXBwbHkAAAAJAQRkaXZkAgkAZAIJAQtmcmVlQmFsYW5jZQAFE19hbW91bnRPZlF1b3RlQXNzZXQJAQt0b3RhbFN1cHBseQAFDERFQ0lNQUxfVU5JVAUHbmV3UmF0ZQEYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAkBBG1pbnYCCQETY3VycmVudFRpbWVzdGFtcFNlYwAJAQxwZXJpb2RGaW5pc2gAAQ5yZXdhcmRQZXJUb2tlbgENX2JhbGFuY2VEZWx0YQMJAAACCQBkAgkBC3RvdGFsU3VwcGx5AAUNX2JhbGFuY2VEZWx0YQAACQEUcmV3YXJkUGVyVG9rZW5TdG9yZWQABAx0aW1lSW50ZXJ2YWwJAGUCCQEYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAkBDmxhc3RVcGRhdGVUaW1lAAQSYWN0dWFsVGltZUludGVydmFsAwkAZgIAAAUMdGltZUludGVydmFsAAAFDHRpbWVJbnRlcnZhbAQEZGlmZgkBBGRpdmQCCQBoAgkBCnJld2FyZFJhdGUABRJhY3R1YWxUaW1lSW50ZXJ2YWwJAGQCCQELdG90YWxTdXBwbHkABQ1fYmFsYW5jZURlbHRhCQBkAgkBFHJld2FyZFBlclRva2VuU3RvcmVkAAUEZGlmZgEGZWFybmVkAgdfc3Rha2VyDV9iYWxhbmNlRGVsdGEEC3Jld2FyZERlbHRhCQBlAgkBDnJld2FyZFBlclRva2VuAQUNX2JhbGFuY2VEZWx0YQkBFnVzZXJSZXdhcmRQZXJUb2tlblBhaWQBBQdfc3Rha2VyCQBkAgkBBG11bGQCCQBkAgkBCWJhbGFuY2VPZgEFB19zdGFrZXIFDV9iYWxhbmNlRGVsdGEFC3Jld2FyZERlbHRhCQEHcmV3YXJkcwEFB19zdGFrZXIBDHVwZGF0ZVJld2FyZAIHX3N0YWtlcg1fYmFsYW5jZURlbHRhBBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBDnJld2FyZFBlclRva2VuAQUNX2JhbGFuY2VEZWx0YQQRbmV3TGFzdFVwZGF0ZVRpbWUJARNjdXJyZW50VGltZXN0YW1wU2VjAAQLJHQwNzgwODgwMDADCQECIT0CBQdfc3Rha2VyAgAJAJQKAgkBBmVhcm5lZAIFB19zdGFrZXIFDV9iYWxhbmNlRGVsdGEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQCUCgIAAAAABAxzdGFrZXJFYXJuZWQIBQskdDA3ODA4ODAwMAJfMQQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAULJHQwNzgwODgwMDACXzIJAJYKBAUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQFEW5ld0xhc3RVcGRhdGVUaW1lBQxzdGFrZXJFYXJuZWQFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAERdXBkYXRlVXNlckJhbGFuY2UCBV91c2VyB19jaGFuZ2UDCQBnAgkAZAIJAQliYWxhbmNlT2YBBQVfdXNlcgUHX2NoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQlrX2JhbGFuY2UFBV91c2VyCQBkAgkBCWJhbGFuY2VPZgEFBV91c2VyBQdfY2hhbmdlBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICAi1WYXVsdDogY2FuIG5vdCB1cGRhdGUgdXNlciBiYWxhbmNlLiBCYWxhbmNlOiAJAKQDAQkBCWJhbGFuY2VPZgEFBV91c2VyAgkgY2hhbmdlOiAJAKQDAQUHX2NoYW5nZQEUc2V0VXNlcldpdGhkcmF3TGltaXQCBV91c2VyBV9yYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3dpdGhkcmF3X2xpbWl0BQVfdXNlcgUFX3JhdGUFA25pbAESc2V0VXNlckF2ZXJhZ2VSYXRlAgVfdXNlcgVfcmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19hdmVyYWdlX3JhdGUFBV91c2VyBQVfcmF0ZQUDbmlsARF1cGRhdGVGcmVlQmFsYW5jZQEHX2NoYW5nZQQHYmFsYW5jZQkBC2ZyZWVCYWxhbmNlAAMJAGcCCQBkAgUHYmFsYW5jZQUHX2NoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2ZyZWVCYWxhbmNlCQBkAgUHYmFsYW5jZQUHX2NoYW5nZQUDbmlsCQACAQkArAICCQCsAgIJAKwCAgItVmF1bHQ6IGNhbiBub3QgdXBkYXRlIGZyZWUgYmFsYW5jZS4gQmFsYW5jZTogCQCkAwEFB2JhbGFuY2UCCSBjaGFuZ2U6IAkApAMBBQdfY2hhbmdlARN1cGRhdGVMb2NrZWRCYWxhbmNlAQdfY2hhbmdlBAdiYWxhbmNlCQENbG9ja2VkQmFsYW5jZQADCQBnAgkAZAIFB2JhbGFuY2UFB19jaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19sb2NrZWRCYWxhbmNlCQBkAgUHYmFsYW5jZQUHX2NoYW5nZQUDbmlsCQACAQkArAICCQCsAgIJAKwCAgIvVmF1bHQ6IGNhbiBub3QgdXBkYXRlIGxvY2tlZCBiYWxhbmNlLiBCYWxhbmNlOiAJAKQDAQUHYmFsYW5jZQIJIGNoYW5nZTogCQCkAwEFB19jaGFuZ2UBE3VwZGF0ZUV4Y2Vzc0JhbGFuY2UBB19jaGFuZ2UEDG5ld0ltYmFsYW5jZQkAZAIJAQ1leGNlc3NCYWxhbmNlAAUHX2NoYW5nZQQPdXRpbGl6YXRpb25SYXRlCQEEZGl2ZAIJAQNhYnMBBQxuZXdJbWJhbGFuY2UJAQtmcmVlQmFsYW5jZQADCQBmAgkBEm1heFNwb3RVdGlsaXphdGlvbgAFD3V0aWxpemF0aW9uUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19leGNlc3NCYWxhbmNlBQxuZXdJbWJhbGFuY2UFA25pbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIvVmF1bHQ6IGNhbiBub3QgdXBkYXRlIGV4Y2VzcyBiYWxhbmNlLiBCYWxhbmNlOiAJAKQDAQkBDWV4Y2Vzc0JhbGFuY2UAAgkgY2hhbmdlOiAJAKQDAQUHX2NoYW5nZQITIHV0aWxpemF0aW9uIHJhdGU6IAkApAMBBQ91dGlsaXphdGlvblJhdGUCFyBtYXggdXRpbGl6YXRpb24gcmF0ZTogCQCkAwEJARJtYXhTcG90VXRpbGl6YXRpb24AARF1cGRhdGVUb3RhbFN1cHBseQEHX2NoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa190b3RhbFN1cHBseQkAZAIJAQt0b3RhbFN1cHBseQAFB19jaGFuZ2UFA25pbAEKdXBkYXRlUmF0ZQEFX3JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFBmtfcmF0ZQUFX3JhdGUFA25pbAEVc2V0VXNlcldpdGhkcmF3UGFyYW1zAwVfdXNlchFfbGFzdFdpdGhkcmF3RGF0ZQpfd2l0aGRyYXduCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX2xhc3Rfd2l0aGRyYXdfZGF0ZQUFX3VzZXIFEV9sYXN0V2l0aGRyYXdEYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3dpdGhkcmF3X2luX3BlcmlvZAUFX3VzZXIFCl93aXRoZHJhd24FA25pbAETdXBkYXRlUmV3YXJkQmFsYW5jZQEGX2RlbHRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX3Jld2FyZEJhbGFuY2UJAGQCCQENcmV3YXJkQmFsYW5jZQAFBl9kZWx0YQUDbmlsARB1cGRhdGVSZXdhcmRSYXRlAQtfcmV3YXJkUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa19yZXdhcmRSYXRlBQtfcmV3YXJkUmF0ZQUDbmlsAQp1cGRhdGVUaW1lAg9fbGFzdFVwZGF0ZVRpbWUNX3BlcmlvZEZpbmlzaAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19sYXN0VXBkYXRlVGltZQUPX2xhc3RVcGRhdGVUaW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX3BlcmlvZEZpbmlzaAUNX3BlcmlvZEZpbmlzaAUDbmlsARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEVX3Jld2FyZFBlclRva2VuU3RvcmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX3Jld2FyZFBlclRva2VuU3RvcmVkBRVfcmV3YXJkUGVyVG9rZW5TdG9yZWQFA25pbAERdXBkYXRlVXNlclJld2FyZHMDB19zdGFrZXIHX3Jld2FyZBNfdXNlclJld2FyZFBlclRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQxrX3VzZXJSZXdhcmQFB19zdGFrZXIFB19yZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFGtfdXNlclJld2FyZFBlclRva2VuBQdfc3Rha2VyBRNfdXNlclJld2FyZFBlclRva2VuBQNuaWwQAWkBB21pZ3JhdGUAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECGkludmFsaWQgbWlncmF0ZSBwYXJhbWV0ZXJzBAtfdmF1bHRBc3NldAkA2AQBCQEKcXVvdGVBc3NldAAEDWFzc2V0RGVjaW1hbHMDCQAAAgULX3ZhdWx0QXNzZXQCBVdBVkVTAAgEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFC192YXVsdEFzc2V0CQCsAgICEkludmFsaWQgdG9rZW4gaWQ6IAULX3ZhdWx0QXNzZXQIBQRpbmZvCGRlY2ltYWxzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtfdmF1bHRBc3NldAULX3ZhdWx0QXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtfdmF1bHRBc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX21heFNwb3RVdGlsaXphdGlvbgAABQNuaWwBaQEKaW5pdGlhbGl6ZQMMX2Nvb3JkaW5hdG9yC192YXVsdEFzc2V0E19tYXhTcG90VXRpbGl6YXRpb24DAwMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzBgkAZgIAAAUTX21heFNwb3RVdGlsaXphdGlvbgYJAGYCBRNfbWF4U3BvdFV0aWxpemF0aW9uBQxERUNJTUFMX1VOSVQJAAIBAhRVbmFibGUgdG8gaW5pdGlhbGl6ZQQNYXNzZXREZWNpbWFscwMJAAACBQtfdmF1bHRBc3NldAIFV0FWRVMACAQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQULX3ZhdWx0QXNzZXQJAKwCAgISSW52YWxpZCB0b2tlbiBpZDogBQtfdmF1bHRBc3NldAgFBGluZm8IZGVjaW1hbHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDF9jb29yZGluYXRvcgIbSW52YWxpZCBjb29yZGluYXRvciBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtfdmF1bHRBc3NldAULX3ZhdWx0QXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtfdmF1bHRBc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX21heFNwb3RVdGlsaXphdGlvbgUTX21heFNwb3RVdGlsaXphdGlvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQVzdGFrZQAEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CQEPYXNzZXRUb0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnZhdWx0QXNzZXQABgkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIVSW52YWxpZCBjYWxsIHRvIHN0YWtlBA0kdDAxMzE0NTEzMzc0CQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAABBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFDSR0MDEzMTQ1MTMzNzQCXzEEEW5ld0xhc3RVcGRhdGVUaW1lCAUNJHQwMTMxNDUxMzM3NAJfMgQMc3Rha2VyRWFybmVkCAUNJHQwMTMxNDUxMzM3NAJfMwQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUNJHQwMTMxNDUxMzM3NAJfNAQLY3VycmVudFJhdGUJAQRyYXRlAAQPcHJldkF2ZXJhZ2VSYXRlCQELYXZlcmFnZVJhdGUBBQdfc3Rha2VyBAd2QW1vdW50CQEEZGl2ZAIFB19hbW91bnQFC2N1cnJlbnRSYXRlBA5uZXdBdmVyYWdlUmF0ZQkBBGRpdmQCCQBkAgkBBG11bGQCBQd2QW1vdW50BQtjdXJyZW50UmF0ZQkBBG11bGQCCQEJYmFsYW5jZU9mAQUHX3N0YWtlcgUPcHJldkF2ZXJhZ2VSYXRlCQBkAgUHdkFtb3VudAkBCWJhbGFuY2VPZgEFB19zdGFrZXIED25ld1RvdGFsQmFsYW5jZQkAZAIFB3ZBbW91bnQJAQliYWxhbmNlT2YBBQdfc3Rha2VyBBBuZXdXaXRoZHJhd0xpbWl0CQEEbXVsZAIFD25ld1RvdGFsQmFsYW5jZQUTV0lUSERSQVdfUEVSX1BFUklPRAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKdmF1bHRBc3NldAAJARFhc3NldEZyb21EZWNpbWFscwEFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEBm5vdGlmeQkA/AcECQELc3BvdEFkZHJlc3MAAhhub3RpZnlWYXVsdEJhbGFuY2VDaGFuZ2UJAMwIAgkBDXZhdWx0QXNzZXRTdHIACQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFBm5vdGlmeQUGbm90aWZ5CQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJARF1cGRhdGVVc2VyUmV3YXJkcwMFB19zdGFrZXIFDHN0YWtlckVhcm5lZAUYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBCnVwZGF0ZVRpbWUCBRFuZXdMYXN0VXBkYXRlVGltZQkBDHBlcmlvZEZpbmlzaAAJARF1cGRhdGVGcmVlQmFsYW5jZQEFB19hbW91bnQJARF1cGRhdGVVc2VyQmFsYW5jZQIFB19zdGFrZXIFB3ZBbW91bnQJARJzZXRVc2VyQXZlcmFnZVJhdGUCBQdfc3Rha2VyBQ5uZXdBdmVyYWdlUmF0ZQkBFHNldFVzZXJXaXRoZHJhd0xpbWl0AgUHX3N0YWtlcgUQbmV3V2l0aGRyYXdMaW1pdAkBEXVwZGF0ZVRvdGFsU3VwcGx5AQUHdkFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQd1blN0YWtlAQdfYW1vdW50BAdfc3Rha2VyCQClCAEIBQFpBmNhbGxlcgQSYW1vdW50T2ZRdW90ZUFzc2V0CQEPYXNzZXRUb0RlY2ltYWxzAQUHX2Ftb3VudAMDAwkBAiE9AggFAWkIcGF5bWVudHMFA25pbAYJAGcCAAAFEmFtb3VudE9mUXVvdGVBc3NldAYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECF0ludmFsaWQgY2FsbCB0byB1blN0YWtlBA0kdDAxNDg3NDE1MDkwCQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAABBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFDSR0MDE0ODc0MTUwOTACXzEEEW5ld0xhc3RVcGRhdGVUaW1lCAUNJHQwMTQ4NzQxNTA5MAJfMgQMc3Rha2VyRWFybmVkCAUNJHQwMTQ4NzQxNTA5MAJfMwQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUNJHQwMTQ4NzQxNTA5MAJfNAQNJHQwMTUwOTcxNTI2NAkBFGdldFdpdGhkcmF3TGltaXRMZWZ0AQUHX3N0YWtlcgQUbmV3TGFzdFdpdGhkcmF3bkRhdGUIBQ0kdDAxNTA5NzE1MjY0Al8xBBF3aXRoZHJhd0xpbWl0TGVmdAgFDSR0MDE1MDk3MTUyNjQCXzIEGGFscmVhZHlXaXRoZHJhd25JblBlcmlvZAgFDSR0MDE1MDk3MTUyNjQCXzMEB3ZBbW91bnQJAQRkaXZkAgUSYW1vdW50T2ZRdW90ZUFzc2V0CQEEcmF0ZQADCQBmAgUHdkFtb3VudAURd2l0aGRyYXdMaW1pdExlZnQJAAIBAixJbnZhbGlkIGNhbGwgdG8gdW5TdGFrZTogd2l0aGRyYXcgb3ZlciBsaW1pdAQUbmV3V2l0aGRyYXduSW5QZXJpb2QJAGQCBRhhbHJlYWR5V2l0aGRyYXduSW5QZXJpb2QFB3ZBbW91bnQDCQBmAgUSYW1vdW50T2ZRdW90ZUFzc2V0CQELZnJlZUJhbGFuY2UACQACAQIoSW52YWxpZCBjYWxsIHRvIHVuU3Rha2U6IGJhbGFuY2UgdG9vIGxvdwQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQENdmF1bHRBc3NldFN0cgAJAMwIAgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAZub3RpZnkJAPwHBAkBC3Nwb3RBZGRyZXNzAAIYbm90aWZ5VmF1bHRCYWxhbmNlQ2hhbmdlCQDMCAIJAQ12YXVsdEFzc2V0U3RyAAkAzAgCCQEBLQEFEmFtb3VudE9mUXVvdGVBc3NldAUDbmlsBQNuaWwDCQAAAgUGbm90aWZ5BQZub3RpZnkJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBEXVwZGF0ZVVzZXJSZXdhcmRzAwUHX3N0YWtlcgUMc3Rha2VyRWFybmVkBRhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEKdXBkYXRlVGltZQIFEW5ld0xhc3RVcGRhdGVUaW1lCQEMcGVyaW9kRmluaXNoAAkBEXVwZGF0ZUZyZWVCYWxhbmNlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJARF1cGRhdGVVc2VyQmFsYW5jZQIFB19zdGFrZXIJAQEtAQUHdkFtb3VudAkBEXVwZGF0ZVRvdGFsU3VwcGx5AQkBAS0BBQd2QW1vdW50CQEVc2V0VXNlcldpdGhkcmF3UGFyYW1zAwUHX3N0YWtlcgUUbmV3TGFzdFdpdGhkcmF3bkRhdGUFFG5ld1dpdGhkcmF3bkluUGVyaW9kCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQEKdmF1bHRBc3NldAAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ93aXRoZHJhd1Jld2FyZHMABAdfc3Rha2VyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTY3NjkxNjkxNAkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQ0kdDAxNjc2OTE2OTE0Al8xBBFuZXdMYXN0VXBkYXRlVGltZQgFDSR0MDE2NzY5MTY5MTQCXzIEDHN0YWtlckVhcm5lZAgFDSR0MDE2NzY5MTY5MTQCXzMEGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFDSR0MDE2NzY5MTY5MTQCXzQDAwkAZwIAAAUMc3Rha2VyRWFybmVkBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIQTm8gcmV3YXJkOiBWYXVsdAkAzggCCQDOCAIJAM4IAgkAzggCCQERdXBkYXRlVXNlclJld2FyZHMDBQdfc3Rha2VyAAAFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQp1cGRhdGVUaW1lAgURbmV3TGFzdFVwZGF0ZVRpbWUJAQxwZXJpb2RGaW5pc2gACQETdXBkYXRlUmV3YXJkQmFsYW5jZQEJAQEtAQUMc3Rha2VyRWFybmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMc3Rha2VyRWFybmVkCQEPZ292ZXJuYW5jZUFzc2V0AAUDbmlsAWkBB2FkZEZyZWUABAdfYW1vdW50CQEPYXNzZXRUb0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQp2YXVsdEFzc2V0AAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQMDCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgYJAAACCAUBaQZjYWxsZXIJAQtzcG90QWRkcmVzcwAGCQAAAggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgYWRkRnJlZSBwYXJhbXMEB25ld1JhdGUJAQ5jb21wdXRlTmV3UmF0ZQEFB19hbW91bnQEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnZhdWx0QXNzZXQACQERYXNzZXRGcm9tRGVjaW1hbHMBBQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJARF1cGRhdGVGcmVlQmFsYW5jZQEFB19hbW91bnQJAQp1cGRhdGVSYXRlAQUHbmV3UmF0ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRMb2NrZWQABAdfYW1vdW50CQEPYXNzZXRUb0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQp2YXVsdEFzc2V0AAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQMJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyBgkAAAIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhhJbnZhbGlkIGFkZExvY2tlZCBwYXJhbXMEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKdmF1bHRBc3NldAAJARFhc3NldEZyb21EZWNpbWFscwEFB19hbW91bnQFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQETdXBkYXRlTG9ja2VkQmFsYW5jZQEFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkAQdfYW1vdW50AwMJAQEhAQkBC2luaXRpYWxpemVkAAYDCQEBIQEJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABwkAAgECJEludmFsaWQgZXhjaGFuZ2VGcmVlQW5kTG9ja2VkIHBhcmFtcwQSYW1vdW50T2ZRdW90ZUFzc2V0CQEPYXNzZXRUb0RlY2ltYWxzAQUHX2Ftb3VudAQHbmV3UmF0ZQkBDmNvbXB1dGVOZXdSYXRlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJAM4IAgkAzggCCQETdXBkYXRlTG9ja2VkQmFsYW5jZQEFEmFtb3VudE9mUXVvdGVBc3NldAkBEXVwZGF0ZUZyZWVCYWxhbmNlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJAQp1cGRhdGVSYXRlAQUHbmV3UmF0ZQFpAQ53aXRoZHJhd0xvY2tlZAEHX2Ftb3VudAMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2lzV2hpdGVsaXN0AQkApQgBCAUBaQZjYWxsZXIJAAIBAh1JbnZhbGlkIHdpdGhkcmF3TG9ja2VkIHBhcmFtcwQSYW1vdW50T2ZRdW90ZUFzc2V0CQEPYXNzZXRUb0RlY2ltYWxzAQUHX2Ftb3VudAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQENdmF1bHRBc3NldFN0cgAJAMwIAgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJARN1cGRhdGVMb2NrZWRCYWxhbmNlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQERYXNzZXRGcm9tRGVjaW1hbHMBBRJhbW91bnRPZlF1b3RlQXNzZXQJAQp2YXVsdEFzc2V0AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBmJvcnJvdwEHX2Ftb3VudAMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkAZwIAAAUHX2Ftb3VudAYJAQEhAQkAAAIIBQFpBmNhbGxlcgkBC3Nwb3RBZGRyZXNzAAkAAgECFUludmFsaWQgYm9ycm93IHBhcmFtcwQSYW1vdW50T2ZRdW90ZUFzc2V0CQEPYXNzZXRUb0RlY2ltYWxzAQUHX2Ftb3VudAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQENdmF1bHRBc3NldFN0cgAJAMwIAgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJARN1cGRhdGVFeGNlc3NCYWxhbmNlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQERYXNzZXRGcm9tRGVjaW1hbHMBBRJhbW91bnRPZlF1b3RlQXNzZXQJAQp2YXVsdEFzc2V0AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXJlcGF5AAQHX2Ftb3VudAkBD2Fzc2V0VG9EZWNpbWFscwEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKdmF1bHRBc3NldAAGCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEDCQAAAggFAWkGY2FsbGVyCQELc3BvdEFkZHJlc3MABgkAAAIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHJlcGF5IHBhcmFtcwQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQp2YXVsdEFzc2V0AAkBEWFzc2V0RnJvbURlY2ltYWxzAQUHX2Ftb3VudAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJARN1cGRhdGVFeGNlc3NCYWxhbmNlAQUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQphZGRSZXdhcmRzAAMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEPZ292ZXJuYW5jZUFzc2V0AAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECGUludmFsaWQgYWRkUmV3YXJkcyBwYXJhbXMEB19yZXdhcmQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgJAQx1cGRhdGVSZXdhcmQCBQpOT19BRERSRVNTBQlOT19TVEFLRVICXzEECXRpbWVzdGFtcAkBE2N1cnJlbnRUaW1lc3RhbXBTZWMABA1uZXdSZXdhcmRSYXRlAwkAZgIFCXRpbWVzdGFtcAkBDHBlcmlvZEZpbmlzaAAJAGkCBQdfcmV3YXJkBQhEVVJBVElPTgQNcmVtYWluaW5nVGltZQkAZQIJAQxwZXJpb2RGaW5pc2gABQl0aW1lc3RhbXAECGxlZnRvdmVyCQBoAgkBCnJld2FyZFJhdGUABQ1yZW1haW5pbmdUaW1lCQBpAgkAZAIFB19yZXdhcmQFCGxlZnRvdmVyBQhEVVJBVElPTgkAzggCCQDOCAIJAM4IAgkBEHVwZGF0ZVJld2FyZFJhdGUBBQ1uZXdSZXdhcmRSYXRlCQEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBE3VwZGF0ZVJld2FyZEJhbGFuY2UBBQdfcmV3YXJkCQEKdXBkYXRlVGltZQIFCXRpbWVzdGFtcAkAZAIFCXRpbWVzdGFtcAUIRFVSQVRJT04BaQEKYWNrUmV3YXJkcwAECnByb2ZpdFJlc3AJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAILY2xhaW1Qcm9maXQJAMwIAgkBDXZhdWx0QXNzZXRTdHIABQNuaWwFA25pbAMJAAACBQpwcm9maXRSZXNwBQpwcm9maXRSZXNwBAZwcm9maXQEByRtYXRjaDAFCnByb2ZpdFJlc3ADCQABAgUHJG1hdGNoMAIDSW50BAFwBQckbWF0Y2gwCQEPYXNzZXRUb0RlY2ltYWxzAQUBcAkAAgECHEludmFsaWQgY2xhaW1Qcm9maXQgcmVzcG9uc2UEBnJlc3VsdAMJAGYCBQZwcm9maXQAAAQHbmV3UmF0ZQkBDmNvbXB1dGVOZXdSYXRlAQUGcHJvZml0BAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQp2YXVsdEFzc2V0AAkBEWFzc2V0RnJvbURlY2ltYWxzAQUGcHJvZml0BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJARF1cGRhdGVGcmVlQmFsYW5jZQEFBnByb2ZpdAkBCnVwZGF0ZVJhdGUBBQduZXdSYXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUGcmVzdWx0BQZyZXN1bHQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt2aWV3X3Jld2FyZAEHX3N0YWtlcgQHYmFsYW5jZQkBCWJhbGFuY2VPZgEFB19zdGFrZXIED2RlcG9zaXRlZEFtb3VudAkBBG11bGQCCQELYXZlcmFnZVJhdGUBBQdfc3Rha2VyBQdiYWxhbmNlBA1jdXJyZW50QW1vdW50CQEEbXVsZAIJAQRyYXRlAAUHYmFsYW5jZQQLZWFybmVkUXVvdGUJAGUCBQ1jdXJyZW50QW1vdW50BQ9kZXBvc2l0ZWRBbW91bnQJAAIBCQCkAwEFC2Vhcm5lZFF1b3RlAWkBEnZpZXdfc3Rha2luZ1Jld2FyZAEHX3N0YWtlcgQMc3Rha2VyRWFybmVkCAkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAJfMwkAAgEJAKQDAQkBEWFzc2V0RnJvbURlY2ltYWxzAQUMc3Rha2VyRWFybmVkAWkBEnZpZXdfd2l0aGRyYXdMaW1pdAEHX3N0YWtlcgQRd2l0aGRyYXdMaW1pdExlZnQICQEUZ2V0V2l0aGRyYXdMaW1pdExlZnQBBQdfc3Rha2VyAl8yBAxsaW1pdEluQXNzZXQJARFhc3NldEZyb21EZWNpbWFscwEJAQRtdWxkAgURd2l0aGRyYXdMaW1pdExlZnQJAQRyYXRlAAkAAgEJAKQDAQUMbGltaXRJbkFzc2V0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleWZxXM4=", "height": 2592174, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Q8aTwvsuvBCZwaVPcpBpxNRzQVB8Ga495FPtbZjN6o7 Next: J8nzxg7GTPk9bJgsLU4fEaJbhJofYdLkKkpk7jfqxesv Diff:
OldNewDifferences
7171 func I (F) = valueOrElse(getBoolean(G(), D(w, F)), false)
7272
7373
74-func J () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
74+func J () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), B), "Spot address not set")), "Spot address invalid")
7575
7676
77-func K () = fromBase58String(getStringValue(G(), y))
77+func K () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
7878
7979
80-func L () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
80+func L () = fromBase58String(getStringValue(G(), y))
8181
8282
83-func M () = {
84- let N = L()
85- if ((N == "WAVES"))
83+func M () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
84+
85+
86+func N () = {
87+ let O = M()
88+ if ((O == "WAVES"))
8689 then unit
87- else fromBase58String(N)
90+ else fromBase58String(O)
8891 }
8992
9093
91-func O () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
94+func P () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
9295
9396
94-func P () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
97+func Q () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
9598
9699
97-let Q = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
100+let R = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
98101
99-let R = (((7 * 60) * 60) * 24)
102+let S = (((7 * 60) * 60) * 24)
100103
101-let S = ""
104+let T = ""
102105
103-let T = 0
106+let U = 0
104107
105-func U (V) = {
106- let W = O()
107- if ((W == 6))
108- then (V / 100)
109- else if ((W == 8))
110- then V
108+func V (W) = {
109+ let X = P()
110+ if ((X == 6))
111+ then (W / 100)
112+ else if ((X == 8))
113+ then W
111114 else throw("Invalid asset decimals")
112115 }
113116
114117
115-func X (V) = {
116- let W = O()
117- if ((W == 6))
118- then (V * 100)
119- else if ((W == 8))
120- then V
118+func Y (W) = {
119+ let X = P()
120+ if ((X == 6))
121+ then (W * 100)
122+ else if ((X == 8))
123+ then W
121124 else throw("Invalid asset decimals")
122125 }
123126
124127
125-func Y (Z,aa) = fraction(Z, Q, aa, HALFEVEN)
128+func Z (aa,ab) = fraction(aa, R, ab, HALFEVEN)
126129
127130
128-func ab (Z,aa) = fraction(Z, aa, Q, HALFEVEN)
131+func ac (aa,ab) = fraction(aa, ab, R, HALFEVEN)
129132
130133
131-func ac (Z) = if ((Z > 0))
132- then Z
133- else -(Z)
134+func ad (aa) = if ((aa > 0))
135+ then aa
136+ else -(aa)
134137
135138
136-func ad (Z,aa) = if ((Z > aa))
137- then aa
138- else Z
139+func ae (aa,ab) = if ((aa > ab))
140+ then ab
141+ else aa
139142
140143
141-let ae = (86400 * 1000)
144+let af = (86400 * 1000)
142145
143-let af = Y((1 * Q), (4 * Q))
146+let ag = Z((1 * R), (4 * R))
144147
145-func ag (ah) = valueOrErrorMessage(getInteger(this, ah), ("no value for " + ah))
148+func ah (ai) = valueOrErrorMessage(getInteger(this, ai), ("no value for " + ai))
146149
147150
148-func ai (ah) = valueOrElse(getInteger(this, ah), 0)
151+func aj (ai) = valueOrElse(getInteger(this, ai), 0)
149152
150153
151-func aj (ah) = valueOrElse(getInteger(this, ah), Q)
154+func ak (ai) = valueOrElse(getInteger(this, ai), R)
152155
153156
154-func ak () = ai(a)
157+func al () = aj(a)
155158
156159
157-func al () = aj(i)
160+func am () = ak(i)
158161
159162
160-func am (an) = ai(D(p, an))
163+func an (ao) = aj(D(p, ao))
161164
162165
163-func ao (an) = ai(D(q, an))
166+func ap (ao) = aj(D(q, ao))
164167
165168
166-func ap (an) = ai(D(r, an))
169+func aq (ao) = aj(D(r, ao))
167170
168171
169-func aq (an) = ai(D(t, an))
172+func ar (ao) = aj(D(t, ao))
170173
171174
172-func ar (an) = ai(D(s, an))
175+func as (ao) = aj(D(s, ao))
173176
174177
175-func as () = ai(d)
178+func at () = aj(d)
176179
177180
178-func at () = ai(c)
181+func au () = aj(c)
179182
180183
181-func au () = ai(e)
184+func av () = aj(e)
182185
183186
184-func av () = ai(k)
187+func aw () = aj(k)
185188
186189
187-func aw () = ai(j)
190+func ax () = aj(j)
188191
189192
190-func ax () = ai(l)
193+func ay () = aj(l)
191194
192195
193-func ay () = ai(m)
196+func az () = aj(m)
194197
195198
196-func az () = ai(b)
199+func aA () = aj(b)
197200
198201
199-func aA (an) = ai(D(o, an))
202+func aB (ao) = aj(D(o, ao))
200203
201204
202-func aB (an) = ai(D(n, an))
205+func aC (ao) = aj(D(n, ao))
203206
204207
205-func aC () = ai(h)
208+func aD () = aj(h)
206209
207210
208-func aD () = valueOrElse(getBoolean(this, u), false)
211+func aE () = valueOrElse(getBoolean(this, u), false)
209212
210213
211-func aE () = lastBlock.timestamp
214+func aF () = lastBlock.timestamp
212215
213216
214-func aF () = (aE() / 1000)
217+func aG () = (aF() / 1000)
215218
216219
217-func aG (an) = {
218- let aH = aE()
219- let aI = ar(an)
220- let aJ = if (((aH - aI) > ae))
221- then $Tuple3(aH, ap(an), 0)
222- else $Tuple3(aI, (ap(an) - aq(an)), aq(an))
223- let aK = aJ._1
224- let aL = aJ._2
225- let aM = aJ._3
226- $Tuple3(aK, aL, aM)
220+func aH (ao) = {
221+ let aI = aF()
222+ let aJ = as(ao)
223+ let aK = if (((aI - aJ) > af))
224+ then $Tuple3(aI, aq(ao), 0)
225+ else $Tuple3(aJ, (aq(ao) - ar(ao)), ar(ao))
226+ let aL = aK._1
227+ let aM = aK._2
228+ let aN = aK._3
229+ $Tuple3(aL, aM, aN)
227230 }
228231
229232
230-func aN (aO) = {
231- let aP = if ((ak() > 0))
232- then Y((as() + aO), ak())
233- else Q
234- aP
233+func aO (aP) = {
234+ let aQ = if ((al() > 0))
235+ then Z((at() + aP), al())
236+ else R
237+ aQ
235238 }
236239
237240
238-func aQ () = ad(aF(), ay())
241+func aR () = ae(aG(), az())
239242
240243
241-func aR (aS) = if (((ak() + aS) == 0))
242- then av()
244+func aS (aT) = if (((al() + aT) == 0))
245+ then aw()
243246 else {
244- let aT = (aQ() - aw())
245- let aU = if ((0 > aT))
247+ let aU = (aR() - ax())
248+ let aV = if ((0 > aU))
246249 then 0
247- else aT
248- let aV = Y((ax() * aU), (ak() + aS))
249- (av() + aV)
250+ else aU
251+ let aW = Z((ay() * aV), (al() + aT))
252+ (aw() + aW)
250253 }
251254
252255
253-func aW (an,aS) = {
254- let aX = (aR(aS) - aB(an))
255- (ab((am(an) + aS), aX) + aA(an))
256+func aX (ao,aT) = {
257+ let aY = (aS(aT) - aC(ao))
258+ (ac((an(ao) + aT), aY) + aB(ao))
256259 }
257260
258261
259-func aY (an,aS) = {
260- let aZ = aR(aS)
261- let ba = aF()
262- let bb = if ((an != ""))
263- then $Tuple2(aW(an, aS), aZ)
262+func aZ (ao,aT) = {
263+ let ba = aS(aT)
264+ let bb = aG()
265+ let bc = if ((ao != ""))
266+ then $Tuple2(aX(ao, aT), ba)
264267 else $Tuple2(0, 0)
265- let bc = bb._1
266- let bd = bb._2
267- $Tuple4(aZ, ba, bc, bd)
268+ let bd = bc._1
269+ let be = bc._2
270+ $Tuple4(ba, bb, bd, be)
268271 }
269272
270273
271-func be (bf,bg) = if (((am(bf) + bg) >= 0))
272- then [IntegerEntry(D(p, bf), (am(bf) + bg))]
273- else throw(((("Vault: can not update user balance. Balance: " + toString(am(bf))) + " change: ") + toString(bg)))
274+func bf (bg,bh) = if (((an(bg) + bh) >= 0))
275+ then [IntegerEntry(D(p, bg), (an(bg) + bh))]
276+ else throw(((("Vault: can not update user balance. Balance: " + toString(an(bg))) + " change: ") + toString(bh)))
274277
275278
276-func bh (bf,bi) = [IntegerEntry(D(r, bf), bi)]
279+func bi (bg,bj) = [IntegerEntry(D(r, bg), bj)]
277280
278281
279-func bj (bf,bi) = [IntegerEntry(D(q, bf), bi)]
282+func bk (bg,bj) = [IntegerEntry(D(q, bg), bj)]
280283
281284
282-func bk (bg) = {
283- let bl = as()
284- if (((bl + bg) >= 0))
285- then [IntegerEntry(d, (bl + bg))]
286- else throw(((("Vault: can not update free balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
285+func bl (bh) = {
286+ let bm = at()
287+ if (((bm + bh) >= 0))
288+ then [IntegerEntry(d, (bm + bh))]
289+ else throw(((("Vault: can not update free balance. Balance: " + toString(bm)) + " change: ") + toString(bh)))
287290 }
288291
289292
290-func bm (bg) = {
291- let bl = at()
292- if (((bl + bg) >= 0))
293- then [IntegerEntry(c, (bl + bg))]
294- else throw(((("Vault: can not update locked balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
293+func bn (bh) = {
294+ let bm = au()
295+ if (((bm + bh) >= 0))
296+ then [IntegerEntry(c, (bm + bh))]
297+ else throw(((("Vault: can not update locked balance. Balance: " + toString(bm)) + " change: ") + toString(bh)))
295298 }
296299
297300
298-func bn (bg) = {
299- let bo = (au() + bg)
300- let bp = Y(ac(bo), as())
301- if ((aC() > bp))
302- then [IntegerEntry(e, bo)]
303- else throw(((((((("Vault: can not update excess balance. Balance: " + toString(au())) + " change: ") + toString(bg)) + " utilization rate: ") + toString(bp)) + " max utilization rate: ") + toString(aC())))
301+func bo (bh) = {
302+ let bp = (av() + bh)
303+ let bq = Z(ad(bp), at())
304+ if ((aD() > bq))
305+ then [IntegerEntry(e, bp)]
306+ else throw(((((((("Vault: can not update excess balance. Balance: " + toString(av())) + " change: ") + toString(bh)) + " utilization rate: ") + toString(bq)) + " max utilization rate: ") + toString(aD())))
304307 }
305308
306309
307-func bq (bg) = [IntegerEntry(a, (ak() + bg))]
310+func br (bh) = [IntegerEntry(a, (al() + bh))]
308311
309312
310-func br (bi) = [IntegerEntry(i, bi)]
313+func bs (bj) = [IntegerEntry(i, bj)]
311314
312315
313-func bs (bf,bt,bu) = [IntegerEntry(D(s, bf), bt), IntegerEntry(D(t, bf), bu)]
316+func bt (bg,bu,bv) = [IntegerEntry(D(s, bg), bu), IntegerEntry(D(t, bg), bv)]
314317
315318
316-func bv (bw) = [IntegerEntry(b, (az() + bw))]
319+func bw (bx) = [IntegerEntry(b, (aA() + bx))]
317320
318321
319-func bx (by) = [IntegerEntry(l, by)]
322+func by (bz) = [IntegerEntry(l, bz)]
320323
321324
322-func bz (bA,bB) = [IntegerEntry(j, bA), IntegerEntry(m, bB)]
325+func bA (bB,bC) = [IntegerEntry(j, bB), IntegerEntry(m, bC)]
323326
324327
325-func bC (bD) = [IntegerEntry(k, bD)]
328+func bD (bE) = [IntegerEntry(k, bE)]
326329
327330
328-func bE (an,bF,bG) = [IntegerEntry(D(o, an), bF), IntegerEntry(D(n, an), bG)]
331+func bF (ao,bG,bH) = [IntegerEntry(D(o, ao), bG), IntegerEntry(D(n, ao), bH)]
329332
330333
331-@Callable(bH)
332-func migrate () = if ((bH.caller != H()))
334+@Callable(bI)
335+func migrate () = if ((bI.caller != H()))
333336 then throw("Invalid migrate parameters")
334337 else {
335- let bI = toBase58String(K())
336- let W = if ((bI == "WAVES"))
338+ let bJ = toBase58String(L())
339+ let X = if ((bJ == "WAVES"))
337340 then 8
338341 else {
339- let bJ = valueOrErrorMessage(assetInfo(fromBase58String(bI)), ("Invalid token id: " + bI))
340- bJ.decimals
342+ let bK = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
343+ bK.decimals
341344 }
342-[StringEntry(f, bI), IntegerEntry(g, W), IntegerEntry(h, 0)]
345+[StringEntry(f, bJ), IntegerEntry(g, X), IntegerEntry(h, 0)]
343346 }
344347
345348
346349
347-@Callable(bH)
348-func initialize (bK,bI,bL) = if (if (if (if (aD())
350+@Callable(bI)
351+func initialize (bL,bJ,bM) = if (if (if (if (aE())
349352 then true
350- else (bH.caller != this))
353+ else (bI.caller != this))
351354 then true
352- else (0 > bL))
355+ else (0 > bM))
353356 then true
354- else (bL > Q))
357+ else (bM > R))
355358 then throw("Unable to initialize")
356359 else {
357- let W = if ((bI == "WAVES"))
360+ let X = if ((bJ == "WAVES"))
358361 then 8
359362 else {
360- let bJ = valueOrErrorMessage(assetInfo(fromBase58String(bI)), ("Invalid token id: " + bI))
361- bJ.decimals
363+ let bK = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
364+ bK.decimals
362365 }
363-[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bK), "Invalid coordinator address"))), StringEntry(f, bI), IntegerEntry(g, W), IntegerEntry(h, bL), BooleanEntry(u, true)]
366+[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bL), "Invalid coordinator address"))), StringEntry(f, bJ), IntegerEntry(g, X), IntegerEntry(h, bM), BooleanEntry(u, true)]
364367 }
365368
366369
367370
368-@Callable(bH)
371+@Callable(bI)
369372 func stake () = {
370- let an = toString(bH.caller)
371- let V = X(bH.payments[0].amount)
372- if (if (if ((bH.payments[0].assetId != M()))
373+ let ao = toString(bI.caller)
374+ let W = Y(bI.payments[0].amount)
375+ if (if (if ((bI.payments[0].assetId != N()))
373376 then true
374- else (size(bH.payments) != 1))
377+ else (size(bI.payments) != 1))
375378 then true
376- else !(aD()))
379+ else !(aE()))
377380 then throw("Invalid call to stake")
378381 else {
379- let bM = aY(an, 0)
380- let aZ = bM._1
381- let ba = bM._2
382- let bc = bM._3
383- let bd = bM._4
384- let bN = al()
385- let bO = ao(an)
386- let bP = Y(V, bN)
387- let bQ = Y((ab(bP, bN) + ab(am(an), bO)), (bP + am(an)))
388- let bR = (bP + am(an))
389- let bS = ab(bR, af)
390- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
391- if ((bT == bT))
392- then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(V)) ++ be(an, bP)) ++ bj(an, bQ)) ++ bh(an, bS)) ++ bq(bP))
382+ let bN = aZ(ao, 0)
383+ let ba = bN._1
384+ let bb = bN._2
385+ let bd = bN._3
386+ let be = bN._4
387+ let bO = am()
388+ let bP = ap(ao)
389+ let bQ = Z(W, bO)
390+ let bR = Z((ac(bQ, bO) + ac(an(ao), bP)), (bQ + an(ao)))
391+ let bS = (bQ + an(ao))
392+ let bT = ac(bS, ag)
393+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
394+ if ((bU == bU))
395+ then {
396+ let bV = invoke(J(), "notifyVaultBalanceChange", [M(), W], nil)
397+ if ((bV == bV))
398+ then (((((((bF(ao, bd, be) ++ bD(ba)) ++ bA(bb, az())) ++ bl(W)) ++ bf(ao, bQ)) ++ bk(ao, bR)) ++ bi(ao, bT)) ++ br(bQ))
399+ else throw("Strict value is not equal to itself.")
400+ }
393401 else throw("Strict value is not equal to itself.")
394402 }
395403 }
396404
397405
398406
399-@Callable(bH)
400-func unStake (V) = {
401- let an = toString(bH.caller)
402- let bU = X(V)
403- if (if (if ((bH.payments != nil))
407+@Callable(bI)
408+func unStake (W) = {
409+ let ao = toString(bI.caller)
410+ let bW = Y(W)
411+ if (if (if ((bI.payments != nil))
404412 then true
405- else (0 >= bU))
413+ else (0 >= bW))
406414 then true
407- else !(aD()))
415+ else !(aE()))
408416 then throw("Invalid call to unStake")
409417 else {
410- let bV = aY(an, 0)
411- let aZ = bV._1
412- let ba = bV._2
413- let bc = bV._3
414- let bd = bV._4
415- let bW = aG(an)
416- let aK = bW._1
417- let aL = bW._2
418- let aM = bW._3
419- let bP = Y(bU, al())
420- if ((bP > aL))
418+ let bX = aZ(ao, 0)
419+ let ba = bX._1
420+ let bb = bX._2
421+ let bd = bX._3
422+ let be = bX._4
423+ let bY = aH(ao)
424+ let aL = bY._1
425+ let aM = bY._2
426+ let aN = bY._3
427+ let bQ = Z(bW, am())
428+ if ((bQ > aM))
421429 then throw("Invalid call to unStake: withdraw over limit")
422430 else {
423- let bX = (aM + bP)
424- if ((bU > as()))
431+ let bZ = (aN + bQ)
432+ if ((bW > at()))
425433 then throw("Invalid call to unStake: balance too low")
426434 else {
427- let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
428- if ((bY == bY))
429- then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(-(bU))) ++ be(an, -(bP))) ++ bq(-(bP))) ++ bs(an, aK, bX)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
435+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
436+ if ((ca == ca))
437+ then {
438+ let bV = invoke(J(), "notifyVaultBalanceChange", [M(), -(bW)], nil)
439+ if ((bV == bV))
440+ then (((((((bF(ao, bd, be) ++ bD(ba)) ++ bA(bb, az())) ++ bl(-(bW))) ++ bf(ao, -(bQ))) ++ br(-(bQ))) ++ bt(ao, aL, bZ)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
441+ else throw("Strict value is not equal to itself.")
442+ }
430443 else throw("Strict value is not equal to itself.")
431444 }
432445 }
435448
436449
437450
438-@Callable(bH)
451+@Callable(bI)
439452 func withdrawRewards () = {
440- let an = toString(bH.caller)
441- let bZ = aY(an, 0)
442- let aZ = bZ._1
443- let ba = bZ._2
444- let bc = bZ._3
445- let bd = bZ._4
446- if (if ((0 >= bc))
453+ let ao = toString(bI.caller)
454+ let cb = aZ(ao, 0)
455+ let ba = cb._1
456+ let bb = cb._2
457+ let bd = cb._3
458+ let be = cb._4
459+ if (if ((0 >= bd))
447460 then true
448- else !(aD()))
461+ else !(aE()))
449462 then throw("No reward: Vault")
450- else ((((bE(an, 0, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bv(-(bc))) ++ [ScriptTransfer(bH.caller, bc, J())])
463+ else ((((bF(ao, 0, be) ++ bD(ba)) ++ bA(bb, az())) ++ bw(-(bd))) ++ [ScriptTransfer(bI.caller, bd, K())])
451464 }
452465
453466
454467
455-@Callable(bH)
468+@Callable(bI)
456469 func addFree () = {
457- let V = X(bH.payments[0].amount)
458- if (if (if (if ((bH.payments[0].assetId != M()))
470+ let W = Y(bI.payments[0].amount)
471+ if (if (if (if ((bI.payments[0].assetId != N()))
459472 then true
460- else (size(bH.payments) != 1))
473+ else (size(bI.payments) != 1))
461474 then true
462- else !(aD()))
475+ else !(aE()))
463476 then true
464- else !(if (I(toString(bH.caller)))
477+ else !(if (if (I(toString(bI.caller)))
465478 then true
466- else (bH.caller == H())))
479+ else (bI.caller == J()))
480+ then true
481+ else (bI.caller == H())))
467482 then throw("Invalid addFree params")
468483 else {
469- let aP = aN(V)
470- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
471- if ((bT == bT))
472- then (bk(V) ++ br(aP))
484+ let aQ = aO(W)
485+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
486+ if ((bU == bU))
487+ then (bl(W) ++ bs(aQ))
473488 else throw("Strict value is not equal to itself.")
474489 }
475490 }
476491
477492
478493
479-@Callable(bH)
494+@Callable(bI)
480495 func addLocked () = {
481- let V = X(bH.payments[0].amount)
482- if (if (if (if ((bH.payments[0].assetId != M()))
496+ let W = Y(bI.payments[0].amount)
497+ if (if (if (if ((bI.payments[0].assetId != N()))
483498 then true
484- else (size(bH.payments) != 1))
499+ else (size(bI.payments) != 1))
485500 then true
486- else !(aD()))
501+ else !(aE()))
487502 then true
488- else !(if (I(toString(bH.caller)))
503+ else !(if (I(toString(bI.caller)))
489504 then true
490- else (bH.caller == H())))
505+ else (bI.caller == H())))
491506 then throw("Invalid addLocked params")
492507 else {
493- let bY = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
494- if ((bY == bY))
495- then bm(V)
508+ let ca = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
509+ if ((ca == ca))
510+ then bn(W)
496511 else throw("Strict value is not equal to itself.")
497512 }
498513 }
499514
500515
501516
502-@Callable(bH)
503-func exchangeFreeAndLocked (V) = if (if (!(aD()))
517+@Callable(bI)
518+func exchangeFreeAndLocked (W) = if (if (!(aE()))
504519 then true
505- else if (!(I(toString(bH.caller))))
506- then (bH.caller != H())
520+ else if (!(I(toString(bI.caller))))
521+ then (bI.caller != H())
507522 else false)
508523 then throw("Invalid exchangeFreeAndLocked params")
509524 else {
510- let bU = X(V)
511- let aP = aN(-(bU))
512- ((bm(bU) ++ bk(-(bU))) ++ br(aP))
525+ let bW = Y(W)
526+ let aQ = aO(-(bW))
527+ ((bn(bW) ++ bl(-(bW))) ++ bs(aQ))
513528 }
514529
515530
516531
517-@Callable(bH)
518-func withdrawLocked (V) = if (if (if (!(aD()))
532+@Callable(bI)
533+func withdrawLocked (W) = if (if (if (!(aE()))
519534 then true
520- else (0 >= V))
535+ else (0 >= W))
521536 then true
522- else !(I(toString(bH.caller))))
537+ else !(I(toString(bI.caller))))
523538 then throw("Invalid withdrawLocked params")
524539 else {
525- let bU = X(V)
526- let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
527- if ((bY == bY))
528- then (bm(-(bU)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
540+ let bW = Y(W)
541+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
542+ if ((ca == ca))
543+ then (bn(-(bW)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
529544 else throw("Strict value is not equal to itself.")
530545 }
531546
532547
533548
534-@Callable(bH)
535-func addRewards () = if (if (if ((bH.payments[0].assetId != J()))
549+@Callable(bI)
550+func borrow (W) = if (if (if (!(aE()))
536551 then true
537- else (size(bH.payments) != 1))
552+ else (0 >= W))
538553 then true
539- else !(aD()))
540- then throw("Invalid addRewards params")
554+ else !((bI.caller == J())))
555+ then throw("Invalid borrow params")
541556 else {
542- let bF = bH.payments[0].amount
543- let aZ = aY(S, T)._1
544- let ca = aF()
545- let cb = if ((ca > ay()))
546- then (bF / R)
547- else {
548- let cc = (ay() - ca)
549- let cd = (ax() * cc)
550- ((bF + cd) / R)
551- }
552- (((bx(cb) ++ bC(aZ)) ++ bv(bF)) ++ bz(ca, (ca + R)))
557+ let bW = Y(W)
558+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
559+ if ((ca == ca))
560+ then (bo(-(bW)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
561+ else throw("Strict value is not equal to itself.")
553562 }
554563
555564
556565
557-@Callable(bH)
566+@Callable(bI)
567+func repay () = {
568+ let W = Y(bI.payments[0].amount)
569+ if (if (if (if ((bI.payments[0].assetId != N()))
570+ then true
571+ else (size(bI.payments) != 1))
572+ then true
573+ else !(aE()))
574+ then true
575+ else !(if ((bI.caller == J()))
576+ then true
577+ else (bI.caller == H())))
578+ then throw("Invalid repay params")
579+ else {
580+ let ca = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
581+ if ((ca == ca))
582+ then bo(W)
583+ else throw("Strict value is not equal to itself.")
584+ }
585+ }
586+
587+
588+
589+@Callable(bI)
590+func addRewards () = if (if (if ((bI.payments[0].assetId != K()))
591+ then true
592+ else (size(bI.payments) != 1))
593+ then true
594+ else !(aE()))
595+ then throw("Invalid addRewards params")
596+ else {
597+ let bG = bI.payments[0].amount
598+ let ba = aZ(T, U)._1
599+ let cc = aG()
600+ let cd = if ((cc > az()))
601+ then (bG / S)
602+ else {
603+ let ce = (az() - cc)
604+ let cf = (ay() * ce)
605+ ((bG + cf) / S)
606+ }
607+ (((by(cd) ++ bD(ba)) ++ bw(bG)) ++ bA(cc, (cc + S)))
608+ }
609+
610+
611+
612+@Callable(bI)
558613 func ackRewards () = {
559- let ce = invoke(P(), "claimProfit", [L()], nil)
560- if ((ce == ce))
614+ let cg = invoke(Q(), "claimProfit", [M()], nil)
615+ if ((cg == cg))
561616 then {
562- let cf = {
563- let cg = ce
564- if ($isInstanceOf(cg, "Int"))
617+ let ch = {
618+ let ci = cg
619+ if ($isInstanceOf(ci, "Int"))
565620 then {
566- let ch = cg
567- X(ch)
621+ let cj = ci
622+ Y(cj)
568623 }
569624 else throw("Invalid claimProfit response")
570625 }
571- let ci = if ((cf > 0))
626+ let ck = if ((ch > 0))
572627 then {
573- let aP = aN(cf)
574- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(cf))])
575- if ((bT == bT))
576- then (bk(cf) ++ br(aP))
628+ let aQ = aO(ch)
629+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(ch))])
630+ if ((bU == bU))
631+ then (bl(ch) ++ bs(aQ))
577632 else throw("Strict value is not equal to itself.")
578633 }
579634 else nil
580- if ((ci == ci))
581- then ci
635+ if ((ck == ck))
636+ then ck
582637 else throw("Strict value is not equal to itself.")
583638 }
584639 else throw("Strict value is not equal to itself.")
586641
587642
588643
589-@Callable(bH)
590-func view_reward (an) = {
591- let bl = am(an)
592- let cj = ab(ao(an), bl)
593- let ck = ab(al(), bl)
594- let cl = (ck - cj)
595- throw(toString(cl))
644+@Callable(bI)
645+func view_reward (ao) = {
646+ let bm = an(ao)
647+ let cl = ac(ap(ao), bm)
648+ let cm = ac(am(), bm)
649+ let cn = (cm - cl)
650+ throw(toString(cn))
596651 }
597652
598653
599654
600-@Callable(bH)
601-func view_stakingReward (an) = {
602- let bc = aY(an, 0)._3
603- throw(toString(U(bc)))
655+@Callable(bI)
656+func view_stakingReward (ao) = {
657+ let bd = aZ(ao, 0)._3
658+ throw(toString(V(bd)))
604659 }
605660
606661
607662
608-@Callable(bH)
609-func view_withdrawLimit (an) = {
610- let aL = aG(an)._2
611- let cm = U(ab(aL, al()))
612- throw(toString(cm))
663+@Callable(bI)
664+func view_withdrawLimit (ao) = {
665+ let aM = aH(ao)._2
666+ let co = V(ac(aM, am()))
667+ throw(toString(co))
613668 }
614669
615670
616-@Verifier(cn)
617-func co () = {
618- let cp = getString(this, v)
619- if (isDefined(cp))
671+@Verifier(cp)
672+func cq () = {
673+ let cr = getString(this, v)
674+ if (isDefined(cr))
620675 then {
621- let cq = getString(addressFromStringValue(value(cp)), z)
622- if (isDefined(cq))
623- then valueOrElse(getBoolean(addressFromStringValue(value(cq)), ((("status_" + toString(this)) + "_") + toBase58String(cn.id))), false)
676+ let cs = getString(addressFromStringValue(value(cr)), z)
677+ if (isDefined(cs))
678+ then valueOrElse(getBoolean(addressFromStringValue(value(cs)), ((("status_" + toString(this)) + "_") + toBase58String(cp.id))), false)
624679 else throw("unable to verify: admin not set in coordinator")
625680 }
626- else sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
681+ else sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
627682 }
628683
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_totalSupply"
55
66 let b = "k_rewardBalance"
77
88 let c = "k_lockedBalance"
99
1010 let d = "k_freeBalance"
1111
1212 let e = "k_excessBalance"
1313
1414 let f = "k_vaultAsset"
1515
1616 let g = "k_vaultAssetDecimals"
1717
1818 let h = "k_maxSpotUtilization"
1919
2020 let i = "k_rate"
2121
2222 let j = "k_lastUpdateTime"
2323
2424 let k = "k_rewardPerTokenStored"
2525
2626 let l = "k_rewardRate"
2727
2828 let m = "k_periodFinish"
2929
3030 let n = "k_userRewardPerToken"
3131
3232 let o = "k_userReward"
3333
3434 let p = "k_balance"
3535
3636 let q = "k_average_rate"
3737
3838 let r = "k_withdraw_limit"
3939
4040 let s = "k_last_withdraw_date"
4141
4242 let t = "k_withdraw_in_period"
4343
4444 let u = "k_initialized"
4545
4646 let v = "k_coordinatorAddress"
4747
4848 let w = "k_amm"
4949
5050 let x = "k_gov_asset"
5151
5252 let y = "k_quote_asset"
5353
5454 let z = "k_admin_address"
5555
5656 let A = "k_manager_address"
5757
5858 let B = "k_spot_address"
5959
6060 let C = "k_collateral_address"
6161
6262 func D (E,F) = ((E + "_") + F)
6363
6464
6565 func G () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, v), "Coordinator not set")), "Coordinator address invalid")
6666
6767
6868 func H () = addressFromString(valueOrErrorMessage(getString(G(), z), "Admin address not set"))
6969
7070
7171 func I (F) = valueOrElse(getBoolean(G(), D(w, F)), false)
7272
7373
74-func J () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
74+func J () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), B), "Spot address not set")), "Spot address invalid")
7575
7676
77-func K () = fromBase58String(getStringValue(G(), y))
77+func K () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
7878
7979
80-func L () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
80+func L () = fromBase58String(getStringValue(G(), y))
8181
8282
83-func M () = {
84- let N = L()
85- if ((N == "WAVES"))
83+func M () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
84+
85+
86+func N () = {
87+ let O = M()
88+ if ((O == "WAVES"))
8689 then unit
87- else fromBase58String(N)
90+ else fromBase58String(O)
8891 }
8992
9093
91-func O () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
94+func P () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
9295
9396
94-func P () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
97+func Q () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
9598
9699
97-let Q = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
100+let R = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
98101
99-let R = (((7 * 60) * 60) * 24)
102+let S = (((7 * 60) * 60) * 24)
100103
101-let S = ""
104+let T = ""
102105
103-let T = 0
106+let U = 0
104107
105-func U (V) = {
106- let W = O()
107- if ((W == 6))
108- then (V / 100)
109- else if ((W == 8))
110- then V
108+func V (W) = {
109+ let X = P()
110+ if ((X == 6))
111+ then (W / 100)
112+ else if ((X == 8))
113+ then W
111114 else throw("Invalid asset decimals")
112115 }
113116
114117
115-func X (V) = {
116- let W = O()
117- if ((W == 6))
118- then (V * 100)
119- else if ((W == 8))
120- then V
118+func Y (W) = {
119+ let X = P()
120+ if ((X == 6))
121+ then (W * 100)
122+ else if ((X == 8))
123+ then W
121124 else throw("Invalid asset decimals")
122125 }
123126
124127
125-func Y (Z,aa) = fraction(Z, Q, aa, HALFEVEN)
128+func Z (aa,ab) = fraction(aa, R, ab, HALFEVEN)
126129
127130
128-func ab (Z,aa) = fraction(Z, aa, Q, HALFEVEN)
131+func ac (aa,ab) = fraction(aa, ab, R, HALFEVEN)
129132
130133
131-func ac (Z) = if ((Z > 0))
132- then Z
133- else -(Z)
134+func ad (aa) = if ((aa > 0))
135+ then aa
136+ else -(aa)
134137
135138
136-func ad (Z,aa) = if ((Z > aa))
137- then aa
138- else Z
139+func ae (aa,ab) = if ((aa > ab))
140+ then ab
141+ else aa
139142
140143
141-let ae = (86400 * 1000)
144+let af = (86400 * 1000)
142145
143-let af = Y((1 * Q), (4 * Q))
146+let ag = Z((1 * R), (4 * R))
144147
145-func ag (ah) = valueOrErrorMessage(getInteger(this, ah), ("no value for " + ah))
148+func ah (ai) = valueOrErrorMessage(getInteger(this, ai), ("no value for " + ai))
146149
147150
148-func ai (ah) = valueOrElse(getInteger(this, ah), 0)
151+func aj (ai) = valueOrElse(getInteger(this, ai), 0)
149152
150153
151-func aj (ah) = valueOrElse(getInteger(this, ah), Q)
154+func ak (ai) = valueOrElse(getInteger(this, ai), R)
152155
153156
154-func ak () = ai(a)
157+func al () = aj(a)
155158
156159
157-func al () = aj(i)
160+func am () = ak(i)
158161
159162
160-func am (an) = ai(D(p, an))
163+func an (ao) = aj(D(p, ao))
161164
162165
163-func ao (an) = ai(D(q, an))
166+func ap (ao) = aj(D(q, ao))
164167
165168
166-func ap (an) = ai(D(r, an))
169+func aq (ao) = aj(D(r, ao))
167170
168171
169-func aq (an) = ai(D(t, an))
172+func ar (ao) = aj(D(t, ao))
170173
171174
172-func ar (an) = ai(D(s, an))
175+func as (ao) = aj(D(s, ao))
173176
174177
175-func as () = ai(d)
178+func at () = aj(d)
176179
177180
178-func at () = ai(c)
181+func au () = aj(c)
179182
180183
181-func au () = ai(e)
184+func av () = aj(e)
182185
183186
184-func av () = ai(k)
187+func aw () = aj(k)
185188
186189
187-func aw () = ai(j)
190+func ax () = aj(j)
188191
189192
190-func ax () = ai(l)
193+func ay () = aj(l)
191194
192195
193-func ay () = ai(m)
196+func az () = aj(m)
194197
195198
196-func az () = ai(b)
199+func aA () = aj(b)
197200
198201
199-func aA (an) = ai(D(o, an))
202+func aB (ao) = aj(D(o, ao))
200203
201204
202-func aB (an) = ai(D(n, an))
205+func aC (ao) = aj(D(n, ao))
203206
204207
205-func aC () = ai(h)
208+func aD () = aj(h)
206209
207210
208-func aD () = valueOrElse(getBoolean(this, u), false)
211+func aE () = valueOrElse(getBoolean(this, u), false)
209212
210213
211-func aE () = lastBlock.timestamp
214+func aF () = lastBlock.timestamp
212215
213216
214-func aF () = (aE() / 1000)
217+func aG () = (aF() / 1000)
215218
216219
217-func aG (an) = {
218- let aH = aE()
219- let aI = ar(an)
220- let aJ = if (((aH - aI) > ae))
221- then $Tuple3(aH, ap(an), 0)
222- else $Tuple3(aI, (ap(an) - aq(an)), aq(an))
223- let aK = aJ._1
224- let aL = aJ._2
225- let aM = aJ._3
226- $Tuple3(aK, aL, aM)
220+func aH (ao) = {
221+ let aI = aF()
222+ let aJ = as(ao)
223+ let aK = if (((aI - aJ) > af))
224+ then $Tuple3(aI, aq(ao), 0)
225+ else $Tuple3(aJ, (aq(ao) - ar(ao)), ar(ao))
226+ let aL = aK._1
227+ let aM = aK._2
228+ let aN = aK._3
229+ $Tuple3(aL, aM, aN)
227230 }
228231
229232
230-func aN (aO) = {
231- let aP = if ((ak() > 0))
232- then Y((as() + aO), ak())
233- else Q
234- aP
233+func aO (aP) = {
234+ let aQ = if ((al() > 0))
235+ then Z((at() + aP), al())
236+ else R
237+ aQ
235238 }
236239
237240
238-func aQ () = ad(aF(), ay())
241+func aR () = ae(aG(), az())
239242
240243
241-func aR (aS) = if (((ak() + aS) == 0))
242- then av()
244+func aS (aT) = if (((al() + aT) == 0))
245+ then aw()
243246 else {
244- let aT = (aQ() - aw())
245- let aU = if ((0 > aT))
247+ let aU = (aR() - ax())
248+ let aV = if ((0 > aU))
246249 then 0
247- else aT
248- let aV = Y((ax() * aU), (ak() + aS))
249- (av() + aV)
250+ else aU
251+ let aW = Z((ay() * aV), (al() + aT))
252+ (aw() + aW)
250253 }
251254
252255
253-func aW (an,aS) = {
254- let aX = (aR(aS) - aB(an))
255- (ab((am(an) + aS), aX) + aA(an))
256+func aX (ao,aT) = {
257+ let aY = (aS(aT) - aC(ao))
258+ (ac((an(ao) + aT), aY) + aB(ao))
256259 }
257260
258261
259-func aY (an,aS) = {
260- let aZ = aR(aS)
261- let ba = aF()
262- let bb = if ((an != ""))
263- then $Tuple2(aW(an, aS), aZ)
262+func aZ (ao,aT) = {
263+ let ba = aS(aT)
264+ let bb = aG()
265+ let bc = if ((ao != ""))
266+ then $Tuple2(aX(ao, aT), ba)
264267 else $Tuple2(0, 0)
265- let bc = bb._1
266- let bd = bb._2
267- $Tuple4(aZ, ba, bc, bd)
268+ let bd = bc._1
269+ let be = bc._2
270+ $Tuple4(ba, bb, bd, be)
268271 }
269272
270273
271-func be (bf,bg) = if (((am(bf) + bg) >= 0))
272- then [IntegerEntry(D(p, bf), (am(bf) + bg))]
273- else throw(((("Vault: can not update user balance. Balance: " + toString(am(bf))) + " change: ") + toString(bg)))
274+func bf (bg,bh) = if (((an(bg) + bh) >= 0))
275+ then [IntegerEntry(D(p, bg), (an(bg) + bh))]
276+ else throw(((("Vault: can not update user balance. Balance: " + toString(an(bg))) + " change: ") + toString(bh)))
274277
275278
276-func bh (bf,bi) = [IntegerEntry(D(r, bf), bi)]
279+func bi (bg,bj) = [IntegerEntry(D(r, bg), bj)]
277280
278281
279-func bj (bf,bi) = [IntegerEntry(D(q, bf), bi)]
282+func bk (bg,bj) = [IntegerEntry(D(q, bg), bj)]
280283
281284
282-func bk (bg) = {
283- let bl = as()
284- if (((bl + bg) >= 0))
285- then [IntegerEntry(d, (bl + bg))]
286- else throw(((("Vault: can not update free balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
285+func bl (bh) = {
286+ let bm = at()
287+ if (((bm + bh) >= 0))
288+ then [IntegerEntry(d, (bm + bh))]
289+ else throw(((("Vault: can not update free balance. Balance: " + toString(bm)) + " change: ") + toString(bh)))
287290 }
288291
289292
290-func bm (bg) = {
291- let bl = at()
292- if (((bl + bg) >= 0))
293- then [IntegerEntry(c, (bl + bg))]
294- else throw(((("Vault: can not update locked balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
293+func bn (bh) = {
294+ let bm = au()
295+ if (((bm + bh) >= 0))
296+ then [IntegerEntry(c, (bm + bh))]
297+ else throw(((("Vault: can not update locked balance. Balance: " + toString(bm)) + " change: ") + toString(bh)))
295298 }
296299
297300
298-func bn (bg) = {
299- let bo = (au() + bg)
300- let bp = Y(ac(bo), as())
301- if ((aC() > bp))
302- then [IntegerEntry(e, bo)]
303- else throw(((((((("Vault: can not update excess balance. Balance: " + toString(au())) + " change: ") + toString(bg)) + " utilization rate: ") + toString(bp)) + " max utilization rate: ") + toString(aC())))
301+func bo (bh) = {
302+ let bp = (av() + bh)
303+ let bq = Z(ad(bp), at())
304+ if ((aD() > bq))
305+ then [IntegerEntry(e, bp)]
306+ else throw(((((((("Vault: can not update excess balance. Balance: " + toString(av())) + " change: ") + toString(bh)) + " utilization rate: ") + toString(bq)) + " max utilization rate: ") + toString(aD())))
304307 }
305308
306309
307-func bq (bg) = [IntegerEntry(a, (ak() + bg))]
310+func br (bh) = [IntegerEntry(a, (al() + bh))]
308311
309312
310-func br (bi) = [IntegerEntry(i, bi)]
313+func bs (bj) = [IntegerEntry(i, bj)]
311314
312315
313-func bs (bf,bt,bu) = [IntegerEntry(D(s, bf), bt), IntegerEntry(D(t, bf), bu)]
316+func bt (bg,bu,bv) = [IntegerEntry(D(s, bg), bu), IntegerEntry(D(t, bg), bv)]
314317
315318
316-func bv (bw) = [IntegerEntry(b, (az() + bw))]
319+func bw (bx) = [IntegerEntry(b, (aA() + bx))]
317320
318321
319-func bx (by) = [IntegerEntry(l, by)]
322+func by (bz) = [IntegerEntry(l, bz)]
320323
321324
322-func bz (bA,bB) = [IntegerEntry(j, bA), IntegerEntry(m, bB)]
325+func bA (bB,bC) = [IntegerEntry(j, bB), IntegerEntry(m, bC)]
323326
324327
325-func bC (bD) = [IntegerEntry(k, bD)]
328+func bD (bE) = [IntegerEntry(k, bE)]
326329
327330
328-func bE (an,bF,bG) = [IntegerEntry(D(o, an), bF), IntegerEntry(D(n, an), bG)]
331+func bF (ao,bG,bH) = [IntegerEntry(D(o, ao), bG), IntegerEntry(D(n, ao), bH)]
329332
330333
331-@Callable(bH)
332-func migrate () = if ((bH.caller != H()))
334+@Callable(bI)
335+func migrate () = if ((bI.caller != H()))
333336 then throw("Invalid migrate parameters")
334337 else {
335- let bI = toBase58String(K())
336- let W = if ((bI == "WAVES"))
338+ let bJ = toBase58String(L())
339+ let X = if ((bJ == "WAVES"))
337340 then 8
338341 else {
339- let bJ = valueOrErrorMessage(assetInfo(fromBase58String(bI)), ("Invalid token id: " + bI))
340- bJ.decimals
342+ let bK = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
343+ bK.decimals
341344 }
342-[StringEntry(f, bI), IntegerEntry(g, W), IntegerEntry(h, 0)]
345+[StringEntry(f, bJ), IntegerEntry(g, X), IntegerEntry(h, 0)]
343346 }
344347
345348
346349
347-@Callable(bH)
348-func initialize (bK,bI,bL) = if (if (if (if (aD())
350+@Callable(bI)
351+func initialize (bL,bJ,bM) = if (if (if (if (aE())
349352 then true
350- else (bH.caller != this))
353+ else (bI.caller != this))
351354 then true
352- else (0 > bL))
355+ else (0 > bM))
353356 then true
354- else (bL > Q))
357+ else (bM > R))
355358 then throw("Unable to initialize")
356359 else {
357- let W = if ((bI == "WAVES"))
360+ let X = if ((bJ == "WAVES"))
358361 then 8
359362 else {
360- let bJ = valueOrErrorMessage(assetInfo(fromBase58String(bI)), ("Invalid token id: " + bI))
361- bJ.decimals
363+ let bK = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
364+ bK.decimals
362365 }
363-[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bK), "Invalid coordinator address"))), StringEntry(f, bI), IntegerEntry(g, W), IntegerEntry(h, bL), BooleanEntry(u, true)]
366+[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bL), "Invalid coordinator address"))), StringEntry(f, bJ), IntegerEntry(g, X), IntegerEntry(h, bM), BooleanEntry(u, true)]
364367 }
365368
366369
367370
368-@Callable(bH)
371+@Callable(bI)
369372 func stake () = {
370- let an = toString(bH.caller)
371- let V = X(bH.payments[0].amount)
372- if (if (if ((bH.payments[0].assetId != M()))
373+ let ao = toString(bI.caller)
374+ let W = Y(bI.payments[0].amount)
375+ if (if (if ((bI.payments[0].assetId != N()))
373376 then true
374- else (size(bH.payments) != 1))
377+ else (size(bI.payments) != 1))
375378 then true
376- else !(aD()))
379+ else !(aE()))
377380 then throw("Invalid call to stake")
378381 else {
379- let bM = aY(an, 0)
380- let aZ = bM._1
381- let ba = bM._2
382- let bc = bM._3
383- let bd = bM._4
384- let bN = al()
385- let bO = ao(an)
386- let bP = Y(V, bN)
387- let bQ = Y((ab(bP, bN) + ab(am(an), bO)), (bP + am(an)))
388- let bR = (bP + am(an))
389- let bS = ab(bR, af)
390- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
391- if ((bT == bT))
392- then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(V)) ++ be(an, bP)) ++ bj(an, bQ)) ++ bh(an, bS)) ++ bq(bP))
382+ let bN = aZ(ao, 0)
383+ let ba = bN._1
384+ let bb = bN._2
385+ let bd = bN._3
386+ let be = bN._4
387+ let bO = am()
388+ let bP = ap(ao)
389+ let bQ = Z(W, bO)
390+ let bR = Z((ac(bQ, bO) + ac(an(ao), bP)), (bQ + an(ao)))
391+ let bS = (bQ + an(ao))
392+ let bT = ac(bS, ag)
393+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
394+ if ((bU == bU))
395+ then {
396+ let bV = invoke(J(), "notifyVaultBalanceChange", [M(), W], nil)
397+ if ((bV == bV))
398+ then (((((((bF(ao, bd, be) ++ bD(ba)) ++ bA(bb, az())) ++ bl(W)) ++ bf(ao, bQ)) ++ bk(ao, bR)) ++ bi(ao, bT)) ++ br(bQ))
399+ else throw("Strict value is not equal to itself.")
400+ }
393401 else throw("Strict value is not equal to itself.")
394402 }
395403 }
396404
397405
398406
399-@Callable(bH)
400-func unStake (V) = {
401- let an = toString(bH.caller)
402- let bU = X(V)
403- if (if (if ((bH.payments != nil))
407+@Callable(bI)
408+func unStake (W) = {
409+ let ao = toString(bI.caller)
410+ let bW = Y(W)
411+ if (if (if ((bI.payments != nil))
404412 then true
405- else (0 >= bU))
413+ else (0 >= bW))
406414 then true
407- else !(aD()))
415+ else !(aE()))
408416 then throw("Invalid call to unStake")
409417 else {
410- let bV = aY(an, 0)
411- let aZ = bV._1
412- let ba = bV._2
413- let bc = bV._3
414- let bd = bV._4
415- let bW = aG(an)
416- let aK = bW._1
417- let aL = bW._2
418- let aM = bW._3
419- let bP = Y(bU, al())
420- if ((bP > aL))
418+ let bX = aZ(ao, 0)
419+ let ba = bX._1
420+ let bb = bX._2
421+ let bd = bX._3
422+ let be = bX._4
423+ let bY = aH(ao)
424+ let aL = bY._1
425+ let aM = bY._2
426+ let aN = bY._3
427+ let bQ = Z(bW, am())
428+ if ((bQ > aM))
421429 then throw("Invalid call to unStake: withdraw over limit")
422430 else {
423- let bX = (aM + bP)
424- if ((bU > as()))
431+ let bZ = (aN + bQ)
432+ if ((bW > at()))
425433 then throw("Invalid call to unStake: balance too low")
426434 else {
427- let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
428- if ((bY == bY))
429- then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(-(bU))) ++ be(an, -(bP))) ++ bq(-(bP))) ++ bs(an, aK, bX)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
435+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
436+ if ((ca == ca))
437+ then {
438+ let bV = invoke(J(), "notifyVaultBalanceChange", [M(), -(bW)], nil)
439+ if ((bV == bV))
440+ then (((((((bF(ao, bd, be) ++ bD(ba)) ++ bA(bb, az())) ++ bl(-(bW))) ++ bf(ao, -(bQ))) ++ br(-(bQ))) ++ bt(ao, aL, bZ)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
441+ else throw("Strict value is not equal to itself.")
442+ }
430443 else throw("Strict value is not equal to itself.")
431444 }
432445 }
433446 }
434447 }
435448
436449
437450
438-@Callable(bH)
451+@Callable(bI)
439452 func withdrawRewards () = {
440- let an = toString(bH.caller)
441- let bZ = aY(an, 0)
442- let aZ = bZ._1
443- let ba = bZ._2
444- let bc = bZ._3
445- let bd = bZ._4
446- if (if ((0 >= bc))
453+ let ao = toString(bI.caller)
454+ let cb = aZ(ao, 0)
455+ let ba = cb._1
456+ let bb = cb._2
457+ let bd = cb._3
458+ let be = cb._4
459+ if (if ((0 >= bd))
447460 then true
448- else !(aD()))
461+ else !(aE()))
449462 then throw("No reward: Vault")
450- else ((((bE(an, 0, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bv(-(bc))) ++ [ScriptTransfer(bH.caller, bc, J())])
463+ else ((((bF(ao, 0, be) ++ bD(ba)) ++ bA(bb, az())) ++ bw(-(bd))) ++ [ScriptTransfer(bI.caller, bd, K())])
451464 }
452465
453466
454467
455-@Callable(bH)
468+@Callable(bI)
456469 func addFree () = {
457- let V = X(bH.payments[0].amount)
458- if (if (if (if ((bH.payments[0].assetId != M()))
470+ let W = Y(bI.payments[0].amount)
471+ if (if (if (if ((bI.payments[0].assetId != N()))
459472 then true
460- else (size(bH.payments) != 1))
473+ else (size(bI.payments) != 1))
461474 then true
462- else !(aD()))
475+ else !(aE()))
463476 then true
464- else !(if (I(toString(bH.caller)))
477+ else !(if (if (I(toString(bI.caller)))
465478 then true
466- else (bH.caller == H())))
479+ else (bI.caller == J()))
480+ then true
481+ else (bI.caller == H())))
467482 then throw("Invalid addFree params")
468483 else {
469- let aP = aN(V)
470- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
471- if ((bT == bT))
472- then (bk(V) ++ br(aP))
484+ let aQ = aO(W)
485+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
486+ if ((bU == bU))
487+ then (bl(W) ++ bs(aQ))
473488 else throw("Strict value is not equal to itself.")
474489 }
475490 }
476491
477492
478493
479-@Callable(bH)
494+@Callable(bI)
480495 func addLocked () = {
481- let V = X(bH.payments[0].amount)
482- if (if (if (if ((bH.payments[0].assetId != M()))
496+ let W = Y(bI.payments[0].amount)
497+ if (if (if (if ((bI.payments[0].assetId != N()))
483498 then true
484- else (size(bH.payments) != 1))
499+ else (size(bI.payments) != 1))
485500 then true
486- else !(aD()))
501+ else !(aE()))
487502 then true
488- else !(if (I(toString(bH.caller)))
503+ else !(if (I(toString(bI.caller)))
489504 then true
490- else (bH.caller == H())))
505+ else (bI.caller == H())))
491506 then throw("Invalid addLocked params")
492507 else {
493- let bY = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
494- if ((bY == bY))
495- then bm(V)
508+ let ca = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
509+ if ((ca == ca))
510+ then bn(W)
496511 else throw("Strict value is not equal to itself.")
497512 }
498513 }
499514
500515
501516
502-@Callable(bH)
503-func exchangeFreeAndLocked (V) = if (if (!(aD()))
517+@Callable(bI)
518+func exchangeFreeAndLocked (W) = if (if (!(aE()))
504519 then true
505- else if (!(I(toString(bH.caller))))
506- then (bH.caller != H())
520+ else if (!(I(toString(bI.caller))))
521+ then (bI.caller != H())
507522 else false)
508523 then throw("Invalid exchangeFreeAndLocked params")
509524 else {
510- let bU = X(V)
511- let aP = aN(-(bU))
512- ((bm(bU) ++ bk(-(bU))) ++ br(aP))
525+ let bW = Y(W)
526+ let aQ = aO(-(bW))
527+ ((bn(bW) ++ bl(-(bW))) ++ bs(aQ))
513528 }
514529
515530
516531
517-@Callable(bH)
518-func withdrawLocked (V) = if (if (if (!(aD()))
532+@Callable(bI)
533+func withdrawLocked (W) = if (if (if (!(aE()))
519534 then true
520- else (0 >= V))
535+ else (0 >= W))
521536 then true
522- else !(I(toString(bH.caller))))
537+ else !(I(toString(bI.caller))))
523538 then throw("Invalid withdrawLocked params")
524539 else {
525- let bU = X(V)
526- let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
527- if ((bY == bY))
528- then (bm(-(bU)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
540+ let bW = Y(W)
541+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
542+ if ((ca == ca))
543+ then (bn(-(bW)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
529544 else throw("Strict value is not equal to itself.")
530545 }
531546
532547
533548
534-@Callable(bH)
535-func addRewards () = if (if (if ((bH.payments[0].assetId != J()))
549+@Callable(bI)
550+func borrow (W) = if (if (if (!(aE()))
536551 then true
537- else (size(bH.payments) != 1))
552+ else (0 >= W))
538553 then true
539- else !(aD()))
540- then throw("Invalid addRewards params")
554+ else !((bI.caller == J())))
555+ then throw("Invalid borrow params")
541556 else {
542- let bF = bH.payments[0].amount
543- let aZ = aY(S, T)._1
544- let ca = aF()
545- let cb = if ((ca > ay()))
546- then (bF / R)
547- else {
548- let cc = (ay() - ca)
549- let cd = (ax() * cc)
550- ((bF + cd) / R)
551- }
552- (((bx(cb) ++ bC(aZ)) ++ bv(bF)) ++ bz(ca, (ca + R)))
557+ let bW = Y(W)
558+ let ca = invoke(Q(), "withdraw", [M(), V(bW)], nil)
559+ if ((ca == ca))
560+ then (bo(-(bW)) ++ [ScriptTransfer(bI.caller, V(bW), N())])
561+ else throw("Strict value is not equal to itself.")
553562 }
554563
555564
556565
557-@Callable(bH)
566+@Callable(bI)
567+func repay () = {
568+ let W = Y(bI.payments[0].amount)
569+ if (if (if (if ((bI.payments[0].assetId != N()))
570+ then true
571+ else (size(bI.payments) != 1))
572+ then true
573+ else !(aE()))
574+ then true
575+ else !(if ((bI.caller == J()))
576+ then true
577+ else (bI.caller == H())))
578+ then throw("Invalid repay params")
579+ else {
580+ let ca = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(W))])
581+ if ((ca == ca))
582+ then bo(W)
583+ else throw("Strict value is not equal to itself.")
584+ }
585+ }
586+
587+
588+
589+@Callable(bI)
590+func addRewards () = if (if (if ((bI.payments[0].assetId != K()))
591+ then true
592+ else (size(bI.payments) != 1))
593+ then true
594+ else !(aE()))
595+ then throw("Invalid addRewards params")
596+ else {
597+ let bG = bI.payments[0].amount
598+ let ba = aZ(T, U)._1
599+ let cc = aG()
600+ let cd = if ((cc > az()))
601+ then (bG / S)
602+ else {
603+ let ce = (az() - cc)
604+ let cf = (ay() * ce)
605+ ((bG + cf) / S)
606+ }
607+ (((by(cd) ++ bD(ba)) ++ bw(bG)) ++ bA(cc, (cc + S)))
608+ }
609+
610+
611+
612+@Callable(bI)
558613 func ackRewards () = {
559- let ce = invoke(P(), "claimProfit", [L()], nil)
560- if ((ce == ce))
614+ let cg = invoke(Q(), "claimProfit", [M()], nil)
615+ if ((cg == cg))
561616 then {
562- let cf = {
563- let cg = ce
564- if ($isInstanceOf(cg, "Int"))
617+ let ch = {
618+ let ci = cg
619+ if ($isInstanceOf(ci, "Int"))
565620 then {
566- let ch = cg
567- X(ch)
621+ let cj = ci
622+ Y(cj)
568623 }
569624 else throw("Invalid claimProfit response")
570625 }
571- let ci = if ((cf > 0))
626+ let ck = if ((ch > 0))
572627 then {
573- let aP = aN(cf)
574- let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(cf))])
575- if ((bT == bT))
576- then (bk(cf) ++ br(aP))
628+ let aQ = aO(ch)
629+ let bU = invoke(Q(), "deposit", nil, [AttachedPayment(N(), V(ch))])
630+ if ((bU == bU))
631+ then (bl(ch) ++ bs(aQ))
577632 else throw("Strict value is not equal to itself.")
578633 }
579634 else nil
580- if ((ci == ci))
581- then ci
635+ if ((ck == ck))
636+ then ck
582637 else throw("Strict value is not equal to itself.")
583638 }
584639 else throw("Strict value is not equal to itself.")
585640 }
586641
587642
588643
589-@Callable(bH)
590-func view_reward (an) = {
591- let bl = am(an)
592- let cj = ab(ao(an), bl)
593- let ck = ab(al(), bl)
594- let cl = (ck - cj)
595- throw(toString(cl))
644+@Callable(bI)
645+func view_reward (ao) = {
646+ let bm = an(ao)
647+ let cl = ac(ap(ao), bm)
648+ let cm = ac(am(), bm)
649+ let cn = (cm - cl)
650+ throw(toString(cn))
596651 }
597652
598653
599654
600-@Callable(bH)
601-func view_stakingReward (an) = {
602- let bc = aY(an, 0)._3
603- throw(toString(U(bc)))
655+@Callable(bI)
656+func view_stakingReward (ao) = {
657+ let bd = aZ(ao, 0)._3
658+ throw(toString(V(bd)))
604659 }
605660
606661
607662
608-@Callable(bH)
609-func view_withdrawLimit (an) = {
610- let aL = aG(an)._2
611- let cm = U(ab(aL, al()))
612- throw(toString(cm))
663+@Callable(bI)
664+func view_withdrawLimit (ao) = {
665+ let aM = aH(ao)._2
666+ let co = V(ac(aM, am()))
667+ throw(toString(co))
613668 }
614669
615670
616-@Verifier(cn)
617-func co () = {
618- let cp = getString(this, v)
619- if (isDefined(cp))
671+@Verifier(cp)
672+func cq () = {
673+ let cr = getString(this, v)
674+ if (isDefined(cr))
620675 then {
621- let cq = getString(addressFromStringValue(value(cp)), z)
622- if (isDefined(cq))
623- then valueOrElse(getBoolean(addressFromStringValue(value(cq)), ((("status_" + toString(this)) + "_") + toBase58String(cn.id))), false)
676+ let cs = getString(addressFromStringValue(value(cr)), z)
677+ if (isDefined(cs))
678+ then valueOrElse(getBoolean(addressFromStringValue(value(cs)), ((("status_" + toString(this)) + "_") + toBase58String(cp.id))), false)
624679 else throw("unable to verify: admin not set in coordinator")
625680 }
626- else sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
681+ else sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
627682 }
628683

github/deemru/w8io/03bedc9 
192.14 ms