tx · 68THTkLDDbGHpz1pgyhY8mirMCL2AvA7EFDeW1RPsUhb

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02900000 Waves

2022.07.26 10:59 [2156499] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "68THTkLDDbGHpz1pgyhY8mirMCL2AvA7EFDeW1RPsUhb", "fee": 2900000, "feeAssetId": null, "timestamp": 1658822393482, "version": 1, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "3GAGyXUhcx1xeXbL1k9Xs8JQsyTMSNAwniN9y3WG2rw9cnQKR7YYeoH6UCbN7imHzP7QQuhAwjgLnNKpx8wigKXG" ], "script": "base64:BgJACAISCAoGCAgBAQEIEgUKAwEIAhIDCgEBEgMKAQESBAoCCAgSBAoCCAgSAwoBCBIDCgEIEgQKAggBEgMKAQgSAGoAA1NFUAICX18ABlNDQUxFOAAIAAVNVUxUOACAwtcvAA5QT09MV0VJR0hUTVVMVAUFTVVMVDgBBHN0cmYCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEDaW96AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkAAAEDaW9kAwdhZGRyZXNzA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFB2FkZHJlc3MFA2tleQUKZGVmYXVsdFZhbAEDaW9mAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFB2FkZHJlc3MFA2tleQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBA2FicwEDdmFsAwkAZgIAAAUDdmFsCQEBLQEFA3ZhbAUDdmFsAQNhYWwBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55THlzdAUHJG1hdGNoMAUKdmFsQW55THlzdAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQECYWkBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcwAJALkJAgkAzAgCAgQlcyVzCQDMCAICBmNvbmZpZwkAzAgCAhhyZWZlcnJhbHNDb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAB5yZWZlcnJhbHNDb250cmFjdEFkZHJlc3NPckZhaWwJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQRzdHJmAgUEdGhpcwkBG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcwAAFmtleVJlZmVycmFsUHJvZ3JhbU5hbWUJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICC3Byb2dyYW1OYW1lBQNuaWwFA1NFUAAacmVmZXJyYWxQcm9ncmFtTmFtZURlZmF1bHQCBnd4bG9jawATcmVmZXJyYWxQcm9ncmFtTmFtZQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRZrZXlSZWZlcnJhbFByb2dyYW1OYW1lBRpyZWZlcnJhbFByb2dyYW1OYW1lRGVmYXVsdAERa2V5RmFjdG9yeUFkZHJlc3MAAhwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAQAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAACABRJZHhGYWN0b3J5Q2ZnSWRvRGFwcAADABVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAABAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAFABVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAABgAZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcAAHABRJZHhGYWN0b3J5Q2ZnRGFvRGFwcAAIABpJZHhGYWN0b3J5Q2ZnTWFya2V0aW5nRGFwcAAJABpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAAKABZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwAAsBDWtleUZhY3RvcnlDZmcAAhElc19fZmFjdG9yeUNvbmZpZwEaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcBCmxwQXNzZXRTdHIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUKbHBBc3NldFN0cgkAzAgCAh5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFA25pbAUDU0VQARBrZXlGYWN0b3J5THBMaXN0AAIQJXNfX2xwVG9rZW5zTGlzdAEma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MBCmxwQXNzZXRTdHIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUKbHBBc3NldFN0cgkAzAgCAh5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFA25pbAUDU0VQARRrZXlGYWN0b3J5UG9vbFdlaWdodAEPY29udHJhY3RBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgpwb29sV2VpZ2h0CQDMCAIFD2NvbnRyYWN0QWRkcmVzcwUDbmlsBQNTRVABG2tleUZhY3RvcnlQb29sV2VpZ2h0SGlzdG9yeQILcG9vbEFkZHJlc3MDbnVtCQCsAgIJAKwCAgkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FC3Bvb2xBZGRyZXNzAgJfXwkApAMBBQNudW0BGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQRzdHJmAgUEdGhpcwkBEWtleUZhY3RvcnlBZGRyZXNzAAEKcmVhZExwTGlzdAAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCCQEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAkBEGtleUZhY3RvcnlMcExpc3QAAgAFA1NFUAEUcmVhZEZhY3RvcnlDZmdPckZhaWwBB2ZhY3RvcnkJALUJAgkBBHN0cmYCBQdmYWN0b3J5CQENa2V5RmFjdG9yeUNmZwAFA1NFUAEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHABGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHABGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwBCmZhY3RvcnlDZmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUKZmFjdG9yeUNmZwUaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHABE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50AAIeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50ARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAIYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uARNrZXlFbWlzc2lvbkVuZEJsb2NrAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQ1rZXlOZXh0UGVyaW9kAAIOJXNfX25leHRQZXJpb2QBH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAiglcyVzX19nd3hSZXdhcmRFbWlzc2lvblBhcnRfX3N0YXJ0SGVpZ2h0AA1JZHhDZmdBc3NldElkAAEAE0lkeENmZ01pbkxvY2tBbW91bnQAAgAVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uAAMAFUlkeENmZ01heExvY2tEdXJhdGlvbgAEABJJZHhDZmdNYXRoQ29udHJhY3QABQEJa2V5Q29uZmlnAAIKJXNfX2NvbmZpZwEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAkAtQkCCQEEc3RyZgIFBHRoaXMJAQlrZXlDb25maWcABQNTRVABDWZvcm1hdENvbmZpZ1MFB2Fzc2V0SWQNbWluTG9ja0Ftb3VudA9taW5Mb2NrRHVyYXRpb24PbWF4TG9ja0R1cmF0aW9uDG1hdGhDb250cmFjdAkAuQkCCQDMCAICCCVzJWQlZCVkCQDMCAIFB2Fzc2V0SWQJAMwIAgUNbWluTG9ja0Ftb3VudAkAzAgCBQ9taW5Mb2NrRHVyYXRpb24JAMwIAgUPbWF4TG9ja0R1cmF0aW9uCQDMCAIFDG1hdGhDb250cmFjdAUDbmlsBQNTRVABDGZvcm1hdENvbmZpZwUHYXNzZXRJZA1taW5Mb2NrQW1vdW50D21pbkxvY2tEdXJhdGlvbg9tYXhMb2NrRHVyYXRpb24MbWF0aENvbnRyYWN0CQENZm9ybWF0Q29uZmlnUwUFB2Fzc2V0SWQJAKQDAQUNbWluTG9ja0Ftb3VudAkApAMBBQ9taW5Mb2NrRHVyYXRpb24JAKQDAQUPbWF4TG9ja0R1cmF0aW9uBQxtYXRoQ29udHJhY3QBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkEAnBkCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yAA5JZHhMb2NrVXNlck51bQABAA1JZHhMb2NrQW1vdW50AAIADElkeExvY2tTdGFydAADAA9JZHhMb2NrRHVyYXRpb24ABAANSWR4TG9ja1BhcmFtSwAFAA1JZHhMb2NrUGFyYW1CAAYBE2tleUxvY2tQYXJhbXNSZWNvcmQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIKJXMlc19fbG9jawkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQt1c2VyQWRkcmVzcwkAtQkCCQEEc3RyZgIFBHRoaXMJARNrZXlMb2NrUGFyYW1zUmVjb3JkAQULdXNlckFkZHJlc3MFA1NFUAEXZm9ybWF0TG9ja1BhcmFtc1JlY29yZFMIB3VzZXJOdW0GYW1vdW50BXN0YXJ0CGR1cmF0aW9uBnBhcmFtSwZwYXJhbUIQbGFzdFVwZFRpbWVzdGFtcAlnd3hBbW91bnQJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIFB3VzZXJOdW0JAMwIAgUGYW1vdW50CQDMCAIFBXN0YXJ0CQDMCAIFCGR1cmF0aW9uCQDMCAIFBnBhcmFtSwkAzAgCBQZwYXJhbUIJAMwIAgUQbGFzdFVwZFRpbWVzdGFtcAkAzAgCBQlnd3hBbW91bnQFA25pbAUDU0VQARZmb3JtYXRMb2NrUGFyYW1zUmVjb3JkBwd1c2VyTnVtBmFtb3VudAVzdGFydAhkdXJhdGlvbgZwYXJhbUsGcGFyYW1CCWd3eEFtb3VudAkBF2Zvcm1hdExvY2tQYXJhbXNSZWNvcmRTCAUHdXNlck51bQkApAMBBQZhbW91bnQJAKQDAQUFc3RhcnQJAKQDAQUIZHVyYXRpb24JAKQDAQUGcGFyYW1LCQCkAwEFBnBhcmFtQgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkApAMBBQlnd3hBbW91bnQBDmtleU5leHRVc2VyTnVtAAIPJXNfX25leHRVc2VyTnVtARJrZXlVc2VyMk51bU1hcHBpbmcBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEmtleU51bTJVc2VyTWFwcGluZwEDbnVtCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX19udW0ydXNlcgkAzAgCBQNudW0FA25pbAUDU0VQARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQd1c2VyTnVtCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQd1c2VyTnVtCQDMCAICBmFtb3VudAUDbmlsBQNTRVABFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIFc3RhcnQFA25pbAUDU0VQARRrZXlMb2NrUGFyYW1EdXJhdGlvbgEHdXNlck51bQkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUHdXNlck51bQkAzAgCAghkdXJhdGlvbgUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUsBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBawUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUIBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgUDbmlsBQNTRVABFWtleUxvY2tQYXJhbUJ5UGVyaW9kSwIHdXNlck51bQZwZXJpb2QJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCBQd1c2VyTnVtCQDMCAICAWsJAMwIAgUGcGVyaW9kBQNuaWwFA1NFUAEVa2V5TG9ja1BhcmFtQnlQZXJpb2RCAgd1c2VyTnVtBnBlcmlvZAkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgkAzAgCBQZwZXJpb2QFA25pbAUDU0VQARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAACHiVzJXNfX3N0YXRzX19hY3RpdmVUb3RhbExvY2tlZAEga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MAAiUlcyVzX19zdGF0c19fbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzARJrZXlTdGF0c0xvY2tzQ291bnQAAhclcyVzX19zdGF0c19fbG9ja3NDb3VudAESa2V5U3RhdHNVc2Vyc0NvdW50AAIdJXMlc19fc3RhdHNfX2FjdGl2ZVVzZXJzQ291bnQBIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAQd1c2VyTnVtCQC5CQIJAMwIAgIeJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50CQDMCAIFB3VzZXJOdW0FA25pbAUDU0VQASJrZXlVc2VyTHBCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAgd1c2VyTnVtCWxwQXNzZXRJZAkAuQkCCQDMCAICHiVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludAkAzAgCBQd1c2VyTnVtCQDMCAIFCWxwQXNzZXRJZAUDbmlsBQNTRVABF2tleVVzZXJNYXhCb29zdElOVEVHUkFMAQd1c2VyTnVtCQC5CQIJAMwIAgIRJXMlZF9fbWF4Qm9vc3RJbnQJAMwIAgUHdXNlck51bQUDbmlsBQNTRVABGGtleVRvdGFsTWF4Qm9vc3RJTlRFR1JBTAACGCVzJXNfX21heEJvb3N0SW50X190b3RhbAEha2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsAQd1c2VyTnVtCQC5CQIJAMwIAgIkJXMlZF9fdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsCQDMCAIFB3VzZXJOdW0FA25pbAUDU0VQARNrZXlVc2VyQm9vc3RDbGFpbWVkAQd1c2VyTnVtCQC5CQIJAMwIAgIWJXMlZF9fdXNlckJvb3N0Q2xhaW1lZAkAzAgCBQd1c2VyTnVtBQNuaWwFA1NFUAERa2V5VG90YWxDYWNoZWRHd3gAAhYlcyVzX19nd3hDYWNoZWRfX3RvdGFsAA9mYWN0b3J5Q29udHJhY3QJARhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAApmYWN0b3J5Q2ZnCQEUcmVhZEZhY3RvcnlDZmdPckZhaWwBBQ9mYWN0b3J5Q29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnAA9zdGFraW5nQ29udHJhY3QJARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAEWd3eFJld2FyZENvbnRyYWN0CQEZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcBDEhpc3RvcnlFbnRyeQgEdHlwZQR1c2VyBmFtb3VudAlsb2NrU3RhcnQIZHVyYXRpb24BawFiAWkECmhpc3RvcnlLRVkJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQR0eXBlCQDMCAIFBHVzZXIJAMwIAgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQNuaWwFA1NFUAQLaGlzdG9yeURBVEEJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQZhbW91bnQJAMwIAgkApAMBBQlsb2NrU3RhcnQJAMwIAgkApAMBBQhkdXJhdGlvbgkAzAgCCQCkAwEFAWsJAMwIAgkApAMBBQFiBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgUKaGlzdG9yeUtFWQULaGlzdG9yeURBVEEBClN0YXRzRW50cnkEDnRvdGFsTG9ja2VkSW5jC2R1cmF0aW9uSW5jDGxvY2tDb3VudEluYw11c2Vyc0NvdW50SW5jBBtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkJASBrZXlTdGF0c0xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwAEDWxvY2tzQ291bnRLRVkJARJrZXlTdGF0c0xvY2tzQ291bnQABA11c2Vyc0NvdW50S0VZCQESa2V5U3RhdHNVc2Vyc0NvdW50AAQOdG90YWxBbW91bnRLRVkJARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAEGGxvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwkBA2lvegIFBHRoaXMFG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWQQKbG9ja3NDb3VudAkBA2lvegIFBHRoaXMFDWxvY2tzQ291bnRLRVkECnVzZXJzQ291bnQJAQNpb3oCBQR0aGlzBQ11c2Vyc0NvdW50S0VZBAt0b3RhbEFtb3VudAkBA2lvegIFBHRoaXMFDnRvdGFsQW1vdW50S0VZCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkJAGQCBRhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MFC2R1cmF0aW9uSW5jCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1sb2Nrc0NvdW50S0VZCQBkAgUKbG9ja3NDb3VudAUMbG9ja0NvdW50SW5jCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ11c2Vyc0NvdW50S0VZCQBkAgUKdXNlcnNDb3VudAUNdXNlcnNDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdG90YWxBbW91bnRLRVkJAGQCBQt0b3RhbEFtb3VudAUOdG90YWxMb2NrZWRJbmMFA25pbAENY2FsY0d3eEFtb3VudAMEa1JhdwRiUmF3AWgEBVNDQUxFAOgHCQBpAgkAZAIJAGgCBQRrUmF3BQFoBQRiUmF3BQVTQ0FMRQEPTG9ja1BhcmFtc0VudHJ5CAt1c2VyQWRkcmVzcwd1c2VyTnVtBmFtb3VudAVzdGFydAhkdXJhdGlvbgFrAWIGcGVyaW9kBA11c2VyQW1vdW50S0VZCQEWa2V5TG9ja1BhcmFtVXNlckFtb3VudAEFB3VzZXJOdW0EDXN0YXJ0QmxvY2tLRVkJARZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAQUHdXNlck51bQQLZHVyYXRpb25LRVkJARRrZXlMb2NrUGFyYW1EdXJhdGlvbgEFB3VzZXJOdW0EBGtLRVkJAQ1rZXlMb2NrUGFyYW1LAQUHdXNlck51bQQEYktFWQkBDWtleUxvY2tQYXJhbUIBBQd1c2VyTnVtBAxrQnlQZXJpb2RLRVkJARVrZXlMb2NrUGFyYW1CeVBlcmlvZEsCBQd1c2VyTnVtBQZwZXJpb2QEDGJCeVBlcmlvZEtFWQkBFWtleUxvY2tQYXJhbUJ5UGVyaW9kQgIFB3VzZXJOdW0FBnBlcmlvZAQJZ3d4QW1vdW50CQENY2FsY0d3eEFtb3VudAMFAWsFAWIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdXNlckFtb3VudEtFWQUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1zdGFydEJsb2NrS0VZBQVzdGFydAkAzAgCCQEMSW50ZWdlckVudHJ5AgULZHVyYXRpb25LRVkFCGR1cmF0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRrS0VZBQFrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRiS0VZBQFiCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrQnlQZXJpb2RLRVkFAWsJAMwIAgkBDEludGVnZXJFbnRyeQIFDGJCeVBlcmlvZEtFWQUBYgkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TG9ja1BhcmFtc1JlY29yZAEFC3VzZXJBZGRyZXNzCQEWZm9ybWF0TG9ja1BhcmFtc1JlY29yZAcFB3VzZXJOdW0FBmFtb3VudAUFc3RhcnQFCGR1cmF0aW9uBQFrBQFiBQlnd3hBbW91bnQFA25pbAEiZXh0cmFjdE9wdGlvbmFsUGF5bWVudEFtb3VudE9yRmFpbAIBaQ9leHBlY3RlZEFzc2V0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIbb25seSBvbmUgcGF5bWVudCBpcyBhbGxvd2VkAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAAABANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUPZXhwZWN0ZWRBc3NldElkCQACAQIbaW52YWxpZCBhc3NldCBpZCBpbiBwYXltZW50CAUDcG10BmFtb3VudAEZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodAILdXNlckFkZHJlc3MMdGFyZ2V0SGVpZ2h0BAVFTVBUWQIFZW1wdHkEEnVzZXIyTnVtTWFwcGluZ0tFWQkBEmtleVVzZXIyTnVtTWFwcGluZwEFC3VzZXJBZGRyZXNzBAd1c2VyTnVtCQELdmFsdWVPckVsc2UCCQCiCAEFEnVzZXIyTnVtTWFwcGluZ0tFWQUFRU1QVFkEAWsJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDWtleUxvY2tQYXJhbUsBBQd1c2VyTnVtAAAEAWIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDWtleUxvY2tQYXJhbUIBBQd1c2VyTnVtAAAEDWd3eEFtb3VudENhbGMJAQ1jYWxjR3d4QW1vdW50AwUBawUBYgUMdGFyZ2V0SGVpZ2h0BAlnd3hBbW91bnQDCQBmAgAABQ1nd3hBbW91bnRDYWxjAAAFDWd3eEFtb3VudENhbGMFCWd3eEFtb3VudAEUY2FsY0N1cnJlbnRHd3hBbW91bnQBC3VzZXJBZGRyZXNzCQEZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodAIFC3VzZXJBZGRyZXNzBQZoZWlnaHQBFGludGVybmFsQ2xhaW1XeEJvb3N0AwxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIIcmVhZE9ubHkEBUVNUFRZAgVFTVBUWQQRdXNlclJlY29yZE9yRW1wdHkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBE2tleUxvY2tQYXJhbXNSZWNvcmQBBQ51c2VyQWRkcmVzc1N0cgUFRU1QVFkDCQAAAgURdXNlclJlY29yZE9yRW1wdHkFBUVNUFRZCQCVCgMAAAUDbmlsAhV1c2VyUmVjb3JkOjppczo6ZW1wdHkED3VzZXJSZWNvcmRBcnJheQkAtQkCBRF1c2VyUmVjb3JkT3JFbXB0eQUDU0VQBAp1c2VyTnVtU3RyCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUOSWR4TG9ja1VzZXJOdW0EHGd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgURZ3d4UmV3YXJkQ29udHJhY3QJAR9rZXlHd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0AAAABAhFTVBUWVNUUgIFZW1wdHkEDSR0MDEzODcwMTQ0MzgDCQECIT0CBQxscEFzc2V0SWRTdHIFCEVNUFRZU1RSBA5wb29sQWRkcmVzc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD2ZhY3RvcnlDb250cmFjdAkBGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAQUMbHBBc3NldElkU3RyCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBANwdzEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD2ZhY3RvcnlDb250cmFjdAkBFGtleUZhY3RvcnlQb29sV2VpZ2h0AQUOcG9vbEFkZHJlc3NTdHIEA3B3MAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9mYWN0b3J5Q29udHJhY3QJARtrZXlGYWN0b3J5UG9vbFdlaWdodEhpc3RvcnkCBQ5wb29sQWRkcmVzc1N0cgAABQNwdzEJAJQKAgUDcHcwBQNwdzEDBQhyZWFkT25seQkAlAoCAAAAAAkAAgEJAKwCAgIobm90IHJlYWRvbmx5IG1vZGU6IHVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBAtwb29sV2VpZ2h0MAgFDSR0MDEzODcwMTQ0MzgCXzEEC3Bvb2xXZWlnaHQxCAUNJHQwMTM4NzAxNDQzOAJfMgQSd3hFbWlzc2lvblBlckJsb2NrCQEDaW9mAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAEDWVtaXNzaW9uU3RhcnQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQEVa2V5RW1pc3Npb25TdGFydEJsb2NrAAQLZW1pc3Npb25FbmQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQETa2V5RW1pc3Npb25FbmRCbG9jawAEAWgDCQBmAgUGaGVpZ2h0BQtlbWlzc2lvbkVuZAULZW1pc3Npb25FbmQFBmhlaWdodAQCZGgJAJYDAQkAzAgCCQBlAgUBaAUNZW1pc3Npb25TdGFydAkAzAgCAAAFA25pbAQidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQkBImtleVVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwCBQp1c2VyTnVtU3RyBQxscEFzc2V0SWRTdHIEIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEga2V5VXNlckJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwBBQp1c2VyTnVtU3RyBB11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBSJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEDaW96AgUEdGhpcwUgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkEFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAaQIJAGgCCQBoAgUSd3hFbWlzc2lvblBlckJsb2NrBQJkaAACAAMEGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAGUCBRVib29zdEVtaXNzaW9uSW50ZWdyYWwFHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsBAN1ZGgJAGsDBRl1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsAAMJAGgCAAIFEnd4RW1pc3Npb25QZXJCbG9jawQGdUxhc3RICQBlAgUBaAUDdWRoBAR1ZGgwCQCWAwEJAMwIAgkAZQIFHGd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQFBnVMYXN0SAkAzAgCAAAFA25pbAQEdWRoMQkAZQIJAGUCBQFoBQZ1TGFzdEgFBHVkaDADAwMJAGYCAAAFBnVMYXN0SAYJAGYCAAAFBHVkaDEGCQBnAgkBA2FicwEJAGUCCQBkAgUEdWRoMAUEdWRoMQUDdWRoAAEJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFmludmFsaWQgdWRoIGNhbGM6IHVkaD0JAKQDAQUDdWRoAgggdUxhc3RIPQkApAMBBQZ1TGFzdEgCBiB1ZGgwPQkApAMBBQR1ZGgwAgYgdWRoMT0JAKQDAQUEdWRoMQMJAGYCAAAFGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAAIBAhJ3cm9uZyBjYWxjdWxhdGlvbnMEF3VzZXJNYXhCb29zdEludGVncmFsS0VZCQEXa2V5VXNlck1heEJvb3N0SU5URUdSQUwBBQp1c2VyTnVtU3RyBBh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkJARhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwABA91c2VyTWF4Qm9vc3RJbnQJAQNpb3oCBQR0aGlzBRd1c2VyTWF4Qm9vc3RJbnRlZ3JhbEtFWQQQdG90YWxNYXhCb29zdEludAkBA2lvegIFBHRoaXMFGHRvdGFsTWF4Qm9vc3RJbnRlZ3JhbEtFWQQRdG90YWxDYWNoZWRHd3hLRVkJARFrZXlUb3RhbENhY2hlZEd3eAAEDnRvdGFsQ2FjaGVkR3d4CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEXRvdGFsQ2FjaGVkR3d4S0VZAAAEC3VzZXJDdXJyR3d4CQEUY2FsY0N1cnJlbnRHd3hBbW91bnQBBQ51c2VyQWRkcmVzc1N0cgQhdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsS0VZCQEha2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsAQUKdXNlck51bVN0cgQedXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsCQEDaW96AgUEdGhpcwUhdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsS0VZBBp1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMAMJAAACBQN1ZGgAAAAACQBrAwUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAUEdWRoMAUDdWRoBBp1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMQMJAAACBQN1ZGgAAAAACQBrAwUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAUEdWRoMQUDdWRoBB5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAJAGsDBRp1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMAULcG9vbFdlaWdodDAFDlBPT0xXRUlHSFRNVUxUBB5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEJAGsDBRp1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMQULcG9vbFdlaWdodDEFDlBPT0xXRUlHSFRNVUxUBCJ1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcwAwkAAAIFDnRvdGFsQ2FjaGVkR3d4AAAAAAkAawMFHnBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsMAULdXNlckN1cnJHd3gFDnRvdGFsQ2FjaGVkR3d4BCJ1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcxAwkAAAIFDnRvdGFsQ2FjaGVkR3d4AAAAAAkAawMFHnBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsMQULdXNlckN1cnJHd3gFDnRvdGFsQ2FjaGVkR3d4BCF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcJAGQCBSJ1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcwBSJ1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcxBBN1c2VyQm9vc3RDbGFpbWVkS0VZCQETa2V5VXNlckJvb3N0Q2xhaW1lZAEFCnVzZXJOdW1TdHIEEHVzZXJCb29zdENsYWltZWQJAQNpb3oCBQR0aGlzBRN1c2VyQm9vc3RDbGFpbWVkS0VZBBJ1c2VyQm9vc3RBdmFpbGFibGUJAGUCBSF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcFEHVzZXJCb29zdENsYWltZWQECWRhdGFTdGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQUVYm9vc3RFbWlzc2lvbkludGVncmFsBQNuaWwEBWRlYnVnCQC5CQIJAMwIAgkApAMBBR11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAkAzAgCCQCkAwEFGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAMwIAgkApAMBBRB1c2VyQm9vc3RDbGFpbWVkCQDMCAIJAKQDAQUSdXNlckJvb3N0QXZhaWxhYmxlCQDMCAIJAKQDAQULcG9vbFdlaWdodDAJAMwIAgkApAMBBQtwb29sV2VpZ2h0MQkAzAgCCQCkAwEFAWgJAMwIAgkApAMBBQN1ZGgJAMwIAgkApAMBBQZ1TGFzdEgJAMwIAgkApAMBBQR1ZGgwCQDMCAIJAKQDAQUEdWRoMQkAzAgCCQCkAwEFC3VzZXJDdXJyR3d4CQDMCAIJAKQDAQUOdG90YWxDYWNoZWRHd3gFA25pbAIBOgkAlQoDBSF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcFCWRhdGFTdGF0ZQUFZGVidWcLAWkBC2NvbnN0cnVjdG9yBhFmYWN0b3J5QWRkcmVzc1N0cg5sb2NrQXNzZXRJZFN0cg1taW5Mb2NrQW1vdW50C21pbkR1cmF0aW9uC21heER1cmF0aW9uDG1hdGhDb250cmFjdAQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlOZXh0VXNlck51bQAAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEJa2V5Q29uZmlnAAkBDGZvcm1hdENvbmZpZwUFDmxvY2tBc3NldElkU3RyBQ1taW5Mb2NrQW1vdW50BQttaW5EdXJhdGlvbgULbWF4RHVyYXRpb24FDG1hdGhDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5RmFjdG9yeUFkZHJlc3MABRFmYWN0b3J5QWRkcmVzc1N0cgUDbmlsCQEKU3RhdHNFbnRyeQQAAAAAAAAAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdsb2NrUmVmAwhkdXJhdGlvbg9yZWZlcnJlckFkZHJlc3MJc2lnbmF0dXJlBAdsb2NrSW52CQD8BwQFBHRoaXMCBGxvY2sJAMwIAgUIZHVyYXRpb24FA25pbAgFAWkIcGF5bWVudHMDCQAAAgUHbG9ja0ludgUHbG9ja0ludgQPcmVmZXJyYWxBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQGcmVmSW52AwMJAAACBQ9yZWZlcnJlckFkZHJlc3MCAAYJAAACBQlzaWduYXR1cmUBAAUEdW5pdAkA/AcEBR5yZWZlcnJhbHNDb250cmFjdEFkZHJlc3NPckZhaWwCCmNyZWF0ZVBhaXIJAMwIAgUTcmVmZXJyYWxQcm9ncmFtTmFtZQkAzAgCBQ9yZWZlcnJlckFkZHJlc3MJAMwIAgUPcmVmZXJyYWxBZGRyZXNzCQDMCAIFCXNpZ25hdHVyZQUDbmlsBQNuaWwDCQAAAgUGcmVmSW52BQZyZWZJbnYJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGxvY2sBCGR1cmF0aW9uBAhjZmdBcnJheQkBFXJlYWRDb25maWdBcnJheU9yRmFpbAAECmFzc2V0SWRTdHIJAJEDAgUIY2ZnQXJyYXkFDUlkeENmZ0Fzc2V0SWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQNbWluTG9ja0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGNmZ0FycmF5BRNJZHhDZmdNaW5Mb2NrQW1vdW50BA9taW5Mb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uBA9tYXhMb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uBAxtYXRoQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUIY2ZnQXJyYXkFEklkeENmZ01hdGhDb250cmFjdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAlwbXRBbW91bnQIBQNwbXQGYW1vdW50AwkBAiE9AgUHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkCQACAQkArAICCQCsAgICHmludmFsaWQgYXNzZXQgaXMgaW4gcGF5bWVudCAtIAUKYXNzZXRJZFN0cgIMIGlzIGV4cGVjdGVkBA5uZXh0VXNlck51bUtFWQkBDmtleU5leHRVc2VyTnVtAAQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBA51c2VySXNFeGlzdGluZwkBCWlzRGVmaW5lZAEJAKIIAQkBEmtleVVzZXIyTnVtTWFwcGluZwEFDnVzZXJBZGRyZXNzU3RyBAp1c2VyTnVtU3RyAwUOdXNlcklzRXhpc3RpbmcJAQV2YWx1ZQEJAKIIAQkBEmtleVVzZXIyTnVtTWFwcGluZwEFDnVzZXJBZGRyZXNzU3RyCQCkAwEJAQNpb2YCBQR0aGlzBQ5uZXh0VXNlck51bUtFWQQHdXNlck51bQkBDXBhcnNlSW50VmFsdWUBBQp1c2VyTnVtU3RyBAlsb2NrU3RhcnQFBmhlaWdodAQNc3RhcnRCbG9ja0tFWQkBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBBQp1c2VyTnVtU3RyBAtkdXJhdGlvbktFWQkBFGtleUxvY2tQYXJhbUR1cmF0aW9uAQUKdXNlck51bVN0cgQNdXNlckFtb3VudEtFWQkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQp1c2VyTnVtU3RyAwkAZgIFDW1pbkxvY2tBbW91bnQFCXBtdEFtb3VudAkAAgEJAKwCAgIiYW1vdW50IGlzIGxlc3MgdGhlbiBtaW5Mb2NrQW1vdW50PQkApAMBBQ1taW5Mb2NrQW1vdW50AwkAZgIFD21pbkxvY2tEdXJhdGlvbgUIZHVyYXRpb24JAAIBCQCsAgICLXBhc3NlZCBkdXJhdGlvbiBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkApAMBBQ9taW5Mb2NrRHVyYXRpb24DCQBmAgUIZHVyYXRpb24FD21heExvY2tEdXJhdGlvbgkAAgEJAKwCAgIwcGFzc2VkIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFD21heExvY2tEdXJhdGlvbgMDBQ51c2VySXNFeGlzdGluZwkAZwIJAGQCCQEDaW9mAgUEdGhpcwUNc3RhcnRCbG9ja0tFWQkBA2lvZgIFBHRoaXMFC2R1cmF0aW9uS0VZBQlsb2NrU3RhcnQHCQACAQI2dGhlcmUgaXMgYW4gYWN0aXZlIGxvY2sgLSBjb25zaWRlciB0byB1c2UgaW5jcmVhc2VMb2NrAwkAZgIJAQNpb3oCBQR0aGlzBQ11c2VyQW1vdW50S0VZAAAJAAIBCQCsAgICNHRoZXJlIGFyZSBsb2NrZWQgV1hzIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jayAFDXVzZXJBbW91bnRLRVkEB2NvZWZmWDgJAGsDBQhkdXJhdGlvbgUFTVVMVDgFD21heExvY2tEdXJhdGlvbgQOZ1d4QW1vdW50U3RhcnQJAGsDBQlwbXRBbW91bnQFB2NvZWZmWDgFBU1VTFQ4BBNnV3hQYXJhbXNSZXN1bHRMaXN0CQEDYWFsAQkA/AcEBQxtYXRoQ29udHJhY3QCFWNhbGNHd3hQYXJhbXNSRUFET05MWQkAzAgCBQ5nV3hBbW91bnRTdGFydAkAzAgCBQlsb2NrU3RhcnQJAMwIAgUIZHVyYXRpb24FA25pbAUDbmlsBAFrCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAQBYgkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAEEBnBlcmlvZAkApAMBCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAgQSd3hFbWlzc2lvblBlckJsb2NrCQEDaW9mAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAEDWVtaXNzaW9uU3RhcnQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQEVa2V5RW1pc3Npb25TdGFydEJsb2NrAAQLZW1pc3Npb25FbmQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQETa2V5RW1pc3Npb25FbmRCbG9jawAEAWgDCQBmAgUGaGVpZ2h0BQtlbWlzc2lvbkVuZAULZW1pc3Npb25FbmQFBmhlaWdodAQCZGgJAJYDAQkAzAgCCQBlAgUBaAUNZW1pc3Npb25TdGFydAkAzAgCAAAFA25pbAQgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJASBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAEFCnVzZXJOdW1TdHIEFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAaQIJAGgCCQBoAgUSd3hFbWlzc2lvblBlckJsb2NrBQJkaAACAAMEF3VzZXJNYXhCb29zdEludGVncmFsS0VZCQEXa2V5VXNlck1heEJvb3N0SU5URUdSQUwBBQp1c2VyTnVtU3RyBBh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkJARhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwABA91c2VyTWF4Qm9vc3RJbnQJAGkCCQBoAgUOZ1d4QW1vdW50U3RhcnQFCGR1cmF0aW9uAAIEEHRvdGFsTWF4Qm9vc3RJbnQJAQNpb3oCBQR0aGlzBRh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkEEXRvdGFsQ2FjaGVkR3d4S0VZCQERa2V5VG90YWxDYWNoZWRHd3gABA50b3RhbENhY2hlZEd3eAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRF0b3RhbENhY2hlZEd3eEtFWQAABANhcnIDBQ51c2VySXNFeGlzdGluZwUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5uZXh0VXNlck51bUtFWQkAZAIFB3VzZXJOdW0AAQkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VXNlcjJOdW1NYXBwaW5nAQUOdXNlckFkZHJlc3NTdHIFCnVzZXJOdW1TdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleU51bTJVc2VyTWFwcGluZwEFCnVzZXJOdW1TdHIFDnVzZXJBZGRyZXNzU3RyBQNuaWwJAM4IAgkAzQgCCQDOCAIJAM4IAgUDYXJyCQEPTG9ja1BhcmFtc0VudHJ5CAUOdXNlckFkZHJlc3NTdHIFCnVzZXJOdW1TdHIFCXBtdEFtb3VudAUJbG9ja1N0YXJ0BQhkdXJhdGlvbgUBawUBYgUGcGVyaW9kCQEKU3RhdHNFbnRyeQQFCXBtdEFtb3VudAUIZHVyYXRpb24AAQMFDnVzZXJJc0V4aXN0aW5nAAAAAQkBDEhpc3RvcnlFbnRyeQgCBGxvY2sFDnVzZXJBZGRyZXNzU3RyBQlwbXRBbW91bnQFCWxvY2tTdGFydAUIZHVyYXRpb24FAWsFAWIFAWkJAMwIAgkBDEludGVnZXJFbnRyeQIFIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZBRVib29zdEVtaXNzaW9uSW50ZWdyYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFEXRvdGFsQ2FjaGVkR3d4S0VZCQBkAgUOdG90YWxDYWNoZWRHd3gFDmdXeEFtb3VudFN0YXJ0BQNuaWwBaQEMaW5jcmVhc2VMb2NrAQ1kZWx0YUR1cmF0aW9uBAhjZmdBcnJheQkBFXJlYWRDb25maWdBcnJheU9yRmFpbAAECmFzc2V0SWRTdHIJAJEDAgUIY2ZnQXJyYXkFDUlkeENmZ0Fzc2V0SWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQPbWluTG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01pbkxvY2tEdXJhdGlvbgQPbWF4TG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01heExvY2tEdXJhdGlvbgQMbWF0aENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCGNmZ0FycmF5BRJJZHhDZmdNYXRoQ29udHJhY3QECXBtdEFtb3VudAkBImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwCBQFpBQdhc3NldElkBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIED3VzZXJSZWNvcmRBcnJheQkBGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQUOdXNlckFkZHJlc3NTdHIECnVzZXJOdW1TdHIJAJEDAgUPdXNlclJlY29yZEFycmF5BQ5JZHhMb2NrVXNlck51bQQKdXNlckFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUNSWR4TG9ja0Ftb3VudAQJbG9ja1N0YXJ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQxJZHhMb2NrU3RhcnQEDGxvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUPSWR4TG9ja0R1cmF0aW9uBAdsb2NrRW5kCQBkAgUJbG9ja1N0YXJ0BQxsb2NrRHVyYXRpb24EEXJlbWFpbmluZ0R1cmF0aW9uCQCWAwEJAMwIAgkAZQIFB2xvY2tFbmQFBmhlaWdodAkAzAgCAAAFA25pbAQNdXNlckFtb3VudE5ldwkAZAIFCnVzZXJBbW91bnQFCXBtdEFtb3VudAQPbG9ja0R1cmF0aW9uTmV3CQBkAgURcmVtYWluaW5nRHVyYXRpb24FDWRlbHRhRHVyYXRpb24DCQBmAgAABQ1kZWx0YUR1cmF0aW9uCQACAQIaZHVyYXRpb24gaXMgbGVzcyB0aGVuIHplcm8DCQBmAgUPbWluTG9ja0R1cmF0aW9uBQ9sb2NrRHVyYXRpb25OZXcJAAIBCQCsAgICLWxvY2tEdXJhdGlvbk5ldyBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkApAMBBQ9taW5Mb2NrRHVyYXRpb24DCQBmAgUPbG9ja0R1cmF0aW9uTmV3BQ9tYXhMb2NrRHVyYXRpb24JAAIBCQCsAgICRGRlbHRhRHVyYXRpb24gKyBleGlzdGVkTG9ja0R1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFD21heExvY2tEdXJhdGlvbgQHY29lZmZYOAkAawMFD2xvY2tEdXJhdGlvbk5ldwUFTVVMVDgFD21heExvY2tEdXJhdGlvbgQOZ1d4QW1vdW50U3RhcnQJAGsDBQ11c2VyQW1vdW50TmV3BQdjb2VmZlg4BQVNVUxUOAQMbG9ja1N0YXJ0TmV3BQZoZWlnaHQEE2dXeFBhcmFtc1Jlc3VsdExpc3QJAQNhYWwBCQD8BwQFDG1hdGhDb250cmFjdAIVY2FsY0d3eFBhcmFtc1JFQURPTkxZCQDMCAIFDmdXeEFtb3VudFN0YXJ0CQDMCAIFDGxvY2tTdGFydE5ldwkAzAgCBQ9sb2NrRHVyYXRpb25OZXcFA25pbAUDbmlsBAFrCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAQBYgkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAEEBnBlcmlvZAkApAMBCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAgQSd3hFbWlzc2lvblBlckJsb2NrCQEDaW9mAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAEDWVtaXNzaW9uU3RhcnQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQEVa2V5RW1pc3Npb25TdGFydEJsb2NrAAQLZW1pc3Npb25FbmQJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQETa2V5RW1pc3Npb25FbmRCbG9jawAEAWgDCQBmAgUGaGVpZ2h0BQtlbWlzc2lvbkVuZAULZW1pc3Npb25FbmQFBmhlaWdodAQCZGgJAJYDAQkAzAgCCQBlAgUBaAUNZW1pc3Npb25TdGFydAkAzAgCAAAFA25pbAQgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJASBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAEFCnVzZXJOdW1TdHIEHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsCQEDaW96AgUEdGhpcwUgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkEFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAaQIJAGgCCQBoAgUSd3hFbWlzc2lvblBlckJsb2NrBQJkaAACAAMEGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAGUCBRVib29zdEVtaXNzaW9uSW50ZWdyYWwFHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsAwkAZgIAAAUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAgECEndyb25nIGNhbGN1bGF0aW9ucwQXdXNlck1heEJvb3N0SW50ZWdyYWxLRVkJARdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTAEFCnVzZXJOdW1TdHIEGHRvdGFsTWF4Qm9vc3RJbnRlZ3JhbEtFWQkBGGtleVRvdGFsTWF4Qm9vc3RJTlRFR1JBTAAED3VzZXJNYXhCb29zdEludAkBA2lvegIFBHRoaXMFF3VzZXJNYXhCb29zdEludGVncmFsS0VZBBB0b3RhbE1heEJvb3N0SW50CQEDaW96AgUEdGhpcwUYdG90YWxNYXhCb29zdEludGVncmFsS0VZBAtjdXJyVXNlckd3eAkBFGNhbGNDdXJyZW50R3d4QW1vdW50AQUOdXNlckFkZHJlc3NTdHIEB2d3eERpZmYJAGUCBQ5nV3hBbW91bnRTdGFydAULY3VyclVzZXJHd3gDCQBmAgAABQdnd3hEaWZmCQACAQkArAICAhhnd3hEaWZmIGlzIGxlc3MgdGhlbiAwOiAJAKQDAQUHZ3d4RGlmZgQRdG90YWxDYWNoZWRHd3hLRVkJARFrZXlUb3RhbENhY2hlZEd3eAAEDnRvdGFsQ2FjaGVkR3d4CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEXRvdGFsQ2FjaGVkR3d4S0VZAAAEIXVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbEtFWQkBIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbAEFCnVzZXJOdW1TdHIEHnVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkBA2lvegIFBHRoaXMFIXVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbEtFWQQhdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3CQBrAwUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAULY3VyclVzZXJHd3gFDnRvdGFsQ2FjaGVkR3d4BBJ1c2VyTWF4Qm9vc3RJbnROZXcJAGkCCQBoAgUOZ1d4QW1vdW50U3RhcnQFD2xvY2tEdXJhdGlvbk5ldwACBBhyZW1haW5pbmdVc2VyTWF4Qm9vc3RJbnQJAGkCCQBoAgULY3VyclVzZXJHd3gFEXJlbWFpbmluZ0R1cmF0aW9uAAIEE3VzZXJNYXhCb29zdEludERpZmYJAGUCBRJ1c2VyTWF4Qm9vc3RJbnROZXcFGHJlbWFpbmluZ1VzZXJNYXhCb29zdEludAkAzggCCQDNCAIJAM4IAgkBD0xvY2tQYXJhbXNFbnRyeQgFDnVzZXJBZGRyZXNzU3RyBQp1c2VyTnVtU3RyBQ11c2VyQW1vdW50TmV3BQxsb2NrU3RhcnROZXcFD2xvY2tEdXJhdGlvbk5ldwUBawUBYgUGcGVyaW9kCQEKU3RhdHNFbnRyeQQFCXBtdEFtb3VudAUNZGVsdGFEdXJhdGlvbgAAAAAJAQxIaXN0b3J5RW50cnkIAgRsb2NrBQ51c2VyQWRkcmVzc1N0cgUJcG10QW1vdW50BQlsb2NrU3RhcnQFD2xvY2tEdXJhdGlvbk5ldwUBawUBYgUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgURdG90YWxDYWNoZWRHd3hLRVkJAGQCBQ50b3RhbENhY2hlZEd3eAUHZ3d4RGlmZgUDbmlsAWkBDGNsYWltV3hCb29zdAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyAwkBAiE9AgUPc3Rha2luZ0NvbnRyYWN0CAUBaQZjYWxsZXIJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQEDSR0MDI4MDYyMjgxNjQJARRpbnRlcm5hbENsYWltV3hCb29zdAMFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIHBBJ1c2VyQm9vc3RBdmFpbGFibGUIBQ0kdDAyODA2MjI4MTY0Al8xBAlkYXRhU3RhdGUIBQ0kdDAyODA2MjI4MTY0Al8yBAVkZWJ1ZwgFDSR0MDI4MDYyMjgxNjQCXzMJAJQKAgUJZGF0YVN0YXRlCQDMCAIFEnVzZXJCb29zdEF2YWlsYWJsZQUDbmlsAWkBFGNsYWltV3hCb29zdFJFQURPTkxZAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEDSR0MDI4Mjk2MjgzOTcJARRpbnRlcm5hbENsYWltV3hCb29zdAMFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIGBBJ1c2VyQm9vc3RBdmFpbGFibGUIBQ0kdDAyODI5NjI4Mzk3Al8xBAlkYXRhU3RhdGUIBQ0kdDAyODI5NjI4Mzk3Al8yBAVkZWJ1ZwgFDSR0MDI4Mjk2MjgzOTcCXzMJAJQKAgUDbmlsCQDMCAIFEnVzZXJCb29zdEF2YWlsYWJsZQkAzAgCBQVkZWJ1ZwUDbmlsAWkBBnVubG9jawELdXNlckFkZHJlc3MED3VzZXJSZWNvcmRBcnJheQkBGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQULdXNlckFkZHJlc3MECnVzZXJOdW1TdHIJAJEDAgUPdXNlclJlY29yZEFycmF5BQ5JZHhMb2NrVXNlck51bQQKdXNlckFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUNSWR4TG9ja0Ftb3VudAQJbG9ja1N0YXJ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQxJZHhMb2NrU3RhcnQEDGxvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUPSWR4TG9ja0R1cmF0aW9uBAdsb2NrRW5kCQBkAgUJbG9ja1N0YXJ0BQxsb2NrRHVyYXRpb24ECGNmZ0FycmF5CQEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAQHYXNzZXRJZAkA2QQBCQCRAwIFCGNmZ0FycmF5BQ1JZHhDZmdBc3NldElkBAxtYXRoQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUIY2ZnQXJyYXkFEklkeENmZ01hdGhDb250cmFjdAMJAGcCBQdsb2NrRW5kBQZoZWlnaHQJAAIBCQCsAgIJAKwCAgIFd2FpdCAJAKQDAQUHbG9ja0VuZAIKIHRvIHVubG9jawMJAGcCAAAFCnVzZXJBbW91bnQJAAIBAhFub3RoaW5nIHRvIHVubG9jawQGcGVyaW9kCQELdmFsdWVPckVsc2UCCQCaCAIFDG1hdGhDb250cmFjdAkBDWtleU5leHRQZXJpb2QAAAAJAM0IAgkAzQgCCQDOCAIJAQ9Mb2NrUGFyYW1zRW50cnkIBQt1c2VyQWRkcmVzcwUKdXNlck51bVN0cgAABQlsb2NrU3RhcnQFDGxvY2tEdXJhdGlvbgAAAAAJAKQDAQUGcGVyaW9kCQEKU3RhdHNFbnRyeQQJAQEtAQUKdXNlckFtb3VudAAAAAAA////////////AQkBDEhpc3RvcnlFbnRyeQgCBnVubG9jawULdXNlckFkZHJlc3MFCnVzZXJBbW91bnQFCWxvY2tTdGFydAUMbG9ja0R1cmF0aW9uAAAAAAUBaQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFCnVzZXJBbW91bnQFB2Fzc2V0SWQBaQETZ3d4VXNlckluZm9SRUFET05MWQELdXNlckFkZHJlc3MECWd3eEFtb3VudAkBFGNhbGNDdXJyZW50R3d4QW1vdW50AQULdXNlckFkZHJlc3MJAJQKAgUDbmlsCQDMCAIFCWd3eEFtb3VudAUDbmlsAWkBIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZAgt1c2VyQWRkcmVzcwx0YXJnZXRIZWlnaHQECWd3eEFtb3VudAkBGWNhbGNVc2VyR3d4QW1vdW50QXRIZWlnaHQCBQt1c2VyQWRkcmVzcwUMdGFyZ2V0SGVpZ2h0CQCUCgIFA25pbAUJZ3d4QW1vdW50AWkBCnNldE1hbmFnZXIBF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEFWNoZWNrTWFuYWdlclB1YmxpY0tleQkA2QQBBRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAACBRVjaGVja01hbmFnZXJQdWJsaWNLZXkFFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAzAgCCQELU3RyaW5nRW50cnkCCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TWFuYWdlclB1YmxpY0tleQAJANgEAQkBBXZhbHVlAQUCcG0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V554ICEA==", "chainId": 84, "height": 2156499, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4qAyQdNa4gyufRQxkRkH6EAA6PW9GRtGt6jn14A1NbNy Next: 8GSPM6h6gqDSXK5jUruTiL5fLqUZokWPnwrvT4MsJYxQ Diff:
OldNewDifferences
4848 }
4949
5050
51-func s () = "%s%s__config__factoryAddress"
51+func s () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5252
5353
54-let t = 1
54+let t = addressFromStringValue(e(this, s()))
5555
56-let u = 2
56+let u = makeString(["%s%s", "referral", "programName"], a)
5757
58-let v = 3
58+let v = "wxlock"
5959
60-let w = 4
60+let w = valueOrElse(getString(this, u), v)
6161
62-let x = 5
63-
64-let y = 6
65-
66-let z = 7
67-
68-let A = 8
69-
70-let B = 9
71-
72-let C = 10
73-
74-let D = 11
75-
76-func E () = "%s__factoryConfig"
62+func x () = "%s%s__config__factoryAddress"
7763
7864
79-func F (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
65+let y = 1
66+
67+let z = 2
68+
69+let A = 3
70+
71+let B = 4
72+
73+let C = 5
74+
75+let D = 6
76+
77+let E = 7
78+
79+let F = 8
80+
81+let G = 9
82+
83+let H = 10
84+
85+let I = 11
86+
87+func J () = "%s__factoryConfig"
8088
8189
82-func H () = "%s__lpTokensList"
90+func K (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
8391
8492
85-func I (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
93+func M () = "%s__lpTokensList"
8694
8795
88-func J (K) = makeString(["%s%s", "poolWeight", K], a)
96+func N (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
8997
9098
91-func L (M,N) = ((("%s%s__poolWeight__" + M) + "__") + toString(N))
99+func O (P) = makeString(["%s%s", "poolWeight", P], a)
92100
93101
94-func O () = addressFromStringValue(e(this, s()))
102+func Q (R,S) = ((("%s%s__poolWeight__" + R) + "__") + toString(S))
95103
96104
97-func P () = split(valueOrElse(getString(O(), H()), ""), a)
105+func T () = addressFromStringValue(e(this, x()))
98106
99107
100-func Q (R) = split(e(R, E()), a)
108+func U () = split(valueOrElse(getString(T(), M()), ""), a)
101109
102110
103-func S (T) = addressFromStringValue(T[u])
111+func V (W) = split(e(W, J()), a)
104112
105113
106-func U (T) = addressFromStringValue(T[x])
114+func X (Y) = addressFromStringValue(Y[z])
107115
108116
109-func V (T) = addressFromStringValue(T[t])
117+func Z (Y) = addressFromStringValue(Y[C])
110118
111119
112-func W (T) = addressFromStringValue(T[C])
120+func aa (Y) = addressFromStringValue(Y[y])
113121
114122
115-func X () = "%s__managerPublicKey"
123+func ab (Y) = addressFromStringValue(Y[H])
116124
117125
118-func Y () = "%s__pendingManagerPublicKey"
126+func ac () = "%s__managerPublicKey"
119127
120128
121-func Z () = "%s%s__ratePerBlock__current"
129+func ad () = "%s__pendingManagerPublicKey"
122130
123131
124-func aa () = "%s%s__ratePerBlockMax__current"
132+func ae () = "%s%s__ratePerBlock__current"
125133
126134
127-func ab () = "%s%s__emission__startBlock"
135+func af () = "%s%s__ratePerBlockMax__current"
128136
129137
130-func ac () = "%s%s__emission__duration"
138+func ag () = "%s%s__emission__startBlock"
131139
132140
133-func ad () = "%s%s__emission__endBlock"
141+func ah () = "%s%s__emission__duration"
134142
135143
136-func ae () = "%s__nextPeriod"
144+func ai () = "%s%s__emission__endBlock"
137145
138146
139-func af () = "%s%s__gwxRewardEmissionPart__startHeight"
147+func aj () = "%s__nextPeriod"
140148
141149
142-let ag = 1
143-
144-let ah = 2
145-
146-let ai = 3
147-
148-let aj = 4
149-
150-let ak = 5
151-
152-func al () = "%s__config"
150+func ak () = "%s%s__gwxRewardEmissionPart__startHeight"
153151
154152
155-func am () = split(e(this, al()), a)
153+let al = 1
154+
155+let am = 2
156+
157+let an = 3
158+
159+let ao = 4
160+
161+let ap = 5
162+
163+func aq () = "%s__config"
156164
157165
158-func an (ao,ap,aq,ar,as) = makeString(["%s%d%d%d", ao, ap, aq, ar, as], a)
166+func ar () = split(e(this, aq()), a)
159167
160168
161-func at (ao,ap,aq,ar,as) = an(ao, toString(ap), toString(aq), toString(ar), as)
169+func as (at,au,av,aw,ax) = makeString(["%s%d%d%d", at, au, av, aw, ax], a)
162170
163171
164-func au () = {
165- let o = getString(X())
172+func ay (at,au,av,aw,ax) = as(at, toString(au), toString(av), toString(aw), ax)
173+
174+
175+func az () = {
176+ let o = getString(ac())
166177 if ($isInstanceOf(o, "String"))
167178 then {
168- let av = o
169- fromBase58String(av)
179+ let aA = o
180+ fromBase58String(aA)
170181 }
171182 else if ($isInstanceOf(o, "Unit"))
172183 then unit
174185 }
175186
176187
177-func aw () = {
178- let o = getString(Y())
188+func aB () = {
189+ let o = getString(ad())
179190 if ($isInstanceOf(o, "String"))
180191 then {
181- let av = o
182- fromBase58String(av)
192+ let aA = o
193+ fromBase58String(aA)
183194 }
184195 else if ($isInstanceOf(o, "Unit"))
185196 then unit
187198 }
188199
189200
190-func ax (ay) = {
191- let az = throw("Permission denied")
192- let o = au()
201+func aC (aD) = {
202+ let aE = throw("Permission denied")
203+ let o = az()
193204 if ($isInstanceOf(o, "ByteVector"))
194205 then {
195- let aA = o
196- if ((ay.callerPublicKey == aA))
206+ let aF = o
207+ if ((aD.callerPublicKey == aF))
197208 then true
198- else az
209+ else aE
199210 }
200211 else if ($isInstanceOf(o, "Unit"))
201- then if ((ay.caller == this))
212+ then if ((aD.caller == this))
202213 then true
203- else az
214+ else aE
204215 else throw("Match error")
205216 }
206217
207218
208-let aB = 1
219+let aG = 1
209220
210-let aC = 2
221+let aH = 2
211222
212-let aD = 3
223+let aI = 3
213224
214-let aE = 4
225+let aJ = 4
215226
216-let aF = 5
227+let aK = 5
217228
218-let aG = 6
229+let aL = 6
219230
220-func aH (aI) = makeString(["%s%s__lock", aI], a)
231+func aM (aN) = makeString(["%s%s__lock", aN], a)
221232
222233
223-func aJ (aI) = split(e(this, aH(aI)), a)
234+func aO (aN) = split(e(this, aM(aN)), a)
224235
225236
226-func aK (aL,aM,aN,aO,aP,aQ,aR,aS) = makeString(["%d%d%d%d%d%d%d%d", aL, aM, aN, aO, aP, aQ, aR, aS], a)
237+func aP (aQ,aR,aS,aT,aU,aV,aW,aX) = makeString(["%d%d%d%d%d%d%d%d", aQ, aR, aS, aT, aU, aV, aW, aX], a)
227238
228239
229-func aT (aL,aM,aN,aO,aP,aQ,aS) = aK(aL, toString(aM), toString(aN), toString(aO), toString(aP), toString(aQ), toString(lastBlock.timestamp), toString(aS))
240+func aY (aQ,aR,aS,aT,aU,aV,aX) = aP(aQ, toString(aR), toString(aS), toString(aT), toString(aU), toString(aV), toString(lastBlock.timestamp), toString(aX))
230241
231242
232-func aU () = "%s__nextUserNum"
243+func aZ () = "%s__nextUserNum"
233244
234245
235-func aV (aI) = makeString(["%s%s%s__mapping__user2num", aI], a)
246+func ba (aN) = makeString(["%s%s%s__mapping__user2num", aN], a)
236247
237248
238-func aW (N) = makeString(["%s%s%s__mapping__num2user", N], a)
249+func bb (S) = makeString(["%s%s%s__mapping__num2user", S], a)
239250
240251
241-func aX (aL) = makeString(["%s%d%s__paramByUserNum", aL, "amount"], a)
252+func bc (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "amount"], a)
242253
243254
244-func aY (aL) = makeString(["%s%d%s__paramByUserNum", aL, "start"], a)
255+func bd (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "start"], a)
245256
246257
247-func aZ (aL) = makeString(["%s%d%s__paramByUserNum", aL, "duration"], a)
258+func be (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "duration"], a)
248259
249260
250-func ba (aL) = makeString(["%s%d%s__paramByUserNum", aL, "k"], a)
261+func bf (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "k"], a)
251262
252263
253-func bb (aL) = makeString(["%s%d%s__paramByUserNum", aL, "b"], a)
264+func bg (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "b"], a)
254265
255266
256-func bc (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "k", bd], a)
267+func bh (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "k", bi], a)
257268
258269
259-func be (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "b", bd], a)
270+func bj (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "b", bi], a)
260271
261272
262-func bf () = "%s%s__stats__activeTotalLocked"
273+func bk () = "%s%s__stats__activeTotalLocked"
263274
264275
265-func bg () = "%s%s__stats__locksDurationSumInBlocks"
276+func bl () = "%s%s__stats__locksDurationSumInBlocks"
266277
267278
268-func bh () = "%s%s__stats__locksCount"
279+func bm () = "%s%s__stats__locksCount"
269280
270281
271-func bi () = "%s%s__stats__activeUsersCount"
282+func bn () = "%s%s__stats__activeUsersCount"
272283
273284
274-func bj (aL) = makeString(["%s%d__userBoostEmissionLastInt", aL], a)
285+func bo (aQ) = makeString(["%s%d__userBoostEmissionLastInt", aQ], a)
275286
276287
277-func bk (aL,bl) = makeString(["%s%d__userBoostEmissionLastInt", aL, bl], a)
288+func bp (aQ,bq) = makeString(["%s%d__userBoostEmissionLastInt", aQ, bq], a)
278289
279290
280-func bm (aL) = makeString(["%s%d__maxBoostInt", aL], a)
291+func br (aQ) = makeString(["%s%d__maxBoostInt", aQ], a)
281292
282293
283-func bn () = "%s%s__maxBoostInt__total"
294+func bs () = "%s%s__maxBoostInt__total"
284295
285296
286-func bo (aL) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aL], a)
297+func bt (aQ) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aQ], a)
287298
288299
289-func bp (aL) = makeString(["%s%d__userBoostClaimed", aL], a)
300+func bu (aQ) = makeString(["%s%d__userBoostClaimed", aQ], a)
290301
291302
292-func bq () = "%s%s__gwxCached__total"
303+func bv () = "%s%s__gwxCached__total"
293304
294305
295-let br = O()
306+let bw = T()
296307
297-let T = Q(br)
308+let Y = V(bw)
298309
299-let bs = U(T)
310+let bx = Z(Y)
300311
301-let bt = V(T)
312+let by = aa(Y)
302313
303-let bu = W(T)
314+let bz = ab(Y)
304315
305-func bv (bw,bx,aM,by,aO,bz,bA,ay) = {
306- let bB = makeString(["%s%s%s%s__history", bw, bx, toBase58String(ay.transactionId)], a)
307- let bC = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aM), toString(by), toString(aO), toString(bz), toString(bA)], a)
308- StringEntry(bB, bC)
316+func bA (bB,bC,aR,bD,aT,bE,bF,aD) = {
317+ let bG = makeString(["%s%s%s%s__history", bB, bC, toBase58String(aD.transactionId)], a)
318+ let bH = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bD), toString(aT), toString(bE), toString(bF)], a)
319+ StringEntry(bG, bH)
309320 }
310321
311322
312-func bD (bE,bF,bG,bH) = {
313- let bI = bg()
314- let bJ = bh()
315- let bK = bi()
316- let bL = bf()
317- let bM = h(this, bI)
318- let bN = h(this, bJ)
319- let bO = h(this, bK)
320- let bP = h(this, bL)
321-[IntegerEntry(bI, (bM + bF)), IntegerEntry(bJ, (bN + bG)), IntegerEntry(bK, (bO + bH)), IntegerEntry(bL, (bP + bE))]
323+func bI (bJ,bK,bL,bM) = {
324+ let bN = bl()
325+ let bO = bm()
326+ let bP = bn()
327+ let bQ = bk()
328+ let bR = h(this, bN)
329+ let bS = h(this, bO)
330+ let bT = h(this, bP)
331+ let bU = h(this, bQ)
332+[IntegerEntry(bN, (bR + bK)), IntegerEntry(bO, (bS + bL)), IntegerEntry(bP, (bT + bM)), IntegerEntry(bQ, (bU + bJ))]
322333 }
323334
324335
325-func bQ (bR,bS,bT) = {
326- let bU = 1000
327- (((bR * bT) + bS) / bU)
336+func bV (bW,bX,bY) = {
337+ let bZ = 1000
338+ (((bW * bY) + bX) / bZ)
328339 }
329340
330341
331-func bV (aI,aL,aM,aN,aO,bz,bA,bd) = {
332- let bW = aX(aL)
333- let bX = aY(aL)
334- let bY = aZ(aL)
335- let bZ = ba(aL)
336- let ca = bb(aL)
337- let cb = bc(aL, bd)
338- let cc = be(aL, bd)
339- let aS = bQ(bz, bA, height)
340-[IntegerEntry(bW, aM), IntegerEntry(bX, aN), IntegerEntry(bY, aO), IntegerEntry(bZ, bz), IntegerEntry(ca, bA), IntegerEntry(cb, bz), IntegerEntry(cc, bA), StringEntry(aH(aI), aT(aL, aM, aN, aO, bz, bA, aS))]
342+func ca (aN,aQ,aR,aS,aT,bE,bF,bi) = {
343+ let cb = bc(aQ)
344+ let cc = bd(aQ)
345+ let cd = be(aQ)
346+ let ce = bf(aQ)
347+ let cf = bg(aQ)
348+ let cg = bh(aQ, bi)
349+ let ch = bj(aQ, bi)
350+ let aX = bV(bE, bF, height)
351+[IntegerEntry(cb, aR), IntegerEntry(cc, aS), IntegerEntry(cd, aT), IntegerEntry(ce, bE), IntegerEntry(cf, bF), IntegerEntry(cg, bE), IntegerEntry(ch, bF), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bE, bF, aX))]
341352 }
342353
343354
344-func cd (ay,ce) = if ((size(ay.payments) > 1))
355+func ci (aD,cj) = if ((size(aD.payments) > 1))
345356 then throw("only one payment is allowed")
346- else if ((size(ay.payments) == 0))
357+ else if ((size(aD.payments) == 0))
347358 then 0
348359 else {
349- let cf = ay.payments[0]
350- if ((value(cf.assetId) != ce))
360+ let ck = aD.payments[0]
361+ if ((value(ck.assetId) != cj))
351362 then throw("invalid asset id in payment")
352- else cf.amount
363+ else ck.amount
353364 }
354365
355366
356-func cg (aI,ch) = {
357- let ci = "empty"
358- let cj = aV(aI)
359- let aL = valueOrElse(getString(cj), ci)
360- let bz = valueOrElse(getInteger(ba(aL)), 0)
361- let bA = valueOrElse(getInteger(bb(aL)), 0)
362- let ck = bQ(bz, bA, ch)
363- let aS = if ((0 > ck))
367+func cl (aN,cm) = {
368+ let cn = "empty"
369+ let co = ba(aN)
370+ let aQ = valueOrElse(getString(co), cn)
371+ let bE = valueOrElse(getInteger(bf(aQ)), 0)
372+ let bF = valueOrElse(getInteger(bg(aQ)), 0)
373+ let cp = bV(bE, bF, cm)
374+ let aX = if ((0 > cp))
364375 then 0
365- else ck
366- aS
376+ else cp
377+ aX
367378 }
368379
369380
370-func cl (aI) = cg(aI, height)
381+func cq (aN) = cl(aN, height)
371382
372383
373-func cm (cn,co,cp) = {
374- let ci = "EMPTY"
375- let cq = valueOrElse(getString(this, aH(co)), ci)
376- if ((cq == ci))
384+func cr (cs,ct,cu) = {
385+ let cn = "EMPTY"
386+ let cv = valueOrElse(getString(this, aM(ct)), cn)
387+ if ((cv == cn))
377388 then $Tuple3(0, nil, "userRecord::is::empty")
378389 else {
379- let cr = split(cq, a)
380- let cs = cr[aB]
381- let ct = valueOrElse(getInteger(bu, af()), 0)
382- let cu = "empty"
383- let cv = if ((cn != cu))
390+ let cw = split(cv, a)
391+ let cx = cw[aG]
392+ let cy = valueOrElse(getInteger(bz, ak()), 0)
393+ let cz = "empty"
394+ let cA = if ((cs != cz))
384395 then {
385- let cw = valueOrErrorMessage(getString(br, F(cn)), ("unsupported lp asset " + cn))
386- let cx = getIntegerValue(br, J(cw))
387- let cy = valueOrElse(getInteger(br, L(cw, 0)), cx)
388- $Tuple2(cy, cx)
396+ let cB = valueOrErrorMessage(getString(bw, K(cs)), ("unsupported lp asset " + cs))
397+ let cC = getIntegerValue(bw, O(cB))
398+ let cD = valueOrElse(getInteger(bw, Q(cB, 0)), cC)
399+ $Tuple2(cD, cC)
389400 }
390- else if (cp)
401+ else if (cu)
391402 then $Tuple2(0, 0)
392- else throw(("not readonly mode: unsupported lp asset " + cn))
393- let cz = cv._1
394- let cA = cv._2
395- let cB = k(bs, Z())
396- let cC = k(bs, ab())
397- let cD = k(bs, ad())
398- let bT = if ((height > cD))
399- then cD
403+ else throw(("not readonly mode: unsupported lp asset " + cs))
404+ let cE = cA._1
405+ let cF = cA._2
406+ let cG = k(bx, ae())
407+ let cH = k(bx, ag())
408+ let cI = k(bx, ai())
409+ let bY = if ((height > cI))
410+ then cI
400411 else height
401- let cE = max([(bT - cC), 0])
402- let cF = bk(cs, cn)
403- let cG = bj(cs)
404- let cH = valueOrElse(getInteger(this, cF), h(this, cG))
405- let cI = (((cB * cE) * 2) / 3)
406- let cJ = (cI - cH)
407- let cK = fraction(cJ, 3, (2 * cB))
408- let cL = (bT - cK)
409- let cM = max([(ct - cL), 0])
410- let cN = ((bT - cL) - cM)
411- if (if (if ((0 > cL))
412+ let cJ = max([(bY - cH), 0])
413+ let cK = bp(cx, cs)
414+ let cL = bo(cx)
415+ let cM = valueOrElse(getInteger(this, cK), h(this, cL))
416+ let cN = (((cG * cJ) * 2) / 3)
417+ let cO = (cN - cM)
418+ let cP = fraction(cO, 3, (2 * cG))
419+ let cQ = (bY - cP)
420+ let cR = max([(cy - cQ), 0])
421+ let cS = ((bY - cQ) - cR)
422+ if (if (if ((0 > cQ))
412423 then true
413- else (0 > cN))
424+ else (0 > cS))
414425 then true
415- else (l(((cM + cN) - cK)) >= 1))
416- then throw(((((((("invalid udh calc: udh=" + toString(cK)) + " uLastH=") + toString(cL)) + " udh0=") + toString(cM)) + " udh1=") + toString(cN)))
417- else if ((0 > cJ))
426+ else (l(((cR + cS) - cP)) >= 1))
427+ then throw(((((((("invalid udh calc: udh=" + toString(cP)) + " uLastH=") + toString(cQ)) + " udh0=") + toString(cR)) + " udh1=") + toString(cS)))
428+ else if ((0 > cO))
418429 then throw("wrong calculations")
419430 else {
420- let cO = bm(cs)
421- let cP = bn()
422- let cQ = h(this, cO)
423- let cR = h(this, cP)
424- let cS = bq()
425- let cT = valueOrElse(getInteger(this, cS), 0)
426- let cU = cl(co)
427- let cV = bo(cs)
428- let cW = h(this, cV)
429- let cX = if ((cK == 0))
431+ let cT = br(cx)
432+ let cU = bs()
433+ let cV = h(this, cT)
434+ let cW = h(this, cU)
435+ let cX = bv()
436+ let cY = valueOrElse(getInteger(this, cX), 0)
437+ let cZ = cq(ct)
438+ let da = bt(cx)
439+ let db = h(this, da)
440+ let dc = if ((cP == 0))
430441 then 0
431- else fraction(cJ, cM, cK)
432- let cY = if ((cK == 0))
442+ else fraction(cO, cR, cP)
443+ let dd = if ((cP == 0))
433444 then 0
434- else fraction(cJ, cN, cK)
435- let cZ = fraction(cX, cz, d)
436- let da = fraction(cY, cA, d)
437- let db = if ((cT == 0))
445+ else fraction(cO, cS, cP)
446+ let de = fraction(dc, cE, d)
447+ let df = fraction(dd, cF, d)
448+ let dg = if ((cY == 0))
438449 then 0
439- else fraction(cZ, cU, cT)
440- let dc = if ((cT == 0))
450+ else fraction(de, cZ, cY)
451+ let dh = if ((cY == 0))
441452 then 0
442- else fraction(da, cU, cT)
443- let dd = (db + dc)
444- let de = bp(cs)
445- let df = h(this, de)
446- let dg = (dd - df)
447- let dh = [IntegerEntry(cF, cI)]
448- let di = makeString([toString(cH), toString(cJ), toString(df), toString(dg), toString(cz), toString(cA), toString(bT), toString(cK), toString(cL), toString(cM), toString(cN), toString(cU), toString(cT)], ":")
449- $Tuple3(dd, dh, di)
453+ else fraction(df, cZ, cY)
454+ let di = (dg + dh)
455+ let dj = bu(cx)
456+ let dk = h(this, dj)
457+ let dl = (di - dk)
458+ let dm = [IntegerEntry(cK, cN)]
459+ let dn = makeString([toString(cM), toString(cO), toString(dk), toString(dl), toString(cE), toString(cF), toString(bY), toString(cP), toString(cQ), toString(cR), toString(cS), toString(cZ), toString(cY)], ":")
460+ $Tuple3(di, dm, dn)
450461 }
451462 }
452463 }
453464
454465
455-@Callable(ay)
456-func constructor (dj,dk,ap,dl,dm,as) = {
457- let dn = ax(ay)
458- if ((dn == dn))
459- then ([IntegerEntry(aU(), 0), StringEntry(al(), at(dk, ap, dl, dm, as)), StringEntry(s(), dj)] ++ bD(0, 0, 0, 0))
466+@Callable(aD)
467+func constructor (do,dp,au,dq,dr,ax) = {
468+ let ds = aC(aD)
469+ if ((ds == ds))
470+ then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dp, au, dq, dr, ax)), StringEntry(x(), do)] ++ bI(0, 0, 0, 0))
460471 else throw("Strict value is not equal to itself.")
461472 }
462473
463474
464475
465-@Callable(ay)
466-func lock (aO) = {
467- let do = am()
468- let dp = do[ag]
469- let ao = fromBase58String(dp)
470- let ap = parseIntValue(do[ah])
471- let aq = parseIntValue(do[ai])
472- let ar = parseIntValue(do[aj])
473- let as = addressFromStringValue(do[ak])
474- if ((size(ay.payments) != 1))
476+@Callable(aD)
477+func lockRef (aT,dt,du) = {
478+ let dv = invoke(this, "lock", [aT], aD.payments)
479+ if ((dv == dv))
480+ then {
481+ let dw = toString(aD.caller)
482+ let dx = if (if ((dt == ""))
483+ then true
484+ else (du == base58''))
485+ then unit
486+ else invoke(t, "createPair", [w, dt, dw, du], nil)
487+ if ((dx == dx))
488+ then $Tuple2(nil, unit)
489+ else throw("Strict value is not equal to itself.")
490+ }
491+ else throw("Strict value is not equal to itself.")
492+ }
493+
494+
495+
496+@Callable(aD)
497+func lock (aT) = {
498+ let dy = ar()
499+ let dz = dy[al]
500+ let at = fromBase58String(dz)
501+ let au = parseIntValue(dy[am])
502+ let av = parseIntValue(dy[an])
503+ let aw = parseIntValue(dy[ao])
504+ let ax = addressFromStringValue(dy[ap])
505+ if ((size(aD.payments) != 1))
475506 then throw("invalid payment - exact one payment must be attached")
476507 else {
477- let cf = ay.payments[0]
478- let dq = cf.amount
479- if ((ao != value(cf.assetId)))
480- then throw((("invalid asset is in payment - " + dp) + " is expected"))
508+ let ck = aD.payments[0]
509+ let dA = ck.amount
510+ if ((at != value(ck.assetId)))
511+ then throw((("invalid asset is in payment - " + dz) + " is expected"))
481512 else {
482- let dr = aU()
483- let co = toString(ay.caller)
484- let ds = isDefined(getString(aV(co)))
485- let cs = if (ds)
486- then value(getString(aV(co)))
487- else toString(k(this, dr))
488- let aL = parseIntValue(cs)
489- let by = height
490- let bX = aY(cs)
491- let bY = aZ(cs)
492- let bW = aX(cs)
493- if ((ap > dq))
494- then throw(("amount is less then minLockAmount=" + toString(ap)))
495- else if ((aq > aO))
496- then throw(("passed duration is less then minLockDuration=" + toString(aq)))
497- else if ((aO > ar))
498- then throw(("passed duration is greater then maxLockDuration=" + toString(ar)))
499- else if (if (ds)
500- then ((k(this, bX) + k(this, bY)) >= by)
513+ let dB = aZ()
514+ let ct = toString(aD.caller)
515+ let dC = isDefined(getString(ba(ct)))
516+ let cx = if (dC)
517+ then value(getString(ba(ct)))
518+ else toString(k(this, dB))
519+ let aQ = parseIntValue(cx)
520+ let bD = height
521+ let cc = bd(cx)
522+ let cd = be(cx)
523+ let cb = bc(cx)
524+ if ((au > dA))
525+ then throw(("amount is less then minLockAmount=" + toString(au)))
526+ else if ((av > aT))
527+ then throw(("passed duration is less then minLockDuration=" + toString(av)))
528+ else if ((aT > aw))
529+ then throw(("passed duration is greater then maxLockDuration=" + toString(aw)))
530+ else if (if (dC)
531+ then ((k(this, cc) + k(this, cd)) >= bD)
501532 else false)
502533 then throw("there is an active lock - consider to use increaseLock")
503- else if ((h(this, bW) > 0))
504- then throw(("there are locked WXs - consider to use increaseLock " + bW))
534+ else if ((h(this, cb) > 0))
535+ then throw(("there are locked WXs - consider to use increaseLock " + cb))
505536 else {
506- let dt = fraction(aO, c, ar)
507- let du = fraction(dq, dt, c)
508- let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, by, aO], nil))
509- let bz = q(dv[0])
510- let bA = q(dv[1])
511- let bd = toString(q(dv[2]))
512- let cB = k(bs, Z())
513- let cC = k(bs, ab())
514- let cD = k(bs, ad())
515- let bT = if ((height > cD))
516- then cD
537+ let dD = fraction(aT, c, aw)
538+ let dE = fraction(dA, dD, c)
539+ let dF = n(invoke(ax, "calcGwxParamsREADONLY", [dE, bD, aT], nil))
540+ let bE = q(dF[0])
541+ let bF = q(dF[1])
542+ let bi = toString(q(dF[2]))
543+ let cG = k(bx, ae())
544+ let cH = k(bx, ag())
545+ let cI = k(bx, ai())
546+ let bY = if ((height > cI))
547+ then cI
517548 else height
518- let cE = max([(bT - cC), 0])
519- let cG = bj(cs)
520- let cI = (((cB * cE) * 2) / 3)
521- let cO = bm(cs)
522- let cP = bn()
523- let cQ = ((du * aO) / 2)
524- let cR = h(this, cP)
525- let cS = bq()
526- let cT = valueOrElse(getInteger(this, cS), 0)
527- let dw = if (ds)
549+ let cJ = max([(bY - cH), 0])
550+ let cL = bo(cx)
551+ let cN = (((cG * cJ) * 2) / 3)
552+ let cT = br(cx)
553+ let cU = bs()
554+ let cV = ((dE * aT) / 2)
555+ let cW = h(this, cU)
556+ let cX = bv()
557+ let cY = valueOrElse(getInteger(this, cX), 0)
558+ let dG = if (dC)
528559 then nil
529- else [IntegerEntry(dr, (aL + 1)), StringEntry(aV(co), cs), StringEntry(aW(cs), co)]
530- ((((dw ++ bV(co, cs, dq, by, aO, bz, bA, bd)) ++ bD(dq, aO, 1, if (ds)
560+ else [IntegerEntry(dB, (aQ + 1)), StringEntry(ba(ct), cx), StringEntry(bb(cx), ct)]
561+ ((((dG ++ ca(ct, cx, dA, bD, aT, bE, bF, bi)) ++ bI(dA, aT, 1, if (dC)
531562 then 0
532- else 1)) :+ bv("lock", co, dq, by, aO, bz, bA, ay)) ++ [IntegerEntry(cG, cI), IntegerEntry(cS, (cT + du))])
563+ else 1)) :+ bA("lock", ct, dA, bD, aT, bE, bF, aD)) ++ [IntegerEntry(cL, cN), IntegerEntry(cX, (cY + dE))])
533564 }
534565 }
535566 }
537568
538569
539570
540-@Callable(ay)
541-func increaseLock (dx) = {
542- let do = am()
543- let dp = do[ag]
544- let ao = fromBase58String(dp)
545- let aq = parseIntValue(do[ai])
546- let ar = parseIntValue(do[aj])
547- let as = addressFromStringValue(do[ak])
548- let dq = cd(ay, ao)
549- let co = toString(ay.caller)
550- let cr = aJ(co)
551- let cs = cr[aB]
552- let dy = parseIntValue(cr[aC])
553- let by = parseIntValue(cr[aD])
554- let dz = parseIntValue(cr[aE])
555- let dA = (by + dz)
556- let dB = max([(dA - height), 0])
557- let dC = (dy + dq)
558- let dD = (dB + dx)
559- if ((0 > dx))
571+@Callable(aD)
572+func increaseLock (dH) = {
573+ let dy = ar()
574+ let dz = dy[al]
575+ let at = fromBase58String(dz)
576+ let av = parseIntValue(dy[an])
577+ let aw = parseIntValue(dy[ao])
578+ let ax = addressFromStringValue(dy[ap])
579+ let dA = ci(aD, at)
580+ let ct = toString(aD.caller)
581+ let cw = aO(ct)
582+ let cx = cw[aG]
583+ let dI = parseIntValue(cw[aH])
584+ let bD = parseIntValue(cw[aI])
585+ let dJ = parseIntValue(cw[aJ])
586+ let dK = (bD + dJ)
587+ let dL = max([(dK - height), 0])
588+ let dM = (dI + dA)
589+ let dN = (dL + dH)
590+ if ((0 > dH))
560591 then throw("duration is less then zero")
561- else if ((aq > dD))
562- then throw(("lockDurationNew is less then minLockDuration=" + toString(aq)))
563- else if ((dD > ar))
564- then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ar)))
592+ else if ((av > dN))
593+ then throw(("lockDurationNew is less then minLockDuration=" + toString(av)))
594+ else if ((dN > aw))
595+ then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aw)))
565596 else {
566- let dt = fraction(dD, c, ar)
567- let du = fraction(dC, dt, c)
568- let dE = height
569- let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, dE, dD], nil))
570- let bz = q(dv[0])
571- let bA = q(dv[1])
572- let bd = toString(q(dv[2]))
573- let cB = k(bs, Z())
574- let cC = k(bs, ab())
575- let cD = k(bs, ad())
576- let bT = if ((height > cD))
577- then cD
597+ let dD = fraction(dN, c, aw)
598+ let dE = fraction(dM, dD, c)
599+ let dO = height
600+ let dF = n(invoke(ax, "calcGwxParamsREADONLY", [dE, dO, dN], nil))
601+ let bE = q(dF[0])
602+ let bF = q(dF[1])
603+ let bi = toString(q(dF[2]))
604+ let cG = k(bx, ae())
605+ let cH = k(bx, ag())
606+ let cI = k(bx, ai())
607+ let bY = if ((height > cI))
608+ then cI
578609 else height
579- let cE = max([(bT - cC), 0])
580- let cG = bj(cs)
581- let cH = h(this, cG)
582- let cI = (((cB * cE) * 2) / 3)
583- let cJ = (cI - cH)
584- if ((0 > cJ))
610+ let cJ = max([(bY - cH), 0])
611+ let cL = bo(cx)
612+ let cM = h(this, cL)
613+ let cN = (((cG * cJ) * 2) / 3)
614+ let cO = (cN - cM)
615+ if ((0 > cO))
585616 then throw("wrong calculations")
586617 else {
587- let cO = bm(cs)
588- let cP = bn()
589- let cQ = h(this, cO)
590- let cR = h(this, cP)
591- let dF = cl(co)
592- let dG = (du - dF)
593- if ((0 > dG))
594- then throw(("gwxDiff is less then 0: " + toString(dG)))
618+ let cT = br(cx)
619+ let cU = bs()
620+ let cV = h(this, cT)
621+ let cW = h(this, cU)
622+ let dP = cq(ct)
623+ let dQ = (dE - dP)
624+ if ((0 > dQ))
625+ then throw(("gwxDiff is less then 0: " + toString(dQ)))
595626 else {
596- let cS = bq()
597- let cT = valueOrElse(getInteger(this, cS), 0)
598- let cV = bo(cs)
599- let cW = h(this, cV)
600- let dd = fraction(cJ, dF, cT)
601- let dH = ((du * dD) / 2)
602- let dI = ((dF * dB) / 2)
603- let dJ = (dH - dI)
604- (((bV(co, cs, dC, dE, dD, bz, bA, bd) ++ bD(dq, dx, 0, 0)) :+ bv("lock", co, dq, by, dD, bz, bA, ay)) ++ [IntegerEntry(cS, (cT + dG))])
627+ let cX = bv()
628+ let cY = valueOrElse(getInteger(this, cX), 0)
629+ let da = bt(cx)
630+ let db = h(this, da)
631+ let di = fraction(cO, dP, cY)
632+ let dR = ((dE * dN) / 2)
633+ let dS = ((dP * dL) / 2)
634+ let dT = (dR - dS)
635+ (((ca(ct, cx, dM, dO, dN, bE, bF, bi) ++ bI(dA, dH, 0, 0)) :+ bA("lock", ct, dA, bD, dN, bE, bF, aD)) ++ [IntegerEntry(cX, (cY + dQ))])
605636 }
606637 }
607638 }
609640
610641
611642
612-@Callable(ay)
613-func claimWxBoost (cn,co) = if ((bt != ay.caller))
643+@Callable(aD)
644+func claimWxBoost (cs,ct) = if ((by != aD.caller))
614645 then throw("permissions denied")
615646 else {
616- let dK = cm(cn, co, false)
617- let dg = dK._1
618- let dh = dK._2
619- let di = dK._3
620- $Tuple2(dh, [dg])
647+ let dU = cr(cs, ct, false)
648+ let dl = dU._1
649+ let dm = dU._2
650+ let dn = dU._3
651+ $Tuple2(dm, [dl])
621652 }
622653
623654
624655
625-@Callable(ay)
626-func claimWxBoostREADONLY (cn,co) = {
627- let dL = cm(cn, co, true)
628- let dg = dL._1
629- let dh = dL._2
630- let di = dL._3
631- $Tuple2(nil, [dg, di])
656+@Callable(aD)
657+func claimWxBoostREADONLY (cs,ct) = {
658+ let dV = cr(cs, ct, true)
659+ let dl = dV._1
660+ let dm = dV._2
661+ let dn = dV._3
662+ $Tuple2(nil, [dl, dn])
632663 }
633664
634665
635666
636-@Callable(ay)
637-func unlock (aI) = {
638- let cr = aJ(aI)
639- let cs = cr[aB]
640- let dy = parseIntValue(cr[aC])
641- let by = parseIntValue(cr[aD])
642- let dz = parseIntValue(cr[aE])
643- let dA = (by + dz)
644- let do = am()
645- let ao = fromBase58String(do[ag])
646- let as = addressFromStringValue(do[ak])
647- if ((dA >= height))
648- then throw((("wait " + toString(dA)) + " to unlock"))
649- else if ((0 >= dy))
667+@Callable(aD)
668+func unlock (aN) = {
669+ let cw = aO(aN)
670+ let cx = cw[aG]
671+ let dI = parseIntValue(cw[aH])
672+ let bD = parseIntValue(cw[aI])
673+ let dJ = parseIntValue(cw[aJ])
674+ let dK = (bD + dJ)
675+ let dy = ar()
676+ let at = fromBase58String(dy[al])
677+ let ax = addressFromStringValue(dy[ap])
678+ if ((dK >= height))
679+ then throw((("wait " + toString(dK)) + " to unlock"))
680+ else if ((0 >= dI))
650681 then throw("nothing to unlock")
651682 else {
652- let bd = valueOrElse(getInteger(as, ae()), 0)
653- (((bV(aI, cs, 0, by, dz, 0, 0, toString(bd)) ++ bD(-(dy), 0, 0, -1)) :+ bv("unlock", aI, dy, by, dz, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dy, ao))
683+ let bi = valueOrElse(getInteger(ax, aj()), 0)
684+ (((ca(aN, cx, 0, bD, dJ, 0, 0, toString(bi)) ++ bI(-(dI), 0, 0, -1)) :+ bA("unlock", aN, dI, bD, dJ, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dI, at))
654685 }
655686 }
656687
657688
658689
659-@Callable(ay)
660-func gwxUserInfoREADONLY (aI) = {
661- let aS = cl(aI)
662- $Tuple2(nil, [aS])
690+@Callable(aD)
691+func gwxUserInfoREADONLY (aN) = {
692+ let aX = cq(aN)
693+ $Tuple2(nil, [aX])
663694 }
664695
665696
666697
667-@Callable(ay)
668-func getUserGwxAmountAtHeightREADONLY (aI,ch) = {
669- let aS = cg(aI, ch)
670- $Tuple2(nil, aS)
698+@Callable(aD)
699+func getUserGwxAmountAtHeightREADONLY (aN,cm) = {
700+ let aX = cl(aN, cm)
701+ $Tuple2(nil, aX)
671702 }
672703
673704
674705
675-@Callable(ay)
676-func setManager (dM) = {
677- let dn = ax(ay)
678- if ((dn == dn))
706+@Callable(aD)
707+func setManager (dW) = {
708+ let ds = aC(aD)
709+ if ((ds == ds))
679710 then {
680- let dN = fromBase58String(dM)
681- if ((dN == dN))
682- then [StringEntry(Y(), dM)]
711+ let dX = fromBase58String(dW)
712+ if ((dX == dX))
713+ then [StringEntry(ad(), dW)]
683714 else throw("Strict value is not equal to itself.")
684715 }
685716 else throw("Strict value is not equal to itself.")
687718
688719
689720
690-@Callable(ay)
721+@Callable(aD)
691722 func confirmManager () = {
692- let dO = aw()
693- let dP = if (isDefined(dO))
723+ let dY = aB()
724+ let dZ = if (isDefined(dY))
694725 then true
695726 else throw("No pending manager")
696- if ((dP == dP))
727+ if ((dZ == dZ))
697728 then {
698- let dQ = if ((ay.callerPublicKey == value(dO)))
729+ let ea = if ((aD.callerPublicKey == value(dY)))
699730 then true
700731 else throw("You are not pending manager")
701- if ((dQ == dQ))
702- then [StringEntry(X(), toBase58String(value(dO))), DeleteEntry(Y())]
732+ if ((ea == ea))
733+ then [StringEntry(ac(), toBase58String(value(dY))), DeleteEntry(ad())]
703734 else throw("Strict value is not equal to itself.")
704735 }
705736 else throw("Strict value is not equal to itself.")
706737 }
707738
708739
709-@Verifier(dR)
710-func dS () = {
711- let dT = {
712- let o = au()
740+@Verifier(eb)
741+func ec () = {
742+ let ed = {
743+ let o = az()
713744 if ($isInstanceOf(o, "ByteVector"))
714745 then {
715- let aA = o
716- aA
746+ let aF = o
747+ aF
717748 }
718749 else if ($isInstanceOf(o, "Unit"))
719- then dR.senderPublicKey
750+ then eb.senderPublicKey
720751 else throw("Match error")
721752 }
722- sigVerify(dR.bodyBytes, dR.proofs[0], dT)
753+ sigVerify(eb.bodyBytes, eb.proofs[0], ed)
723754 }
724755
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
1212 func e (f,g) = valueOrErrorMessage(getString(f, g), (("mandatory this." + g) + " is not defined"))
1313
1414
1515 func h (f,g) = valueOrElse(getInteger(f, g), 0)
1616
1717
1818 func i (f,g,j) = valueOrElse(getInteger(f, g), j)
1919
2020
2121 func k (f,g) = valueOrErrorMessage(getInteger(f, g), (("mandatory this." + g) + " is not defined"))
2222
2323
2424 func l (m) = if ((0 > m))
2525 then -(m)
2626 else m
2727
2828
2929 func n (m) = {
3030 let o = m
3131 if ($isInstanceOf(o, "List[Any]"))
3232 then {
3333 let p = o
3434 p
3535 }
3636 else throw("fail to cast into List[Any]")
3737 }
3838
3939
4040 func q (m) = {
4141 let o = m
4242 if ($isInstanceOf(o, "Int"))
4343 then {
4444 let r = o
4545 r
4646 }
4747 else throw("fail to cast into Int")
4848 }
4949
5050
51-func s () = "%s%s__config__factoryAddress"
51+func s () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5252
5353
54-let t = 1
54+let t = addressFromStringValue(e(this, s()))
5555
56-let u = 2
56+let u = makeString(["%s%s", "referral", "programName"], a)
5757
58-let v = 3
58+let v = "wxlock"
5959
60-let w = 4
60+let w = valueOrElse(getString(this, u), v)
6161
62-let x = 5
63-
64-let y = 6
65-
66-let z = 7
67-
68-let A = 8
69-
70-let B = 9
71-
72-let C = 10
73-
74-let D = 11
75-
76-func E () = "%s__factoryConfig"
62+func x () = "%s%s__config__factoryAddress"
7763
7864
79-func F (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
65+let y = 1
66+
67+let z = 2
68+
69+let A = 3
70+
71+let B = 4
72+
73+let C = 5
74+
75+let D = 6
76+
77+let E = 7
78+
79+let F = 8
80+
81+let G = 9
82+
83+let H = 10
84+
85+let I = 11
86+
87+func J () = "%s__factoryConfig"
8088
8189
82-func H () = "%s__lpTokensList"
90+func K (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
8391
8492
85-func I (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
93+func M () = "%s__lpTokensList"
8694
8795
88-func J (K) = makeString(["%s%s", "poolWeight", K], a)
96+func N (L) = makeString(["%s%s%s", L, "mappings__lpAsset2PoolContract"], a)
8997
9098
91-func L (M,N) = ((("%s%s__poolWeight__" + M) + "__") + toString(N))
99+func O (P) = makeString(["%s%s", "poolWeight", P], a)
92100
93101
94-func O () = addressFromStringValue(e(this, s()))
102+func Q (R,S) = ((("%s%s__poolWeight__" + R) + "__") + toString(S))
95103
96104
97-func P () = split(valueOrElse(getString(O(), H()), ""), a)
105+func T () = addressFromStringValue(e(this, x()))
98106
99107
100-func Q (R) = split(e(R, E()), a)
108+func U () = split(valueOrElse(getString(T(), M()), ""), a)
101109
102110
103-func S (T) = addressFromStringValue(T[u])
111+func V (W) = split(e(W, J()), a)
104112
105113
106-func U (T) = addressFromStringValue(T[x])
114+func X (Y) = addressFromStringValue(Y[z])
107115
108116
109-func V (T) = addressFromStringValue(T[t])
117+func Z (Y) = addressFromStringValue(Y[C])
110118
111119
112-func W (T) = addressFromStringValue(T[C])
120+func aa (Y) = addressFromStringValue(Y[y])
113121
114122
115-func X () = "%s__managerPublicKey"
123+func ab (Y) = addressFromStringValue(Y[H])
116124
117125
118-func Y () = "%s__pendingManagerPublicKey"
126+func ac () = "%s__managerPublicKey"
119127
120128
121-func Z () = "%s%s__ratePerBlock__current"
129+func ad () = "%s__pendingManagerPublicKey"
122130
123131
124-func aa () = "%s%s__ratePerBlockMax__current"
132+func ae () = "%s%s__ratePerBlock__current"
125133
126134
127-func ab () = "%s%s__emission__startBlock"
135+func af () = "%s%s__ratePerBlockMax__current"
128136
129137
130-func ac () = "%s%s__emission__duration"
138+func ag () = "%s%s__emission__startBlock"
131139
132140
133-func ad () = "%s%s__emission__endBlock"
141+func ah () = "%s%s__emission__duration"
134142
135143
136-func ae () = "%s__nextPeriod"
144+func ai () = "%s%s__emission__endBlock"
137145
138146
139-func af () = "%s%s__gwxRewardEmissionPart__startHeight"
147+func aj () = "%s__nextPeriod"
140148
141149
142-let ag = 1
143-
144-let ah = 2
145-
146-let ai = 3
147-
148-let aj = 4
149-
150-let ak = 5
151-
152-func al () = "%s__config"
150+func ak () = "%s%s__gwxRewardEmissionPart__startHeight"
153151
154152
155-func am () = split(e(this, al()), a)
153+let al = 1
154+
155+let am = 2
156+
157+let an = 3
158+
159+let ao = 4
160+
161+let ap = 5
162+
163+func aq () = "%s__config"
156164
157165
158-func an (ao,ap,aq,ar,as) = makeString(["%s%d%d%d", ao, ap, aq, ar, as], a)
166+func ar () = split(e(this, aq()), a)
159167
160168
161-func at (ao,ap,aq,ar,as) = an(ao, toString(ap), toString(aq), toString(ar), as)
169+func as (at,au,av,aw,ax) = makeString(["%s%d%d%d", at, au, av, aw, ax], a)
162170
163171
164-func au () = {
165- let o = getString(X())
172+func ay (at,au,av,aw,ax) = as(at, toString(au), toString(av), toString(aw), ax)
173+
174+
175+func az () = {
176+ let o = getString(ac())
166177 if ($isInstanceOf(o, "String"))
167178 then {
168- let av = o
169- fromBase58String(av)
179+ let aA = o
180+ fromBase58String(aA)
170181 }
171182 else if ($isInstanceOf(o, "Unit"))
172183 then unit
173184 else throw("Match error")
174185 }
175186
176187
177-func aw () = {
178- let o = getString(Y())
188+func aB () = {
189+ let o = getString(ad())
179190 if ($isInstanceOf(o, "String"))
180191 then {
181- let av = o
182- fromBase58String(av)
192+ let aA = o
193+ fromBase58String(aA)
183194 }
184195 else if ($isInstanceOf(o, "Unit"))
185196 then unit
186197 else throw("Match error")
187198 }
188199
189200
190-func ax (ay) = {
191- let az = throw("Permission denied")
192- let o = au()
201+func aC (aD) = {
202+ let aE = throw("Permission denied")
203+ let o = az()
193204 if ($isInstanceOf(o, "ByteVector"))
194205 then {
195- let aA = o
196- if ((ay.callerPublicKey == aA))
206+ let aF = o
207+ if ((aD.callerPublicKey == aF))
197208 then true
198- else az
209+ else aE
199210 }
200211 else if ($isInstanceOf(o, "Unit"))
201- then if ((ay.caller == this))
212+ then if ((aD.caller == this))
202213 then true
203- else az
214+ else aE
204215 else throw("Match error")
205216 }
206217
207218
208-let aB = 1
219+let aG = 1
209220
210-let aC = 2
221+let aH = 2
211222
212-let aD = 3
223+let aI = 3
213224
214-let aE = 4
225+let aJ = 4
215226
216-let aF = 5
227+let aK = 5
217228
218-let aG = 6
229+let aL = 6
219230
220-func aH (aI) = makeString(["%s%s__lock", aI], a)
231+func aM (aN) = makeString(["%s%s__lock", aN], a)
221232
222233
223-func aJ (aI) = split(e(this, aH(aI)), a)
234+func aO (aN) = split(e(this, aM(aN)), a)
224235
225236
226-func aK (aL,aM,aN,aO,aP,aQ,aR,aS) = makeString(["%d%d%d%d%d%d%d%d", aL, aM, aN, aO, aP, aQ, aR, aS], a)
237+func aP (aQ,aR,aS,aT,aU,aV,aW,aX) = makeString(["%d%d%d%d%d%d%d%d", aQ, aR, aS, aT, aU, aV, aW, aX], a)
227238
228239
229-func aT (aL,aM,aN,aO,aP,aQ,aS) = aK(aL, toString(aM), toString(aN), toString(aO), toString(aP), toString(aQ), toString(lastBlock.timestamp), toString(aS))
240+func aY (aQ,aR,aS,aT,aU,aV,aX) = aP(aQ, toString(aR), toString(aS), toString(aT), toString(aU), toString(aV), toString(lastBlock.timestamp), toString(aX))
230241
231242
232-func aU () = "%s__nextUserNum"
243+func aZ () = "%s__nextUserNum"
233244
234245
235-func aV (aI) = makeString(["%s%s%s__mapping__user2num", aI], a)
246+func ba (aN) = makeString(["%s%s%s__mapping__user2num", aN], a)
236247
237248
238-func aW (N) = makeString(["%s%s%s__mapping__num2user", N], a)
249+func bb (S) = makeString(["%s%s%s__mapping__num2user", S], a)
239250
240251
241-func aX (aL) = makeString(["%s%d%s__paramByUserNum", aL, "amount"], a)
252+func bc (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "amount"], a)
242253
243254
244-func aY (aL) = makeString(["%s%d%s__paramByUserNum", aL, "start"], a)
255+func bd (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "start"], a)
245256
246257
247-func aZ (aL) = makeString(["%s%d%s__paramByUserNum", aL, "duration"], a)
258+func be (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "duration"], a)
248259
249260
250-func ba (aL) = makeString(["%s%d%s__paramByUserNum", aL, "k"], a)
261+func bf (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "k"], a)
251262
252263
253-func bb (aL) = makeString(["%s%d%s__paramByUserNum", aL, "b"], a)
264+func bg (aQ) = makeString(["%s%d%s__paramByUserNum", aQ, "b"], a)
254265
255266
256-func bc (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "k", bd], a)
267+func bh (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "k", bi], a)
257268
258269
259-func be (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "b", bd], a)
270+func bj (aQ,bi) = makeString(["%s%d%s%d__paramByPeriod", aQ, "b", bi], a)
260271
261272
262-func bf () = "%s%s__stats__activeTotalLocked"
273+func bk () = "%s%s__stats__activeTotalLocked"
263274
264275
265-func bg () = "%s%s__stats__locksDurationSumInBlocks"
276+func bl () = "%s%s__stats__locksDurationSumInBlocks"
266277
267278
268-func bh () = "%s%s__stats__locksCount"
279+func bm () = "%s%s__stats__locksCount"
269280
270281
271-func bi () = "%s%s__stats__activeUsersCount"
282+func bn () = "%s%s__stats__activeUsersCount"
272283
273284
274-func bj (aL) = makeString(["%s%d__userBoostEmissionLastInt", aL], a)
285+func bo (aQ) = makeString(["%s%d__userBoostEmissionLastInt", aQ], a)
275286
276287
277-func bk (aL,bl) = makeString(["%s%d__userBoostEmissionLastInt", aL, bl], a)
288+func bp (aQ,bq) = makeString(["%s%d__userBoostEmissionLastInt", aQ, bq], a)
278289
279290
280-func bm (aL) = makeString(["%s%d__maxBoostInt", aL], a)
291+func br (aQ) = makeString(["%s%d__maxBoostInt", aQ], a)
281292
282293
283-func bn () = "%s%s__maxBoostInt__total"
294+func bs () = "%s%s__maxBoostInt__total"
284295
285296
286-func bo (aL) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aL], a)
297+func bt (aQ) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aQ], a)
287298
288299
289-func bp (aL) = makeString(["%s%d__userBoostClaimed", aL], a)
300+func bu (aQ) = makeString(["%s%d__userBoostClaimed", aQ], a)
290301
291302
292-func bq () = "%s%s__gwxCached__total"
303+func bv () = "%s%s__gwxCached__total"
293304
294305
295-let br = O()
306+let bw = T()
296307
297-let T = Q(br)
308+let Y = V(bw)
298309
299-let bs = U(T)
310+let bx = Z(Y)
300311
301-let bt = V(T)
312+let by = aa(Y)
302313
303-let bu = W(T)
314+let bz = ab(Y)
304315
305-func bv (bw,bx,aM,by,aO,bz,bA,ay) = {
306- let bB = makeString(["%s%s%s%s__history", bw, bx, toBase58String(ay.transactionId)], a)
307- let bC = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aM), toString(by), toString(aO), toString(bz), toString(bA)], a)
308- StringEntry(bB, bC)
316+func bA (bB,bC,aR,bD,aT,bE,bF,aD) = {
317+ let bG = makeString(["%s%s%s%s__history", bB, bC, toBase58String(aD.transactionId)], a)
318+ let bH = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aR), toString(bD), toString(aT), toString(bE), toString(bF)], a)
319+ StringEntry(bG, bH)
309320 }
310321
311322
312-func bD (bE,bF,bG,bH) = {
313- let bI = bg()
314- let bJ = bh()
315- let bK = bi()
316- let bL = bf()
317- let bM = h(this, bI)
318- let bN = h(this, bJ)
319- let bO = h(this, bK)
320- let bP = h(this, bL)
321-[IntegerEntry(bI, (bM + bF)), IntegerEntry(bJ, (bN + bG)), IntegerEntry(bK, (bO + bH)), IntegerEntry(bL, (bP + bE))]
323+func bI (bJ,bK,bL,bM) = {
324+ let bN = bl()
325+ let bO = bm()
326+ let bP = bn()
327+ let bQ = bk()
328+ let bR = h(this, bN)
329+ let bS = h(this, bO)
330+ let bT = h(this, bP)
331+ let bU = h(this, bQ)
332+[IntegerEntry(bN, (bR + bK)), IntegerEntry(bO, (bS + bL)), IntegerEntry(bP, (bT + bM)), IntegerEntry(bQ, (bU + bJ))]
322333 }
323334
324335
325-func bQ (bR,bS,bT) = {
326- let bU = 1000
327- (((bR * bT) + bS) / bU)
336+func bV (bW,bX,bY) = {
337+ let bZ = 1000
338+ (((bW * bY) + bX) / bZ)
328339 }
329340
330341
331-func bV (aI,aL,aM,aN,aO,bz,bA,bd) = {
332- let bW = aX(aL)
333- let bX = aY(aL)
334- let bY = aZ(aL)
335- let bZ = ba(aL)
336- let ca = bb(aL)
337- let cb = bc(aL, bd)
338- let cc = be(aL, bd)
339- let aS = bQ(bz, bA, height)
340-[IntegerEntry(bW, aM), IntegerEntry(bX, aN), IntegerEntry(bY, aO), IntegerEntry(bZ, bz), IntegerEntry(ca, bA), IntegerEntry(cb, bz), IntegerEntry(cc, bA), StringEntry(aH(aI), aT(aL, aM, aN, aO, bz, bA, aS))]
342+func ca (aN,aQ,aR,aS,aT,bE,bF,bi) = {
343+ let cb = bc(aQ)
344+ let cc = bd(aQ)
345+ let cd = be(aQ)
346+ let ce = bf(aQ)
347+ let cf = bg(aQ)
348+ let cg = bh(aQ, bi)
349+ let ch = bj(aQ, bi)
350+ let aX = bV(bE, bF, height)
351+[IntegerEntry(cb, aR), IntegerEntry(cc, aS), IntegerEntry(cd, aT), IntegerEntry(ce, bE), IntegerEntry(cf, bF), IntegerEntry(cg, bE), IntegerEntry(ch, bF), StringEntry(aM(aN), aY(aQ, aR, aS, aT, bE, bF, aX))]
341352 }
342353
343354
344-func cd (ay,ce) = if ((size(ay.payments) > 1))
355+func ci (aD,cj) = if ((size(aD.payments) > 1))
345356 then throw("only one payment is allowed")
346- else if ((size(ay.payments) == 0))
357+ else if ((size(aD.payments) == 0))
347358 then 0
348359 else {
349- let cf = ay.payments[0]
350- if ((value(cf.assetId) != ce))
360+ let ck = aD.payments[0]
361+ if ((value(ck.assetId) != cj))
351362 then throw("invalid asset id in payment")
352- else cf.amount
363+ else ck.amount
353364 }
354365
355366
356-func cg (aI,ch) = {
357- let ci = "empty"
358- let cj = aV(aI)
359- let aL = valueOrElse(getString(cj), ci)
360- let bz = valueOrElse(getInteger(ba(aL)), 0)
361- let bA = valueOrElse(getInteger(bb(aL)), 0)
362- let ck = bQ(bz, bA, ch)
363- let aS = if ((0 > ck))
367+func cl (aN,cm) = {
368+ let cn = "empty"
369+ let co = ba(aN)
370+ let aQ = valueOrElse(getString(co), cn)
371+ let bE = valueOrElse(getInteger(bf(aQ)), 0)
372+ let bF = valueOrElse(getInteger(bg(aQ)), 0)
373+ let cp = bV(bE, bF, cm)
374+ let aX = if ((0 > cp))
364375 then 0
365- else ck
366- aS
376+ else cp
377+ aX
367378 }
368379
369380
370-func cl (aI) = cg(aI, height)
381+func cq (aN) = cl(aN, height)
371382
372383
373-func cm (cn,co,cp) = {
374- let ci = "EMPTY"
375- let cq = valueOrElse(getString(this, aH(co)), ci)
376- if ((cq == ci))
384+func cr (cs,ct,cu) = {
385+ let cn = "EMPTY"
386+ let cv = valueOrElse(getString(this, aM(ct)), cn)
387+ if ((cv == cn))
377388 then $Tuple3(0, nil, "userRecord::is::empty")
378389 else {
379- let cr = split(cq, a)
380- let cs = cr[aB]
381- let ct = valueOrElse(getInteger(bu, af()), 0)
382- let cu = "empty"
383- let cv = if ((cn != cu))
390+ let cw = split(cv, a)
391+ let cx = cw[aG]
392+ let cy = valueOrElse(getInteger(bz, ak()), 0)
393+ let cz = "empty"
394+ let cA = if ((cs != cz))
384395 then {
385- let cw = valueOrErrorMessage(getString(br, F(cn)), ("unsupported lp asset " + cn))
386- let cx = getIntegerValue(br, J(cw))
387- let cy = valueOrElse(getInteger(br, L(cw, 0)), cx)
388- $Tuple2(cy, cx)
396+ let cB = valueOrErrorMessage(getString(bw, K(cs)), ("unsupported lp asset " + cs))
397+ let cC = getIntegerValue(bw, O(cB))
398+ let cD = valueOrElse(getInteger(bw, Q(cB, 0)), cC)
399+ $Tuple2(cD, cC)
389400 }
390- else if (cp)
401+ else if (cu)
391402 then $Tuple2(0, 0)
392- else throw(("not readonly mode: unsupported lp asset " + cn))
393- let cz = cv._1
394- let cA = cv._2
395- let cB = k(bs, Z())
396- let cC = k(bs, ab())
397- let cD = k(bs, ad())
398- let bT = if ((height > cD))
399- then cD
403+ else throw(("not readonly mode: unsupported lp asset " + cs))
404+ let cE = cA._1
405+ let cF = cA._2
406+ let cG = k(bx, ae())
407+ let cH = k(bx, ag())
408+ let cI = k(bx, ai())
409+ let bY = if ((height > cI))
410+ then cI
400411 else height
401- let cE = max([(bT - cC), 0])
402- let cF = bk(cs, cn)
403- let cG = bj(cs)
404- let cH = valueOrElse(getInteger(this, cF), h(this, cG))
405- let cI = (((cB * cE) * 2) / 3)
406- let cJ = (cI - cH)
407- let cK = fraction(cJ, 3, (2 * cB))
408- let cL = (bT - cK)
409- let cM = max([(ct - cL), 0])
410- let cN = ((bT - cL) - cM)
411- if (if (if ((0 > cL))
412+ let cJ = max([(bY - cH), 0])
413+ let cK = bp(cx, cs)
414+ let cL = bo(cx)
415+ let cM = valueOrElse(getInteger(this, cK), h(this, cL))
416+ let cN = (((cG * cJ) * 2) / 3)
417+ let cO = (cN - cM)
418+ let cP = fraction(cO, 3, (2 * cG))
419+ let cQ = (bY - cP)
420+ let cR = max([(cy - cQ), 0])
421+ let cS = ((bY - cQ) - cR)
422+ if (if (if ((0 > cQ))
412423 then true
413- else (0 > cN))
424+ else (0 > cS))
414425 then true
415- else (l(((cM + cN) - cK)) >= 1))
416- then throw(((((((("invalid udh calc: udh=" + toString(cK)) + " uLastH=") + toString(cL)) + " udh0=") + toString(cM)) + " udh1=") + toString(cN)))
417- else if ((0 > cJ))
426+ else (l(((cR + cS) - cP)) >= 1))
427+ then throw(((((((("invalid udh calc: udh=" + toString(cP)) + " uLastH=") + toString(cQ)) + " udh0=") + toString(cR)) + " udh1=") + toString(cS)))
428+ else if ((0 > cO))
418429 then throw("wrong calculations")
419430 else {
420- let cO = bm(cs)
421- let cP = bn()
422- let cQ = h(this, cO)
423- let cR = h(this, cP)
424- let cS = bq()
425- let cT = valueOrElse(getInteger(this, cS), 0)
426- let cU = cl(co)
427- let cV = bo(cs)
428- let cW = h(this, cV)
429- let cX = if ((cK == 0))
431+ let cT = br(cx)
432+ let cU = bs()
433+ let cV = h(this, cT)
434+ let cW = h(this, cU)
435+ let cX = bv()
436+ let cY = valueOrElse(getInteger(this, cX), 0)
437+ let cZ = cq(ct)
438+ let da = bt(cx)
439+ let db = h(this, da)
440+ let dc = if ((cP == 0))
430441 then 0
431- else fraction(cJ, cM, cK)
432- let cY = if ((cK == 0))
442+ else fraction(cO, cR, cP)
443+ let dd = if ((cP == 0))
433444 then 0
434- else fraction(cJ, cN, cK)
435- let cZ = fraction(cX, cz, d)
436- let da = fraction(cY, cA, d)
437- let db = if ((cT == 0))
445+ else fraction(cO, cS, cP)
446+ let de = fraction(dc, cE, d)
447+ let df = fraction(dd, cF, d)
448+ let dg = if ((cY == 0))
438449 then 0
439- else fraction(cZ, cU, cT)
440- let dc = if ((cT == 0))
450+ else fraction(de, cZ, cY)
451+ let dh = if ((cY == 0))
441452 then 0
442- else fraction(da, cU, cT)
443- let dd = (db + dc)
444- let de = bp(cs)
445- let df = h(this, de)
446- let dg = (dd - df)
447- let dh = [IntegerEntry(cF, cI)]
448- let di = makeString([toString(cH), toString(cJ), toString(df), toString(dg), toString(cz), toString(cA), toString(bT), toString(cK), toString(cL), toString(cM), toString(cN), toString(cU), toString(cT)], ":")
449- $Tuple3(dd, dh, di)
453+ else fraction(df, cZ, cY)
454+ let di = (dg + dh)
455+ let dj = bu(cx)
456+ let dk = h(this, dj)
457+ let dl = (di - dk)
458+ let dm = [IntegerEntry(cK, cN)]
459+ let dn = makeString([toString(cM), toString(cO), toString(dk), toString(dl), toString(cE), toString(cF), toString(bY), toString(cP), toString(cQ), toString(cR), toString(cS), toString(cZ), toString(cY)], ":")
460+ $Tuple3(di, dm, dn)
450461 }
451462 }
452463 }
453464
454465
455-@Callable(ay)
456-func constructor (dj,dk,ap,dl,dm,as) = {
457- let dn = ax(ay)
458- if ((dn == dn))
459- then ([IntegerEntry(aU(), 0), StringEntry(al(), at(dk, ap, dl, dm, as)), StringEntry(s(), dj)] ++ bD(0, 0, 0, 0))
466+@Callable(aD)
467+func constructor (do,dp,au,dq,dr,ax) = {
468+ let ds = aC(aD)
469+ if ((ds == ds))
470+ then ([IntegerEntry(aZ(), 0), StringEntry(aq(), ay(dp, au, dq, dr, ax)), StringEntry(x(), do)] ++ bI(0, 0, 0, 0))
460471 else throw("Strict value is not equal to itself.")
461472 }
462473
463474
464475
465-@Callable(ay)
466-func lock (aO) = {
467- let do = am()
468- let dp = do[ag]
469- let ao = fromBase58String(dp)
470- let ap = parseIntValue(do[ah])
471- let aq = parseIntValue(do[ai])
472- let ar = parseIntValue(do[aj])
473- let as = addressFromStringValue(do[ak])
474- if ((size(ay.payments) != 1))
476+@Callable(aD)
477+func lockRef (aT,dt,du) = {
478+ let dv = invoke(this, "lock", [aT], aD.payments)
479+ if ((dv == dv))
480+ then {
481+ let dw = toString(aD.caller)
482+ let dx = if (if ((dt == ""))
483+ then true
484+ else (du == base58''))
485+ then unit
486+ else invoke(t, "createPair", [w, dt, dw, du], nil)
487+ if ((dx == dx))
488+ then $Tuple2(nil, unit)
489+ else throw("Strict value is not equal to itself.")
490+ }
491+ else throw("Strict value is not equal to itself.")
492+ }
493+
494+
495+
496+@Callable(aD)
497+func lock (aT) = {
498+ let dy = ar()
499+ let dz = dy[al]
500+ let at = fromBase58String(dz)
501+ let au = parseIntValue(dy[am])
502+ let av = parseIntValue(dy[an])
503+ let aw = parseIntValue(dy[ao])
504+ let ax = addressFromStringValue(dy[ap])
505+ if ((size(aD.payments) != 1))
475506 then throw("invalid payment - exact one payment must be attached")
476507 else {
477- let cf = ay.payments[0]
478- let dq = cf.amount
479- if ((ao != value(cf.assetId)))
480- then throw((("invalid asset is in payment - " + dp) + " is expected"))
508+ let ck = aD.payments[0]
509+ let dA = ck.amount
510+ if ((at != value(ck.assetId)))
511+ then throw((("invalid asset is in payment - " + dz) + " is expected"))
481512 else {
482- let dr = aU()
483- let co = toString(ay.caller)
484- let ds = isDefined(getString(aV(co)))
485- let cs = if (ds)
486- then value(getString(aV(co)))
487- else toString(k(this, dr))
488- let aL = parseIntValue(cs)
489- let by = height
490- let bX = aY(cs)
491- let bY = aZ(cs)
492- let bW = aX(cs)
493- if ((ap > dq))
494- then throw(("amount is less then minLockAmount=" + toString(ap)))
495- else if ((aq > aO))
496- then throw(("passed duration is less then minLockDuration=" + toString(aq)))
497- else if ((aO > ar))
498- then throw(("passed duration is greater then maxLockDuration=" + toString(ar)))
499- else if (if (ds)
500- then ((k(this, bX) + k(this, bY)) >= by)
513+ let dB = aZ()
514+ let ct = toString(aD.caller)
515+ let dC = isDefined(getString(ba(ct)))
516+ let cx = if (dC)
517+ then value(getString(ba(ct)))
518+ else toString(k(this, dB))
519+ let aQ = parseIntValue(cx)
520+ let bD = height
521+ let cc = bd(cx)
522+ let cd = be(cx)
523+ let cb = bc(cx)
524+ if ((au > dA))
525+ then throw(("amount is less then minLockAmount=" + toString(au)))
526+ else if ((av > aT))
527+ then throw(("passed duration is less then minLockDuration=" + toString(av)))
528+ else if ((aT > aw))
529+ then throw(("passed duration is greater then maxLockDuration=" + toString(aw)))
530+ else if (if (dC)
531+ then ((k(this, cc) + k(this, cd)) >= bD)
501532 else false)
502533 then throw("there is an active lock - consider to use increaseLock")
503- else if ((h(this, bW) > 0))
504- then throw(("there are locked WXs - consider to use increaseLock " + bW))
534+ else if ((h(this, cb) > 0))
535+ then throw(("there are locked WXs - consider to use increaseLock " + cb))
505536 else {
506- let dt = fraction(aO, c, ar)
507- let du = fraction(dq, dt, c)
508- let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, by, aO], nil))
509- let bz = q(dv[0])
510- let bA = q(dv[1])
511- let bd = toString(q(dv[2]))
512- let cB = k(bs, Z())
513- let cC = k(bs, ab())
514- let cD = k(bs, ad())
515- let bT = if ((height > cD))
516- then cD
537+ let dD = fraction(aT, c, aw)
538+ let dE = fraction(dA, dD, c)
539+ let dF = n(invoke(ax, "calcGwxParamsREADONLY", [dE, bD, aT], nil))
540+ let bE = q(dF[0])
541+ let bF = q(dF[1])
542+ let bi = toString(q(dF[2]))
543+ let cG = k(bx, ae())
544+ let cH = k(bx, ag())
545+ let cI = k(bx, ai())
546+ let bY = if ((height > cI))
547+ then cI
517548 else height
518- let cE = max([(bT - cC), 0])
519- let cG = bj(cs)
520- let cI = (((cB * cE) * 2) / 3)
521- let cO = bm(cs)
522- let cP = bn()
523- let cQ = ((du * aO) / 2)
524- let cR = h(this, cP)
525- let cS = bq()
526- let cT = valueOrElse(getInteger(this, cS), 0)
527- let dw = if (ds)
549+ let cJ = max([(bY - cH), 0])
550+ let cL = bo(cx)
551+ let cN = (((cG * cJ) * 2) / 3)
552+ let cT = br(cx)
553+ let cU = bs()
554+ let cV = ((dE * aT) / 2)
555+ let cW = h(this, cU)
556+ let cX = bv()
557+ let cY = valueOrElse(getInteger(this, cX), 0)
558+ let dG = if (dC)
528559 then nil
529- else [IntegerEntry(dr, (aL + 1)), StringEntry(aV(co), cs), StringEntry(aW(cs), co)]
530- ((((dw ++ bV(co, cs, dq, by, aO, bz, bA, bd)) ++ bD(dq, aO, 1, if (ds)
560+ else [IntegerEntry(dB, (aQ + 1)), StringEntry(ba(ct), cx), StringEntry(bb(cx), ct)]
561+ ((((dG ++ ca(ct, cx, dA, bD, aT, bE, bF, bi)) ++ bI(dA, aT, 1, if (dC)
531562 then 0
532- else 1)) :+ bv("lock", co, dq, by, aO, bz, bA, ay)) ++ [IntegerEntry(cG, cI), IntegerEntry(cS, (cT + du))])
563+ else 1)) :+ bA("lock", ct, dA, bD, aT, bE, bF, aD)) ++ [IntegerEntry(cL, cN), IntegerEntry(cX, (cY + dE))])
533564 }
534565 }
535566 }
536567 }
537568
538569
539570
540-@Callable(ay)
541-func increaseLock (dx) = {
542- let do = am()
543- let dp = do[ag]
544- let ao = fromBase58String(dp)
545- let aq = parseIntValue(do[ai])
546- let ar = parseIntValue(do[aj])
547- let as = addressFromStringValue(do[ak])
548- let dq = cd(ay, ao)
549- let co = toString(ay.caller)
550- let cr = aJ(co)
551- let cs = cr[aB]
552- let dy = parseIntValue(cr[aC])
553- let by = parseIntValue(cr[aD])
554- let dz = parseIntValue(cr[aE])
555- let dA = (by + dz)
556- let dB = max([(dA - height), 0])
557- let dC = (dy + dq)
558- let dD = (dB + dx)
559- if ((0 > dx))
571+@Callable(aD)
572+func increaseLock (dH) = {
573+ let dy = ar()
574+ let dz = dy[al]
575+ let at = fromBase58String(dz)
576+ let av = parseIntValue(dy[an])
577+ let aw = parseIntValue(dy[ao])
578+ let ax = addressFromStringValue(dy[ap])
579+ let dA = ci(aD, at)
580+ let ct = toString(aD.caller)
581+ let cw = aO(ct)
582+ let cx = cw[aG]
583+ let dI = parseIntValue(cw[aH])
584+ let bD = parseIntValue(cw[aI])
585+ let dJ = parseIntValue(cw[aJ])
586+ let dK = (bD + dJ)
587+ let dL = max([(dK - height), 0])
588+ let dM = (dI + dA)
589+ let dN = (dL + dH)
590+ if ((0 > dH))
560591 then throw("duration is less then zero")
561- else if ((aq > dD))
562- then throw(("lockDurationNew is less then minLockDuration=" + toString(aq)))
563- else if ((dD > ar))
564- then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ar)))
592+ else if ((av > dN))
593+ then throw(("lockDurationNew is less then minLockDuration=" + toString(av)))
594+ else if ((dN > aw))
595+ then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aw)))
565596 else {
566- let dt = fraction(dD, c, ar)
567- let du = fraction(dC, dt, c)
568- let dE = height
569- let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, dE, dD], nil))
570- let bz = q(dv[0])
571- let bA = q(dv[1])
572- let bd = toString(q(dv[2]))
573- let cB = k(bs, Z())
574- let cC = k(bs, ab())
575- let cD = k(bs, ad())
576- let bT = if ((height > cD))
577- then cD
597+ let dD = fraction(dN, c, aw)
598+ let dE = fraction(dM, dD, c)
599+ let dO = height
600+ let dF = n(invoke(ax, "calcGwxParamsREADONLY", [dE, dO, dN], nil))
601+ let bE = q(dF[0])
602+ let bF = q(dF[1])
603+ let bi = toString(q(dF[2]))
604+ let cG = k(bx, ae())
605+ let cH = k(bx, ag())
606+ let cI = k(bx, ai())
607+ let bY = if ((height > cI))
608+ then cI
578609 else height
579- let cE = max([(bT - cC), 0])
580- let cG = bj(cs)
581- let cH = h(this, cG)
582- let cI = (((cB * cE) * 2) / 3)
583- let cJ = (cI - cH)
584- if ((0 > cJ))
610+ let cJ = max([(bY - cH), 0])
611+ let cL = bo(cx)
612+ let cM = h(this, cL)
613+ let cN = (((cG * cJ) * 2) / 3)
614+ let cO = (cN - cM)
615+ if ((0 > cO))
585616 then throw("wrong calculations")
586617 else {
587- let cO = bm(cs)
588- let cP = bn()
589- let cQ = h(this, cO)
590- let cR = h(this, cP)
591- let dF = cl(co)
592- let dG = (du - dF)
593- if ((0 > dG))
594- then throw(("gwxDiff is less then 0: " + toString(dG)))
618+ let cT = br(cx)
619+ let cU = bs()
620+ let cV = h(this, cT)
621+ let cW = h(this, cU)
622+ let dP = cq(ct)
623+ let dQ = (dE - dP)
624+ if ((0 > dQ))
625+ then throw(("gwxDiff is less then 0: " + toString(dQ)))
595626 else {
596- let cS = bq()
597- let cT = valueOrElse(getInteger(this, cS), 0)
598- let cV = bo(cs)
599- let cW = h(this, cV)
600- let dd = fraction(cJ, dF, cT)
601- let dH = ((du * dD) / 2)
602- let dI = ((dF * dB) / 2)
603- let dJ = (dH - dI)
604- (((bV(co, cs, dC, dE, dD, bz, bA, bd) ++ bD(dq, dx, 0, 0)) :+ bv("lock", co, dq, by, dD, bz, bA, ay)) ++ [IntegerEntry(cS, (cT + dG))])
627+ let cX = bv()
628+ let cY = valueOrElse(getInteger(this, cX), 0)
629+ let da = bt(cx)
630+ let db = h(this, da)
631+ let di = fraction(cO, dP, cY)
632+ let dR = ((dE * dN) / 2)
633+ let dS = ((dP * dL) / 2)
634+ let dT = (dR - dS)
635+ (((ca(ct, cx, dM, dO, dN, bE, bF, bi) ++ bI(dA, dH, 0, 0)) :+ bA("lock", ct, dA, bD, dN, bE, bF, aD)) ++ [IntegerEntry(cX, (cY + dQ))])
605636 }
606637 }
607638 }
608639 }
609640
610641
611642
612-@Callable(ay)
613-func claimWxBoost (cn,co) = if ((bt != ay.caller))
643+@Callable(aD)
644+func claimWxBoost (cs,ct) = if ((by != aD.caller))
614645 then throw("permissions denied")
615646 else {
616- let dK = cm(cn, co, false)
617- let dg = dK._1
618- let dh = dK._2
619- let di = dK._3
620- $Tuple2(dh, [dg])
647+ let dU = cr(cs, ct, false)
648+ let dl = dU._1
649+ let dm = dU._2
650+ let dn = dU._3
651+ $Tuple2(dm, [dl])
621652 }
622653
623654
624655
625-@Callable(ay)
626-func claimWxBoostREADONLY (cn,co) = {
627- let dL = cm(cn, co, true)
628- let dg = dL._1
629- let dh = dL._2
630- let di = dL._3
631- $Tuple2(nil, [dg, di])
656+@Callable(aD)
657+func claimWxBoostREADONLY (cs,ct) = {
658+ let dV = cr(cs, ct, true)
659+ let dl = dV._1
660+ let dm = dV._2
661+ let dn = dV._3
662+ $Tuple2(nil, [dl, dn])
632663 }
633664
634665
635666
636-@Callable(ay)
637-func unlock (aI) = {
638- let cr = aJ(aI)
639- let cs = cr[aB]
640- let dy = parseIntValue(cr[aC])
641- let by = parseIntValue(cr[aD])
642- let dz = parseIntValue(cr[aE])
643- let dA = (by + dz)
644- let do = am()
645- let ao = fromBase58String(do[ag])
646- let as = addressFromStringValue(do[ak])
647- if ((dA >= height))
648- then throw((("wait " + toString(dA)) + " to unlock"))
649- else if ((0 >= dy))
667+@Callable(aD)
668+func unlock (aN) = {
669+ let cw = aO(aN)
670+ let cx = cw[aG]
671+ let dI = parseIntValue(cw[aH])
672+ let bD = parseIntValue(cw[aI])
673+ let dJ = parseIntValue(cw[aJ])
674+ let dK = (bD + dJ)
675+ let dy = ar()
676+ let at = fromBase58String(dy[al])
677+ let ax = addressFromStringValue(dy[ap])
678+ if ((dK >= height))
679+ then throw((("wait " + toString(dK)) + " to unlock"))
680+ else if ((0 >= dI))
650681 then throw("nothing to unlock")
651682 else {
652- let bd = valueOrElse(getInteger(as, ae()), 0)
653- (((bV(aI, cs, 0, by, dz, 0, 0, toString(bd)) ++ bD(-(dy), 0, 0, -1)) :+ bv("unlock", aI, dy, by, dz, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dy, ao))
683+ let bi = valueOrElse(getInteger(ax, aj()), 0)
684+ (((ca(aN, cx, 0, bD, dJ, 0, 0, toString(bi)) ++ bI(-(dI), 0, 0, -1)) :+ bA("unlock", aN, dI, bD, dJ, 0, 0, aD)) :+ ScriptTransfer(addressFromStringValue(aN), dI, at))
654685 }
655686 }
656687
657688
658689
659-@Callable(ay)
660-func gwxUserInfoREADONLY (aI) = {
661- let aS = cl(aI)
662- $Tuple2(nil, [aS])
690+@Callable(aD)
691+func gwxUserInfoREADONLY (aN) = {
692+ let aX = cq(aN)
693+ $Tuple2(nil, [aX])
663694 }
664695
665696
666697
667-@Callable(ay)
668-func getUserGwxAmountAtHeightREADONLY (aI,ch) = {
669- let aS = cg(aI, ch)
670- $Tuple2(nil, aS)
698+@Callable(aD)
699+func getUserGwxAmountAtHeightREADONLY (aN,cm) = {
700+ let aX = cl(aN, cm)
701+ $Tuple2(nil, aX)
671702 }
672703
673704
674705
675-@Callable(ay)
676-func setManager (dM) = {
677- let dn = ax(ay)
678- if ((dn == dn))
706+@Callable(aD)
707+func setManager (dW) = {
708+ let ds = aC(aD)
709+ if ((ds == ds))
679710 then {
680- let dN = fromBase58String(dM)
681- if ((dN == dN))
682- then [StringEntry(Y(), dM)]
711+ let dX = fromBase58String(dW)
712+ if ((dX == dX))
713+ then [StringEntry(ad(), dW)]
683714 else throw("Strict value is not equal to itself.")
684715 }
685716 else throw("Strict value is not equal to itself.")
686717 }
687718
688719
689720
690-@Callable(ay)
721+@Callable(aD)
691722 func confirmManager () = {
692- let dO = aw()
693- let dP = if (isDefined(dO))
723+ let dY = aB()
724+ let dZ = if (isDefined(dY))
694725 then true
695726 else throw("No pending manager")
696- if ((dP == dP))
727+ if ((dZ == dZ))
697728 then {
698- let dQ = if ((ay.callerPublicKey == value(dO)))
729+ let ea = if ((aD.callerPublicKey == value(dY)))
699730 then true
700731 else throw("You are not pending manager")
701- if ((dQ == dQ))
702- then [StringEntry(X(), toBase58String(value(dO))), DeleteEntry(Y())]
732+ if ((ea == ea))
733+ then [StringEntry(ac(), toBase58String(value(dY))), DeleteEntry(ad())]
703734 else throw("Strict value is not equal to itself.")
704735 }
705736 else throw("Strict value is not equal to itself.")
706737 }
707738
708739
709-@Verifier(dR)
710-func dS () = {
711- let dT = {
712- let o = au()
740+@Verifier(eb)
741+func ec () = {
742+ let ed = {
743+ let o = az()
713744 if ($isInstanceOf(o, "ByteVector"))
714745 then {
715- let aA = o
716- aA
746+ let aF = o
747+ aF
717748 }
718749 else if ($isInstanceOf(o, "Unit"))
719- then dR.senderPublicKey
750+ then eb.senderPublicKey
720751 else throw("Match error")
721752 }
722- sigVerify(dR.bodyBytes, dR.proofs[0], dT)
753+ sigVerify(eb.bodyBytes, eb.proofs[0], ed)
723754 }
724755

github/deemru/w8io/026f985 
281.61 ms