tx · GxrsQLWw4f86vBvLCwJ78nSqkwSRUjgmVToU1mDieNR4

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.04000000 Waves

2022.08.05 07:13 [2170690] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "GxrsQLWw4f86vBvLCwJ78nSqkwSRUjgmVToU1mDieNR4", "fee": 4000000, "feeAssetId": null, "timestamp": 1659672813428, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "4hbLXKtAbXTK3t9Rq7uYV16uhmhsWk4rr4AKAeoHsyEgW2AZ8P6HVJSm4fF3LGH2JVTjL66AFg5PU3wDzs4de97k" ], "script": "base64:AAIFAAAAAAAAAEMIAhIFCgMICAgSABIDCgEIEgQKAggBEgASAwoBARIFCgMIAQgSAwoBCBIGCgQBAQEBEgQKAgEBEgQKAgEIEgASABIAAAAAbAAAAAALcmV2aXNpb25OdW0CAAAAAAAAAAAGRVVMRVI4AAAAAAAQM8TWAAAAAAVNVUxUNgAAAAAAAA9CQAAAAAAGTVVMVFg2CQABNgAAAAEAAAAAAAAPQkAAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAZNVUxUWDgJAAE2AAAAAQAAAAAABfXhAAAAAAAGTVVMVDEyAAAAAOjUpRAAAAAAAAZNVUxUMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAADU0VQAgAAAAJfXwAAAAAHV0FWRVNJRAkAAlkAAAABAgAAAAVXQVZFUwAAAAAPbk1ldHJpY0lkeFByaWNlAAAAAAAAAAAAAAAAABtuTWV0cmljSWR4VXNkbkxvY2tlZEJhbGFuY2UAAAAAAAAAAAEAAAAAHG5NZXRyaWNJZHhXYXZlc0xvY2tlZEJhbGFuY2UAAAAAAAAAAAIAAAAAEW5NZXRyaWNJZHhSZXNlcnZlAAAAAAAAAAADAAAAABduTWV0cmljSWR4UmVzZXJ2ZUluVXNkbgAAAAAAAAAABAAAAAAUbk1ldHJpY0lkeFVzZG5TdXBwbHkAAAAAAAAAAAUAAAAAEW5NZXRyaWNJZHhTdXJwbHVzAAAAAAAAAAAGAAAAABhuTWV0cmljSWR4U3VycGx1c1BlcmNlbnQAAAAAAAAAAAcAAAAADG5NZXRyaWNJZHhCUgAAAAAAAAAACAAAAAAUbk1ldHJpY0lkeE5zYnRTdXBwbHkAAAAAAAAAAAkAAAAAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5AAAAAAAAAAAKAAAAABRuTWV0cmljSWR4U3VyZlN1cHBseQAAAAAAAAAACwAAAAAMYkZ1bmNJZHhTdXJmAAAAAAAAAAAAAAAAAA1iRnVuY0lkeFdhdmVzAAAAAAAAAAABAAAAAAxiRnVuY0lkeFVzZG4AAAAAAAAAAAIAAAAAFGJGdW5jSWR4UmVzZXJ2ZVN0YXJ0AAAAAAAAAAADAAAAABNiRnVuY0lkeFN1cHBseVN0YXJ0AAAAAAAAAAAEAAAAAA9iRnVuY0lkeEJSU3RhcnQAAAAAAAAAAAUAAAAAEmJGdW5jSWR4UmVzZXJ2ZUVuZAAAAAAAAAAABgAAAAARYkZ1bmNJZHhTdXBwbHlFbmQAAAAAAAAAAAcAAAAADWJGdW5jSWR4QlJFbmQAAAAAAAAAAAgAAAAADGJGdW5jSWR4UmVzdAAAAAAAAAAACQAAAAASYkZ1bmNJZHhXYXZlc1ByaWNlAAAAAAAAAAAKAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX25ldXRyaW5vQWRkcmVzcwEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAADmtleU5zYnRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAgAAAA1zdXJmX2Fzc2V0X2lkAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAANYmFsYW5jZV9sb2NrXwEAAAAVa2V5V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAABXdhdmVzAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAACQABLAAAAAIJAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAAIbmV1dHJpbm8BAAAAFWtleU1pbldhdmVzU3dhcEFtb3VudAAAAAACAAAAFW1pbl93YXZlc19zd2FwX2Ftb3VudAEAAAAYa2V5TWluTmV1dHJpbm9Td2FwQW1vdW50AAAAAAIAAAAYbWluX25ldXRyaW5vX3N3YXBfYW1vdW50AQAAABJrZXlXYXZlc091dEZlZVBhcnQAAAAAAgAAABV3YXZlc091dF9zd2FwX2ZlZVBhcnQBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAACAAAAGG5ldXRyaW5vT3V0X3N3YXBfZmVlUGFydAEAAAATa2V5U3dhcEFtb3VudEFQYXJhbQAAAAACAAAAGCVzJXNfX2NvbmZpZ19fc3dhcEFQYXJhbQEAAAATa2V5U3dhcEFtb3VudEJQYXJhbQAAAAACAAAAGCVzJXNfX2NvbmZpZ19fc3dhcEJQYXJhbQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAACAAAAFCVzX19uc2J0TG9ja0NvbnRyYWN0AQAAAA9rZXlNYXRoQ29udHJhY3QAAAAAAgAAABAlc19fbWF0aENvbnRyYWN0AQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAAAgAAABtiYWxhbmNlX3dhdmVzX2xvY2tfaW50ZXJ2YWwBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAACAAAAHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAEAAAAIa2V5UHJpY2UAAAAAAgAAAAVwcmljZQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEAAAALdXNlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgIAAAALcGFyYW1CeVVzZXIJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgIAAAAFc3RhcnQFAAAAA25pbAUAAAADU0VQAQAAAAtrZXlIYWxmTGlmZQAAAAACAAAADCVzX19oYWxmTGlmZQEAAAAQa2V5TWluTG9ja0Ftb3VudAAAAAACAAAAESVzX19taW5Mb2NrQW1vdW50AQAAABVrZXlNaW5XYXZlc0Zvck5zYnRCdXkAAAAAAgAAABJtaW5fd2F2ZXNfbnNidF9idXkBAAAADmtleU1pbk5zYnRTZWxsAAAAAAIAAAANbWluX25zYnRfc2VsbAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkABLkAAAACCQAETAAAAAICAAAACm1hbmRhdG9yeSAJAARMAAAAAgkABCUAAAABBQAAAAdhZGRyZXNzCQAETAAAAAICAAAAAS4JAARMAAAAAgUAAAADa2V5CQAETAAAAAICAAAADyBpcyBub3QgZGVmaW5lZAUAAAADbmlsAgAAAAABAAAADGdldEludE9yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAA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Q2ZnUnBkRGFwcAAAAAAAAAAAAwAAAAAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAAAAAAAAAAEAAAAABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAAAAAAAAAAFAAAAABVJZHhDb250cm9sQ2ZnUmVzdERhcHAAAAAAAAAAAAYAAAAAHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAAAAAAAAAAHAAAAABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAAAAAAAAAAIAAAAABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAAAAAAAAAAJAAAAABxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwAAAAAAAAAAAKAAAAACBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAAAAAAAAAAACwAAAAAXSWR4Q29udHJvbENmZ1Jlc3RWMkRhcHAAAAAAAAAAAAwBAAAAEWtleUNvbnRyb2xBZGRyZXNzAAAAAAIAAAAcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwEAAAANa2V5Q29udHJvbENmZwAAAAACAAAAESVzX19jb250cm9sQ29uZmlnAQAAABRyZWFkQ29udHJvbENmZ09yRmFpbAAAAAEAAAAHY29udHJvbAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAHY29udHJvbAkBAAAADWtleUNvbnRyb2xDZmcAAAAABQAAAANTRVABAAAAGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIAAAAKY29udHJvbENmZwAAAANpZHgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmNvbnRyb2xDZmcFAAAAA2lkeAkAASwAAAACAgAAAC1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAAGkAAAAAQUAAAADaWR4AAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEWtleUNvbnRyb2xBZGRyZXNzAAAAAAIAAAAjM040TlM3ZDRKbzlhNkYxNExpRlVLS1lWZFVra2YyZVA0WngAAAAACmNvbnRyb2xDZmcJAQAAABRyZWFkQ29udHJvbENmZ09yRmFpbAAAAAEFAAAAD2NvbnRyb2xDb250cmFjdAAAAAAMbWF0aENvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAAAAALcnBkQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABRJZHhDb250cm9sQ2ZnUnBkRGFwcAAAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIFAAAACmNvbnRyb2xDZmcFAAAAHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAAAAAAE3N1cmZTdGFraW5nQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwAAAAABdnbnNidENvbnRyb2xsZXJDb250cmFjdAkBAAAAGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIFAAAACmNvbnRyb2xDZmcFAAAAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAAAAA5yZXN0VjJDb250cmFjdAkBAAAAGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIFAAAACmNvbnRyb2xDZmcFAAAAF0lkeENvbnRyb2xDZmdSZXN0VjJEYXBwAAAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwAAAAAObnNidEFzc2V0SWRTdHIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAA5rZXlOc2J0QXNzZXRJZAAAAAAAAAAAC25zYnRBc3NldElkCQACWQAAAAEFAAAADm5zYnRBc3NldElkU3RyAAAAAA5zdXJmQXNzZXRJZFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAAAAAAtzdXJmQXNzZXRJZAkAAlkAAAABBQAAAA5zdXJmQXNzZXRJZFN0cgEAAAASbWluV2F2ZXNGb3JOc2J0QnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAIG1pbldhdmVzQW1vdW50TnNidEJ1eVNZU1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAEAAAAObWluTnNidEZvclNlbGwAAAAACQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAAD2F1Y3Rpb25Db250cmFjdAIAAAAfbWluTnNidEFtb3VudEZvclNlbGxTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAAEm1pbldhdmVzRm9yU3VyZkJ1eQAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAACBtaW5XYXZlc0Ftb3VudFN1cmZCdXlTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAAEW1pblVzZG5Gb3JTdXJmQnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAH21pblVzZG5BbW91bnRTdXJmQnV5U1lTUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsAQAAABRwcml2YXRlTnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABCQAFFAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA5uc2J0MnVzZG5QcmljZQUAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9uc2J0MndhdmVzUHJpY2UFAAAAD25zYnQyd2F2ZXNQcmljZQEAAAAOZ2V0TG9ja2VkT25ScGQAAAACAAAAB2FkZHJTdHIAAAAKYXNzZXRJZFN0cgQAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAALcnBkX2JhbGFuY2UJAARMAAAAAgUAAAAKYXNzZXRJZFN0cgkABEwAAAACBQAAAAdhZGRyU3RyBQAAAANuaWwCAAAAAV8JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAALcnBkQ29udHJhY3QFAAAAA2tleQAAAAAAAAAAAAAAAA4AAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAZwcmljZXMJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAgY2FsY0NvbnRyYWN0TnNidFByaWNlU1lTUkVBRE9OTFkJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAD25NZXRyaWNJZHhQcmljZQQAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlBAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABxuTWV0cmljSWR4V2F2ZXNMb2NrZWRCYWxhbmNlBAAAAA9yZXNlcnZlc0luV2F2ZXMJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABFuTWV0cmljSWR4UmVzZXJ2ZQQAAAAOcmVzZXJ2ZXNJblVzZG4JAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABduTWV0cmljSWR4UmVzZXJ2ZUluVXNkbgQAAAAObmV1dHJpbm9TdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4VXNkblN1cHBseQQAAAAHc3VycGx1cwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAEW5NZXRyaWNJZHhTdXJwbHVzBAAAAA5zdXJwbHVzUGVyY2VudAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAGG5NZXRyaWNJZHhTdXJwbHVzUGVyY2VudAQAAAACQlIJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAAAxuTWV0cmljSWR4QlIEAAAACm5zYnRTdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4TnNidFN1cHBseQQAAAANbWF4TnNidFN1cHBseQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5BAAAAA5uc2J0MnVzZG5QcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAAEAAAAD25zYnQyd2F2ZXNQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEEAAAAEG1pbldhdmVzNE5zYnRCdXkJAQAAABJtaW5XYXZlc0Zvck5zYnRCdXkAAAAABAAAAAttaW5Oc2J0c2VsbAkBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAQAAAAObWluTnNidExvY2tBbXQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAAQa2V5TWluTG9ja0Ftb3VudAAAAAAEAAAAEG1heFdhdmVzMkJ1eVN1cmYJAABlAAAAAgkAAGsAAAADBQAAAA5uZXV0cmlub1N1cHBseQUAAAAFTVVMVDgFAAAADGN1cnJlbnRQcmljZQUAAAAPcmVzZXJ2ZXNJbldhdmVzBAAAAA9tYXhVc2RuMkJ1eVN1cmYJAABlAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkFAAAADnJlc2VydmVzSW5Vc2RuBAAAAA9zdXJmUHJpY2VJblVzZG4FAAAAAkJSBAAAABBzdXJmUHJpY2VJbldhdmVzCQAAawAAAAMFAAAAAkJSBQAAAAVNVUxUNgUAAAAMY3VycmVudFByaWNlCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAKCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAAA9yZXNlcnZlc0luV2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAAA5yZXNlcnZlc0luVXNkbgkABEwAAAACCQABpAAAAAEFAAAADm5ldXRyaW5vU3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAAHc3VycGx1cwkABEwAAAACCQABpAAAAAEFAAAADnN1cnBsdXNQZXJjZW50CQAETAAAAAIJAAGkAAAAAQUAAAACQlIJAARMAAAAAgkAAaQAAAABBQAAAApuc2J0U3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAANbWF4TnNidFN1cHBseQkABEwAAAACCQABpAAAAAEFAAAADm5zYnQydXNkblByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbnNidDJ3YXZlc1ByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAQbWluV2F2ZXM0TnNidEJ1eQkABEwAAAACCQABpAAAAAEFAAAAC21pbk5zYnRzZWxsCQAETAAAAAIJAAGkAAAAAQUAAAAObWluTnNidExvY2tBbXQJAARMAAAAAgkAAaQAAAABBQAAABBtYXhXYXZlczJCdXlTdXJmCQAETAAAAAIJAAGkAAAAAQUAAAAPbWF4VXNkbjJCdXlTdXJmCQAETAAAAAIJAAGkAAAAAQUAAAAPc3VyZlByaWNlSW5Vc2RuCQAETAAAAAIJAAGkAAAAAQUAAAAQc3VyZlByaWNlSW5XYXZlcwUAAAADbmlsBQAAAANTRVAAAAABaQEAAAAQc3dhcEluZm9SRUFET05MWQAAAAEAAAARdXNlckFkZHJlc3NTdHJPcHQEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAA9taW5XYXZlc1N3YXBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAABAAAAA5taW5Vc2RuU3dhcEFtdAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAAEAAAADXdhdmVzMlVzZG5GZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlXYXZlc091dEZlZVBhcnQAAAAABAAAAA11c2RuMldhdmVzRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5TmV1dHJpbm9PdXRGZWVQYXJ0AAAAAAQAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAea2V5QmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsAAAAAAQAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAG2tleUJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAAAAAAEAAAADSR0MDExNDYxMTE2MjUJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAQc3dhcExpbWl0TWF4VXNkbggFAAAADSR0MDExNDYxMTE2MjUAAAACXzEEAAAAEnN3YXBMaW1pdFNwZW50VXNkbggFAAAADSR0MDExNDYxMTE2MjUAAAACXzIEAAAADmJsY2tzMkxtdFJlc2V0CAUAAAANJHQwMTE0NjExMTYyNQAAAAJfMwQAAAARc3dhcExpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAQc3dhcExpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAFiVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA9taW5XYXZlc1N3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5Vc2RuU3dhcEFtdAkABEwAAAACCQABpAAAAAEFAAAADXdhdmVzMlVzZG5GZWUJAARMAAAAAgkAAaQAAAABBQAAAA11c2RuMldhdmVzRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQAETAAAAAIJAAGkAAAAAQUAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAADmJsY2tzMkxtdFJlc2V0CQAETAAAAAIJAAGkAAAAAQUAAAARc3dhcExpbWl0TWF4V2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAABBzd2FwTGltaXRNYXhVc2RuCQAETAAAAAIJAAGkAAAAAQUAAAASc3dhcExpbWl0U3BlbnRVc2RuBQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAABFnbnNidEluZm9SRUFET05MWQAAAAIAAAARdXNlckFkZHJlc3NTdHJPcHQAAAALbnNidEFtdERpZmYEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAA0kdDAxMjYzMTEyODE0CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGxpbWl0TWF4VXNkbggFAAAADSR0MDEyNjMxMTI4MTQAAAACXzEEAAAACmxpbWl0U3BlbnQIBQAAAA0kdDAxMjYzMTEyODE0AAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAADSR0MDEyNjMxMTI4MTQAAAACXzMEAAAACGduc2J0QW10CAUAAAANJHQwMTI2MzExMjgxNAAAAAJfNAQAAAANZ25zYnRBbXRUb3RhbAgFAAAADSR0MDEyNjMxMTI4MTQAAAACXzUEAAAADSR0MDEyODE4MTMwMjYJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACBQAAAAtuc2J0QW10RGlmZgUAAAADbmlsBQAAAANuaWwEAAAAD2xpbWl0TWF4VXNkbk5FVwgFAAAADSR0MDEyODE4MTMwMjYAAAACXzEEAAAADWxpbWl0U3BlbnRORVcIBQAAAA0kdDAxMjgxODEzMDI2AAAAAl8yBAAAABFibGNrczJMbXRSZXNldE5FVwgFAAAADSR0MDEyODE4MTMwMjYAAAACXzMEAAAAC2duc2J0QW10TkVXCAUAAAANJHQwMTI4MTgxMzAyNgAAAAJfNAQAAAAQZ25zYnRBbXRUb3RhbE5FVwgFAAAADSR0MDEyODE4MTMwMjYAAAACXzUEAAAADWxpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAMbGltaXRNYXhVc2RuBQAAAAxjdXJyZW50UHJpY2UEAAAAEGxpbWl0TWF4V2F2ZXNORVcJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAPbGltaXRNYXhVc2RuTkVXBQAAAAxjdXJyZW50UHJpY2UEAAAACmduc2J0U2hhcmUDCQEAAAACIT0AAAACBQAAAA1nbnNidEFtdFRvdGFsAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAAIZ25zYnRBbXQAAAAAAAAAAGQFAAAABk1VTFQxMgUAAAANZ25zYnRBbXRUb3RhbAAAAAAAAAAAAAQAAAANZ25zYnRTaGFyZU5FVwMJAQAAAAIhPQAAAAIFAAAAEGduc2J0QW10VG90YWxORVcAAAAAAAAAAAAJAABrAAAAAwkAAGgAAAACBQAAAAtnbnNidEFtdE5FVwAAAAAAAAAAZAUAAAAGTVVMVDEyBQAAABBnbnNidEFtdFRvdGFsTkVXAAAAAAAAAAAABAAAAApyZXdhcmRJbmZvCQEAAAAIYXNTdHJpbmcAAAABCQAD/AAAAAQFAAAAE25zYnRTdGFraW5nQ29udHJhY3QCAAAAGHVuY2xhaW1lZFJld2FyZHNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAUAAAADbmlsBQAAAANuaWwEAAAAB25zYnRBbXQFAAAACGduc2J0QW10BAAAAApuc2J0QW10TmV3BQAAAAtnbnNidEFtdE5FVwQAAAASbnNidEFtdFN0YWtlZFRvdGFsBQAAAA1nbnNidEFtdFRvdGFsBAAAABVuc2J0QW10U3Rha2VkVG90YWxOZXcFAAAAEGduc2J0QW10VG90YWxORVcEAAAACG5zYnREYXRhCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0AgAAABZuc2J0U3Rha2luZ1NZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIFAAAAC25zYnRBbXREaWZmBQAAAANuaWwFAAAAA25pbAQAAAASaXNFbXB0eU5zYnRCYWxhbmNlAwkAAAAAAAACBQAAAAhnbnNidEFtdAAAAAAAAAAAAAkAAAAAAAACBQAAAAtnbnNidEFtdE5FVwAAAAAAAAAAAAcEAAAAC3N0YXJ0SGVpZ2h0AwUAAAASaXNFbXB0eU5zYnRCYWxhbmNlAP//////////CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAACG5zYnREYXRhAAAAAAAAAAACBAAAAA5zdGFydFRpbWVzdGFtcAkBAAAAC3RvVGltZXN0YW1wAAAAAQUAAAALc3RhcnRIZWlnaHQEAAAACGhhbGZMaWZlCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAC2tleUhhbGZMaWZlAAAAAAQAAAAOc3RhcnRIZWlnaHROZXcDBQAAABJpc0VtcHR5TnNidEJhbGFuY2UA//////////8JAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABNtZXJnZVN0YWtlc1JFQURPTkxZCQAETAAAAAIFAAAACGduc2J0QW10CQAETAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAETAAAAAIFAAAAC2duc2J0QW10TkVXCQAETAAAAAIFAAAABmhlaWdodAkABEwAAAACBQAAAAhoYWxmTGlmZQUAAAADbmlsBQAAAANuaWwEAAAAEXN0YXJ0VGltZXN0YW1wTmV3CQEAAAALdG9UaW1lc3RhbXAAAAABBQAAAA5zdGFydEhlaWdodE5ldwkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAACIlZCVkJWQlZCVkJWQlZCVkJXMlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAIZ25zYnRBbXQJAARMAAAAAgkAAaQAAAABBQAAAAtnbnNidEFtdE5FVwkABEwAAAACCQABpAAAAAEFAAAACmduc2J0U2hhcmUJAARMAAAAAgkAAaQAAAABBQAAAA1nbnNidFNoYXJlTkVXCQAETAAAAAIJAAGkAAAAAQUAAAAMbGltaXRNYXhVc2RuCQAETAAAAAIJAAGkAAAAAQUAAAANbGltaXRNYXhXYXZlcwkABEwAAAACCQABpAAAAAEFAAAAD2xpbWl0TWF4VXNkbk5FVwkABEwAAAACCQABpAAAAAEFAAAAEGxpbWl0TWF4V2F2ZXNORVcJAARMAAAAAgUAAAAKcmV3YXJkSW5mbwkABEwAAAACCQABpAAAAAEFAAAAB25zYnRBbXQJAARMAAAAAgkAAaQAAAABBQAAAApuc2J0QW10TmV3CQAETAAAAAIJAAGkAAAAAQUAAAASbnNidEFtdFN0YWtlZFRvdGFsCQAETAAAAAIJAAGkAAAAAQUAAAAVbnNidEFtdFN0YWtlZFRvdGFsTmV3CQAETAAAAAIJAAGkAAAAAQUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgkAAaQAAAABBQAAAA5zdGFydFRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAADnN0YXJ0SGVpZ2h0TmV3CQAETAAAAAIJAAGkAAAAAQUAAAARc3RhcnRUaW1lc3RhbXBOZXcFAAAAA25pbAUAAAADU0VQAAAAAWkBAAAAFm5ldXRyaW5vQ29uZmlnUkVBRE9OTFkAAAAABAAAAAtsaW1pdFBhcmFtQQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAMbWF0aENvbnRyYWN0CQEAAAATa2V5U3dhcEFtb3VudEFQYXJhbQAAAAAEAAAAC2xpbWl0UGFyYW1CCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAxtYXRoQ29udHJhY3QJAQAAABNrZXlTd2FwQW1vdW50QlBhcmFtAAAAAAQAAAAPbWluV2F2ZXNTd2FwQW10CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5TWluV2F2ZXNTd2FwQW1vdW50AAAAAAQAAAAObWluVXNkblN3YXBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlNaW5OZXV0cmlub1N3YXBBbW91bnQAAAAABAAAAA13YXZlczJVc2RuRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAQAAAANdXNkbjJXYXZlc0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAAEAAAAEG1pbldhdmVzNE5zYnRCdXkJAQAAABJtaW5XYXZlc0Zvck5zYnRCdXkAAAAABAAAAAttaW5Oc2J0c2VsbAkBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAQAAAAObWluTnNidExvY2tBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAABBrZXlNaW5Mb2NrQW1vdW50AAAAAAQAAAAIaGFsZkxpZmUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAAAtrZXlIYWxmTGlmZQAAAAAEAAAAEG1pbldhdmVzNFN1cmZCdXkJAQAAABJtaW5XYXZlc0ZvclN1cmZCdXkAAAAABAAAAA9taW5Vc2RuNFN1cmZCdXkJAQAAABFtaW5Vc2RuRm9yU3VyZkJ1eQAAAAAEAAAADnN1cmZTdGFraW5nQ2ZnCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAABNzdXJmU3Rha2luZ0NvbnRyYWN0AgAAABFjb25maWdTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwEAAAAD21pblN1cmZTdGFrZUFtdAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA5zdXJmU3Rha2luZ0NmZwAAAAAAAAAAAAQAAAASZ25zYnRGcm9tU3VyZkNvZWZmCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAADnN1cmZTdGFraW5nQ2ZnAAAAAAAAAAABBAAAACBzdXJmVm90aW5nUG93ZXJSZXN0cmljdGl2ZVBlcmlvZAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA5zdXJmU3Rha2luZ0NmZwAAAAAAAAAAAgQAAAAbYnJUb1N0YXJ0U3VyZlRyYW5zZm9ybWF0aW9uCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAADnN1cmZTdGFraW5nQ2ZnAAAAAAAAAAADCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAICVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUA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AWkBAAAAJnVuc3Rha2VDb21pc3Npb25BbW91bnRCeUhlaWdodFJFQURPTkxZAAAAAgAAAAZhbW91bnQAAAALc3RhcnRIZWlnaHQEAAAACGhhbGZMaWZlCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAC2tleUhhbGZMaWZlAAAAAAQAAAABYQkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAIWdldFVuc3Rha2VDb21pc3Npb25BbW91bnRSRUFET05MWQkABEwAAAACBQAAAAZhbW91bnQJAARMAAAAAgUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgUAAAAIaGFsZkxpZmUFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAFhBQAAAAFhCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAAiVkCQAETAAAAAIJAAGkAAAAAQUAAAABYQUAAAADbmlsBQAAAANTRVAJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAJHVuc3Rha2VDb21pc3Npb25BbW91bnRCeVVzZXJSRUFET05MWQAAAAIAAAAGYW1vdW50AAAAC3VzZXJBZGRyZXNzBAAAAAhoYWxmTGlmZQkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAAAtrZXlIYWxmTGlmZQAAAAAEAAAAC3N0YXJ0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABmhlaWdodAQAAAABYQkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAIWdldFVuc3Rha2VDb21pc3Npb25BbW91bnRSRUFET05MWQkABEwAAAACBQAAAAZhbW91bnQJAARMAAAAAgUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgUAAAAIaGFsZkxpZmUFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAFhBQAAAAFhCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAAiVkCQAETAAAAAIJAAGkAAAAAQUAAAABYQUAAAADbmlsBQAAAANTRVAJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEW5ldXRyaW5vU3RhdGVSRVNUAAAAAAQAAAAPbmV1dHJpbm9NZXRyaWNzCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAGmNhbGNOZXV0aW5vTWV0cmljc1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAQAAAAMY3VycmVudFByaWNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAPbk1ldHJpY0lkeFByaWNlBAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABtuTWV0cmljSWR4VXNkbkxvY2tlZEJhbGFuY2UEAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAHG5NZXRyaWNJZHhXYXZlc0xvY2tlZEJhbGFuY2UEAAAAD3Jlc2VydmVzSW5XYXZlcwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAEW5NZXRyaWNJZHhSZXNlcnZlBAAAAA5yZXNlcnZlc0luVXNkbgkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAF25NZXRyaWNJZHhSZXNlcnZlSW5Vc2RuBAAAAA5uZXV0cmlub1N1cHBseQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAFG5NZXRyaWNJZHhVc2RuU3VwcGx5BAAAAAdzdXJwbHVzCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAARbk1ldHJpY0lkeFN1cnBsdXMEAAAADnN1cnBsdXNQZXJjZW50CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAYbk1ldHJpY0lkeFN1cnBsdXNQZXJjZW50BAAAAAJCUgkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAADG5NZXRyaWNJZHhCUgQAAAAKbnNidFN1cHBseQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAFG5NZXRyaWNJZHhOc2J0U3VwcGx5BAAAAA1uc2J0U3VwcGx5TWF4CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAXbk1ldHJpY0lkeE1heE5zYnRTdXBwbHkEAAAACnN1cmZTdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4U3VyZlN1cHBseQkAAAIAAAABCQAEuQAAAAIJAARMAAAAAgIAAAAXcmVzdWx0TmV1dHJpbm9TdGF0ZVJFU1QJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAAA9yZXNlcnZlc0luV2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAAA5yZXNlcnZlc0luVXNkbgkABEwAAAACCQABpAAAAAEFAAAADm5ldXRyaW5vU3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAAHc3VycGx1cwkABEwAAAACCQABpAAAAAEFAAAADnN1cnBsdXNQZXJjZW50CQAETAAAAAIJAAGkAAAAAQUAAAACQlIJAARMAAAAAgkAAaQAAAABBQAAAApuc2J0U3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAANbnNidFN1cHBseU1heAkABEwAAAACCQABpAAAAAEFAAAACnN1cmZTdXBwbHkFAAAAA25pbAIAAAACX18AAAABaQEAAAANbnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABBAAAAAhyZXN0RGF0YQkABLkAAAACCQAETAAAAAICAAAAEnN0YXJ0TnNidFByaWNlUkVTVAkABEwAAAACCQABpAAAAAEFAAAADm5zYnQydXNkblByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbnNidDJ3YXZlc1ByaWNlCQAETAAAAAICAAAAEGVuZE5zYnRQcmljZVJFU1QFAAAAA25pbAIAAAACX18JAAACAAAAAQUAAAAIcmVzdERhdGEAAAABaQEAAAANc3VyZlByaWNlUkVTVAAAAAAEAAAAD25ldXRyaW5vTWV0cmljcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAD25NZXRyaWNJZHhQcmljZQQAAAAPcmVzZXJ2ZXNJbldhdmVzCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAARbk1ldHJpY0lkeFJlc2VydmUEAAAADm5ldXRyaW5vU3VwcGx5CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAUbk1ldHJpY0lkeFVzZG5TdXBwbHkEAAAAD3N1cmZQcmljZUluVXNkbgkAAGsAAAADBQAAAA9yZXNlcnZlc0luV2F2ZXMFAAAADGN1cnJlbnRQcmljZQUAAAAObmV1dHJpbm9TdXBwbHkEAAAAEHN1cmZQcmljZUluV2F2ZXMJAABrAAAAAwUAAAAPcmVzZXJ2ZXNJbldhdmVzBQAAAAVNVUxUOAUAAAAObmV1dHJpbm9TdXBwbHkEAAAACHJlc3REYXRhCQAEuQAAAAIJAARMAAAAAgIAAAASc3RhcnRTdXJmUHJpY2VSRVNUCQAETAAAAAIJAAGkAAAAAQUAAAAPc3VyZlByaWNlSW5Vc2RuCQAETAAAAAIJAAGkAAAAAQUAAAAQc3VyZlByaWNlSW5XYXZlcwkABEwAAAACAgAAABBlbmRTdXJmUHJpY2VSRVNUBQAAAANuaWwCAAAAAl9fCQAAAgAAAAEFAAAACHJlc3REYXRhAAAAAH471/Q=", "chainId": 84, "height": 2170690, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CS9qcqGSxg3aH1JorLGCvb2FwKUGGZopvLskNnsuu2hR Next: 6LCCbsXjkVk4TZuHor6GDyPE5VaWs6mZBKgTof4tSxS Diff:
OldNewDifferences
463463 let br1 = asInt(surfResult[bFuncIdxBREnd])
464464 let priceSurf2Waves0 = fraction(br0, MULT6, price)
465465 let priceSurf2Waves1 = fraction(br1, MULT6, price)
466- let gsnbtRestV2Data = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, 0], nil))
467- let votingPower = asInt(gsnbtRestV2Data[19])
468- let votingPowerMax = asInt(gsnbtRestV2Data[21])
469- let votingPowerEta = asInt(gsnbtRestV2Data[23])
470- let gsnbtRestV2DataNEW = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, surfAmount], nil))
471- let votingPowerNEW = asInt(gsnbtRestV2DataNEW[19])
472- let votingPowerMaxNEW = asInt(gsnbtRestV2DataNEW[21])
473- let votingPowerEtaNEW = asInt(gsnbtRestV2DataNEW[23])
466+ let gsnbtRestV2DATA = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, surfAmount], nil))
467+ let votingPowerMax = asInt(gsnbtRestV2DATA[21])
468+ let votingPowerMaxNEW = asInt(gsnbtRestV2DATA[22])
469+ let votingPowerEtaNEW = asInt(gsnbtRestV2DATA[23])
474470 let mergedVotingPowerEta = votingPowerEtaNEW
475471 let maxVotingPowerDiff = (votingPowerMaxNEW - votingPowerMax)
476472 let rest = asInt(surfResult[bFuncIdxRest])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let revisionNum = ""
55
66 let EULER8 = 271828182
77
88 let MULT6 = 1000000
99
1010 let MULTX6 = toBigInt(1000000)
1111
1212 let MULT8 = 100000000
1313
1414 let MULTX8 = toBigInt(100000000)
1515
1616 let MULT12 = 1000000000000
1717
1818 let MULT18 = toBigInt(1000000000000000000)
1919
2020 let SEP = "__"
2121
2222 let WAVESID = fromBase58String("WAVES")
2323
2424 let nMetricIdxPrice = 0
2525
2626 let nMetricIdxUsdnLockedBalance = 1
2727
2828 let nMetricIdxWavesLockedBalance = 2
2929
3030 let nMetricIdxReserve = 3
3131
3232 let nMetricIdxReserveInUsdn = 4
3333
3434 let nMetricIdxUsdnSupply = 5
3535
3636 let nMetricIdxSurplus = 6
3737
3838 let nMetricIdxSurplusPercent = 7
3939
4040 let nMetricIdxBR = 8
4141
4242 let nMetricIdxNsbtSupply = 9
4343
4444 let nMetricIdxMaxNsbtSupply = 10
4545
4646 let nMetricIdxSurfSupply = 11
4747
4848 let bFuncIdxSurf = 0
4949
5050 let bFuncIdxWaves = 1
5151
5252 let bFuncIdxUsdn = 2
5353
5454 let bFuncIdxReserveStart = 3
5555
5656 let bFuncIdxSupplyStart = 4
5757
5858 let bFuncIdxBRStart = 5
5959
6060 let bFuncIdxReserveEnd = 6
6161
6262 let bFuncIdxSupplyEnd = 7
6363
6464 let bFuncIdxBREnd = 8
6565
6666 let bFuncIdxRest = 9
6767
6868 let bFuncIdxWavesPrice = 10
6969
7070 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
7171
7272
7373 func keyNeutrinoAssetId () = "neutrino_asset_id"
7474
7575
7676 func keyNsbtAssetId () = "bond_asset_id"
7777
7878
7979 func keySurfAssetId () = "surf_asset_id"
8080
8181
8282 func keyBalanceLocked () = "balance_lock_"
8383
8484
8585 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
8686
8787
8888 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
8989
9090
9191 func keyMinWavesSwapAmount () = "min_waves_swap_amount"
9292
9393
9494 func keyMinNeutrinoSwapAmount () = "min_neutrino_swap_amount"
9595
9696
9797 func keyWavesOutFeePart () = "wavesOut_swap_feePart"
9898
9999
100100 func keyNeutrinoOutFeePart () = "neutrinoOut_swap_feePart"
101101
102102
103103 func keySwapAmountAParam () = "%s%s__config__swapAParam"
104104
105105
106106 func keySwapAmountBParam () = "%s%s__config__swapBParam"
107107
108108
109109 func keyNsbtLockContract () = "%s__nsbtLockContract"
110110
111111
112112 func keyMathContract () = "%s__mathContract"
113113
114114
115115 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
116116
117117
118118 func keyBalanceNeutrinoLockInterval () = "balance_neutrino_lock_interval"
119119
120120
121121 func keyPrice () = "price"
122122
123123
124124 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "start"], SEP)
125125
126126
127127 func keyHalfLife () = "%s__halfLife"
128128
129129
130130 func keyMinLockAmount () = "%s__minLockAmount"
131131
132132
133133 func keyMinWavesForNsbtBuy () = "min_waves_nsbt_buy"
134134
135135
136136 func keyMinNsbtSell () = "min_nsbt_sell"
137137
138138
139139 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
140140
141141
142142 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
143143
144144
145145 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
146146
147147
148148 func convertNeutrinoToWaves (amount,price) = fraction(amount, MULT8, price)
149149
150150
151151 func convertWavesToNeutrino (amount,price) = fraction(amount, price, MULT8)
152152
153153
154154 func asAnyList (val) = match val {
155155 case valAnyList: List[Any] =>
156156 valAnyList
157157 case _ =>
158158 throw("fail to cast into List[Any]")
159159 }
160160
161161
162162 func asInt (val) = match val {
163163 case valInt: Int =>
164164 valInt
165165 case _ =>
166166 throw("fail to cast into Int")
167167 }
168168
169169
170170 func asString (val) = match val {
171171 case valStr: String =>
172172 valStr
173173 case _ =>
174174 throw("fail to cast into String")
175175 }
176176
177177
178178 func asTuple2Ints (val) = match val {
179179 case v: (Int, Int) =>
180180 v
181181 case _ =>
182182 throw("fail to cast into Tuple2 ints")
183183 }
184184
185185
186186 func asSwapParamsSTRUCT (val) = match val {
187187 case struct: (Int, Int, Int, Int, Int) =>
188188 struct
189189 case _ =>
190190 throw("fail to cast into Int")
191191 }
192192
193193
194194 func toTimestamp (start) = if ((0 > start))
195195 then -1
196196 else match blockInfoByHeight(start) {
197197 case block: BlockInfo =>
198198 block.timestamp
199199 case _ =>
200200 -1
201201 }
202202
203203
204204 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), MULT18, toBigInt(origScaleMult))
205205
206206
207207 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), MULT18))
208208
209209
210210 let IdxControlCfgNeutrinoDapp = 1
211211
212212 let IdxControlCfgAuctionDapp = 2
213213
214214 let IdxControlCfgRpdDapp = 3
215215
216216 let IdxControlCfgMathDapp = 4
217217
218218 let IdxControlCfgLiquidationDapp = 5
219219
220220 let IdxControlCfgRestDapp = 6
221221
222222 let IdxControlCfgNodeRegistryDapp = 7
223223
224224 let IdxControlCfgNsbtStakingDapp = 8
225225
226226 let IdxControlCfgMediatorDapp = 9
227227
228228 let IdxControlCfgSurfStakingDapp = 10
229229
230230 let IdxControlCfgGnsbtControllerDapp = 11
231231
232232 let IdxControlCfgRestV2Dapp = 12
233233
234234 func keyControlAddress () = "%s%s__config__controlAddress"
235235
236236
237237 func keyControlCfg () = "%s__controlConfig"
238238
239239
240240 func readControlCfgOrFail (control) = split(getStringOrFail(control, keyControlCfg()), SEP)
241241
242242
243243 func getContractAddressOrFail (controlCfg,idx) = valueOrErrorMessage(addressFromString(controlCfg[idx]), ("Control cfg doesn't contain address at index " + toString(idx)))
244244
245245
246246 let controlContract = addressFromStringValue(valueOrElse(getString(this, keyControlAddress()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
247247
248248 let controlCfg = readControlCfgOrFail(controlContract)
249249
250250 let mathContract = getContractAddressOrFail(controlCfg, IdxControlCfgMathDapp)
251251
252252 let neutrinoContract = getContractAddressOrFail(controlCfg, IdxControlCfgNeutrinoDapp)
253253
254254 let auctionContract = getContractAddressOrFail(controlCfg, IdxControlCfgAuctionDapp)
255255
256256 let liquidationContract = getContractAddressOrFail(controlCfg, IdxControlCfgLiquidationDapp)
257257
258258 let rpdContract = getContractAddressOrFail(controlCfg, IdxControlCfgRpdDapp)
259259
260260 let nsbtStakingContract = getContractAddressOrFail(controlCfg, IdxControlCfgNsbtStakingDapp)
261261
262262 let surfStakingContract = getContractAddressOrFail(controlCfg, IdxControlCfgSurfStakingDapp)
263263
264264 let gnsbtControllerContract = getContractAddressOrFail(controlCfg, IdxControlCfgGnsbtControllerDapp)
265265
266266 let restV2Contract = getContractAddressOrFail(controlCfg, IdxControlCfgRestV2Dapp)
267267
268268 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
269269
270270 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
271271
272272 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyNsbtAssetId())
273273
274274 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
275275
276276 let surfAssetIdStr = getStringValue(auctionContract, keySurfAssetId())
277277
278278 let surfAssetId = fromBase58String(surfAssetIdStr)
279279
280280 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
281281
282282
283283 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
284284
285285
286286 func minWavesForSurfBuy () = asInt(invoke(auctionContract, "minWavesAmountSurfBuySYSREADONLY", nil, nil))
287287
288288
289289 func minUsdnForSurfBuy () = asInt(invoke(auctionContract, "minUsdnAmountSurfBuySYSREADONLY", nil, nil))
290290
291291
292292 func privateNsbtPriceREST () = {
293293 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
294294 let nsbt2usdnPrice = asInt(prices[0])
295295 let nsbt2wavesPrice = asInt(prices[1])
296296 $Tuple2(IntegerEntry("nsbt2usdnPrice", nsbt2usdnPrice), IntegerEntry("nsbt2wavesPrice", nsbt2wavesPrice))
297297 }
298298
299299
300300 func getLockedOnRpd (addrStr,assetIdStr) = {
301301 let key = makeString(["rpd_balance", assetIdStr, addrStr], "_")
302302 valueOrElse(getInteger(rpdContract, key), 0)
303303 }
304304
305305
306306 @Callable(i)
307307 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
308308 then throw("not authorized")
309309 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
310310
311311
312312
313313 @Callable(i)
314314 func neutrinoStatsREADONLY () = {
315315 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
316316 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
317317 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
318318 let neutrinoLockedBalance = asInt(neutrinoMetrics[nMetricIdxUsdnLockedBalance])
319319 let wavesLockedBalance = asInt(neutrinoMetrics[nMetricIdxWavesLockedBalance])
320320 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
321321 let reservesInUsdn = asInt(neutrinoMetrics[nMetricIdxReserveInUsdn])
322322 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
323323 let surplus = asInt(neutrinoMetrics[nMetricIdxSurplus])
324324 let surplusPercent = asInt(neutrinoMetrics[nMetricIdxSurplusPercent])
325325 let BR = asInt(neutrinoMetrics[nMetricIdxBR])
326326 let nsbtSupply = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
327327 let maxNsbtSupply = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
328328 let nsbt2usdnPrice = asInt(prices[0])
329329 let nsbt2wavesPrice = asInt(prices[1])
330330 let minWaves4NsbtBuy = minWavesForNsbtBuy()
331331 let minNsbtsell = minNsbtForSell()
332332 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
333333 let maxWaves2BuySurf = (fraction(neutrinoSupply, MULT8, currentPrice) - reservesInWaves)
334334 let maxUsdn2BuySurf = (neutrinoSupply - reservesInUsdn)
335335 let surfPriceInUsdn = BR
336336 let surfPriceInWaves = fraction(BR, MULT6, currentPrice)
337337 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply), toString(maxNsbtSupply), toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), toString(minWaves4NsbtBuy), toString(minNsbtsell), toString(minNsbtLockAmt), toString(maxWaves2BuySurf), toString(maxUsdn2BuySurf), toString(surfPriceInUsdn), toString(surfPriceInWaves)], SEP))
338338 }
339339
340340
341341
342342 @Callable(i)
343343 func swapInfoREADONLY (userAddressStrOpt) = {
344344 let currentPrice = getIntegerValue(controlContract, keyPrice())
345345 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
346346 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
347347 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
348348 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
349349 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
350350 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
351351 let $t01146111625 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
352352 let swapLimitMaxUsdn = $t01146111625._1
353353 let swapLimitSpentUsdn = $t01146111625._2
354354 let blcks2LmtReset = $t01146111625._3
355355 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
356356 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blcks2LmtReset), toString(swapLimitMaxWaves), toString(swapLimitMaxUsdn), toString(swapLimitSpentUsdn)], SEP))
357357 }
358358
359359
360360
361361 @Callable(i)
362362 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
363363 let currentPrice = getIntegerValue(controlContract, keyPrice())
364364 let $t01263112814 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
365365 let limitMaxUsdn = $t01263112814._1
366366 let limitSpent = $t01263112814._2
367367 let blcks2LmtReset = $t01263112814._3
368368 let gnsbtAmt = $t01263112814._4
369369 let gnsbtAmtTotal = $t01263112814._5
370370 let $t01281813026 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
371371 let limitMaxUsdnNEW = $t01281813026._1
372372 let limitSpentNEW = $t01281813026._2
373373 let blcks2LmtResetNEW = $t01281813026._3
374374 let gnsbtAmtNEW = $t01281813026._4
375375 let gnsbtAmtTotalNEW = $t01281813026._5
376376 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
377377 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
378378 let gnsbtShare = if ((gnsbtAmtTotal != 0))
379379 then fraction((gnsbtAmt * 100), MULT12, gnsbtAmtTotal)
380380 else 0
381381 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
382382 then fraction((gnsbtAmtNEW * 100), MULT12, gnsbtAmtTotalNEW)
383383 else 0
384384 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
385385 let nsbtAmt = gnsbtAmt
386386 let nsbtAmtNew = gnsbtAmtNEW
387387 let nsbtAmtStakedTotal = gnsbtAmtTotal
388388 let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
389389 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
390390 let isEmptyNsbtBalance = if ((gnsbtAmt == 0))
391391 then (gnsbtAmtNEW == 0)
392392 else false
393393 let startHeight = if (isEmptyNsbtBalance)
394394 then -1
395395 else asInt(nsbtData[2])
396396 let startTimestamp = toTimestamp(startHeight)
397397 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
398398 let startHeightNew = if (isEmptyNsbtBalance)
399399 then -1
400400 else asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
401401 let startTimestampNew = toTimestamp(startHeightNew)
402402 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d%d%d%d%d%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew), toString(nsbtAmtStakedTotal), toString(nsbtAmtStakedTotalNew), toString(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
403403 }
404404
405405
406406
407407 @Callable(i)
408408 func neutrinoConfigREADONLY () = {
409409 let limitParamA = getIntegerValue(mathContract, keySwapAmountAParam())
410410 let limitParamB = getIntegerValue(mathContract, keySwapAmountBParam())
411411 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
412412 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
413413 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
414414 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
415415 let minWaves4NsbtBuy = minWavesForNsbtBuy()
416416 let minNsbtsell = minNsbtForSell()
417417 let minNsbtLockAmt = getIntegerValue(nsbtStakingContract, keyMinLockAmount())
418418 let halfLife = getIntegerValue(nsbtStakingContract, keyHalfLife())
419419 let minWaves4SurfBuy = minWavesForSurfBuy()
420420 let minUsdn4SurfBuy = minUsdnForSurfBuy()
421421 let surfStakingCfg = asAnyList(invoke(surfStakingContract, "configSYSREADONLY", nil, nil))
422422 let minSurfStakeAmt = asInt(surfStakingCfg[0])
423423 let gnsbtFromSurfCoeff = asInt(surfStakingCfg[1])
424424 let surfVotingPowerRestrictivePeriod = asInt(surfStakingCfg[2])
425425 let brToStartSurfTransformation = asInt(surfStakingCfg[3])
426426 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", toString(limitParamA), toString(limitParamB), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(minWaves4NsbtBuy), toString(minNsbtsell), toString(minNsbtLockAmt), toString(halfLife), toString(minWaves4SurfBuy), toString(minUsdn4SurfBuy), toString(minSurfStakeAmt), toString(gnsbtFromSurfCoeff), toString(surfVotingPowerRestrictivePeriod), toString(brToStartSurfTransformation)], SEP))
427427 }
428428
429429
430430
431431 @Callable(i)
432432 func buyNsbtREADONLY (wavesPay) = {
433433 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
434434 if ((minWavesAmountNsbtBuy > wavesPay))
435435 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
436436 else {
437437 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
438438 if ((curveResult == curveResult))
439439 then {
440440 let nsbtAmount = asInt(curveResult[0])
441441 if ((0 >= nsbtAmount))
442442 then throw("nsbtAmount <= 0")
443443 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
444444 }
445445 else throw("Strict value is not equal to itself.")
446446 }
447447 }
448448
449449
450450
451451 @Callable(i)
452452 func buySurfREADONLY (userAddressStrOpt,amount,assetIdStr) = {
453453 let assetId = fromBase58String(assetIdStr)
454454 let surfResult = asAnyList(invoke(mathContract, "surfFunctionREADONLY", [amount, assetId], nil))
455455 let surfAmount = asInt(surfResult[bFuncIdxSurf])
456456 let gNsbtAmount = asInt(invoke(gnsbtControllerContract, "gnsbtFromSurfSYSREADONLY", [surfAmount], nil))
457457 let limitOld = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))._1
458458 let limitNew = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, gNsbtAmount], nil))._1
459459 let price = asInt(surfResult[bFuncIdxWavesPrice])
460460 let additionalLimitUsdn = (limitNew - limitOld)
461461 let additionalLimitWaves = fraction(additionalLimitUsdn, MULT8, price)
462462 let br0 = asInt(surfResult[bFuncIdxBRStart])
463463 let br1 = asInt(surfResult[bFuncIdxBREnd])
464464 let priceSurf2Waves0 = fraction(br0, MULT6, price)
465465 let priceSurf2Waves1 = fraction(br1, MULT6, price)
466- let gsnbtRestV2Data = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, 0], nil))
467- let votingPower = asInt(gsnbtRestV2Data[19])
468- let votingPowerMax = asInt(gsnbtRestV2Data[21])
469- let votingPowerEta = asInt(gsnbtRestV2Data[23])
470- let gsnbtRestV2DataNEW = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, surfAmount], nil))
471- let votingPowerNEW = asInt(gsnbtRestV2DataNEW[19])
472- let votingPowerMaxNEW = asInt(gsnbtRestV2DataNEW[21])
473- let votingPowerEtaNEW = asInt(gsnbtRestV2DataNEW[23])
466+ let gsnbtRestV2DATA = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStrOpt, 0, surfAmount], nil))
467+ let votingPowerMax = asInt(gsnbtRestV2DATA[21])
468+ let votingPowerMaxNEW = asInt(gsnbtRestV2DATA[22])
469+ let votingPowerEtaNEW = asInt(gsnbtRestV2DATA[23])
474470 let mergedVotingPowerEta = votingPowerEtaNEW
475471 let maxVotingPowerDiff = (votingPowerMaxNEW - votingPowerMax)
476472 let rest = asInt(surfResult[bFuncIdxRest])
477473 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(surfAmount), toString(gNsbtAmount), toString(additionalLimitUsdn), toString(additionalLimitWaves), toString(br0), toString(br1), toString(priceSurf2Waves0), toString(priceSurf2Waves1), toString(mergedVotingPowerEta), toString(maxVotingPowerDiff), toString(rest)], SEP))
478474 }
479475
480476
481477
482478 @Callable(i)
483479 func walletInfoREADONLY (userAddressStr) = {
484480 let addr = addressFromStringValue(userAddressStr)
485481 let balance = wavesBalance(addr)
486482 let usdnLocked = getLockedOnRpd(userAddressStr, neutrinoAssetIdString)
487483 let nsbtLockedOld = getLockedOnRpd(userAddressStr, nsbtAssetIdStr)
488484 let gnsbtData = asAnyList(invoke(gnsbtControllerContract, "gnsbtInfoSYSREADONLY", [userAddressStr, 0, 0], nil))
489485 let nsbtData = asAnyList(gnsbtData[2])
490486 let nsbtUser = asInt(nsbtData[0])
491487 let nsbtTotal = asInt(nsbtData[1])
492488 let gNsbtFromNsbtUser = asInt(nsbtData[2])
493489 let gNsbtFromNsbtTotal = asInt(nsbtData[3])
494490 let surfData = asAnyList(gnsbtData[3])
495491 let surfUser = asInt(surfData[0])
496492 let surfTotal = asInt(surfData[1])
497493 let gNsbtFromSurfUser = asInt(surfData[2])
498494 let gNsbtFromSurfTotal = asInt(surfData[3])
499495 let availableUsdnToClaimFromSurf = 0
500496 let alreadyClaimedUsdnFromSurf = 0
501497 let gsnbtRestV2DATA = asAnyList(invoke(restV2Contract, "gnsbtInfoINTERNAL", [userAddressStr, 0, 0], nil))
502498 let votingPower = asInt(gsnbtRestV2DATA[19])
503499 let votingPowerMax = asInt(gsnbtRestV2DATA[21])
504500 let votingPowerEta = asInt(gsnbtRestV2DATA[23])
505501 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", toString(balance.regular), toString(balance.available), toString(balance.generating), toString(balance.effective), toString(height), toString(usdnLocked), toString(nsbtLockedOld), toString(nsbtUser), toString(gNsbtFromNsbtUser), toString(gNsbtFromSurfUser), toString(surfUser), toString(votingPower), toString(votingPowerMax), toString(votingPowerEta), toString(availableUsdnToClaimFromSurf), toString(alreadyClaimedUsdnFromSurf), toString(gNsbtFromNsbtTotal), toString(gNsbtFromSurfTotal)], SEP))
506502 }
507503
508504
509505
510506 @Callable(i)
511507 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
512508 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
513509 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
514510 $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
515511 }
516512
517513
518514
519515 @Callable(i)
520516 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
521517 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
522518 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
523519 if ((a == a))
524520 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
525521 else throw("Strict value is not equal to itself.")
526522 }
527523
528524
529525
530526 @Callable(i)
531527 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
532528 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
533529 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
534530 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
535531 if ((a == a))
536532 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
537533 else throw("Strict value is not equal to itself.")
538534 }
539535
540536
541537
542538 @Callable(i)
543539 func neutrinoStateREST () = {
544540 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
545541 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
546542 let neutrinoLockedBalance = asInt(neutrinoMetrics[nMetricIdxUsdnLockedBalance])
547543 let wavesLockedBalance = asInt(neutrinoMetrics[nMetricIdxWavesLockedBalance])
548544 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
549545 let reservesInUsdn = asInt(neutrinoMetrics[nMetricIdxReserveInUsdn])
550546 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
551547 let surplus = asInt(neutrinoMetrics[nMetricIdxSurplus])
552548 let surplusPercent = asInt(neutrinoMetrics[nMetricIdxSurplusPercent])
553549 let BR = asInt(neutrinoMetrics[nMetricIdxBR])
554550 let nsbtSupply = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
555551 let nsbtSupplyMax = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
556552 let surfSupply = asInt(neutrinoMetrics[nMetricIdxSurfSupply])
557553 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply), toString(nsbtSupplyMax), toString(surfSupply)], "__"))
558554 }
559555
560556
561557
562558 @Callable(i)
563559 func nsbtPriceREST () = {
564560 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
565561 let nsbt2usdnPrice = asInt(prices[0])
566562 let nsbt2wavesPrice = asInt(prices[1])
567563 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
568564 throw(restData)
569565 }
570566
571567
572568
573569 @Callable(i)
574570 func surfPriceREST () = {
575571 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
576572 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
577573 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
578574 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
579575 let surfPriceInUsdn = fraction(reservesInWaves, currentPrice, neutrinoSupply)
580576 let surfPriceInWaves = fraction(reservesInWaves, MULT8, neutrinoSupply)
581577 let restData = makeString(["startSurfPriceREST", toString(surfPriceInUsdn), toString(surfPriceInWaves), "endSurfPriceREST"], "__")
582578 throw(restData)
583579 }
584580
585581

github/deemru/w8io/3ef1775 
122.88 ms