tx · 2Nf3iCgG9ABAJCYB6DfZVcUTgkXfHGfM3BuT8GonDx8a

3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37:  -0.02400000 Waves

2024.06.03 16:58 [3134594] smart account 3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37 > SELF 0.00000000 Waves

{ "type": 13, "id": "2Nf3iCgG9ABAJCYB6DfZVcUTgkXfHGfM3BuT8GonDx8a", "fee": 2400000, "feeAssetId": null, "timestamp": 1717423201584, "version": 2, "chainId": 84, "sender": "3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37", "senderPublicKey": "vmMXxwQAMUAoisvL193ptPiTtaWQqL5YNu2zs1ouTbY", "proofs": [ "2UGrAnm2Z9U5yaam2KPVJVJqRscvjCoSFCBhCDz9kW3BseMT6r7BWMKB4h7PEtdKKueY8KBAep5hAanDvjreXif4" ], "script": "base64:BwI9CAISAwoBCBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGFgACXNlcGFyYXRvcgICX18AB2NoYWluSWQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACGNoYWluSWRXAQFXABBjb250cmFjdEZpbGVuYW1lAhdmdXR1cmVzX2NhbGN1bGF0b3IucmlkZQAFbXVsdDgAgMLXLwAMbXVsdDE4QmlnSW50CQC2AgEAgICQu7rWrfANAA13YXZlc0RlY2ltYWxzAAgADHVzZHREZWNpbWFscwAGAAt3YXZlc1N0cmluZwIFV0FWRVMADXF1ZXVlSXRlbVNpemUAIAAEYmlnMAkAtgIBAAAACWtNdWx0aXNpZwIMJXNfX211bHRpc2lnAQdrU3RhdHVzAgRkYXBwBHR4SWQJALkJAgkAzAgCAgolc19fc3RhdHVzCQDMCAIFBGRhcHAJAMwIAgUEdHhJZAUDbmlsBQlzZXBhcmF0b3IACWtTaHV0ZG93bgIMJXNfX3NodXRkb3duAAtrUHVibGljS2V5cwIOJXNfX3B1YmxpY0tleXMAEWtNYXRjaGVyUHVibGljS2V5AhQlc19fbWF0Y2hlclB1YmxpY0tleQEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFDG11bHQxOEJpZ0ludAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUMbXVsdDE4QmlnSW50AQ92YWxpZGF0ZUFkZHJlc3MBB2FkZHJlc3MJAQlpc0RlZmluZWQBCQCmCAEFB2FkZHJlc3MBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBDmVuc3VyZVBvc2l0aXZlAgF2AXMDCQBnAgUBdgAABQF2CQEIdGhyb3dFcnIBCQCsAgIFAXMCGSB2YWx1ZSBzaG91bGQgYmUgcG9zaXRpdmUBDHBhcnNlQXNzZXRJZAEFaW5wdXQDCQAAAgUFaW5wdXQFC3dhdmVzU3RyaW5nBQR1bml0CQDZBAEFBWlucHV0AQ9hc3NldElkVG9TdHJpbmcBBWlucHV0AwkAAAIFBWlucHV0BQR1bml0BQt3YXZlc1N0cmluZwkA2AQBCQEFdmFsdWUBBQVpbnB1dAESZ2V0QXNzZXRJbmZvT3JGYWlsAQdhc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUHYXNzZXRJZAkBB3dyYXBFcnIBAhJpbnZhbGlkIGFzc2V0IGluZm8BFmdldEFzc2V0RGVjaW1hbHNPckZhaWwBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAUNd2F2ZXNEZWNpbWFscwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAdhc3NldElkBQckbWF0Y2gwCAkBEmdldEFzc2V0SW5mb09yRmFpbAEFB2Fzc2V0SWQIZGVjaW1hbHMJAAIBAgtNYXRjaCBlcnJvcgEFcG93MTABAW4JAGwGAAoAAAUBbgAAAAAFBERPV04BDXBvdzEwRGVjaW1hbHMBB2Fzc2V0SWQJAQVwb3cxMAEJARZnZXRBc3NldERlY2ltYWxzT3JGYWlsAQUHYXNzZXRJZAAPa0ZhY3RvcnlBZGRyZXNzAhIlc19fZmFjdG9yeUFkZHJlc3MAFGZhY3RvcnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMFD2tGYWN0b3J5QWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IADmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECF2ludmFsaWQgZmFjdG9yeSBhZGRyZXNzAAxrVXNkdEFzc2V0SWQCDyVzX191c2R0QXNzZXRJZAARdXNkdEFzc2V0SWRPcHRpb24EByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MFDGtVc2R0QXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAQxwYXJzZUFzc2V0SWQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgALdXNkdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgURdXNkdEFzc2V0SWRPcHRpb24JAQd3cmFwRXJyAQIVaW52YWxpZCB1c2R0IGFzc2V0IGlkAA5rUHJpY2VzQWRkcmVzcwIVJXNfX2NhbGN1bGF0b3JBZGRyZXNzAAhzaHV0ZG93bgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ5mYWN0b3J5QWRkcmVzcwUJa1NodXRkb3duBwELbXVzdEFkZHJlc3MCBmNhbGxlcgdhZGRyZXNzAwkAAAIFBmNhbGxlcgUHYWRkcmVzcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQhtdXN0VGhpcwEGY2FsbGVyCQELbXVzdEFkZHJlc3MCBQZjYWxsZXIFBHRoaXMBC211c3RGYWN0b3J5AQZjYWxsZXIJAQttdXN0QWRkcmVzcwIFBmNhbGxlcgUOZmFjdG9yeUFkZHJlc3MBCW11c3RBZG1pbgEPY2FsbGVyUHVibGljS2V5BAhtdWx0aXNpZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUOZmFjdG9yeUFkZHJlc3MFCWtNdWx0aXNpZwQOcHVibGljS2V5c0xpc3QJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUIbXVsdGlzaWcFC2tQdWJsaWNLZXlzBQlzZXBhcmF0b3IDCQEPY29udGFpbnNFbGVtZW50AgUOcHVibGljS2V5c0xpc3QJANgEAQUPY2FsbGVyUHVibGljS2V5BgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQADmtBY2NvdW50U2NyaXB0AhElc19fYWNjb3VudFNjcmlwdAENYWNjb3VudFNjcmlwdAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRTY3JpcHQJAQd3cmFwRXJyAQIZYWNjb3VudCBzY3JpcHQgaXMgbm90IHNldAANa1Jld2FyZEFtb3VudAIQJXNfX3Jld2FyZEFtb3VudAEMcmV3YXJkQW1vdW50AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzBQ1rUmV3YXJkQW1vdW50CQEHd3JhcEVycgECGHJld2FyZCBhbW91bnQgaXMgbm90IHNldAAOa0FjY291bnRzTGltaXQCESVzX19hY2NvdW50c0xpbWl0ABRhY2NvdW50c0xpbWl0RGVmYXVsdAAUAQ1hY2NvdW50c0xpbWl0AAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRzTGltaXQFFGFjY291bnRzTGltaXREZWZhdWx0AQprRGVwb3NpdGVkAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIJZGVwb3NpdGVkCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQ9kZXBvc2l0ZWRPcHRpb24BDmFjY291bnRBZGRyZXNzCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEKa0RlcG9zaXRlZAEFDmFjY291bnRBZGRyZXNzAQdrQ3JlZGl0Ag5hY2NvdW50QWRkcmVzcwdhc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBmNyZWRpdAkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMY3JlZGl0T3B0aW9uAg5hY2NvdW50QWRkcmVzcwdhc3NldElkCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEHa0NyZWRpdAIFDmFjY291bnRBZGRyZXNzBQdhc3NldElkAQlrTGV2ZXJhZ2UBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghsZXZlcmFnZQkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEQa1JlcXVlc3RMZXZlcmFnZQEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg9yZXF1ZXN0TGV2ZXJhZ2UJAMwIAgkA2AQBBQlyZXF1ZXN0SWQFA25pbAUJc2VwYXJhdG9yARFrU3ludGhldGljQXNzZXRJZAELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICEHN5bnRoZXRpY0Fzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMa0Jhc2VBc3NldElkARBzeW50aGV0aWNBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgtiYXNlQXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUQc3ludGhldGljQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IAFFJFUVVFU1RfU1RBVFVTX0VNUFRZAAAAFFJFUVVFU1RfU1RBVFVTX1JFQURZAAEBDmtSZXF1ZXN0U3RhdHVzAQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICBnN0YXR1cwUDbmlsBQlzZXBhcmF0b3IBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEOYWNjb3VudEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MJAMwIAgIQY3JlYXRvclB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBFmtSZXF1ZXN0T3duZXJQdWJsaWNLZXkBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIOb3duZXJQdWJsaWNLZXkFA25pbAUJc2VwYXJhdG9yARVrUmVxdWVzdEFtb3VudEFzc2V0SWQBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgINYW1vdW50QXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBFGtSZXF1ZXN0UHJpY2VBc3NldElkAQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICDHByaWNlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBHGtSZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIbcmVxdWVzdElkVG9BY2NvdW50UHVibGljS2V5BQNuaWwFCXNlcGFyYXRvcgEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAICGWFjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQFA25pbAUJc2VwYXJhdG9yAQ5rUmVxdWVzdHNRdWV1ZQAJALkJAgkAzAgCAgIlcwkAzAgCAg1yZXF1ZXN0c1F1ZXVlBQNuaWwFCXNlcGFyYXRvcgENcmVxdWVzdHNRdWV1ZQAJAQt2YWx1ZU9yRWxzZQIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJAQ5rUmVxdWVzdHNRdWV1ZQABAAEOa0FjY291bnRzUXVldWUACQC5CQIJAMwIAgICJXMJAMwIAgINYWNjb3VudHNRdWV1ZQUDbmlsBQlzZXBhcmF0b3IBDWFjY291bnRzUXVldWUACQELdmFsdWVPckVsc2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEOa0FjY291bnRzUXVldWUAAQABEGtSZXF1ZXN0c0J5T3duZXIBDG93bmVyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVxdWVzdHMJAMwIAgkApQgBBQxvd25lckFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQ9yZXF1ZXN0c0J5T3duZXIBDG93bmVyQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBEGtSZXF1ZXN0c0J5T3duZXIBBQxvd25lckFkZHJlc3MBAAEMa1BhaXJBbGxvd2VkAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUMcHJpY2VBc3NldElkCQDMCAICC3BhaXJBbGxvd2VkBQNuaWwFCXNlcGFyYXRvcgELcGFpckFsbG93ZWQCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkCQELdmFsdWVPckVsc2UCCQCbCAIFDmZhY3RvcnlBZGRyZXNzCQEMa1BhaXJBbGxvd2VkAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkBwEGa1ByaWNlAQdhc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFB2Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yAQ9nZXRDdXJyZW50UHJpY2UBB2Fzc2V0SWQEEG1hdGNoZXJQdWJsaWNLZXkJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzBRFrTWF0Y2hlclB1YmxpY0tleQkBB3dyYXBFcnIBAhppbnZhbGlkIG1hdGNoZXIgcHVibGljIGtleQQObWF0Y2hlckFkZHJlc3MJAKcIAQUQbWF0Y2hlclB1YmxpY0tleQQFcHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ5tYXRjaGVyQWRkcmVzcwkBBmtQcmljZQEFB2Fzc2V0SWQJAQd3cmFwRXJyAQkArAICAhlpbnZhbGlkIHByaWNlLCBhc3NldElkID0gCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUFcHJpY2UBD2NhbGNUb3RhbENyZWRpdAMHY3JlZGl0QQdjcmVkaXRCDGN1cnJlbnRQcmljZQkAtwICCQC8AgMFB2NyZWRpdEEFDGN1cnJlbnRQcmljZQUMbXVsdDE4QmlnSW50BQdjcmVkaXRCARBjYWxjVG90YWxCYWxhbmNlAwhiYWxhbmNlQQhiYWxhbmNlQgxjdXJyZW50UHJpY2UJALcCAgkAvAIDBQhiYWxhbmNlQQUMY3VycmVudFByaWNlBQxtdWx0MThCaWdJbnQFCGJhbGFuY2VCAQdjYWxjUG5sAgx0b3RhbEJhbGFuY2ULdG90YWxDcmVkaXQJALgCAgUMdG90YWxCYWxhbmNlBQt0b3RhbENyZWRpdAETY2FsY0NyZWRpdEF2YWlsYWJsZQMHZGVwb3NpdAhsZXZlcmFnZQt0b3RhbENyZWRpdAkAuAICCQC8AgMFB2RlcG9zaXQFCGxldmVyYWdlBQxtdWx0MThCaWdJbnQFC3RvdGFsQ3JlZGl0ARBjYWxjUmVhbEluQ3JlZGl0AgZjcmVkaXQHYmFsYW5jZQMJAL8CAgUGY3JlZGl0BQRiaWcwCQC4AgIFBmNyZWRpdAUHYmFsYW5jZQUEYmlnMAEIY2FsY0ZyZWUCBmNyZWRpdAdiYWxhbmNlAwkAvwICBQZjcmVkaXQFBGJpZzAJALgCAgUHYmFsYW5jZQUGY3JlZGl0BQRiaWcwAQ5jYWxjU2hvcnRQcmljZQIEZnJlZQxyZWFsSW5DcmVkaXQDCQC/AgIFDHJlYWxJbkNyZWRpdAUEYmlnMAkAmAMBCQDMCAIFBGJpZzAJAMwIAgkAvAIDBQRmcmVlBQxtdWx0MThCaWdJbnQFDHJlYWxJbkNyZWRpdAUDbmlsBQRiaWcwAQ1jYWxjTG9uZ1ByaWNlAgRmcmVlDHJlYWxJbkNyZWRpdAMJAL8CAgUMcmVhbEluQ3JlZGl0BQRiaWcwCQCYAwEJAMwIAgUEYmlnMAkAzAgCCQC8AgMFDHJlYWxJbkNyZWRpdAUMbXVsdDE4QmlnSW50BQRmcmVlBQNuaWwFBGJpZzABD2NhbGNTdGFydE1hcmdpbgQNcmVhbEluQ3JlZGl0QQ1yZWFsSW5DcmVkaXRCDGN1cnJlbnRQcmljZQ5zZXR0aW5nc01hcmdpbgkAvAIDCQC3AgIJALwCAwUNcmVhbEluQ3JlZGl0QQUMY3VycmVudFByaWNlBQxtdWx0MThCaWdJbnQFDXJlYWxJbkNyZWRpdEIFDnNldHRpbmdzTWFyZ2luBQxtdWx0MThCaWdJbnQBEGNhbGNNYXJnaW5TdXBwbHkDFHNldHRpbmdzTWFyZ2luU3VwcGx5DnNldHRpbmdzTWFyZ2luC3N0YXJ0TWFyZ2luCQC8AgMFFHNldHRpbmdzTWFyZ2luU3VwcGx5BQtzdGFydE1hcmdpbgUOc2V0dGluZ3NNYXJnaW4BFGNhbGNMaXF1aWRhdGlvblByaWNlBgdkZXBvc2l0DG1hcmdpblN1cHBseQ1yZWFsSW5DcmVkaXRBDXJlYWxJbkNyZWRpdEIKc2hvcnRQcmljZQlsb25nUHJpY2UEEWxpcXVpZGF0aW9uUHJpY2VBAwkAvwICBQ1yZWFsSW5DcmVkaXRBBQRiaWcwCQC3AgIJALoCAgkAuAICBQdkZXBvc2l0BQxtYXJnaW5TdXBwbHkFDXJlYWxJbkNyZWRpdEEFCnNob3J0UHJpY2UFBGJpZzAEEWxpcXVpZGF0aW9uUHJpY2VCAwkAvwICBQ1yZWFsSW5DcmVkaXRCBQRiaWcwCQC4AgIFCWxvbmdQcmljZQkAugICCQC4AgIFB2RlcG9zaXQFDG1hcmdpblN1cHBseQkAugICBQ1yZWFsSW5DcmVkaXRBBQlsb25nUHJpY2UFBGJpZzAJALcCAgURbGlxdWlkYXRpb25QcmljZUEFEWxpcXVpZGF0aW9uUHJpY2VCAQxnZXRSZXF1ZXN0SWQBDmFjY291bnRBZGRyZXNzBAlyZXF1ZXN0SWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkBB3dyYXBFcnIBAjBpbnZhbGlkIGFjY291bnQgYWRkcmVzczogcmVxdWVzdCBpZCBpcyB1bmRlZmluZWQFCXJlcXVlc3RJZAEQZ2V0QWNjb3VudEFzc2V0cwEOYWNjb3VudEFkZHJlc3MECXJlcXVlc3RJZAkBDGdldFJlcXVlc3RJZAEFDmFjY291bnRBZGRyZXNzBA1hbW91bnRBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEVa1JlcXVlc3RBbW91bnRBc3NldElkAQUJcmVxdWVzdElkCQEHd3JhcEVycgECF2ludmFsaWQgYW1vdW50IGFzc2V0IGlkBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARRrUmVxdWVzdFByaWNlQXNzZXRJZAEFCXJlcXVlc3RJZAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFtb3VudCBwcmljZSBpZAkAlAoCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQBGGdldEFjY291bnRPd25lclB1YmxpY0tleQEOYWNjb3VudEFkZHJlc3MECXJlcXVlc3RJZAkBDGdldFJlcXVlc3RJZAEFDmFjY291bnRBZGRyZXNzBBVyZXF1ZXN0T3duZXJQdWJsaWNLZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBFmtSZXF1ZXN0T3duZXJQdWJsaWNLZXkBBQlyZXF1ZXN0SWQJAQd3cmFwRXJyAQIXaW52YWxpZCBhbW91bnQgYXNzZXQgaWQFFXJlcXVlc3RPd25lclB1YmxpY0tleQoBaQEEaW5pdAERZmFjdG9yeUFkZHJlc3NTdHIEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBCAUBaQZjYWxsZXIDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa0ZhY3RvcnlBZGRyZXNzBRFmYWN0b3J5QWRkcmVzc1N0cgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDnJlcXVlc3RBY2NvdW50Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEEGFtb3VudEFzc2V0SWRTdHIJAJEDAgUEYXJncwAABA9wcmljZUFzc2V0SWRTdHIJAJEDAgUEYXJncwABBAhsZXZlcmFnZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEYXJncwACCQEHd3JhcEVycgECEGludmFsaWQgbGV2ZXJhZ2UEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQJcmVxdWVzdElkCQD3AwEJAMsBAgkAywECCAULdXNlckFkZHJlc3MFYnl0ZXMJANkEAQUQYW1vdW50QXNzZXRJZFN0cgkA2QQBBQ9wcmljZUFzc2V0SWRTdHIEDWFtb3VudEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBRBhbW91bnRBc3NldElkU3RyBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ9wcmljZUFzc2V0SWRTdHIEEnVzZXJSZXF1ZXN0c051bWJlcgkAaQIJALECAQkBEGtSZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwUNcXVldWVJdGVtU2l6ZQQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIVMSBwYXltZW50IGlzIHJlcXVpcmVkCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BgkBCHRocm93RXJyAQINaW52YWxpZCBhc3NldAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQEMcmV3YXJkQW1vdW50AAYJAQh0aHJvd0VycgECDmludmFsaWQgYW1vdW50CQDMCAIDCQELcGFpckFsbG93ZWQCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQGCQEIdGhyb3dFcnIBAhNwYWlyIGlzIG5vdCBhbGxvd2VkCQDMCAIDCQAAAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkBQR1bml0BgkBCHRocm93RXJyAQIZYWNjb3VudCBpcyBhbHJlYWR5IGV4aXN0cwkAzAgCAwkAZgIJAQ1hY2NvdW50c0xpbWl0AAUSdXNlclJlcXVlc3RzTnVtYmVyBgkBCHRocm93RXJyAQkArAICAhJhY2NvdW50cyBsaW1pdCBpcyAJAKQDAQkBDWFjY291bnRzTGltaXQABQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDSR0MDExNzI4MTMyNjIDCQAAAgkAyAEBCQENYWNjb3VudHNRdWV1ZQAAAAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDmZhY3RvcnlBZGRyZXNzCQEMcmV3YXJkQW1vdW50AAUEdW5pdAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEOa1JlcXVlc3RTdGF0dXMBBQlyZXF1ZXN0SWQJAMwIAgUUUkVRVUVTVF9TVEFUVVNfRU1QVFkFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJAQ5rUmVxdWVzdHNRdWV1ZQAJAMwIAgkAywECCQENcmVxdWVzdHNRdWV1ZQAFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJARBrUmVxdWVzdExldmVyYWdlAQUJcmVxdWVzdElkCQDMCAIFCGxldmVyYWdlBQNuaWwFA25pbAUDbmlsBBBhY2NvdW50UHVibGljS2V5CQDJAQIJAQ1hY2NvdW50c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQQOYWNjb3VudEFkZHJlc3MJAKcIAQUQYWNjb3VudFB1YmxpY0tleQQOY3JlYXRvckFkZHJlc3MJAKcIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIaaW52YWxpZCBjcmVhdG9yIHB1YmxpYyBrZXkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5jcmVhdG9yQWRkcmVzcwkBDHJld2FyZEFtb3VudAAFBHVuaXQFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa0FjY291bnRzUXVldWUACQDMCAIJAMoBAgkBDWFjY291bnRzUXVldWUABQ1xdWV1ZUl0ZW1TaXplBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkCQDMCAIFFFJFUVVFU1RfU1RBVFVTX1JFQURZBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQlrTGV2ZXJhZ2UBBQ5hY2NvdW50QWRkcmVzcwkAzAgCBQhsZXZlcmFnZQUDbmlsBQNuaWwFA25pbAQHYWN0aW9ucwgFDSR0MDExNzI4MTMyNjICXzEEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMTE3MjgxMzI2MgJfMgkAlAoCBQdhY3Rpb25zCQDOCAIFDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJARZrUmVxdWVzdE93bmVyUHVibGljS2V5AQUJcmVxdWVzdElkCQDMCAIFD2NhbGxlclB1YmxpY0tleQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBEGtSZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwkAzAgCCQDLAQIJAQ9yZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwUJcmVxdWVzdElkBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEVa1JlcXVlc3RBbW91bnRBc3NldElkAQUJcmVxdWVzdElkCQDMCAIFEGFtb3VudEFzc2V0SWRTdHIFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJARRrUmVxdWVzdFByaWNlQXNzZXRJZAEFCXJlcXVlc3RJZAkAzAgCBQ9wcmljZUFzc2V0SWRTdHIFA25pbAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKYWRkQWNjb3VudAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBBBjcmVhdG9yUHVibGljS2V5CQDZBAEJAJEDAgUEYXJncwAABBBhY2NvdW50UHVibGljS2V5BQ9jYWxsZXJQdWJsaWNLZXkEDmFjY291bnRBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQOY3JlYXRvckFkZHJlc3MJAKcIAQUQY3JlYXRvclB1YmxpY0tleQQGY2hlY2tzCQDMCAIDCQAAAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEFDmFjY291bnRBZGRyZXNzBQR1bml0BgkBCHRocm93RXJyAQIZYWNjb3VudCBpcyBhbHJlYWR5IGV4aXN0cwkAzAgCAwQHJG1hdGNoMAkA8QcBBQ5hY2NvdW50QWRkcmVzcwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQAAAgUBYgkA8RUBCQENYWNjb3VudFNjcmlwdAAHBgkBCHRocm93RXJyAQIOaW52YWxpZCBzY3JpcHQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTQ1MTcxNTc1OQMJAAACCQDIAQEJAQ1yZXF1ZXN0c1F1ZXVlAAAACQCUCgIFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa0FjY291bnRzUXVldWUACQDMCAIJAMsBAgkBDWFjY291bnRzUXVldWUABRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAUDbmlsBAlyZXF1ZXN0SWQJAMkBAgkBDXJlcXVlc3RzUXVldWUABQ1xdWV1ZUl0ZW1TaXplBAhsZXZlcmFnZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEQa1JlcXVlc3RMZXZlcmFnZQEFCXJlcXVlc3RJZAkBB3dyYXBFcnIBAh9yZXF1ZXN0J3MgbGV2ZXJhZ2UgaXMgdW5kZWZpbmVkCQCUCgIFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkCQDMCAIFFFJFUVVFU1RfU1RBVFVTX1JFQURZBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa1JlcXVlc3RzUXVldWUACQDMCAIJAMoBAgkBDXJlcXVlc3RzUXVldWUABQ1xdWV1ZUl0ZW1TaXplBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwINdHJhbnNmZXJXYXZlcwkAzAgCCAUOY3JlYXRvckFkZHJlc3MFYnl0ZXMJAMwIAgkBDHJld2FyZEFtb3VudAAFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEJa0xldmVyYWdlAQUOYWNjb3VudEFkZHJlc3MJAMwIAgUIbGV2ZXJhZ2UFA25pbAUDbmlsBQNuaWwEB2FjdGlvbnMIBQ0kdDAxNDUxNzE1NzU5Al8xBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDE0NTE3MTU3NTkCXzIJAJQKAgUHYWN0aW9ucwkAzggCBQ5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MJAMwIAgUQY3JlYXRvclB1YmxpY0tleQUDbmlsBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdkZXBvc2l0Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQHcGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwAABA5hY2NvdW50QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUEYXJncwAACQEHd3JhcEVycgECF2ludmFsaWQgYWNjb3VudCBhZGRyZXNzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAhUxIHBheW1lbnQgaXMgcmVxdWlyZWQJAMwIAgMJAAACCAUHcGF5bWVudAdhc3NldElkBQt1c2R0QXNzZXRJZAYJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQJAMwIAgMJAAACCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEOa1JlcXVlc3RTdGF0dXMBCQEMZ2V0UmVxdWVzdElkAQUOYWNjb3VudEFkZHJlc3MFFFJFUVVFU1RfU1RBVFVTX1JFQURZBgkBCHRocm93RXJyAQIUYWNjb3VudCBpcyBub3QgcmVhZHkFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQHYWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5hY2NvdW50QWRkcmVzcwgFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQNuaWwEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEKa0RlcG9zaXRlZAEFDmFjY291bnRBZGRyZXNzCQDMCAIJAGQCCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAgFB3BheW1lbnQGYW1vdW50BQNuaWwFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQOYWNjb3VudEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFBGFyZ3MAAAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFjY291bnQgYWRkcmVzcwQGYW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQRhcmdzAAEJAQd3cmFwRXJyAQIOaW52YWxpZCBhbW91bnQEB2Fzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFBGFyZ3MAAgQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5hY2NvdW50QWRkcmVzcwINdHJhbnNmZXJBc3NldAkAzAgCCAULdXNlckFkZHJlc3MFYnl0ZXMJAMwIAgUGYW1vdW50CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCD2NhbGxlclB1YmxpY0tleQRhcmdzBA5hY2NvdW50QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUEYXJncwAACQEHd3JhcEVycgECF2ludmFsaWQgYWNjb3VudCBhZGRyZXNzBBBhc3NldElkUmVxdWVzdGVkCQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAEED2Ftb3VudFJlcXVlc3RlZAkBDmVuc3VyZVBvc2l0aXZlAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEYXJncwACCQEHd3JhcEVycgECGGludmFsaWQgcmVxdWVzdGVkIGFtb3VudAIQcmVxdWVzdGVkIGFtb3VudAQVYWNjb3VudE93bmVyUHVibGljS2V5CQEYZ2V0QWNjb3VudE93bmVyUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIDCQAAAgUPY2FsbGVyUHVibGljS2V5BRVhY2NvdW50T3duZXJQdWJsaWNLZXkGCQEIdGhyb3dFcnIBAiNjYW4gYmUgY2FsbGVkIGJ5IGFjY291bnQgb3duZXIgb25seQUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBA1hbW91bnRBc3NldElkCAkBEGdldEFjY291bnRBc3NldHMBBQ5hY2NvdW50QWRkcmVzcwJfMQQJZGVwb3NpdGVkCQEFdG9YMTgCCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAkBDXBvdzEwRGVjaW1hbHMBBQt1c2R0QXNzZXRJZAQMY3VycmVudFByaWNlCQEFdG9YMTgCCQEPZ2V0Q3VycmVudFByaWNlAQUNYW1vdW50QXNzZXRJZAkBDXBvdzEwRGVjaW1hbHMBBQt1c2R0QXNzZXRJZAQHY3JlZGl0QQkBBXRvWDE4AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBB2tDcmVkaXQCBQ5hY2NvdW50QWRkcmVzcwUNYW1vdW50QXNzZXRJZAAACQENcG93MTBEZWNpbWFscwEFDWFtb3VudEFzc2V0SWQEB2NyZWRpdEIJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQdrQ3JlZGl0AgUOYWNjb3VudEFkZHJlc3MFC3VzZHRBc3NldElkAAAJAQ1wb3cxMERlY2ltYWxzAQULdXNkdEFzc2V0SWQEC3RvdGFsQ3JlZGl0CQEPY2FsY1RvdGFsQ3JlZGl0AwUHY3JlZGl0QQUHY3JlZGl0QgUMY3VycmVudFByaWNlBAhsZXZlcmFnZQkBBXRvWDE4AgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEJa0xldmVyYWdlAQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIabGV2ZXJhZ2Ugc2hvdWxkIGJlIGRlZmluZWQAAQQTY3JlZGl0QXZhaWxhYmxlVXNkdAkBE2NhbGNDcmVkaXRBdmFpbGFibGUDBQlkZXBvc2l0ZWQFCGxldmVyYWdlBQt0b3RhbENyZWRpdAQPY3JlZGl0QXZhaWxhYmxlAwkAAAIFEGFzc2V0SWRSZXF1ZXN0ZWQFDWFtb3VudEFzc2V0SWQJAQdmcm9tWDE4AgkAvAIDBRNjcmVkaXRBdmFpbGFibGVVc2R0BQxtdWx0MThCaWdJbnQFDGN1cnJlbnRQcmljZQkBDXBvdzEwRGVjaW1hbHMBBQ1hbW91bnRBc3NldElkAwkAAAIFEGFzc2V0SWRSZXF1ZXN0ZWQFC3VzZHRBc3NldElkCQEHZnJvbVgxOAIFE2NyZWRpdEF2YWlsYWJsZVVzZHQJAQ1wb3cxMERlY2ltYWxzAQULdXNkdEFzc2V0SWQJAQh0aHJvd0VycgECGmludmFsaWQgcmVxdWVzdGVkIGFzc2V0IGlkBBBzeW50aGV0aWNBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQERa1N5bnRoZXRpY0Fzc2V0SWQBBRBhc3NldElkUmVxdWVzdGVkCQEHd3JhcEVycgECMHN5bnRoZXRpYyBhc3NldCBmb3IgcmVxdWVzdGVkIGFzc2V0IGlzIHVuZGVmaW5lZAQMYW1vdW50VG9TZW5kAwkAZwIFD2NyZWRpdEF2YWlsYWJsZQUPYW1vdW50UmVxdWVzdGVkBQ9hbW91bnRSZXF1ZXN0ZWQJAQh0aHJvd0VycgEJAKwCAgITY3JlZGl0IGF2YWlsYWJsZSA9IAkApAMBBQ9jcmVkaXRBdmFpbGFibGUEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEHa0NyZWRpdAIFDmFjY291bnRBZGRyZXNzBRBhc3NldElkUmVxdWVzdGVkCQDMCAIJAGQCCQELdmFsdWVPckVsc2UCCQEMY3JlZGl0T3B0aW9uAgUOYWNjb3VudEFkZHJlc3MFEGFzc2V0SWRSZXF1ZXN0ZWQAAAUMYW1vdW50VG9TZW5kBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAg10cmFuc2ZlckFzc2V0CQDMCAIIBQt1c2VyQWRkcmVzcwVieXRlcwkAzAgCBQxhbW91bnRUb1NlbmQJAMwIAgUQc3ludGhldGljQXNzZXRJZAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwJAMwIAgUOZmFjdG9yeUFjdGlvbnMJAMwIAgUPY3JlZGl0QXZhaWxhYmxlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQc2V0UGFpckFsbG93YW5jZQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCCQEJbXVzdEFkbWluAQUPY2FsbGVyUHVibGljS2V5BQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEEGFtb3VudEFzc2V0SWRTdHIJAJEDAgUEYXJncwAABA9wcmljZUFzc2V0SWRTdHIJAJEDAgUEYXJncwABBAhhbGxvd1N0cgkAkQMCBQRhcmdzAAIEDWFtb3VudEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBRBhbW91bnRBc3NldElkU3RyBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ9wcmljZUFzc2V0SWRTdHIEBWFsbG93CQAAAgUIYWxsb3dTdHICBHRydWUEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGJvb2xlYW5FbnRyeQkAzAgCCQEMa1BhaXJBbGxvd2VkAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkCQDMCAIFBWFsbG93BQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAULaW52b2NhdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERYWRkU3ludGhldGljQXNzZXQCD2NhbGxlclB1YmxpY0tleQRhcmdzBAtiYXNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJAJEDAgUEYXJncwAABBBzeW50aGV0aWNBc3NldElkCQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAEEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCCQEJbXVzdEFkbWluAQUPY2FsbGVyUHVibGljS2V5CQDMCAIDCQAAAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBEWtTeW50aGV0aWNBc3NldElkAQULYmFzZUFzc2V0SWQFBHVuaXQGCQEIdGhyb3dFcnIBAhJpbnZhbGlkIGJhc2UgYXNzZXQJAMwIAgMJAAACCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEMa0Jhc2VBc3NldElkAQUQc3ludGhldGljQXNzZXRJZAUEdW5pdAYJAQh0aHJvd0VycgECF2ludmFsaWQgc3ludGhldGljIGFzc2V0BQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJARFrU3ludGhldGljQXNzZXRJZAEFC2Jhc2VBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBRBzeW50aGV0aWNBc3NldElkBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEMa0Jhc2VBc3NldElkAQUQc3ludGhldGljQXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpkb1NodXRkb3duAg9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2hlY2tzCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCCQEJbXVzdEFkbWluAQUPY2FsbGVyUHVibGljS2V5BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGJvb2xlYW5FbnRyeQkAzAgCBQlrU2h1dGRvd24JAMwIAgYFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQADAwkBCWlzRGVmaW5lZAEFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEJaXNEZWZpbmVkAQkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnBwQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAECXN0YXR1c0tleQkBB2tTdGF0dXMCCQClCAEFBHRoaXMJANgEAQgFAnR4AmlkBAZzdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcFCXN0YXR1c0tleQcFBnN0YXR1cwcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXk2zLnq", "height": 3134594, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3gheT5Mo9ByFriByEeXCzrD3Z8nQsPWFkoMM6fbbbydC Next: FSXVFXuy72n2upcR5xhsLwmz2rWuNHZwNqY83WBRsLLa Diff:
OldNewDifferences
174174 func ar (an) = makeString(["%s%s", "leverage", toString(an)], a)
175175
176176
177-func as (at) = makeString(["%s%s", "syntheticAssetId", H(at)], a)
177+func as (at) = makeString(["%s%s", "requestLeverage", toBase58String(at)], a)
178178
179179
180-func au (av) = makeString(["%s%s", "baseAssetId", H(av)], a)
180+func au (av) = makeString(["%s%s", "syntheticAssetId", H(av)], a)
181181
182182
183-let aw = 0
184-
185-let ax = 1
186-
187-func ay (az) = makeString(["%s%s", toBase58String(az), "status"], a)
183+func aw (ax) = makeString(["%s%s", "baseAssetId", H(ax)], a)
188184
189185
190-func aA (an) = makeString(["%s%s", toString(an), "creatorPublicKey"], a)
186+let ay = 0
187+
188+let az = 1
189+
190+func aA (at) = makeString(["%s%s", toBase58String(at), "status"], a)
191191
192192
193-func aB (az) = makeString(["%s%s", toBase58String(az), "ownerPublicKey"], a)
193+func aB (an) = makeString(["%s%s", toString(an), "creatorPublicKey"], a)
194194
195195
196-func aC (az) = makeString(["%s%s", toBase58String(az), "amountAssetId"], a)
196+func aC (at) = makeString(["%s%s", toBase58String(at), "ownerPublicKey"], a)
197197
198198
199-func aD (az) = makeString(["%s%s", toBase58String(az), "priceAssetId"], a)
199+func aD (at) = makeString(["%s%s", toBase58String(at), "amountAssetId"], a)
200200
201201
202-func aE (az) = makeString(["%s%s", toBase58String(az), "requestIdToAccountPublicKey"], a)
202+func aE (at) = makeString(["%s%s", toBase58String(at), "priceAssetId"], a)
203203
204204
205-func aF (an) = makeString(["%s%s", toString(an), "accountAddressToRequestId"], a)
205+func aF (at) = makeString(["%s%s", toBase58String(at), "requestIdToAccountPublicKey"], a)
206206
207207
208-func aG () = makeString(["%s", "requestsQueue"], a)
208+func aG (an) = makeString(["%s%s", toString(an), "accountAddressToRequestId"], a)
209209
210210
211-func aH () = valueOrElse(getBinary(R, aG()), base58'')
211+func aH () = makeString(["%s", "requestsQueue"], a)
212212
213213
214-func aI () = makeString(["%s", "accountsQueue"], a)
214+func aI () = valueOrElse(getBinary(R, aH()), base58'')
215215
216216
217-func aJ () = valueOrElse(getBinary(R, aI()), base58'')
217+func aJ () = makeString(["%s", "accountsQueue"], a)
218218
219219
220-func aK (aL) = makeString(["%s%s", "requests", toString(aL)], a)
220+func aK () = valueOrElse(getBinary(R, aJ()), base58'')
221221
222222
223-func aM (aL) = valueOrElse(getBinary(R, aK(aL)), base58'')
223+func aL (aM) = makeString(["%s%s", "requests", toString(aM)], a)
224224
225225
226-func aN (aO,aP) = makeString(["%s%s%s", H(aO), H(aP), "pairAllowed"], a)
226+func aN (aM) = valueOrElse(getBinary(R, aL(aM)), base58'')
227227
228228
229-func aQ (aO,aP) = valueOrElse(getBoolean(R, aN(aO, aP)), false)
229+func aO (aP,aQ) = makeString(["%s%s%s", H(aP), H(aQ), "pairAllowed"], a)
230230
231231
232-func aR (J) = makeString(["%s", H(J)], a)
232+func aR (aP,aQ) = valueOrElse(getBoolean(R, aO(aP, aQ)), false)
233233
234234
235-func aS (J) = {
236- let aT = fromBase58String(valueOrErrorMessage(getString(R, r), A("invalid matcher public key")))
237- let aU = addressFromPublicKey(aT)
238- let aV = valueOrErrorMessage(getInteger(aU, aR(J)), A(("invalid price, assetId = " + H(J))))
239- aV
235+func aS (J) = makeString(["%s", H(J)], a)
236+
237+
238+func aT (J) = {
239+ let aU = fromBase58String(valueOrErrorMessage(getString(R, r), A("invalid matcher public key")))
240+ let aV = addressFromPublicKey(aU)
241+ let aW = valueOrErrorMessage(getInteger(aV, aS(J)), A(("invalid price, assetId = " + H(J))))
242+ aW
240243 }
241244
242245
243-func aW (aX,aY,aZ) = (fraction(aX, aZ, f) + aY)
246+func aX (aY,aZ,ba) = (fraction(aY, ba, f) + aZ)
244247
245248
246-func ba (bb,bc,aZ) = (fraction(bb, aZ, f) + bc)
249+func bb (bc,bd,ba) = (fraction(bc, ba, f) + bd)
247250
248251
249-func bd (be,bf) = (be - bf)
252+func be (bf,bg) = (bf - bg)
250253
251254
252-func bg (bh,bi,bf) = (fraction(bh, bi, f) - bf)
255+func bh (bi,bj,bg) = (fraction(bi, bj, f) - bg)
253256
254257
255-func bj (bk,bl) = if ((bk > k))
256- then (bk - bl)
258+func bk (bl,bm) = if ((bl > k))
259+ then (bl - bm)
257260 else k
258261
259262
260-func bm (bk,bl) = if ((bk > k))
261- then (bl - bk)
263+func bn (bl,bm) = if ((bl > k))
264+ then (bm - bl)
262265 else k
263266
264267
265-func bn (bo,bp) = if ((bp > k))
266- then max([k, fraction(bo, f, bp)])
268+func bo (bp,bq) = if ((bq > k))
269+ then max([k, fraction(bp, f, bq)])
267270 else k
268271
269272
270-func bq (bo,bp) = if ((bp > k))
271- then max([k, fraction(bp, f, bo)])
273+func br (bp,bq) = if ((bq > k))
274+ then max([k, fraction(bq, f, bp)])
272275 else k
273276
274277
275-func br (bs,bt,aZ,bu) = fraction((fraction(bs, aZ, f) + bt), bu, f)
278+func bs (bt,bu,ba,bv) = fraction((fraction(bt, ba, f) + bu), bv, f)
276279
277280
278-func bv (bw,bu,bx) = fraction(bw, bx, bu)
281+func bw (bx,bv,by) = fraction(bx, by, bv)
279282
280283
281-func by (bh,bz,bs,bt,bA,bB) = {
282- let bC = if ((bs > k))
283- then (((bh - bz) / bs) + bA)
284+func bz (bi,bA,bt,bu,bB,bC) = {
285+ let bD = if ((bt > k))
286+ then (((bi - bA) / bt) + bB)
284287 else k
285- let bD = if ((bt > k))
286- then (bB - ((bh - bz) / (bs / bB)))
288+ let bE = if ((bu > k))
289+ then (bC - ((bi - bA) / (bt / bC)))
287290 else k
288- (bC + bD)
289- }
290-
291-
292-func bE (an) = {
293- let az = fromBase58String(valueOrErrorMessage(getString(R, aF(an)), A("invalid account address: request id is undefined")))
294- az
291+ (bD + bE)
295292 }
296293
297294
298295 func bF (an) = {
299- let az = bE(an)
300- let aO = F(valueOrErrorMessage(getString(R, aC(az)), A("invalid amount asset id")))
301- let aP = F(valueOrErrorMessage(getString(R, aD(az)), A("invalid amount price id")))
302- $Tuple2(aO, aP)
296+ let at = fromBase58String(valueOrErrorMessage(getString(R, aG(an)), A("invalid account address: request id is undefined")))
297+ at
303298 }
304299
305300
306301 func bG (an) = {
307- let az = bE(an)
308- let bH = valueOrErrorMessage(getBinary(R, aB(az)), A("invalid amount asset id"))
309- bH
302+ let at = bF(an)
303+ let aP = F(valueOrErrorMessage(getString(R, aD(at)), A("invalid amount asset id")))
304+ let aQ = F(valueOrErrorMessage(getString(R, aE(at)), A("invalid amount price id")))
305+ $Tuple2(aP, aQ)
310306 }
311307
312308
313-@Callable(bI)
314-func init (bJ) = {
315- let bK = Z(bI.caller)
316- if ((bK == bK))
317- then $Tuple2([StringEntry(P, bJ)], unit)
309+func bH (an) = {
310+ let at = bF(an)
311+ let bI = valueOrErrorMessage(getBinary(R, aC(at)), A("invalid amount asset id"))
312+ bI
313+ }
314+
315+
316+@Callable(bJ)
317+func init (bK) = {
318+ let bL = Z(bJ.caller)
319+ if ((bL == bL))
320+ then $Tuple2([StringEntry(P, bK)], unit)
318321 else throw("Strict value is not equal to itself.")
319322 }
320323
321324
322325
323-@Callable(bI)
324-func requestAccount (ac,bL) = {
325- let bM = [if (!(W))
326+@Callable(bJ)
327+func requestAccount (ac,bM) = {
328+ let bN = [if (!(W))
326329 then true
327- else C("not allowed"), aa(bI.caller)]
328- if ((bM == bM))
330+ else C("not allowed"), aa(bJ.caller)]
331+ if ((bN == bN))
329332 then {
330- let bN = bL[0]
331- let bO = bL[1]
332- let bP = addressFromPublicKey(ac)
333- let az = sha256(((bP.bytes + fromBase58String(bN)) + fromBase58String(bO)))
334- let aO = F(bN)
333+ let bO = bM[0]
334+ let bP = bM[1]
335+ let bj = valueOrErrorMessage(parseInt(bM[2]), A("invalid leverage"))
336+ let bQ = addressFromPublicKey(ac)
337+ let at = sha256(((bQ.bytes + fromBase58String(bO)) + fromBase58String(bP)))
335338 let aP = F(bO)
336- let bQ = (size(aK(bP)) / j)
337- let bR = [if ((size(bI.payments) == 1))
339+ let aQ = F(bP)
340+ let bR = (size(aL(bQ)) / j)
341+ let bS = [if ((size(bJ.payments) == 1))
338342 then true
339- else C("1 payment is required"), if ((bI.payments[0].assetId == unit))
343+ else C("1 payment is required"), if ((bJ.payments[0].assetId == unit))
340344 then true
341- else C("invalid asset"), if ((bI.payments[0].amount == ai()))
345+ else C("invalid asset"), if ((bJ.payments[0].amount == ai()))
342346 then true
343- else C("invalid amount"), if (aQ(aO, aP))
347+ else C("invalid amount"), if (aR(aP, aQ))
344348 then true
345- else C("pair is not allowed"), if ((getInteger(R, ay(az)) == unit))
349+ else C("pair is not allowed"), if ((getInteger(R, aA(at)) == unit))
346350 then true
347- else C("account is already exists"), if ((al() > bQ))
351+ else C("account is already exists"), if ((al() > bR))
348352 then true
349353 else C(("accounts limit is " + toString(al())))]
350- if ((bR == bR))
354+ if ((bS == bS))
351355 then {
352- let bS = if ((size(aJ()) == 0))
353- then $Tuple2([ScriptTransfer(R, ai(), unit)], [invoke(R, "integerEntry", [ay(az), aw], nil), invoke(R, "binaryEntry", [aG(), (aH() + az)], nil)])
356+ let bT = if ((size(aK()) == 0))
357+ then $Tuple2([ScriptTransfer(R, ai(), unit)], [invoke(R, "integerEntry", [aA(at), ay], nil), invoke(R, "binaryEntry", [aH(), (aI() + at)], nil), invoke(R, "integerEntry", [as(at), bj], nil)])
354358 else {
355- let bT = take(aJ(), j)
356- let an = addressFromPublicKey(bT)
357- let bU = addressFromPublicKey(valueOrErrorMessage(getBinary(R, aA(an)), A("invalid creator public key")))
358- $Tuple2([ScriptTransfer(bU, ai(), unit)], [invoke(R, "binaryEntry", [aI(), drop(aJ(), j)], nil), invoke(R, "integerEntry", [ay(az), ax], nil), invoke(R, "binaryEntry", [aE(az), bT], nil), invoke(R, "stringEntry", [aF(an), toBase58String(az)], nil)])
359+ let bU = take(aK(), j)
360+ let an = addressFromPublicKey(bU)
361+ let bV = addressFromPublicKey(valueOrErrorMessage(getBinary(R, aB(an)), A("invalid creator public key")))
362+ $Tuple2([ScriptTransfer(bV, ai(), unit)], [invoke(R, "binaryEntry", [aJ(), drop(aK(), j)], nil), invoke(R, "integerEntry", [aA(at), az], nil), invoke(R, "binaryEntry", [aF(at), bU], nil), invoke(R, "stringEntry", [aG(an), toBase58String(at)], nil), invoke(R, "integerEntry", [ar(an), bj], nil)])
359363 }
360- let bV = bS._1
361- let bW = bS._2
362- $Tuple2(bV, (bW ++ [invoke(R, "binaryEntry", [aB(az), ac], nil), invoke(R, "binaryEntry", [aK(bP), (aM(bP) + az)], nil), invoke(R, "stringEntry", [aC(az), bN], nil), invoke(R, "stringEntry", [aD(az), bO], nil)]))
364+ let bW = bT._1
365+ let bX = bT._2
366+ $Tuple2(bW, (bX ++ [invoke(R, "binaryEntry", [aC(at), ac], nil), invoke(R, "binaryEntry", [aL(bQ), (aN(bQ) + at)], nil), invoke(R, "stringEntry", [aD(at), bO], nil), invoke(R, "stringEntry", [aE(at), bP], nil)]))
363367 }
364368 else throw("Strict value is not equal to itself.")
365369 }
368372
369373
370374
371-@Callable(bI)
372-func addAccount (ac,bL) = {
373- let bM = [if (!(W))
375+@Callable(bJ)
376+func addAccount (ac,bM) = {
377+ let bN = [if (!(W))
374378 then true
375- else C("not allowed"), aa(bI.caller)]
376- if ((bM == bM))
379+ else C("not allowed"), aa(bJ.caller)]
380+ if ((bN == bN))
377381 then {
378- let bX = fromBase58String(bL[0])
379- let bT = ac
382+ let bY = fromBase58String(bM[0])
383+ let bU = ac
380384 let an = addressFromPublicKey(ac)
381- let bU = addressFromPublicKey(bX)
382- let bR = [if ((getBinary(R, aA(an)) == unit))
385+ let bV = addressFromPublicKey(bY)
386+ let bS = [if ((getBinary(R, aB(an)) == unit))
383387 then true
384388 else C("account is already exists"), if ({
385389 let L = scriptHash(an)
386390 if ($isInstanceOf(L, "ByteVector"))
387391 then {
388- let bY = L
389- (bY == blake2b256_32Kb(ag()))
392+ let bZ = L
393+ (bZ == blake2b256_32Kb(ag()))
390394 }
391395 else false
392396 })
393397 then true
394398 else C("invalid script")]
395- if ((bR == bR))
399+ if ((bS == bS))
396400 then {
397- let bZ = if ((size(aH()) == 0))
398- then $Tuple2(nil, [invoke(R, "binaryEntry", [aI(), (aJ() + bT)], nil)])
401+ let ca = if ((size(aI()) == 0))
402+ then $Tuple2(nil, [invoke(R, "binaryEntry", [aJ(), (aK() + bU)], nil)])
399403 else {
400- let az = take(aH(), j)
401- $Tuple2(nil, [invoke(R, "integerEntry", [ay(az), ax], nil), invoke(R, "binaryEntry", [aE(az), bT], nil), invoke(R, "binaryEntry", [aG(), drop(aH(), j)], nil), invoke(R, "stringEntry", [aF(an), toBase58String(az)], nil), invoke(R, "transferWaves", [bU.bytes, ai()], nil)])
404+ let at = take(aI(), j)
405+ let bj = valueOrErrorMessage(getInteger(R, as(at)), A("request's leverage is undefined"))
406+ $Tuple2(nil, [invoke(R, "integerEntry", [aA(at), az], nil), invoke(R, "binaryEntry", [aF(at), bU], nil), invoke(R, "binaryEntry", [aH(), drop(aI(), j)], nil), invoke(R, "stringEntry", [aG(an), toBase58String(at)], nil), invoke(R, "transferWaves", [bV.bytes, ai()], nil), invoke(R, "integerEntry", [ar(an), bj], nil)])
402407 }
403- let bV = bZ._1
404- let bW = bZ._2
405- $Tuple2(bV, (bW ++ [invoke(R, "binaryEntry", [aA(an), bX], nil)]))
408+ let bW = ca._1
409+ let bX = ca._2
410+ $Tuple2(bW, (bX ++ [invoke(R, "binaryEntry", [aB(an), bY], nil)]))
406411 }
407412 else throw("Strict value is not equal to itself.")
408413 }
411416
412417
413418
414-@Callable(bI)
415-func deposit (ac,bL) = {
416- let ca = bI.payments[0]
417- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
418- let bM = [if (!(W))
419+@Callable(bJ)
420+func deposit (ac,bM) = {
421+ let cb = bJ.payments[0]
422+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
423+ let bN = [if (!(W))
419424 then true
420- else C("not allowed"), aa(bI.caller), if ((size(bI.payments) == 1))
425+ else C("not allowed"), aa(bJ.caller), if ((size(bJ.payments) == 1))
421426 then true
422- else C("1 payment is required"), if ((ca.assetId == U))
427+ else C("1 payment is required"), if ((cb.assetId == U))
423428 then true
424- else C("invalid asset"), if ((getInteger(R, ay(bE(an))) == ax))
429+ else C("invalid asset"), if ((getInteger(R, aA(bF(an))) == az))
425430 then true
426431 else C("account is not ready")]
427- if ((bM == bM))
432+ if ((bN == bN))
428433 then {
429- let bV = [ScriptTransfer(an, ca.amount, ca.assetId)]
430- let bW = [invoke(R, "integerEntry", [am(an), (valueOrElse(ao(an), 0) + ca.amount)], nil)]
431- $Tuple2(bV, bW)
434+ let bW = [ScriptTransfer(an, cb.amount, cb.assetId)]
435+ let bX = [invoke(R, "integerEntry", [am(an), (valueOrElse(ao(an), 0) + cb.amount)], nil)]
436+ $Tuple2(bW, bX)
432437 }
433438 else throw("Strict value is not equal to itself.")
434439 }
435440
436441
437442
438-@Callable(bI)
439-func withdraw (ac,bL) = {
440- let bM = [if (!(W))
443+@Callable(bJ)
444+func withdraw (ac,bM) = {
445+ let bN = [if (!(W))
441446 then true
442- else C("not allowed"), aa(bI.caller)]
443- if ((bM == bM))
447+ else C("not allowed"), aa(bJ.caller)]
448+ if ((bN == bN))
444449 then {
445- let bP = addressFromPublicKey(ac)
446- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
447- let cb = valueOrErrorMessage(parseInt(bL[1]), A("invalid amount"))
448- let J = F(bL[2])
449- let cc = [invoke(an, "transferAsset", [bP.bytes, cb, J], nil)]
450- $Tuple2(nil, cc)
450+ let bQ = addressFromPublicKey(ac)
451+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
452+ let cc = valueOrErrorMessage(parseInt(bM[1]), A("invalid amount"))
453+ let J = F(bM[2])
454+ let cd = [invoke(an, "transferAsset", [bQ.bytes, cc, J], nil)]
455+ $Tuple2(nil, cd)
451456 }
452457 else throw("Strict value is not equal to itself.")
453458 }
454459
455460
456461
457-@Callable(bI)
458-func borrow (ac,bL) = {
459- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
460- let cd = F(bL[1])
461- let ce = D(valueOrErrorMessage(parseInt(bL[2]), A("invalid requested amount")), "requested amount")
462- let cf = bG(an)
463- let bP = addressFromPublicKey(ac)
464- let bM = [if (!(W))
462+@Callable(bJ)
463+func borrow (ac,bM) = {
464+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
465+ let ce = F(bM[1])
466+ let cf = D(valueOrErrorMessage(parseInt(bM[2]), A("invalid requested amount")), "requested amount")
467+ let cg = bH(an)
468+ let bQ = addressFromPublicKey(ac)
469+ let bN = [if (!(W))
465470 then true
466- else C("not allowed"), aa(bI.caller), if ((ac == cf))
471+ else C("not allowed"), aa(bJ.caller), if ((ac == cg))
467472 then true
468473 else C("can be called by account owner only")]
469- if ((bM == bM))
474+ if ((bN == bN))
470475 then {
471- let aO = bF(an)._1
472- let cg = s(valueOrElse(ao(an), 0), O(U))
473- let aZ = s(aS(aO), O(U))
474- let aX = s(valueOrElse(getInteger(R, ap(an, aO)), 0), O(aO))
475- let aY = s(valueOrElse(getInteger(R, ap(an, U)), 0), O(U))
476- let bf = aW(aX, aY, aZ)
477- let ch = 3
478- let bi = s(valueOrElse(getInteger(R, ar(an)), ch), 1)
479- let ci = bg(cg, bi, bf)
480- let cj = if ((cd == aO))
481- then v(fraction(ci, f, aZ), O(aO))
482- else if ((cd == U))
476+ let aP = bG(an)._1
477+ let ch = s(valueOrElse(ao(an), 0), O(U))
478+ let ba = s(aT(aP), O(U))
479+ let aY = s(valueOrElse(getInteger(R, ap(an, aP)), 0), O(aP))
480+ let aZ = s(valueOrElse(getInteger(R, ap(an, U)), 0), O(U))
481+ let bg = aX(aY, aZ, ba)
482+ let bj = s(valueOrErrorMessage(getInteger(R, ar(an)), A("leverage should be defined")), 1)
483+ let ci = bh(ch, bj, bg)
484+ let cj = if ((ce == aP))
485+ then v(fraction(ci, f, ba), O(aP))
486+ else if ((ce == U))
483487 then v(ci, O(U))
484488 else C("invalid requested asset id")
485- let av = F(valueOrErrorMessage(getString(R, as(cd)), A("synthetic asset for requested asset is undefined")))
486- let ck = if ((cj >= ce))
487- then ce
489+ let ax = F(valueOrErrorMessage(getString(R, au(ce)), A("synthetic asset for requested asset is undefined")))
490+ let ck = if ((cj >= cf))
491+ then cf
488492 else C(("credit available = " + toString(cj)))
489- let bW = [invoke(R, "integerEntry", [ap(an, cd), (valueOrElse(aq(an, cd), 0) + ck)], nil), invoke(R, "transferAsset", [bP.bytes, ck, av], nil)]
490- $Tuple2(nil, [bW, cj])
493+ let bX = [invoke(R, "integerEntry", [ap(an, ce), (valueOrElse(aq(an, ce), 0) + ck)], nil), invoke(R, "transferAsset", [bQ.bytes, ck, ax], nil)]
494+ $Tuple2(nil, [bX, cj])
491495 }
492496 else throw("Strict value is not equal to itself.")
493497 }
494498
495499
496500
497-@Callable(bI)
498-func repay (ac,bL) = {
499- let bM = [if (!(W))
501+@Callable(bJ)
502+func repay (ac,bM) = {
503+ let bN = [if (!(W))
500504 then true
501- else C("not allowed"), aa(bI.caller)]
502- if ((bM == bM))
505+ else C("not allowed"), aa(bJ.caller)]
506+ if ((bN == bN))
503507 then $Tuple2(nil, unit)
504508 else throw("Strict value is not equal to itself.")
505509 }
506510
507511
508512
509-@Callable(bI)
510-func setPairAllowance (ac,bL) = {
511- let bM = [if (!(W))
513+@Callable(bJ)
514+func setPairAllowance (ac,bM) = {
515+ let bN = [if (!(W))
512516 then true
513- else C("not allowed"), aa(bI.caller), ab(ac)]
514- if ((bM == bM))
517+ else C("not allowed"), aa(bJ.caller), ab(ac)]
518+ if ((bN == bN))
515519 then {
516- let bN = bL[0]
517- let bO = bL[1]
518- let cl = bL[2]
519- let aO = F(bN)
520+ let bO = bM[0]
521+ let bP = bM[1]
522+ let cl = bM[2]
520523 let aP = F(bO)
524+ let aQ = F(bP)
521525 let cm = (cl == "true")
522- let cc = [invoke(R, "booleanEntry", [aN(aO, aP), cm], nil)]
523- $Tuple2(nil, cc)
526+ let cd = [invoke(R, "booleanEntry", [aO(aP, aQ), cm], nil)]
527+ $Tuple2(nil, cd)
524528 }
525529 else throw("Strict value is not equal to itself.")
526530 }
527531
528532
529533
530-@Callable(bI)
531-func addSyntheticAsset (ac,bL) = {
532- let at = F(bL[0])
533- let av = F(bL[1])
534- let bM = [if (!(W))
534+@Callable(bJ)
535+func addSyntheticAsset (ac,bM) = {
536+ let av = F(bM[0])
537+ let ax = F(bM[1])
538+ let bN = [if (!(W))
535539 then true
536- else C("not allowed"), aa(bI.caller), ab(ac), if ((getString(R, as(at)) == unit))
540+ else C("not allowed"), aa(bJ.caller), ab(ac), if ((getString(R, au(av)) == unit))
537541 then true
538- else C("invalid base asset"), if ((getString(R, au(av)) == unit))
542+ else C("invalid base asset"), if ((getString(R, aw(ax)) == unit))
539543 then true
540544 else C("invalid synthetic asset")]
541- if ((bM == bM))
545+ if ((bN == bN))
542546 then {
543- let cc = [invoke(R, "stringEntry", [as(at), H(av)], nil), invoke(R, "stringEntry", [au(av), H(at)], nil)]
544- $Tuple2(nil, cc)
547+ let cd = [invoke(R, "stringEntry", [au(av), H(ax)], nil), invoke(R, "stringEntry", [aw(ax), H(av)], nil)]
548+ $Tuple2(nil, cd)
545549 }
546550 else throw("Strict value is not equal to itself.")
547551 }
548552
549553
550554
551-@Callable(bI)
552-func doShutdown (ac,bL) = {
553- let bR = [aa(bI.caller), ab(ac)]
554- if ((bR == bR))
555+@Callable(bJ)
556+func doShutdown (ac,bM) = {
557+ let bS = [aa(bJ.caller), ab(ac)]
558+ if ((bS == bS))
555559 then {
556- let cc = [invoke(R, "booleanEntry", [p, true], nil)]
557- $Tuple2(nil, cc)
560+ let cd = [invoke(R, "booleanEntry", [p, true], nil)]
561+ $Tuple2(nil, cd)
558562 }
559563 else throw("Strict value is not equal to itself.")
560564 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = take(drop(this.bytes, 1), 1)
77
88 let c = base58'2W'
99
1010 let d = "futures_calculator.ride"
1111
1212 let e = 100000000
1313
1414 let f = toBigInt(1000000000000000000)
1515
1616 let g = 8
1717
1818 let h = 6
1919
2020 let i = "WAVES"
2121
2222 let j = 32
2323
2424 let k = toBigInt(0)
2525
2626 let l = "%s__multisig"
2727
2828 func m (n,o) = makeString(["%s__status", n, o], a)
2929
3030
3131 let p = "%s__shutdown"
3232
3333 let q = "%s__publicKeys"
3434
3535 let r = "%s__matcherPublicKey"
3636
3737 func s (t,u) = fraction(toBigInt(t), f, toBigInt(u))
3838
3939
4040 func v (w,x) = toInt(fraction(w, toBigInt(x), f))
4141
4242
4343 func y (z) = isDefined(addressFromString(z))
4444
4545
4646 func A (B) = ((d + ": ") + B)
4747
4848
4949 func C (B) = throw(A(B))
5050
5151
5252 func D (E,B) = if ((E >= 0))
5353 then E
5454 else C((B + " value should be positive"))
5555
5656
5757 func F (G) = if ((G == i))
5858 then unit
5959 else fromBase58String(G)
6060
6161
6262 func H (G) = if ((G == unit))
6363 then i
6464 else toBase58String(value(G))
6565
6666
6767 func I (J) = valueOrErrorMessage(assetInfo(J), A("invalid asset info"))
6868
6969
7070 func K (J) = {
7171 let L = J
7272 if ($isInstanceOf(L, "Unit"))
7373 then g
7474 else if ($isInstanceOf(L, "ByteVector"))
7575 then {
7676 let J = L
7777 I(J).decimals
7878 }
7979 else throw("Match error")
8080 }
8181
8282
8383 func M (N) = pow(10, 0, N, 0, 0, DOWN)
8484
8585
8686 func O (J) = M(K(J))
8787
8888
8989 let P = "%s__factoryAddress"
9090
9191 let Q = {
9292 let L = getString(this, P)
9393 if ($isInstanceOf(L, "String"))
9494 then {
9595 let B = L
9696 addressFromString(B)
9797 }
9898 else if ($isInstanceOf(L, "Unit"))
9999 then unit
100100 else throw("Match error")
101101 }
102102
103103 let R = valueOrErrorMessage(Q, A("invalid factory address"))
104104
105105 let S = "%s__usdtAssetId"
106106
107107 let T = {
108108 let L = getString(R, S)
109109 if ($isInstanceOf(L, "String"))
110110 then {
111111 let B = L
112112 F(B)
113113 }
114114 else if ($isInstanceOf(L, "Unit"))
115115 then unit
116116 else throw("Match error")
117117 }
118118
119119 let U = valueOrErrorMessage(T, A("invalid usdt asset id"))
120120
121121 let V = "%s__calculatorAddress"
122122
123123 let W = valueOrElse(getBoolean(R, p), false)
124124
125125 func X (Y,z) = if ((Y == z))
126126 then true
127127 else C("permission denied")
128128
129129
130130 func Z (Y) = X(Y, this)
131131
132132
133133 func aa (Y) = X(Y, R)
134134
135135
136136 func ab (ac) = {
137137 let ad = addressFromStringValue(getStringValue(R, l))
138138 let ae = split(getStringValue(ad, q), a)
139139 if (containsElement(ae, toBase58String(ac)))
140140 then true
141141 else C("not allowed")
142142 }
143143
144144
145145 let af = "%s__accountScript"
146146
147147 func ag () = valueOrErrorMessage(getBinary(R, af), A("account script is not set"))
148148
149149
150150 let ah = "%s__rewardAmount"
151151
152152 func ai () = valueOrErrorMessage(getInteger(R, ah), A("reward amount is not set"))
153153
154154
155155 let aj = "%s__accountsLimit"
156156
157157 let ak = 20
158158
159159 func al () = valueOrElse(getInteger(R, aj), ak)
160160
161161
162162 func am (an) = makeString(["%s%s", "deposited", toString(an)], a)
163163
164164
165165 func ao (an) = getInteger(R, am(an))
166166
167167
168168 func ap (an,J) = makeString(["%s%s%s", "credit", toString(an), H(J)], a)
169169
170170
171171 func aq (an,J) = getInteger(R, ap(an, J))
172172
173173
174174 func ar (an) = makeString(["%s%s", "leverage", toString(an)], a)
175175
176176
177-func as (at) = makeString(["%s%s", "syntheticAssetId", H(at)], a)
177+func as (at) = makeString(["%s%s", "requestLeverage", toBase58String(at)], a)
178178
179179
180-func au (av) = makeString(["%s%s", "baseAssetId", H(av)], a)
180+func au (av) = makeString(["%s%s", "syntheticAssetId", H(av)], a)
181181
182182
183-let aw = 0
184-
185-let ax = 1
186-
187-func ay (az) = makeString(["%s%s", toBase58String(az), "status"], a)
183+func aw (ax) = makeString(["%s%s", "baseAssetId", H(ax)], a)
188184
189185
190-func aA (an) = makeString(["%s%s", toString(an), "creatorPublicKey"], a)
186+let ay = 0
187+
188+let az = 1
189+
190+func aA (at) = makeString(["%s%s", toBase58String(at), "status"], a)
191191
192192
193-func aB (az) = makeString(["%s%s", toBase58String(az), "ownerPublicKey"], a)
193+func aB (an) = makeString(["%s%s", toString(an), "creatorPublicKey"], a)
194194
195195
196-func aC (az) = makeString(["%s%s", toBase58String(az), "amountAssetId"], a)
196+func aC (at) = makeString(["%s%s", toBase58String(at), "ownerPublicKey"], a)
197197
198198
199-func aD (az) = makeString(["%s%s", toBase58String(az), "priceAssetId"], a)
199+func aD (at) = makeString(["%s%s", toBase58String(at), "amountAssetId"], a)
200200
201201
202-func aE (az) = makeString(["%s%s", toBase58String(az), "requestIdToAccountPublicKey"], a)
202+func aE (at) = makeString(["%s%s", toBase58String(at), "priceAssetId"], a)
203203
204204
205-func aF (an) = makeString(["%s%s", toString(an), "accountAddressToRequestId"], a)
205+func aF (at) = makeString(["%s%s", toBase58String(at), "requestIdToAccountPublicKey"], a)
206206
207207
208-func aG () = makeString(["%s", "requestsQueue"], a)
208+func aG (an) = makeString(["%s%s", toString(an), "accountAddressToRequestId"], a)
209209
210210
211-func aH () = valueOrElse(getBinary(R, aG()), base58'')
211+func aH () = makeString(["%s", "requestsQueue"], a)
212212
213213
214-func aI () = makeString(["%s", "accountsQueue"], a)
214+func aI () = valueOrElse(getBinary(R, aH()), base58'')
215215
216216
217-func aJ () = valueOrElse(getBinary(R, aI()), base58'')
217+func aJ () = makeString(["%s", "accountsQueue"], a)
218218
219219
220-func aK (aL) = makeString(["%s%s", "requests", toString(aL)], a)
220+func aK () = valueOrElse(getBinary(R, aJ()), base58'')
221221
222222
223-func aM (aL) = valueOrElse(getBinary(R, aK(aL)), base58'')
223+func aL (aM) = makeString(["%s%s", "requests", toString(aM)], a)
224224
225225
226-func aN (aO,aP) = makeString(["%s%s%s", H(aO), H(aP), "pairAllowed"], a)
226+func aN (aM) = valueOrElse(getBinary(R, aL(aM)), base58'')
227227
228228
229-func aQ (aO,aP) = valueOrElse(getBoolean(R, aN(aO, aP)), false)
229+func aO (aP,aQ) = makeString(["%s%s%s", H(aP), H(aQ), "pairAllowed"], a)
230230
231231
232-func aR (J) = makeString(["%s", H(J)], a)
232+func aR (aP,aQ) = valueOrElse(getBoolean(R, aO(aP, aQ)), false)
233233
234234
235-func aS (J) = {
236- let aT = fromBase58String(valueOrErrorMessage(getString(R, r), A("invalid matcher public key")))
237- let aU = addressFromPublicKey(aT)
238- let aV = valueOrErrorMessage(getInteger(aU, aR(J)), A(("invalid price, assetId = " + H(J))))
239- aV
235+func aS (J) = makeString(["%s", H(J)], a)
236+
237+
238+func aT (J) = {
239+ let aU = fromBase58String(valueOrErrorMessage(getString(R, r), A("invalid matcher public key")))
240+ let aV = addressFromPublicKey(aU)
241+ let aW = valueOrErrorMessage(getInteger(aV, aS(J)), A(("invalid price, assetId = " + H(J))))
242+ aW
240243 }
241244
242245
243-func aW (aX,aY,aZ) = (fraction(aX, aZ, f) + aY)
246+func aX (aY,aZ,ba) = (fraction(aY, ba, f) + aZ)
244247
245248
246-func ba (bb,bc,aZ) = (fraction(bb, aZ, f) + bc)
249+func bb (bc,bd,ba) = (fraction(bc, ba, f) + bd)
247250
248251
249-func bd (be,bf) = (be - bf)
252+func be (bf,bg) = (bf - bg)
250253
251254
252-func bg (bh,bi,bf) = (fraction(bh, bi, f) - bf)
255+func bh (bi,bj,bg) = (fraction(bi, bj, f) - bg)
253256
254257
255-func bj (bk,bl) = if ((bk > k))
256- then (bk - bl)
258+func bk (bl,bm) = if ((bl > k))
259+ then (bl - bm)
257260 else k
258261
259262
260-func bm (bk,bl) = if ((bk > k))
261- then (bl - bk)
263+func bn (bl,bm) = if ((bl > k))
264+ then (bm - bl)
262265 else k
263266
264267
265-func bn (bo,bp) = if ((bp > k))
266- then max([k, fraction(bo, f, bp)])
268+func bo (bp,bq) = if ((bq > k))
269+ then max([k, fraction(bp, f, bq)])
267270 else k
268271
269272
270-func bq (bo,bp) = if ((bp > k))
271- then max([k, fraction(bp, f, bo)])
273+func br (bp,bq) = if ((bq > k))
274+ then max([k, fraction(bq, f, bp)])
272275 else k
273276
274277
275-func br (bs,bt,aZ,bu) = fraction((fraction(bs, aZ, f) + bt), bu, f)
278+func bs (bt,bu,ba,bv) = fraction((fraction(bt, ba, f) + bu), bv, f)
276279
277280
278-func bv (bw,bu,bx) = fraction(bw, bx, bu)
281+func bw (bx,bv,by) = fraction(bx, by, bv)
279282
280283
281-func by (bh,bz,bs,bt,bA,bB) = {
282- let bC = if ((bs > k))
283- then (((bh - bz) / bs) + bA)
284+func bz (bi,bA,bt,bu,bB,bC) = {
285+ let bD = if ((bt > k))
286+ then (((bi - bA) / bt) + bB)
284287 else k
285- let bD = if ((bt > k))
286- then (bB - ((bh - bz) / (bs / bB)))
288+ let bE = if ((bu > k))
289+ then (bC - ((bi - bA) / (bt / bC)))
287290 else k
288- (bC + bD)
289- }
290-
291-
292-func bE (an) = {
293- let az = fromBase58String(valueOrErrorMessage(getString(R, aF(an)), A("invalid account address: request id is undefined")))
294- az
291+ (bD + bE)
295292 }
296293
297294
298295 func bF (an) = {
299- let az = bE(an)
300- let aO = F(valueOrErrorMessage(getString(R, aC(az)), A("invalid amount asset id")))
301- let aP = F(valueOrErrorMessage(getString(R, aD(az)), A("invalid amount price id")))
302- $Tuple2(aO, aP)
296+ let at = fromBase58String(valueOrErrorMessage(getString(R, aG(an)), A("invalid account address: request id is undefined")))
297+ at
303298 }
304299
305300
306301 func bG (an) = {
307- let az = bE(an)
308- let bH = valueOrErrorMessage(getBinary(R, aB(az)), A("invalid amount asset id"))
309- bH
302+ let at = bF(an)
303+ let aP = F(valueOrErrorMessage(getString(R, aD(at)), A("invalid amount asset id")))
304+ let aQ = F(valueOrErrorMessage(getString(R, aE(at)), A("invalid amount price id")))
305+ $Tuple2(aP, aQ)
310306 }
311307
312308
313-@Callable(bI)
314-func init (bJ) = {
315- let bK = Z(bI.caller)
316- if ((bK == bK))
317- then $Tuple2([StringEntry(P, bJ)], unit)
309+func bH (an) = {
310+ let at = bF(an)
311+ let bI = valueOrErrorMessage(getBinary(R, aC(at)), A("invalid amount asset id"))
312+ bI
313+ }
314+
315+
316+@Callable(bJ)
317+func init (bK) = {
318+ let bL = Z(bJ.caller)
319+ if ((bL == bL))
320+ then $Tuple2([StringEntry(P, bK)], unit)
318321 else throw("Strict value is not equal to itself.")
319322 }
320323
321324
322325
323-@Callable(bI)
324-func requestAccount (ac,bL) = {
325- let bM = [if (!(W))
326+@Callable(bJ)
327+func requestAccount (ac,bM) = {
328+ let bN = [if (!(W))
326329 then true
327- else C("not allowed"), aa(bI.caller)]
328- if ((bM == bM))
330+ else C("not allowed"), aa(bJ.caller)]
331+ if ((bN == bN))
329332 then {
330- let bN = bL[0]
331- let bO = bL[1]
332- let bP = addressFromPublicKey(ac)
333- let az = sha256(((bP.bytes + fromBase58String(bN)) + fromBase58String(bO)))
334- let aO = F(bN)
333+ let bO = bM[0]
334+ let bP = bM[1]
335+ let bj = valueOrErrorMessage(parseInt(bM[2]), A("invalid leverage"))
336+ let bQ = addressFromPublicKey(ac)
337+ let at = sha256(((bQ.bytes + fromBase58String(bO)) + fromBase58String(bP)))
335338 let aP = F(bO)
336- let bQ = (size(aK(bP)) / j)
337- let bR = [if ((size(bI.payments) == 1))
339+ let aQ = F(bP)
340+ let bR = (size(aL(bQ)) / j)
341+ let bS = [if ((size(bJ.payments) == 1))
338342 then true
339- else C("1 payment is required"), if ((bI.payments[0].assetId == unit))
343+ else C("1 payment is required"), if ((bJ.payments[0].assetId == unit))
340344 then true
341- else C("invalid asset"), if ((bI.payments[0].amount == ai()))
345+ else C("invalid asset"), if ((bJ.payments[0].amount == ai()))
342346 then true
343- else C("invalid amount"), if (aQ(aO, aP))
347+ else C("invalid amount"), if (aR(aP, aQ))
344348 then true
345- else C("pair is not allowed"), if ((getInteger(R, ay(az)) == unit))
349+ else C("pair is not allowed"), if ((getInteger(R, aA(at)) == unit))
346350 then true
347- else C("account is already exists"), if ((al() > bQ))
351+ else C("account is already exists"), if ((al() > bR))
348352 then true
349353 else C(("accounts limit is " + toString(al())))]
350- if ((bR == bR))
354+ if ((bS == bS))
351355 then {
352- let bS = if ((size(aJ()) == 0))
353- then $Tuple2([ScriptTransfer(R, ai(), unit)], [invoke(R, "integerEntry", [ay(az), aw], nil), invoke(R, "binaryEntry", [aG(), (aH() + az)], nil)])
356+ let bT = if ((size(aK()) == 0))
357+ then $Tuple2([ScriptTransfer(R, ai(), unit)], [invoke(R, "integerEntry", [aA(at), ay], nil), invoke(R, "binaryEntry", [aH(), (aI() + at)], nil), invoke(R, "integerEntry", [as(at), bj], nil)])
354358 else {
355- let bT = take(aJ(), j)
356- let an = addressFromPublicKey(bT)
357- let bU = addressFromPublicKey(valueOrErrorMessage(getBinary(R, aA(an)), A("invalid creator public key")))
358- $Tuple2([ScriptTransfer(bU, ai(), unit)], [invoke(R, "binaryEntry", [aI(), drop(aJ(), j)], nil), invoke(R, "integerEntry", [ay(az), ax], nil), invoke(R, "binaryEntry", [aE(az), bT], nil), invoke(R, "stringEntry", [aF(an), toBase58String(az)], nil)])
359+ let bU = take(aK(), j)
360+ let an = addressFromPublicKey(bU)
361+ let bV = addressFromPublicKey(valueOrErrorMessage(getBinary(R, aB(an)), A("invalid creator public key")))
362+ $Tuple2([ScriptTransfer(bV, ai(), unit)], [invoke(R, "binaryEntry", [aJ(), drop(aK(), j)], nil), invoke(R, "integerEntry", [aA(at), az], nil), invoke(R, "binaryEntry", [aF(at), bU], nil), invoke(R, "stringEntry", [aG(an), toBase58String(at)], nil), invoke(R, "integerEntry", [ar(an), bj], nil)])
359363 }
360- let bV = bS._1
361- let bW = bS._2
362- $Tuple2(bV, (bW ++ [invoke(R, "binaryEntry", [aB(az), ac], nil), invoke(R, "binaryEntry", [aK(bP), (aM(bP) + az)], nil), invoke(R, "stringEntry", [aC(az), bN], nil), invoke(R, "stringEntry", [aD(az), bO], nil)]))
364+ let bW = bT._1
365+ let bX = bT._2
366+ $Tuple2(bW, (bX ++ [invoke(R, "binaryEntry", [aC(at), ac], nil), invoke(R, "binaryEntry", [aL(bQ), (aN(bQ) + at)], nil), invoke(R, "stringEntry", [aD(at), bO], nil), invoke(R, "stringEntry", [aE(at), bP], nil)]))
363367 }
364368 else throw("Strict value is not equal to itself.")
365369 }
366370 else throw("Strict value is not equal to itself.")
367371 }
368372
369373
370374
371-@Callable(bI)
372-func addAccount (ac,bL) = {
373- let bM = [if (!(W))
375+@Callable(bJ)
376+func addAccount (ac,bM) = {
377+ let bN = [if (!(W))
374378 then true
375- else C("not allowed"), aa(bI.caller)]
376- if ((bM == bM))
379+ else C("not allowed"), aa(bJ.caller)]
380+ if ((bN == bN))
377381 then {
378- let bX = fromBase58String(bL[0])
379- let bT = ac
382+ let bY = fromBase58String(bM[0])
383+ let bU = ac
380384 let an = addressFromPublicKey(ac)
381- let bU = addressFromPublicKey(bX)
382- let bR = [if ((getBinary(R, aA(an)) == unit))
385+ let bV = addressFromPublicKey(bY)
386+ let bS = [if ((getBinary(R, aB(an)) == unit))
383387 then true
384388 else C("account is already exists"), if ({
385389 let L = scriptHash(an)
386390 if ($isInstanceOf(L, "ByteVector"))
387391 then {
388- let bY = L
389- (bY == blake2b256_32Kb(ag()))
392+ let bZ = L
393+ (bZ == blake2b256_32Kb(ag()))
390394 }
391395 else false
392396 })
393397 then true
394398 else C("invalid script")]
395- if ((bR == bR))
399+ if ((bS == bS))
396400 then {
397- let bZ = if ((size(aH()) == 0))
398- then $Tuple2(nil, [invoke(R, "binaryEntry", [aI(), (aJ() + bT)], nil)])
401+ let ca = if ((size(aI()) == 0))
402+ then $Tuple2(nil, [invoke(R, "binaryEntry", [aJ(), (aK() + bU)], nil)])
399403 else {
400- let az = take(aH(), j)
401- $Tuple2(nil, [invoke(R, "integerEntry", [ay(az), ax], nil), invoke(R, "binaryEntry", [aE(az), bT], nil), invoke(R, "binaryEntry", [aG(), drop(aH(), j)], nil), invoke(R, "stringEntry", [aF(an), toBase58String(az)], nil), invoke(R, "transferWaves", [bU.bytes, ai()], nil)])
404+ let at = take(aI(), j)
405+ let bj = valueOrErrorMessage(getInteger(R, as(at)), A("request's leverage is undefined"))
406+ $Tuple2(nil, [invoke(R, "integerEntry", [aA(at), az], nil), invoke(R, "binaryEntry", [aF(at), bU], nil), invoke(R, "binaryEntry", [aH(), drop(aI(), j)], nil), invoke(R, "stringEntry", [aG(an), toBase58String(at)], nil), invoke(R, "transferWaves", [bV.bytes, ai()], nil), invoke(R, "integerEntry", [ar(an), bj], nil)])
402407 }
403- let bV = bZ._1
404- let bW = bZ._2
405- $Tuple2(bV, (bW ++ [invoke(R, "binaryEntry", [aA(an), bX], nil)]))
408+ let bW = ca._1
409+ let bX = ca._2
410+ $Tuple2(bW, (bX ++ [invoke(R, "binaryEntry", [aB(an), bY], nil)]))
406411 }
407412 else throw("Strict value is not equal to itself.")
408413 }
409414 else throw("Strict value is not equal to itself.")
410415 }
411416
412417
413418
414-@Callable(bI)
415-func deposit (ac,bL) = {
416- let ca = bI.payments[0]
417- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
418- let bM = [if (!(W))
419+@Callable(bJ)
420+func deposit (ac,bM) = {
421+ let cb = bJ.payments[0]
422+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
423+ let bN = [if (!(W))
419424 then true
420- else C("not allowed"), aa(bI.caller), if ((size(bI.payments) == 1))
425+ else C("not allowed"), aa(bJ.caller), if ((size(bJ.payments) == 1))
421426 then true
422- else C("1 payment is required"), if ((ca.assetId == U))
427+ else C("1 payment is required"), if ((cb.assetId == U))
423428 then true
424- else C("invalid asset"), if ((getInteger(R, ay(bE(an))) == ax))
429+ else C("invalid asset"), if ((getInteger(R, aA(bF(an))) == az))
425430 then true
426431 else C("account is not ready")]
427- if ((bM == bM))
432+ if ((bN == bN))
428433 then {
429- let bV = [ScriptTransfer(an, ca.amount, ca.assetId)]
430- let bW = [invoke(R, "integerEntry", [am(an), (valueOrElse(ao(an), 0) + ca.amount)], nil)]
431- $Tuple2(bV, bW)
434+ let bW = [ScriptTransfer(an, cb.amount, cb.assetId)]
435+ let bX = [invoke(R, "integerEntry", [am(an), (valueOrElse(ao(an), 0) + cb.amount)], nil)]
436+ $Tuple2(bW, bX)
432437 }
433438 else throw("Strict value is not equal to itself.")
434439 }
435440
436441
437442
438-@Callable(bI)
439-func withdraw (ac,bL) = {
440- let bM = [if (!(W))
443+@Callable(bJ)
444+func withdraw (ac,bM) = {
445+ let bN = [if (!(W))
441446 then true
442- else C("not allowed"), aa(bI.caller)]
443- if ((bM == bM))
447+ else C("not allowed"), aa(bJ.caller)]
448+ if ((bN == bN))
444449 then {
445- let bP = addressFromPublicKey(ac)
446- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
447- let cb = valueOrErrorMessage(parseInt(bL[1]), A("invalid amount"))
448- let J = F(bL[2])
449- let cc = [invoke(an, "transferAsset", [bP.bytes, cb, J], nil)]
450- $Tuple2(nil, cc)
450+ let bQ = addressFromPublicKey(ac)
451+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
452+ let cc = valueOrErrorMessage(parseInt(bM[1]), A("invalid amount"))
453+ let J = F(bM[2])
454+ let cd = [invoke(an, "transferAsset", [bQ.bytes, cc, J], nil)]
455+ $Tuple2(nil, cd)
451456 }
452457 else throw("Strict value is not equal to itself.")
453458 }
454459
455460
456461
457-@Callable(bI)
458-func borrow (ac,bL) = {
459- let an = valueOrErrorMessage(addressFromString(bL[0]), A("invalid account address"))
460- let cd = F(bL[1])
461- let ce = D(valueOrErrorMessage(parseInt(bL[2]), A("invalid requested amount")), "requested amount")
462- let cf = bG(an)
463- let bP = addressFromPublicKey(ac)
464- let bM = [if (!(W))
462+@Callable(bJ)
463+func borrow (ac,bM) = {
464+ let an = valueOrErrorMessage(addressFromString(bM[0]), A("invalid account address"))
465+ let ce = F(bM[1])
466+ let cf = D(valueOrErrorMessage(parseInt(bM[2]), A("invalid requested amount")), "requested amount")
467+ let cg = bH(an)
468+ let bQ = addressFromPublicKey(ac)
469+ let bN = [if (!(W))
465470 then true
466- else C("not allowed"), aa(bI.caller), if ((ac == cf))
471+ else C("not allowed"), aa(bJ.caller), if ((ac == cg))
467472 then true
468473 else C("can be called by account owner only")]
469- if ((bM == bM))
474+ if ((bN == bN))
470475 then {
471- let aO = bF(an)._1
472- let cg = s(valueOrElse(ao(an), 0), O(U))
473- let aZ = s(aS(aO), O(U))
474- let aX = s(valueOrElse(getInteger(R, ap(an, aO)), 0), O(aO))
475- let aY = s(valueOrElse(getInteger(R, ap(an, U)), 0), O(U))
476- let bf = aW(aX, aY, aZ)
477- let ch = 3
478- let bi = s(valueOrElse(getInteger(R, ar(an)), ch), 1)
479- let ci = bg(cg, bi, bf)
480- let cj = if ((cd == aO))
481- then v(fraction(ci, f, aZ), O(aO))
482- else if ((cd == U))
476+ let aP = bG(an)._1
477+ let ch = s(valueOrElse(ao(an), 0), O(U))
478+ let ba = s(aT(aP), O(U))
479+ let aY = s(valueOrElse(getInteger(R, ap(an, aP)), 0), O(aP))
480+ let aZ = s(valueOrElse(getInteger(R, ap(an, U)), 0), O(U))
481+ let bg = aX(aY, aZ, ba)
482+ let bj = s(valueOrErrorMessage(getInteger(R, ar(an)), A("leverage should be defined")), 1)
483+ let ci = bh(ch, bj, bg)
484+ let cj = if ((ce == aP))
485+ then v(fraction(ci, f, ba), O(aP))
486+ else if ((ce == U))
483487 then v(ci, O(U))
484488 else C("invalid requested asset id")
485- let av = F(valueOrErrorMessage(getString(R, as(cd)), A("synthetic asset for requested asset is undefined")))
486- let ck = if ((cj >= ce))
487- then ce
489+ let ax = F(valueOrErrorMessage(getString(R, au(ce)), A("synthetic asset for requested asset is undefined")))
490+ let ck = if ((cj >= cf))
491+ then cf
488492 else C(("credit available = " + toString(cj)))
489- let bW = [invoke(R, "integerEntry", [ap(an, cd), (valueOrElse(aq(an, cd), 0) + ck)], nil), invoke(R, "transferAsset", [bP.bytes, ck, av], nil)]
490- $Tuple2(nil, [bW, cj])
493+ let bX = [invoke(R, "integerEntry", [ap(an, ce), (valueOrElse(aq(an, ce), 0) + ck)], nil), invoke(R, "transferAsset", [bQ.bytes, ck, ax], nil)]
494+ $Tuple2(nil, [bX, cj])
491495 }
492496 else throw("Strict value is not equal to itself.")
493497 }
494498
495499
496500
497-@Callable(bI)
498-func repay (ac,bL) = {
499- let bM = [if (!(W))
501+@Callable(bJ)
502+func repay (ac,bM) = {
503+ let bN = [if (!(W))
500504 then true
501- else C("not allowed"), aa(bI.caller)]
502- if ((bM == bM))
505+ else C("not allowed"), aa(bJ.caller)]
506+ if ((bN == bN))
503507 then $Tuple2(nil, unit)
504508 else throw("Strict value is not equal to itself.")
505509 }
506510
507511
508512
509-@Callable(bI)
510-func setPairAllowance (ac,bL) = {
511- let bM = [if (!(W))
513+@Callable(bJ)
514+func setPairAllowance (ac,bM) = {
515+ let bN = [if (!(W))
512516 then true
513- else C("not allowed"), aa(bI.caller), ab(ac)]
514- if ((bM == bM))
517+ else C("not allowed"), aa(bJ.caller), ab(ac)]
518+ if ((bN == bN))
515519 then {
516- let bN = bL[0]
517- let bO = bL[1]
518- let cl = bL[2]
519- let aO = F(bN)
520+ let bO = bM[0]
521+ let bP = bM[1]
522+ let cl = bM[2]
520523 let aP = F(bO)
524+ let aQ = F(bP)
521525 let cm = (cl == "true")
522- let cc = [invoke(R, "booleanEntry", [aN(aO, aP), cm], nil)]
523- $Tuple2(nil, cc)
526+ let cd = [invoke(R, "booleanEntry", [aO(aP, aQ), cm], nil)]
527+ $Tuple2(nil, cd)
524528 }
525529 else throw("Strict value is not equal to itself.")
526530 }
527531
528532
529533
530-@Callable(bI)
531-func addSyntheticAsset (ac,bL) = {
532- let at = F(bL[0])
533- let av = F(bL[1])
534- let bM = [if (!(W))
534+@Callable(bJ)
535+func addSyntheticAsset (ac,bM) = {
536+ let av = F(bM[0])
537+ let ax = F(bM[1])
538+ let bN = [if (!(W))
535539 then true
536- else C("not allowed"), aa(bI.caller), ab(ac), if ((getString(R, as(at)) == unit))
540+ else C("not allowed"), aa(bJ.caller), ab(ac), if ((getString(R, au(av)) == unit))
537541 then true
538- else C("invalid base asset"), if ((getString(R, au(av)) == unit))
542+ else C("invalid base asset"), if ((getString(R, aw(ax)) == unit))
539543 then true
540544 else C("invalid synthetic asset")]
541- if ((bM == bM))
545+ if ((bN == bN))
542546 then {
543- let cc = [invoke(R, "stringEntry", [as(at), H(av)], nil), invoke(R, "stringEntry", [au(av), H(at)], nil)]
544- $Tuple2(nil, cc)
547+ let cd = [invoke(R, "stringEntry", [au(av), H(ax)], nil), invoke(R, "stringEntry", [aw(ax), H(av)], nil)]
548+ $Tuple2(nil, cd)
545549 }
546550 else throw("Strict value is not equal to itself.")
547551 }
548552
549553
550554
551-@Callable(bI)
552-func doShutdown (ac,bL) = {
553- let bR = [aa(bI.caller), ab(ac)]
554- if ((bR == bR))
555+@Callable(bJ)
556+func doShutdown (ac,bM) = {
557+ let bS = [aa(bJ.caller), ab(ac)]
558+ if ((bS == bS))
555559 then {
556- let cc = [invoke(R, "booleanEntry", [p, true], nil)]
557- $Tuple2(nil, cc)
560+ let cd = [invoke(R, "booleanEntry", [p, true], nil)]
561+ $Tuple2(nil, cd)
558562 }
559563 else throw("Strict value is not equal to itself.")
560564 }
561565
562566
563567 @Verifier(cn)
564568 func co () = if (if (isDefined(Q))
565569 then isDefined(getString(R, l))
566570 else false)
567571 then {
568572 let L = getString(R, l)
569573 if ($isInstanceOf(L, "String"))
570574 then {
571575 let ad = L
572576 let cp = m(toString(this), toBase58String(cn.id))
573577 let cq = valueOrElse(getBoolean(addressFromStringValue(ad), cp), false)
574578 cq
575579 }
576580 else false
577581 }
578582 else sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
579583

github/deemru/w8io/169f3d6 
137.25 ms