tx · DV9ZTyyUojXpVgqaZV1rTfyFjv8Xuqd2SmVfF1MGUTMs

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.01000000 Waves

2021.12.23 17:18 [1847015] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "DV9ZTyyUojXpVgqaZV1rTfyFjv8Xuqd2SmVfF1MGUTMs", "fee": 1000000, "feeAssetId": null, "timestamp": 1640269106310, "version": 1, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "cw7onHhxpVzDWBsqxqt8EzXTfxCeFEppBCwAcgbAmdh2zj87Pwmn4uaw5cW8Fi4LhBQNuCsHyX8GyiuDCZthvgF" ], "script": "base64:AAIFAAAAAAAAAC4IAhIICgYICAEBAQgSAwoBARIDCgEBEgQKAggIEgQKAggIEgMKAQgSAwoBCBIAAAAAYAAAAAADU0VQAgAAAAJfXwAAAAAGU0NBTEU4AAAAAAAAAAAIAAAAAAVNVUxUOAAAAAAABfXhAAAAAAAOUE9PTFdFSUdIVE1VTFQFAAAABU1VTFQ4AQAAAA9nZXRTdHJpbmdPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgIAAAAPbWFuZGF0b3J5IHRoaXMuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAEAAAAMZ2V0SW50T3JaZXJvAAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkAAAAAAAAAAAABAAAAD2dldEludE9yRGVmYXVsdAAAAAMAAAAHYWRkcmVzcwAAAANrZXkAAAAKZGVmYXVsdFZhbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkFAAAACmRlZmF1bHRWYWwBAAAADGdldEludE9yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACAgAAAA9tYW5kYXRvcnkgdGhpcy4FAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAQAAAANhYnMAAAABAAAAA3ZhbAMJAABmAAAAAgAAAAAAAAAAAAUAAAADdmFsCQEAAAABLQAAAAEFAAAAA3ZhbAUAAAADdmFsAQAAAAlhc0FueUxpc3QAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAlMaXN0W0FueV0EAAAACnZhbEFueUx5c3QFAAAAByRtYXRjaDAFAAAACnZhbEFueUx5c3QJAAACAAAAAQIAAAAbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQAAAAVhc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAGdmFsSW50BQAAAAckbWF0Y2gwBQAAAAZ2YWxJbnQJAAACAAAAAQIAAAAVZmFpbCB0byBjYXN0IGludG8gSW50AQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAACAAAAHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAAAAABRJZHhGYWN0b3J5Q2ZnRGFvRGFwcAAAAAAAAAAACAAAAAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAAAAAAAAAAAAkAAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAAAAAAAAAAAKAAAAABZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwAAAAAAAAAAALAQAAAA1rZXlGYWN0b3J5Q2ZnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAAAAAQAAAApscEFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAIFAAAACmxwQXNzZXRTdHIJAARMAAAAAgIAAAAebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAAQa2V5RmFjdG9yeUxwTGlzdAAAAAACAAAAECVzX19scFRva2Vuc0xpc3QBAAAAJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQAAAApscEFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAIFAAAACmxwQXNzZXRTdHIJAARMAAAAAgIAAAAebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAAUa2V5RmFjdG9yeVBvb2xXZWlnaHQAAAABAAAAD2NvbnRyYWN0QWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgIAAAAKcG9vbFdlaWdodAkABEwAAAACBQAAAA9jb250cmFjdEFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABtrZXlGYWN0b3J5UG9vbFdlaWdodEhpc3RvcnkAAAACAAAAC3Bvb2xBZGRyZXNzAAAAA251bQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAADbnVtAQAAABhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAAAACQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAEAAAAKcmVhZExwTGlzdAAAAAAJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACCQEAAAAYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAAAAAkBAAAAEGtleUZhY3RvcnlMcExpc3QAAAAAAgAAAAAFAAAAA1NFUAEAAAAUcmVhZEZhY3RvcnlDZmdPckZhaWwAAAABAAAAB2ZhY3RvcnkJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAB2ZhY3RvcnkJAQAAAA1rZXlGYWN0b3J5Q2ZnAAAAAAUAAAADU0VQAQAAABhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAEAAAAea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQAAACFrZXlFbWlzc2lvblJhdGVQZXJCbG9ja01heEN1cnJlbnQAAAAAAgAAAB4lcyVzX19yYXRlUGVyQmxvY2tNYXhfX2N1cnJlbnQBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAACAAAAGiVzJXNfX2VtaXNzaW9uX19zdGFydEJsb2NrAQAAABtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAAAAAgAAABglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BAAAAE2tleUVtaXNzaW9uRW5kQmxvY2sAAAAAAgAAABglcyVzX19lbWlzc2lvbl9fZW5kQmxvY2sBAAAADWtleU5leHRQZXJpb2QAAAAAAgAAAA4lc19fbmV4dFBlcmlvZAEAAAAfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodAAAAAACAAAAKCVzJXNfX2d3eFJld2FyZEVtaXNzaW9uUGFydF9fc3RhcnRIZWlnaHQAAAAADUlkeENmZ0Fzc2V0SWQAAAAAAAAAAAEAAAAAE0lkeENmZ01pbkxvY2tBbW91bnQAAAAAAAAAAAIAAAAAFUlkeENmZ01pbkxvY2tEdXJhdGlvbgAAAAAAAAAAAwAAAAAVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uAAAAAAAAAAAEAAAAABJJZHhDZmdNYXRoQ29udHJhY3QAAAAAAAAAAAUBAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAADWZvcm1hdENvbmZpZ1MAAAAFAAAAB2Fzc2V0SWQAAAANbWluTG9ja0Ftb3VudAAAAA9taW5Mb2NrRHVyYXRpb24AAAAPbWF4TG9ja0R1cmF0aW9uAAAADG1hdGhDb250cmFjdAkABLkAAAACCQAETAAAAAICAAAACCVzJWQlZCVkCQAETAAAAAIFAAAAB2Fzc2V0SWQJAARMAAAAAgUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACBQAAAA9taW5Mb2NrRHVyYXRpb24JAARMAAAAAgUAAAAPbWF4TG9ja0R1cmF0aW9uCQAETAAAAAIFAAAADG1hdGhDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAUAAAAHYXNzZXRJZAAAAA1taW5Mb2NrQW1vdW50AAAAD21pbkxvY2tEdXJhdGlvbgAAAA9tYXhMb2NrRHVyYXRpb24AAAAMbWF0aENvbnRyYWN0CQEAAAANZm9ybWF0Q29uZmlnUwAAAAUFAAAAB2Fzc2V0SWQJAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAkAAaQAAAABBQAAAA9taW5Mb2NrRHVyYXRpb24JAAGkAAAAAQUAAAAPbWF4TG9ja0R1cmF0aW9uBQAAAAxtYXRoQ29udHJhY3QAAAAADklkeExvY2tVc2VyTnVtAAAAAAAAAAABAAAAAA1JZHhMb2NrQW1vdW50AAAAAAAAAAACAAAAAAxJZHhMb2NrU3RhcnQAAAAAAAAAAAMAAAAAD0lkeExvY2tEdXJhdGlvbgAAAAAAAAAABAAAAAANSWR4TG9ja1BhcmFtSwAAAAAAAAAA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CQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAAAWIFAAAAA25pbAUAAAADU0VQAQAAABVrZXlMb2NrUGFyYW1CeVBlcmlvZEsAAAACAAAAB3VzZXJOdW0AAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAARMAAAAAgUAAAAHdXNlck51bQkABEwAAAACAgAAAAFrCQAETAAAAAIFAAAABnBlcmlvZAUAAAADbmlsBQAAAANTRVABAAAAFWtleUxvY2tQYXJhbUJ5UGVyaW9kQgAAAAIAAAAHdXNlck51bQAAAAZwZXJpb2QJAAS5AAAAAgkABEwAAAACAgAAABclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAAAWIJAARMAAAAAgUAAAAGcGVyaW9kBQAAAANuaWwFAAAAA1NFUAEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAAAgAAAB4lcyVzX19zdGF0c19fYWN0aXZlVG90YWxMb2NrZWQBAAAAIGtleVN0YXRzTG9ja3NEdXJhdGlvblN1bUluQmxvY2tzAAAAAAIAAAAlJXMlc19fc3RhdHNfX2xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAIAAAAXJXMlc19fc3RhdHNfX2xvY2tzQ291bnQBAAAAEmtleVN0YXRzVXNlcnNDb3VudAAAAAACAAAAHSVzJXNfX3N0YXRzX19hY3RpdmVVc2Vyc0NvdW50AQAAACBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAAAAAEAAAAHdXNlck51bQkABLkAAAACCQAETAAAAAICAAAAHiVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludAkABEwAAAACBQAAAAd1c2VyTnVtBQAAAANuaWwFAAAAA1NFUAEAAAAia2V5VXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAAAAAIAAAAHdXNlck51bQAAAAlscEFzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAB4lcyVkX191c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnQJAARMAAAAAgUAAAAHdXNlck51bQkABEwAAAACBQAAAAlscEFzc2V0SWQFAAAAA25pbAUAAAADU0VQAQAAABdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTAAAAAEAAAAHdXNlck51bQkABLkAAAACCQAETAAAAAICAAAAESVzJWRfX21heEJvb3N0SW50CQAETAAAAAIFAAAAB3VzZXJOdW0FAAAAA25pbAUAAAADU0VQAQAAABhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwAAAAAAgAAABglcyVzX19tYXhCb29zdEludF9fdG90YWwBAAAAIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbAAAAAEAAAAHdXNlck51bQkABLkAAAACCQAETAAAAAICAAAAJCVzJWRfX3VzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkABEwAAAACBQAAAAd1c2VyTnVtBQAAAANuaWwFAAAAA1NFUAEAAAATa2V5VXNlckJvb3N0Q2xhaW1lZAAAAAEAAAAHdXNlck51bQkABLkAAAACCQAETAAAAAICAAAAFiVzJWRfX3VzZXJCb29zdENsYWltZWQJAARMAAAAAgUAAAAHdXNlck51bQUAAAADbmlsBQAAAANTRVABAAAAImtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWQAAAACAAAAB3VzZXJOdW0AAAAJbHBBc3NldElkCQAEuQAAAAIJAARMAAAAAgIAAAAhJXMlZCVzX191c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltCQAETAAAAAIFAAAAB3VzZXJOdW0JAARMAAAAAgUAAAAJbHBBc3NldElkBQAAAANuaWwFAAAAA1NFUAEAAAARa2V5VG90YWxDYWNoZWRHd3gAAAAAAgAAABYlcyVzX19nd3hDYWNoZWRfX3RvdGFsAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAAAAAAAAAApmYWN0b3J5Q2ZnCQEAAAAUcmVhZEZhY3RvcnlDZmdPckZhaWwAAAABBQAAAA9mYWN0b3J5Q29udHJhY3QAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnAAAAAA9zdGFraW5nQ29udHJhY3QJAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcAAAAAEWd3eFJld2FyZENvbnRyYWN0CQEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcBAAAADEhpc3RvcnlFbnRyeQAAAAgAAAAEdHlwZQAAAAR1c2VyAAAABmFtb3VudAAAAAlsb2NrU3RhcnQAAAAIZHVyYXRpb24AAAABawAAAAFiAAAAAWkEAAAACmhpc3RvcnlLRVkJAAS5AAAAAgkABEwAAAACAgAAABElcyVzJXMlc19faGlzdG9yeQkABEwAAAACBQAAAAR0eXBlCQAETAAAAAIFAAAABHVzZXIJAARMAAAAAgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAANuaWwFAAAAA1NFUAQAAAALaGlzdG9yeURBVEEJAAS5AAAAAgkABEwAAAACAgAAAA4lZCVkJWQlZCVkJWQlZAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0CQAETAAAAAIJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkAAaQAAAABBQAAAAZhbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAAlsb2NrU3RhcnQJAARMAAAAAgkAAaQAAAABBQAAAAhkdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAAAWsJAARMAAAAAgkAAaQAAAABBQAAAAFiBQAAAANuaWwFAAAAA1NFUAkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKaGlzdG9yeUtFWQUAAAALaGlzdG9yeURBVEEBAAAAClN0YXRzRW50cnkAAAAEAAAADnRvdGFsTG9ja2VkSW5jAAAAC2R1cmF0aW9uSW5jAAAADGxvY2tDb3VudEluYwAAAA11c2Vyc0NvdW50SW5jBAAAABtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkJAQAAACBrZXlTdGF0c0xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwAAAAAEAAAADWxvY2tzQ291bnRLRVkJAQAAABJrZXlTdGF0c0xvY2tzQ291bnQAAAAABAAAAA11c2Vyc0NvdW50S0VZCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAQAAAAOdG90YWxBbW91bnRLRVkJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAEAAAAGGxvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAAG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWQQAAAAKbG9ja3NDb3VudAkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAADWxvY2tzQ291bnRLRVkEAAAACnVzZXJzQ291bnQJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAAA11c2Vyc0NvdW50S0VZBAAAAAt0b3RhbEFtb3VudAkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAADnRvdGFsQW1vdW50S0VZCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkJAABkAAAAAgUAAAAYbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzBQAAAAtkdXJhdGlvbkluYwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANbG9ja3NDb3VudEtFWQkAAGQAAAACBQAAAApsb2Nrc0NvdW50BQAAAAxsb2NrQ291bnRJbmMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADXVzZXJzQ291bnRLRVkJAABkAAAAAgUAAAAKdXNlcnNDb3VudAUAAAANdXNlcnNDb3VudEluYwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOdG90YWxBbW91bnRLRVkJAABkAAAAAgUAAAALdG90YWxBbW91bnQFAAAADnRvdGFsTG9ja2VkSW5jBQAAAANuaWwBAAAADWNhbGNHd3hBbW91bnQAAAADAAAABGtSYXcAAAAEYlJhdwAAAAFoBAAAAAVTQ0FMRQAAAAAAAAAD6AkAAGkAAAACCQAAZAAAAAIJAABoAAAAAgUAAAAEa1JhdwUAAAABaAUAAAAEYlJhdwUAAAAFU0NBTEUBAAAAD0xvY2tQYXJhbXNFbnRyeQAAAAgAAAALdXNlckFkZHJlc3MAAAAHdXNlck51bQAAAAZhbW91bnQAAAAFc3RhcnQAAAAIZHVyYXRpb24AAAABawAAAAFiAAAABnBlcmlvZAQAAAANdXNlckFtb3VudEtFWQkBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABBQAAAAd1c2VyTnVtBAAAAA1zdGFydEJsb2NrS0VZCQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEFAAAAB3VzZXJOdW0EAAAAC2R1cmF0aW9uS0VZCQEAAAAUa2V5TG9ja1BhcmFtRHVyYXRpb24AAAABBQAAAAd1c2VyTnVtBAAAAARrS0VZCQEAAAANa2V5TG9ja1BhcmFtSwAAAAEFAAAAB3VzZXJOdW0EAAAABGJLRVkJAQAAAA1rZXlMb2NrUGFyYW1CAAAAAQUAAAAHdXNlck51bQQAAAALa0J5UGVyaW9LRVkJAQAAABVrZXlMb2NrUGFyYW1CeVBlcmlvZEsAAAACBQAAAAd1c2VyTnVtBQAAAAZwZXJpb2QEAAAADGJCeVBlcmlvZEtFWQkBAAAAFWtleUxvY2tQYXJhbUJ5UGVyaW9kQgAAAAIFAAAAB3VzZXJOdW0FAAAABnBlcmlvZAQAAAAJZ3d4QW1vdW50CQEAAAANY2FsY0d3eEFtb3VudAAAAAMFAAAAAWsFAAAAAWIFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANdXNlckFtb3VudEtFWQUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1zdGFydEJsb2NrS0VZBQAAAAVzdGFydAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALZHVyYXRpb25LRVkFAAAACGR1cmF0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAARrS0VZBQAAAAFrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAARiS0VZBQAAAAFiCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrQnlQZXJpb0tFWQUAAAABawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYkJ5UGVyaW9kS0VZBQAAAAFiCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlMb2NrUGFyYW1zUmVjb3JkAAAAAQUAAAALdXNlckFkZHJlc3MJAQAAABZmb3JtYXRMb2NrUGFyYW1zUmVjb3JkAAAABwUAAAAHdXNlck51bQUAAAAGYW1vdW50BQAAAAVzdGFydAUAAAAIZHVyYXRpb24FAAAAAWsFAAAAAWIFAAAACWd3eEFtb3VudAUAAAADbmlsAQAAACJleHRyYWN0T3B0aW9uYWxQYXltZW50QW1vdW50T3JGYWlsAAAAAgAAAAFpAAAAD2V4cGVjdGVkQXNzZXRJZAMJAABmAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAABtvbmx5IG9uZSBwYXltZW50IGlzIGFsbG93ZWQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPZXhwZWN0ZWRBc3NldElkCQAAAgAAAAECAAAAG2ludmFsaWQgYXNzZXQgaWQgaW4gcGF5bWVudAgFAAAAA3BtdAAAAAZhbW91bnQBAAAAFGNhbGNDdXJyZW50R3d4QW1vdW50AAAAAQAAAAt1c2VyQWRkcmVzcwQAAAAFRU1QVFkCAAAABWVtcHR5BAAAABJ1c2VyMk51bU1hcHBpbmdLRVkJAQAAABJrZXlVc2VyMk51bU1hcHBpbmcAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAHdXNlck51bQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCIAAAABBQAAABJ1c2VyMk51bU1hcHBpbmdLRVkFAAAABUVNUFRZBAAAAAFrCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAAA1rZXlMb2NrUGFyYW1LAAAAAQUAAAAHdXNlck51bQAAAAAAAAAAAAQAAAABYgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAANa2V5TG9ja1BhcmFtQgAAAAEFAAAAB3VzZXJOdW0AAAAAAAAAAAAEAAAADWd3eEFtb3VudENhbGMJAQAAAA1jYWxjR3d4QW1vdW50AAAAAwUAAAABawUAAAABYgUAAAAGaGVpZ2h0BAAAAAlnd3hBbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAADWd3eEFtb3VudENhbGMAAAAAAAAAAAAFAAAADWd3eEFtb3VudENhbGMFAAAACWd3eEFtb3VudAEAAAAUaW50ZXJuYWxDbGFpbVd4Qm9vc3QAAAADAAAADGxwQXNzZXRJZFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAAhyZWFkT25seQQAAAAFRU1QVFkCAAAABUVNUFRZBAAAABF1c2VyUmVjb3JkT3JFbXB0eQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAATa2V5TG9ja1BhcmFtc1JlY29yZAAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAVFTVBUWQMJAAAAAAAAAgUAAAARdXNlclJlY29yZE9yRW1wdHkFAAAABUVNUFRZCQAFFQAAAAMAAAAAAAAAAAAFAAAAA25pbAIAAAAVdXNlclJlY29yZDo6aXM6OmVtcHR5BAAAAA91c2VyUmVjb3JkQXJyYXkJAAS1AAAAAgUAAAARdXNlclJlY29yZE9yRW1wdHkFAAAAA1NFUAQAAAAKdXNlck51bVN0cgkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADklkeExvY2tVc2VyTnVtBAAAABxnd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAEWd3eFJld2FyZENvbnRyYWN0CQEAAAAfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodAAAAAAAAAAAAAAAAAAEAAAACEVNUFRZU1RSAgAAAAVlbXB0eQQAAAANJHQwMTI1MjUxMzA5MwMJAQAAAAIhPQAAAAIFAAAADGxwQXNzZXRJZFN0cgUAAAAIRU1QVFlTVFIEAAAADnBvb2xBZGRyZXNzU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABBQAAAAxscEFzc2V0SWRTdHIJAAEsAAAAAgIAAAAVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQAAAAxscEFzc2V0SWRTdHIEAAAAA3B3MQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAUa2V5RmFjdG9yeVBvb2xXZWlnaHQAAAABBQAAAA5wb29sQWRkcmVzc1N0cgQAAAADcHcwCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAG2tleUZhY3RvcnlQb29sV2VpZ2h0SGlzdG9yeQAAAAIFAAAADnBvb2xBZGRyZXNzU3RyAAAAAAAAAAAABQAAAANwdzEJAAUUAAAAAgUAAAADcHcwBQAAAANwdzEDBQAAAAhyZWFkT25seQkABRQAAAACAAAAAAAAAAAAAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgIAAAAobm90IHJlYWRvbmx5IG1vZGU6IHVuc3VwcG9ydGVkIGxwIGFzc2V0IAUAAAAMbHBBc3NldElkU3RyBAAAAAtwb29sV2VpZ2h0MAgFAAAADSR0MDEyNTI1MTMwOTMAAAACXzEEAAAAC3Bvb2xXZWlnaHQxCAUAAAANJHQwMTI1MjUxMzA5MwAAAAJfMgQAAAASd3hFbWlzc2lvblBlckJsb2NrCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAAAAAEAAAADWVtaXNzaW9uU3RhcnQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAAVa2V5RW1pc3Npb25TdGFydEJsb2NrAAAAAAQAAAALZW1pc3Npb25FbmQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAATa2V5RW1pc3Npb25FbmRCbG9jawAAAAAEAAAAAWgDCQAAZgAAAAIFAAAABmhlaWdodAUAAAALZW1pc3Npb25FbmQFAAAAC2VtaXNzaW9uRW5kBQAAAAZoZWlnaHQEAAAAAmRoCQABlgAAAAEJAARMAAAAAgkAAGUAAAACBQAAAAFoBQAAAA1lbWlzc2lvblN0YXJ0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAQAAAAidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQkBAAAAImtleVVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwAAAACBQAAAAp1c2VyTnVtU3RyBQAAAAxscEFzc2V0SWRTdHIEAAAAIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEAAAAga2V5VXNlckJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwAAAABBQAAAAp1c2VyTnVtU3RyBAAAAB11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAACJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkEAAAAFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAGkAAAACCQAAaAAAAAIJAABoAAAAAgUAAAASd3hFbWlzc2lvblBlckJsb2NrBQAAAAJkaAAAAAAAAAAAAgAAAAAAAAAAAwQAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAGUAAAACBQAAABVib29zdEVtaXNzaW9uSW50ZWdyYWwFAAAAHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsBAAAAAN1ZGgJAABrAAAAAwUAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAAAAAAAAAAAAwkAAGgAAAACAAAAAAAAAAACBQAAABJ3eEVtaXNzaW9uUGVyQmxvY2sEAAAABnVMYXN0SAkAAGUAAAACBQAAAAFoBQAAAAN1ZGgEAAAABHVkaDAJAAGWAAAAAQkABEwAAAACCQAAZQAAAAIFAAAAHGd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQFAAAABnVMYXN0SAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwEAAAABHVkaDEJAABlAAAAAgkAAGUAAAACBQAAAAFoBQAAAAZ1TGFzdEgFAAAABHVkaDADAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAGdUxhc3RIBgkAAGYAAAACAAAAAAAAAAAABQAAAAR1ZGgxBgkAAGcAAAACCQEAAAADYWJzAAAAAQkAAGUAAAACCQAAZAAAAAIFAAAABHVkaDAFAAAABHVkaDEFAAAAA3VkaAAAAAAAAAAAAQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFmludmFsaWQgdWRoIGNhbGM6IHVkaD0JAAGkAAAAAQUAAAADdWRoAgAAAAggdUxhc3RIPQkAAaQAAAABBQAAAAZ1TGFzdEgCAAAABiB1ZGgwPQkAAaQAAAABBQAAAAR1ZGgwAgAAAAYgdWRoMT0JAAGkAAAAAQUAAAAEdWRoMQMJAABmAAAAAgAAAAAAAAAAAAUAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAAIAAAABAgAAABJ3cm9uZyBjYWxjdWxhdGlvbnMEAAAAF3VzZXJNYXhCb29zdEludGVncmFsS0VZCQEAAAAXa2V5VXNlck1heEJvb3N0SU5URUdSQUwAAAABBQAAAAp1c2VyTnVtU3RyBAAAABh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkJAQAAABhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwAAAAABAAAAA91c2VyTWF4Qm9vc3RJbnQJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABd1c2VyTWF4Qm9vc3RJbnRlZ3JhbEtFWQQAAAAQdG90YWxNYXhCb29zdEludAkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAAGHRvdGFsTWF4Qm9vc3RJbnRlZ3JhbEtFWQQAAAARdG90YWxDYWNoZWRHd3hLRVkJAQAAABFrZXlUb3RhbENhY2hlZEd3eAAAAAAEAAAADnRvdGFsQ2FjaGVkR3d4CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEXRvdGFsQ2FjaGVkR3d4S0VZAAAAAAAAAAAABAAAAAt1c2VyQ3Vyckd3eAkBAAAAFGNhbGNDdXJyZW50R3d4QW1vdW50AAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAAIXVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbEtFWQkBAAAAIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbAAAAAEFAAAACnVzZXJOdW1TdHIEAAAAGnVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwwCQAAawAAAAMFAAAAGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwFAAAABHVkaDAFAAAAA3VkaAQAAAAadXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEJAABrAAAAAwUAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAUAAAAEdWRoMQUAAAADdWRoBAAAAB5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAJAABrAAAAAwUAAAAadXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAFAAAAC3Bvb2xXZWlnaHQwBQAAAA5QT09MV0VJR0hUTVVMVAQAAAAecG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwxCQAAawAAAAMFAAAAGnVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwxBQAAAAtwb29sV2VpZ2h0MQUAAAAOUE9PTFdFSUdIVE1VTFQEAAAAInVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldzADCQAAAAAAAAIFAAAADnRvdGFsQ2FjaGVkR3d4AAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMFAAAAHnBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsMAUAAAALdXNlckN1cnJHd3gFAAAADnRvdGFsQ2FjaGVkR3d4BAAAACJ1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcxAwkAAAAAAAACBQAAAA50b3RhbENhY2hlZEd3eAAAAAAAAAAAAAAAAAAAAAAAAAkAAGsAAAADBQAAAB5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEFAAAAC3VzZXJDdXJyR3d4BQAAAA50b3RhbENhY2hlZEd3eAQAAAAidXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbUNhY2hlZEtFWQkBAAAAImtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWQAAAACBQAAAAp1c2VyTnVtU3RyBQAAAAxscEFzc2V0SWRTdHIEAAAAH3VzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAidXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbUNhY2hlZEtFWQAAAAAAAAAAAAQAAAAhdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3CQAAZAAAAAIJAABkAAAAAgUAAAAidXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3MAUAAAAidXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3MQUAAAAfdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbUNhY2hlZAQAAAAJZGF0YVN0YXRlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAACJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZBQAAABVib29zdEVtaXNzaW9uSW50ZWdyYWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAInVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWRLRVkAAAAAAAAAAAAFAAAAA25pbAQAAAAFZGVidWcJAAS5AAAAAgkABEwAAAACCQABLAAAAAICAAAAHnVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsPQkAAaQAAAABBQAAAB11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAkABEwAAAACCQABLAAAAAICAAAAGnVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWw9CQABpAAAAAEFAAAAGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAARMAAAAAgkAASwAAAACAgAAACB1c2VyQm9vc3RBdmFsYWlibGVUb0NsYWltQ2FjaGVkPQkAAaQAAAABBQAAAB91c2VyQm9vc3RBdmFsYWlibGVUb0NsYWltQ2FjaGVkCQAETAAAAAIJAAEsAAAAAgIAAAAidXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3PQkAAaQAAAABBQAAACF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcJAARMAAAAAgkAASwAAAACAgAAABt1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMD0JAAGkAAAAAQUAAAAadXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAJAARMAAAAAgkAASwAAAACAgAAABt1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsMT0JAAGkAAAAAQUAAAAadXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEJAARMAAAAAgkAASwAAAACAgAAAB9wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDA9CQABpAAAAAEFAAAAHnBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsMAkABEwAAAACCQABLAAAAAICAAAAH3Bvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsMT0JAAGkAAAAAQUAAAAecG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwxCQAETAAAAAIJAAEsAAAAAgIAAAAMcG9vbFdlaWdodDA9CQABpAAAAAEFAAAAC3Bvb2xXZWlnaHQwCQAETAAAAAIJAAEsAAAAAgIAAAAMcG9vbFdlaWdodDE9CQABpAAAAAEFAAAAC3Bvb2xXZWlnaHQxCQAETAAAAAIJAAEsAAAAAgIAAAACaD0JAAGkAAAAAQUAAAABaAkABEwAAAACCQABLAAAAAICAAAABHVkaD0JAAGkAAAAAQUAAAADdWRoCQAETAAAAAIJAAEsAAAAAgIAAAAHdUxhc3RIPQkAAaQAAAABBQAAAAZ1TGFzdEgJAARMAAAAAgkAASwAAAACAgAAAAV1ZGgwPQkAAaQAAAABBQAAAAR1ZGgwCQAETAAAAAIJAAEsAAAAAgIAAAAFdWRoMT0JAAGkAAAAAQUAAAAEdWRoMQkABEwAAAACCQABLAAAAAICAAAADHVzZXJDdXJyR3d4PQkAAaQAAAABBQAAAAt1c2VyQ3Vyckd3eAkABEwAAAACCQABLAAAAAICAAAAD3RvdGFsQ2FjaGVkR3d4PQkAAaQAAAABBQAAAA50b3RhbENhY2hlZEd3eAUAAAADbmlsAgAAAAI6OgkABRUAAAADBQAAACF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcFAAAACWRhdGFTdGF0ZQUAAAAFZGVidWcAAAAIAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABgAAABFmYWN0b3J5QWRkcmVzc1N0cgAAAA5sb2NrQXNzZXRJZFN0cgAAAA1taW5Mb2NrQW1vdW50AAAAC21pbkR1cmF0aW9uAAAAC21heER1cmF0aW9uAAAADG1hdGhDb250cmFjdAMJAQAAAAIhPQAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5TmV4dFVzZXJOdW0AAAAAAAAAAAAAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQEAAAAMZm9ybWF0Q29uZmlnAAAABQUAAAAObG9ja0Fzc2V0SWRTdHIFAAAADW1pbkxvY2tBbW91bnQFAAAAC21pbkR1cmF0aW9uBQAAAAttYXhEdXJhdGlvbgUAAAAMbWF0aENvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAAFAAAAEWZhY3RvcnlBZGRyZXNzU3RyBQAAAANuaWwJAQAAAApTdGF0c0VudHJ5AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpAQAAAARsb2NrAAAAAQAAAAhkdXJhdGlvbgQAAAAIY2ZnQXJyYXkJAQAAABVyZWFkQ29uZmlnQXJyYXlPckZhaWwAAAAABAAAAAphc3NldElkU3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA1JZHhDZmdBc3NldElkBAAAAAdhc3NldElkCQACWQAAAAEFAAAACmFzc2V0SWRTdHIEAAAADW1pbkxvY2tBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAATSWR4Q2ZnTWluTG9ja0Ftb3VudAQAAAAPbWluTG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01pbkxvY2tEdXJhdGlvbgQAAAAPbWF4TG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01heExvY2tEdXJhdGlvbgQAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdNYXRoQ29udHJhY3QDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAANGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAJcG10QW1vdW50CAUAAAADcG10AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAeaW52YWxpZCBhc3NldCBpcyBpbiBwYXltZW50IC0gBQAAAAphc3NldElkU3RyAgAAAAwgaXMgZXhwZWN0ZWQEAAAADm5leHRVc2VyTnVtS0VZCQEAAAAOa2V5TmV4dFVzZXJOdW0AAAAABAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJJc0V4aXN0aW5nCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAACnVzZXJOdW1TdHIDBQAAAA51c2VySXNFeGlzdGluZwkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIJAAGkAAAAAQkBAAAADGdldEludE9yRmFpbAAAAAIFAAAABHRoaXMFAAAADm5leHRVc2VyTnVtS0VZBAAAAAd1c2VyTnVtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAACnVzZXJOdW1TdHIEAAAACWxvY2tTdGFydAUAAAAGaGVpZ2h0BAAAAA1zdGFydEJsb2NrS0VZCQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEFAAAACnVzZXJOdW1TdHIEAAAAC2R1cmF0aW9uS0VZCQEAAAAUa2V5TG9ja1BhcmFtRHVyYXRpb24AAAABBQAAAAp1c2VyTnVtU3RyBAAAAA11c2VyQW1vdW50S0VZCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAACnVzZXJOdW1TdHIDCQAAZgAAAAIFAAAADW1pbkxvY2tBbW91bnQFAAAACXBtdEFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAImFtb3VudCBpcyBsZXNzIHRoZW4gbWluTG9ja0Ftb3VudD0JAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAMJAABmAAAAAgUAAAAPbWluTG9ja0R1cmF0aW9uBQAAAAhkdXJhdGlvbgkAAAIAAAABCQABLAAAAAICAAAALXBhc3NlZCBkdXJhdGlvbiBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkAAaQAAAABBQAAAA9taW5Mb2NrRHVyYXRpb24DCQAAZgAAAAIFAAAACGR1cmF0aW9uBQAAAA9tYXhMb2NrRHVyYXRpb24JAAACAAAAAQkAASwAAAACAgAAADBwYXNzZWQgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGVuIG1heExvY2tEdXJhdGlvbj0JAAGkAAAAAQUAAAAPbWF4TG9ja0R1cmF0aW9uAwMFAAAADnVzZXJJc0V4aXN0aW5nCQAAZwAAAAIJAABkAAAAAgkBAAAADGdldEludE9yRmFpbAAAAAIFAAAABHRoaXMFAAAADXN0YXJ0QmxvY2tLRVkJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAAR0aGlzBQAAAAtkdXJhdGlvbktFWQUAAAAJbG9ja1N0YXJ0BwkAAAIAAAABAgAAADZ0aGVyZSBpcyBhbiBhY3RpdmUgbG9jayAtIGNvbnNpZGVyIHRvIHVzZSBpbmNyZWFzZUxvY2sDCQAAZgAAAAIJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAAA11c2VyQW1vdW50S0VZAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgIAAAA0dGhlcmUgYXJlIGxvY2tlZCBXWHMgLSBjb25zaWRlciB0byB1c2UgaW5jcmVhc2VMb2NrIAUAAAANdXNlckFtb3VudEtFWQQAAAAHY29lZmZYOAkAAGsAAAADBQAAAAhkdXJhdGlvbgUAAAAFTVVMVDgFAAAAD21heExvY2tEdXJhdGlvbgQAAAAOZ1d4QW1vdW50U3RhcnQJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAdjb2VmZlg4BQAAAAVNVUxUOAQAAAATZ1d4UGFyYW1zUmVzdWx0TGlzdAkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABVjYWxjR3d4UGFyYW1zUkVBRE9OTFkJAARMAAAAAgUAAAAOZ1d4QW1vdW50U3RhcnQJAARMAAAAAgUAAAAJbG9ja1N0YXJ0CQAETAAAAAIFAAAACGR1cmF0aW9uBQAAAANuaWwFAAAAA25pbAQAAAABawkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAABNnV3hQYXJhbXNSZXN1bHRMaXN0AAAAAAAAAAAABAAAAAFiCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAAAAAAAAAEEAAAABnBlcmlvZAkAAaQAAAABCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAAAAAAAAAIEAAAAEnd4RW1pc3Npb25QZXJCbG9jawkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAAB5rZXlFbWlzc2lvblJhdGVQZXJCbG9ja0N1cnJlbnQAAAAABAAAAA1lbWlzc2lvblN0YXJ0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAAEAAAAC2VtaXNzaW9uRW5kCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAE2tleUVtaXNzaW9uRW5kQmxvY2sAAAAABAAAAAFoAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAC2VtaXNzaW9uRW5kBQAAAAtlbWlzc2lvbkVuZAUAAAAGaGVpZ2h0BAAAAAJkaAkAAZYAAAABCQAETAAAAAIJAABlAAAAAgUAAAABaAUAAAANZW1pc3Npb25TdGFydAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwEAAAAIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEAAAAga2V5VXNlckJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwAAAABBQAAAAp1c2VyTnVtU3RyBAAAABVib29zdEVtaXNzaW9uSW50ZWdyYWwJAABpAAAAAgkAAGgAAAACCQAAaAAAAAIFAAAAEnd4RW1pc3Npb25QZXJCbG9jawUAAAACZGgAAAAAAAAAAAIAAAAAAAAAAAMEAAAAF3VzZXJNYXhCb29zdEludGVncmFsS0VZCQEAAAAXa2V5VXNlck1heEJvb3N0SU5URUdSQUwAAAABBQAAAAp1c2VyTnVtU3RyBAAAABh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkJAQAAABhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwAAAAABAAAAA91c2VyTWF4Qm9vc3RJbnQJAABpAAAAAgkAAGgAAAACBQAAAA5nV3hBbW91bnRTdGFydAUAAAAIZHVyYXRpb24AAAAAAAAAAAIEAAAAEHRvdGFsTWF4Qm9vc3RJbnQJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABh0b3RhbE1heEJvb3N0SW50ZWdyYWxLRVkEAAAAEXRvdGFsQ2FjaGVkR3d4S0VZCQEAAAARa2V5VG90YWxDYWNoZWRHd3gAAAAABAAAAA50b3RhbENhY2hlZEd3eAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABF0b3RhbENhY2hlZEd3eEtFWQAAAAAAAAAAAAQAAAADYXJyAwUAAAAOdXNlcklzRXhpc3RpbmcFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAObmV4dFVzZXJOdW1LRVkJAABkAAAAAgUAAAAHdXNlck51bQAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIFAAAACnVzZXJOdW1TdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU51bTJVc2VyTWFwcGluZwAAAAEFAAAACnVzZXJOdW1TdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAANuaWwJAAROAAAAAgkABE0AAAACCQAETgAAAAIJAAROAAAAAgUAAAADYXJyCQEAAAAPTG9ja1BhcmFtc0VudHJ5AAAACAUAAAAOdXNlckFkZHJlc3NTdHIFAAAACnVzZXJOdW1TdHIFAAAACXBtdEFtb3VudAUAAAAJbG9ja1N0YXJ0BQAAAAhkdXJhdGlvbgUAAAABawUAAAABYgUAAAAGcGVyaW9kCQEAAAAKU3RhdHNFbnRyeQAAAAQFAAAACXBtdEFtb3VudAUAAAAIZHVyYXRpb24AAAAAAAAAAAEDBQAAAA51c2VySXNFeGlzdGluZwAAAAAAAAAAAAAAAAAAAAAAAQkBAAAADEhpc3RvcnlFbnRyeQAAAAgCAAAABGxvY2sFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAlwbXRBbW91bnQFAAAACWxvY2tTdGFydAUAAAAIZHVyYXRpb24FAAAAAWsFAAAAAWIFAAAAAWkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZBQAAABVib29zdEVtaXNzaW9uSW50ZWdyYWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEXRvdGFsQ2FjaGVkR3d4S0VZCQAAZAAAAAIFAAAADnRvdGFsQ2FjaGVkR3d4BQAAAA5nV3hBbW91bnRTdGFydAUAAAADbmlsAAAAAWkBAAAADGluY3JlYXNlTG9jawAAAAEAAAANZGVsdGFEdXJhdGlvbgQAAAAIY2ZnQXJyYXkJAQAAABVyZWFkQ29uZmlnQXJyYXlPckZhaWwAAAAABAAAAAphc3NldElkU3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA1JZHhDZmdBc3NldElkBAAAAAdhc3NldElkCQACWQAAAAEFAAAACmFzc2V0SWRTdHIEAAAAD21pbkxvY2tEdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdNaW5Mb2NrRHVyYXRpb24EAAAAD21heExvY2tEdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdNYXhMb2NrRHVyYXRpb24EAAAADG1hdGhDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnTWF0aENvbnRyYWN0BAAAAAlwbXRBbW91bnQJAQAAACJleHRyYWN0T3B0aW9uYWxQYXltZW50QW1vdW50T3JGYWlsAAAAAgUAAAABaQUAAAAHYXNzZXRJZAQAAAAOdXNlckFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA91c2VyUmVjb3JkQXJyYXkJAQAAABpyZWFkTG9ja1BhcmFtc1JlY29yZE9yRmFpbAAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAAp1c2VyTnVtU3RyCQABkQAAAAIFAAAAD3VzZXJSZWNvcmRBcnJheQUAAAAOSWR4TG9ja1VzZXJOdW0EAAAACnVzZXJBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADUlkeExvY2tBbW91bnQEAAAACWxvY2tTdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD3VzZXJSZWNvcmRBcnJheQUAAAAMSWR4TG9ja1N0YXJ0BAAAAAxsb2NrRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAAD0lkeExvY2tEdXJhdGlvbgQAAAAHbG9ja0VuZAkAAGQAAAACBQAAAAlsb2NrU3RhcnQFAAAADGxvY2tEdXJhdGlvbgQAAAARcmVtYWluaW5nRHVyYXRpb24JAAGWAAAAAQkABEwAAAACCQAAZQAAAAIFAAAAB2xvY2tFbmQFAAAABmhlaWdodAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwEAAAADXVzZXJBbW91bnROZXcJAABkAAAAAgUAAAAKdXNlckFtb3VudAUAAAAJcG10QW1vdW50BAAAAA9sb2NrRHVyYXRpb25OZXcJAABkAAAAAgUAAAARcmVtYWluaW5nRHVyYXRpb24FAAAADWRlbHRhRHVyYXRpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAADWRlbHRhRHVyYXRpb24JAAACAAAAAQIAAAAaZHVyYXRpb24gaXMgbGVzcyB0aGVuIHplcm8DCQAAZgAAAAIFAAAAD21pbkxvY2tEdXJhdGlvbgUAAAAPbG9ja0R1cmF0aW9uTmV3CQAAAgAAAAEJAAEsAAAAAgIAAAAtbG9ja0R1cmF0aW9uTmV3IGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQABpAAAAAEFAAAAD21pbkxvY2tEdXJhdGlvbgMJAABmAAAAAgUAAAAPbG9ja0R1cmF0aW9uTmV3BQAAAA9tYXhMb2NrRHVyYXRpb24JAAACAAAAAQkAASwAAAACAgAAAERkZWx0YUR1cmF0aW9uICsgZXhpc3RlZExvY2tEdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkAAaQAAAABBQAAAA9tYXhMb2NrRHVyYXRpb24EAAAAB2NvZWZmWDgJAABrAAAAAwUAAAAPbG9ja0R1cmF0aW9uTmV3BQAAAAVNVUxUOAUAAAAPbWF4TG9ja0R1cmF0aW9uBAAAAA5nV3hBbW91bnRTdGFydAkAAGsAAAADBQAAAA11c2VyQW1vdW50TmV3BQAAAAdjb2VmZlg4BQAAAAVNVUxUOAQAAAAMbG9ja1N0YXJ0TmV3BQAAAAZoZWlnaHQEAAAAE2dXeFBhcmFtc1Jlc3VsdExpc3QJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAVY2FsY0d3eFBhcmFtc1JFQURPTkxZCQAETAAAAAIFAAAADmdXeEFtb3VudFN0YXJ0CQAETAAAAAIFAAAADGxvY2tTdGFydE5ldwkABEwAAAACBQAAAA9sb2NrRHVyYXRpb25OZXcFAAAAA25pbAUAAAADbmlsBAAAAAFrCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAAAAAAAAAAEAAAAAWIJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAATZ1d4UGFyYW1zUmVzdWx0TGlzdAAAAAAAAAAAAQQAAAAGcGVyaW9kCQABpAAAAAEJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAATZ1d4UGFyYW1zUmVzdWx0TGlzdAAAAAAAAAAAAgQAAAASd3hFbWlzc2lvblBlckJsb2NrCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAAAAAEAAAADWVtaXNzaW9uU3RhcnQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAAVa2V5RW1pc3Npb25TdGFydEJsb2NrAAAAAAQAAAALZW1pc3Npb25FbmQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAATa2V5RW1pc3Npb25FbmRCbG9jawAAAAAEAAAAAWgDCQAAZgAAAAIFAAAABmhlaWdodAUAAAALZW1pc3Npb25FbmQFAAAAC2VtaXNzaW9uRW5kBQAAAAZoZWlnaHQEAAAAAmRoCQABlgAAAAEJAARMAAAAAgkAAGUAAAACBQAAAAFoBQAAAA1lbWlzc2lvblN0YXJ0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAQAAAAgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJAQAAACBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAAAAAEFAAAACnVzZXJOdW1TdHIEAAAAHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkEAAAAFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAGkAAAACCQAAaAAAAAIJAABoAAAAAgUAAAASd3hFbWlzc2lvblBlckJsb2NrBQAAAAJkaAAAAAAAAAAAAgAAAAAAAAAAAwQAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAAGUAAAACBQAAABVib29zdEVtaXNzaW9uSW50ZWdyYWwFAAAAHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsAwkAAGYAAAACAAAAAAAAAAAABQAAABl1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsCQAAAgAAAAECAAAAEndyb25nIGNhbGN1bGF0aW9ucwQAAAAXdXNlck1heEJvb3N0SW50ZWdyYWxLRVkJAQAAABdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTAAAAAEFAAAACnVzZXJOdW1TdHIEAAAAGHRvdGFsTWF4Qm9vc3RJbnRlZ3JhbEtFWQkBAAAAGGtleVRvdGFsTWF4Qm9vc3RJTlRFR1JBTAAAAAAEAAAAD3VzZXJNYXhCb29zdEludAkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAAF3VzZXJNYXhCb29zdEludGVncmFsS0VZBAAAABB0b3RhbE1heEJvb3N0SW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAYdG90YWxNYXhCb29zdEludGVncmFsS0VZBAAAAAtjdXJyVXNlckd3eAkBAAAAFGNhbGNDdXJyZW50R3d4QW1vdW50AAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAAB2d3eERpZmYJAABlAAAAAgUAAAAOZ1d4QW1vdW50U3RhcnQFAAAAC2N1cnJVc2VyR3d4AwkAAGYAAAACAAAAAAAAAAAABQAAAAdnd3hEaWZmCQAAAgAAAAEJAAEsAAAAAgIAAAAYZ3d4RGlmZiBpcyBsZXNzIHRoZW4gMDogCQABpAAAAAEFAAAAB2d3eERpZmYEAAAAEXRvdGFsQ2FjaGVkR3d4S0VZCQEAAAARa2V5VG90YWxDYWNoZWRHd3gAAAAABAAAAA50b3RhbENhY2hlZEd3eAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABF0b3RhbENhY2hlZEd3eEtFWQAAAAAAAAAAAAQAAAAhdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsS0VZCQEAAAAha2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsAAAAAQUAAAAKdXNlck51bVN0cgQAAAAedXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAhdXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsS0VZBAAAACF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcJAABrAAAAAwUAAAAZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAUAAAALY3VyclVzZXJHd3gFAAAADnRvdGFsQ2FjaGVkR3d4BAAAABJ1c2VyTWF4Qm9vc3RJbnROZXcJAABpAAAAAgkAAGgAAAACBQAAAA5nV3hBbW91bnRTdGFydAUAAAAPbG9ja0R1cmF0aW9uTmV3AAAAAAAAAAACBAAAABhyZW1haW5pbmdVc2VyTWF4Qm9vc3RJbnQJAABpAAAAAgkAAGgAAAACBQAAAAtjdXJyVXNlckd3eAUAAAARcmVtYWluaW5nRHVyYXRpb24AAAAAAAAAAAIEAAAAE3VzZXJNYXhCb29zdEludERpZmYJAABlAAAAAgUAAAASdXNlck1heEJvb3N0SW50TmV3BQAAABhyZW1haW5pbmdVc2VyTWF4Qm9vc3RJbnQJAAROAAAAAgkABE0AAAACCQAETgAAAAIJAQAAAA9Mb2NrUGFyYW1zRW50cnkAAAAIBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAKdXNlck51bVN0cgUAAAANdXNlckFtb3VudE5ldwUAAAAMbG9ja1N0YXJ0TmV3BQAAAA9sb2NrRHVyYXRpb25OZXcFAAAAAWsFAAAAAWIFAAAABnBlcmlvZAkBAAAAClN0YXRzRW50cnkAAAAEBQAAAAlwbXRBbW91bnQFAAAADWRlbHRhRHVyYXRpb24AAAAAAAAAAAAAAAAAAAAAAAAJAQAAAAxIaXN0b3J5RW50cnkAAAAIAgAAAARsb2NrBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAJcG10QW1vdW50BQAAAAlsb2NrU3RhcnQFAAAAD2xvY2tEdXJhdGlvbk5ldwUAAAABawUAAAABYgUAAAABaQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARdG90YWxDYWNoZWRHd3hLRVkJAABkAAAAAgUAAAAOdG90YWxDYWNoZWRHd3gFAAAAB2d3eERpZmYFAAAAA25pbAAAAAFpAQAAAAxjbGFpbVd4Qm9vc3QAAAACAAAADGxwQXNzZXRJZFN0cgAAAA51c2VyQWRkcmVzc1N0cgMJAQAAAAIhPQAAAAIFAAAAD3N0YWtpbmdDb250cmFjdAgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAANJHQwMjY5MjMyNzAyNQkBAAAAFGludGVybmFsQ2xhaW1XeEJvb3N0AAAAAwUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgcEAAAAEnVzZXJCb29zdEF2YWlsYWJsZQgFAAAADSR0MDI2OTIzMjcwMjUAAAACXzEEAAAACWRhdGFTdGF0ZQgFAAAADSR0MDI2OTIzMjcwMjUAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMjY5MjMyNzAyNQAAAAJfMwkABRQAAAACBQAAAAlkYXRhU3RhdGUJAARMAAAAAgUAAAASdXNlckJvb3N0QXZhaWxhYmxlBQAAAANuaWwAAAABaQEAAAAUY2xhaW1XeEJvb3N0UkVBRE9OTFkAAAACAAAADGxwQXNzZXRJZFN0cgAAAA51c2VyQWRkcmVzc1N0cgQAAAANJHQwMjcxNTcyNzI1OAkBAAAAFGludGVybmFsQ2xhaW1XeEJvb3N0AAAAAwUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgYEAAAAEnVzZXJCb29zdEF2YWlsYWJsZQgFAAAADSR0MDI3MTU3MjcyNTgAAAACXzEEAAAACWRhdGFTdGF0ZQgFAAAADSR0MDI3MTU3MjcyNTgAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMjcxNTcyNzI1OAAAAAJfMwkABRQAAAACBQAAAANuaWwJAARMAAAAAgUAAAASdXNlckJvb3N0QXZhaWxhYmxlCQAETAAAAAIFAAAABWRlYnVnBQAAAANuaWwAAAABaQEAAAAGdW5sb2NrAAAAAQAAAAt1c2VyQWRkcmVzcwQAAAAPdXNlclJlY29yZEFycmF5CQEAAAAacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAKdXNlck51bVN0cgkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADklkeExvY2tVc2VyTnVtBAAAAAp1c2VyQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAA1JZHhMb2NrQW1vdW50BAAAAAlsb2NrU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADElkeExvY2tTdGFydAQAAAAMbG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAA9JZHhMb2NrRHVyYXRpb24EAAAAB2xvY2tFbmQJAABkAAAAAgUAAAAJbG9ja1N0YXJ0BQAAAAxsb2NrRHVyYXRpb24EAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAQAAAAHYXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA1JZHhDZmdBc3NldElkBAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEklkeENmZ01hdGhDb250cmFjdAMJAABnAAAAAgUAAAAHbG9ja0VuZAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAV3YWl0IAkAAaQAAAABBQAAAAdsb2NrRW5kAgAAAAogdG8gdW5sb2NrAwkAAGcAAAACAAAAAAAAAAAABQAAAAp1c2VyQW1vdW50CQAAAgAAAAECAAAAEW5vdGhpbmcgdG8gdW5sb2NrBAAAAAZwZXJpb2QJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAMbWF0aENvbnRyYWN0CQEAAAANa2V5TmV4dFBlcmlvZAAAAAAAAAAAAAAAAAAJAARNAAAAAgkABE0AAAACCQAETgAAAAIJAQAAAA9Mb2NrUGFyYW1zRW50cnkAAAAIBQAAAAt1c2VyQWRkcmVzcwUAAAAKdXNlck51bVN0cgAAAAAAAAAAAAUAAAAJbG9ja1N0YXJ0BQAAAAxsb2NrRHVyYXRpb24AAAAAAAAAAAAAAAAAAAAAAAAJAAGkAAAAAQUAAAAGcGVyaW9kCQEAAAAKU3RhdHNFbnRyeQAAAAQJAQAAAAEtAAAAAQUAAAAKdXNlckFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wkBAAAADEhpc3RvcnlFbnRyeQAAAAgCAAAABnVubG9jawUAAAALdXNlckFkZHJlc3MFAAAACnVzZXJBbW91bnQFAAAACWxvY2tTdGFydAUAAAAMbG9ja0R1cmF0aW9uAAAAAAAAAAAAAAAAAAAAAAAABQAAAAFpCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAKdXNlckFtb3VudAUAAAAHYXNzZXRJZAAAAAFpAQAAABNnd3hVc2VySW5mb1JFQURPTkxZAAAAAQAAAAt1c2VyQWRkcmVzcwQAAAAJZ3d4QW1vdW50CQEAAAAUY2FsY0N1cnJlbnRHd3hBbW91bnQAAAABBQAAAAt1c2VyQWRkcmVzcwkABRQAAAACBQAAAANuaWwJAARMAAAAAgUAAAAJZ3d4QW1vdW50BQAAAANuaWwAAAABaQEAAAAcbm9ybWFsaXplQmVmb3JlVW5sb2NrQW5kQnVybgAAAAADCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkBAAAAAN0b3QJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAOa2V5TmV4dFVzZXJOdW0AAAAABAAAAANscHMJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABBrZXlGYWN0b3J5THBMaXN0AAAAAAUAAAADU0VQBAAAAAVuZXh0SwIAAAAYJXNfX25leHRVc2VyVG9Ob3JtYWxhaXplBAAAAAJ1TgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAVuZXh0SwAAAAAAAAAAAAMJAAAAAAAAAgUAAAACdU4FAAAAA3RvdAkAAAIAAAABAgAAABlub3JtYWxpemF0aW9uIGlzIGZpbmlzaGVkBAAAAAJ1UwkAAaQAAAABBQAAAAJ1TgQAAAABdQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABJrZXlOdW0yVXNlck1hcHBpbmcAAAABBQAAAAJ1UwQAAAADbHAwCQABkQAAAAIFAAAAA2xwcwAAAAAAAAAAAAQAAAANJHQwMjkxNjMyOTIxNwkBAAAAFGludGVybmFsQ2xhaW1XeEJvb3N0AAAAAwUAAAADbHAwBQAAAAF1BgQAAAACYjAIBQAAAA0kdDAyOTE2MzI5MjE3AAAAAl8xBAAAAANkczAIBQAAAA0kdDAyOTE2MzI5MjE3AAAAAl8yBAAAAAJkMAgFAAAADSR0MDI5MTYzMjkyMTcAAAACXzMEAAAAA2JLMAkBAAAAImtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWQAAAACBQAAAAJ1UwUAAAADbHAwBAAAAANscDEJAAGRAAAAAgUAAAADbHBzAAAAAAAAAAABBAAAAA0kdDAyOTI5NTI5MzQ5CQEAAAAUaW50ZXJuYWxDbGFpbVd4Qm9vc3QAAAADBQAAAANscDEFAAAAAXUGBAAAAAJiMQgFAAAADSR0MDI5Mjk1MjkzNDkAAAACXzEEAAAAA2RzMQgFAAAADSR0MDI5Mjk1MjkzNDkAAAACXzIEAAAAAmQxCAUAAAANJHQwMjkyOTUyOTM0OQAAAAJfMwQAAAADYksxCQEAAAAia2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbUNhY2hlZAAAAAIFAAAAAnVTBQAAAANscDEEAAAAA2xwMgkAAZEAAAACBQAAAANscHMAAAAAAAAAAAIEAAAADSR0MDI5NDI3Mjk0ODEJAQAAABRpbnRlcm5hbENsYWltV3hCb29zdAAAAAMFAAAAA2xwMgUAAAABdQYEAAAAAmIyCAUAAAANJHQwMjk0MjcyOTQ4MQAAAAJfMQQAAAADZHMyCAUAAAANJHQwMjk0MjcyOTQ4MQAAAAJfMgQAAAACZDIIBQAAAA0kdDAyOTQyNzI5NDgxAAAAAl8zBAAAAANiSzIJAQAAACJrZXlVc2VyQm9vc3RBdmFsYWlibGVUb0NsYWltQ2FjaGVkAAAAAgUAAAACdVMFAAAAA2xwMgQAAAADbHAzCQABkQAAAAIFAAAAA2xwcwAAAAAAAAAAAwQAAAANJHQwMjk1NTkyOTYxMwkBAAAAFGludGVybmFsQ2xhaW1XeEJvb3N0AAAAAwUAAAADbHAzBQAAAAF1BgQAAAACYjMIBQAAAA0kdDAyOTU1OTI5NjEzAAAAAl8xBAAAAANkczMIBQAAAA0kdDAyOTU1OTI5NjEzAAAAAl8yBAAAAAJkMwgFAAAADSR0MDI5NTU5Mjk2MTMAAAACXzMEAAAAA2JLMwkBAAAAImtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1DYWNoZWQAAAACBQAAAAJ1UwUAAAADbHAzBAAAAANscDQJAAGRAAAAAgUAAAADbHBzAAAAAAAAAAAEBAAAAA0kdDAyOTY5MTI5NzQ1CQEAAAAUaW50ZXJuYWxDbGFpbVd4Qm9vc3QAAAADBQAAAANscDQFAAAAAXUGBAAAAAJiNAgFAAAADSR0MDI5NjkxMjk3NDUAAAACXzEEAAAAA2RzNAgFAAAADSR0MDI5NjkxMjk3NDUAAAACXzIEAAAAAmQ0CAUAAAANJHQwMjk2OTEyOTc0NQAAAAJfMwQAAAADYks0CQEAAAAia2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbUNhY2hlZAAAAAIFAAAAAnVTBQAAAANscDQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABW5leHRLCQAAZAAAAAIFAAAAAnVOAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANiSzAFAAAAAmIwCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANiSzEFAAAAAmIxCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANiSzIFAAAAAmIyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANiSzMFAAAAAmIzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANiSzQFAAAAAmI0CQAETAAAAAIJAAGRAAAAAgUAAAADZHMwAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAADZHMxAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAADZHMyAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAADZHMzAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAADZHM0AAAAAAAAAAAABQAAAANuaWwAAAAAshhFHQ==", "chainId": 84, "height": 1847015, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 41PpT18pgdbvYnbdVZn36iqhYSFF5MURzxhbYXHX6yJr Next: HeQKND9sTpFP2R2SUK1SjdmMoj5Ew2GucS7Mf1GEMiZs Diff:
OldNewDifferences
383383 let userBoostAvalaibleToClaimCached = valueOrElse(getInteger(this, userBoostAvalaibleToClaimCachedKEY), 0)
384384 let userBoostAvaliableToClaimTotalNew = ((userBoostAvaliableToClaimTotalNew0 + userBoostAvaliableToClaimTotalNew1) + userBoostAvalaibleToClaimCached)
385385 let dataState = [IntegerEntry(userLpBoostEmissionLastIntegralKEY, boostEmissionIntegral), IntegerEntry(userBoostAvalaibleToClaimCachedKEY, 0)]
386- let debug = makeString([("userBoostEmissionLastIntegral=" + toString(userBoostEmissionLastIntegral)), ("userBoostEmissionIntegral=" + toString(userBoostEmissionIntegral)), ("userMaxBoostInt=" + toString(userMaxBoostInt)), ("totalMaxBoostInt=" + toString(totalMaxBoostInt)), ("userBoostAvaliableToClaimTotalNew=" + toString(userBoostAvaliableToClaimTotalNew)), ("userBoostEmissionIntegral0=" + toString(userBoostEmissionIntegral0)), ("userBoostEmissionIntegral1=" + toString(userBoostEmissionIntegral1)), ("poolUserBoostEmissionIntegral0=" + toString(poolUserBoostEmissionIntegral0)), ("poolUserBoostEmissionIntegral1=" + toString(poolUserBoostEmissionIntegral1)), ("poolWeight0=" + toString(poolWeight0)), ("poolWeight1=" + toString(poolWeight1)), ("h=" + toString(h)), ("udh=" + toString(udh)), ("uLastH=" + toString(uLastH)), ("udh0=" + toString(udh0)), ("udh1=" + toString(udh1)), ("userCurrGwx=" + toString(userCurrGwx)), ("totalCachedGwx=" + toString(totalCachedGwx))], "::")
386+ let debug = makeString([("userBoostEmissionLastIntegral=" + toString(userBoostEmissionLastIntegral)), ("userBoostEmissionIntegral=" + toString(userBoostEmissionIntegral)), ("userBoostAvalaibleToClaimCached=" + toString(userBoostAvalaibleToClaimCached)), ("userBoostAvaliableToClaimTotalNew=" + toString(userBoostAvaliableToClaimTotalNew)), ("userBoostEmissionIntegral0=" + toString(userBoostEmissionIntegral0)), ("userBoostEmissionIntegral1=" + toString(userBoostEmissionIntegral1)), ("poolUserBoostEmissionIntegral0=" + toString(poolUserBoostEmissionIntegral0)), ("poolUserBoostEmissionIntegral1=" + toString(poolUserBoostEmissionIntegral1)), ("poolWeight0=" + toString(poolWeight0)), ("poolWeight1=" + toString(poolWeight1)), ("h=" + toString(h)), ("udh=" + toString(udh)), ("uLastH=" + toString(uLastH)), ("udh0=" + toString(udh0)), ("udh1=" + toString(udh1)), ("userCurrGwx=" + toString(userCurrGwx)), ("totalCachedGwx=" + toString(totalCachedGwx))], "::")
387387 $Tuple3(userBoostAvaliableToClaimTotalNew, dataState, debug)
388388 }
389389 }
548548 func claimWxBoost (lpAssetIdStr,userAddressStr) = if ((stakingContract != i.caller))
549549 then throw("permissions denied")
550550 else {
551- let $t02694627048 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, false)
552- let userBoostAvailable = $t02694627048._1
553- let dataState = $t02694627048._2
554- let debug = $t02694627048._3
551+ let $t02692327025 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, false)
552+ let userBoostAvailable = $t02692327025._1
553+ let dataState = $t02692327025._2
554+ let debug = $t02692327025._3
555555 $Tuple2(dataState, [userBoostAvailable])
556556 }
557557
559559
560560 @Callable(i)
561561 func claimWxBoostREADONLY (lpAssetIdStr,userAddressStr) = {
562- let $t02718027281 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, true)
563- let userBoostAvailable = $t02718027281._1
564- let dataState = $t02718027281._2
565- let debug = $t02718027281._3
562+ let $t02715727258 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, true)
563+ let userBoostAvailable = $t02715727258._1
564+ let dataState = $t02715727258._2
565+ let debug = $t02715727258._3
566566 $Tuple2(nil, [userBoostAvailable, debug])
567567 }
568568
613613 let uS = toString(uN)
614614 let u = getStringOrFail(this, keyNum2UserMapping(uS))
615615 let lp0 = lps[0]
616- let $t02918629240 = internalClaimWxBoost(lp0, u, true)
617- let b0 = $t02918629240._1
618- let ds0 = $t02918629240._2
619- let d0 = $t02918629240._3
616+ let $t02916329217 = internalClaimWxBoost(lp0, u, true)
617+ let b0 = $t02916329217._1
618+ let ds0 = $t02916329217._2
619+ let d0 = $t02916329217._3
620620 let bK0 = keyUserBoostAvalaibleToClaimCached(uS, lp0)
621621 let lp1 = lps[1]
622- let $t02931829372 = internalClaimWxBoost(lp1, u, true)
623- let b1 = $t02931829372._1
624- let ds1 = $t02931829372._2
625- let d1 = $t02931829372._3
622+ let $t02929529349 = internalClaimWxBoost(lp1, u, true)
623+ let b1 = $t02929529349._1
624+ let ds1 = $t02929529349._2
625+ let d1 = $t02929529349._3
626626 let bK1 = keyUserBoostAvalaibleToClaimCached(uS, lp1)
627627 let lp2 = lps[2]
628- let $t02945029504 = internalClaimWxBoost(lp2, u, true)
629- let b2 = $t02945029504._1
630- let ds2 = $t02945029504._2
631- let d2 = $t02945029504._3
628+ let $t02942729481 = internalClaimWxBoost(lp2, u, true)
629+ let b2 = $t02942729481._1
630+ let ds2 = $t02942729481._2
631+ let d2 = $t02942729481._3
632632 let bK2 = keyUserBoostAvalaibleToClaimCached(uS, lp2)
633633 let lp3 = lps[3]
634- let $t02958229636 = internalClaimWxBoost(lp3, u, true)
635- let b3 = $t02958229636._1
636- let ds3 = $t02958229636._2
637- let d3 = $t02958229636._3
634+ let $t02955929613 = internalClaimWxBoost(lp3, u, true)
635+ let b3 = $t02955929613._1
636+ let ds3 = $t02955929613._2
637+ let d3 = $t02955929613._3
638638 let bK3 = keyUserBoostAvalaibleToClaimCached(uS, lp3)
639639 let lp4 = lps[4]
640- let $t02971429768 = internalClaimWxBoost(lp4, u, true)
641- let b4 = $t02971429768._1
642- let ds4 = $t02971429768._2
643- let d4 = $t02971429768._3
640+ let $t02969129745 = internalClaimWxBoost(lp4, u, true)
641+ let b4 = $t02969129745._1
642+ let ds4 = $t02969129745._2
643+ let d4 = $t02969129745._3
644644 let bK4 = keyUserBoostAvalaibleToClaimCached(uS, lp4)
645645 [IntegerEntry(nextK, (uN + 1)), IntegerEntry(bK0, b0), IntegerEntry(bK1, b1), IntegerEntry(bK2, b2), IntegerEntry(bK3, b3), IntegerEntry(bK4, b4), ds0[0], ds1[0], ds2[0], ds3[0], ds4[0]]
646646 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let SCALE8 = 8
77
88 let MULT8 = 100000000
99
1010 let POOLWEIGHTMULT = MULT8
1111
1212 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), (("mandatory this." + key) + " is not defined"))
1313
1414
1515 func getIntOrZero (address,key) = valueOrElse(getInteger(address, key), 0)
1616
1717
1818 func getIntOrDefault (address,key,defaultVal) = valueOrElse(getInteger(address, key), defaultVal)
1919
2020
2121 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), (("mandatory this." + key) + " is not defined"))
2222
2323
2424 func abs (val) = if ((0 > val))
2525 then -(val)
2626 else val
2727
2828
2929 func asAnyList (val) = match val {
3030 case valAnyLyst: List[Any] =>
3131 valAnyLyst
3232 case _ =>
3333 throw("fail to cast into List[Any]")
3434 }
3535
3636
3737 func asInt (val) = match val {
3838 case valInt: Int =>
3939 valInt
4040 case _ =>
4141 throw("fail to cast into Int")
4242 }
4343
4444
4545 func keyFactoryAddress () = "%s%s__config__factoryAddress"
4646
4747
4848 let IdxFactoryCfgStakingDapp = 1
4949
5050 let IdxFactoryCfgBoostingDapp = 2
5151
5252 let IdxFactoryCfgIdoDapp = 3
5353
5454 let IdxFactoryCfgTeamDapp = 4
5555
5656 let IdxFactoryCfgEmissionDapp = 5
5757
5858 let IdxFactoryCfgRestDapp = 6
5959
6060 let IdxFactoryCfgSlippageDapp = 7
6161
6262 let IdxFactoryCfgDaoDapp = 8
6363
6464 let IdxFactoryCfgMarketingDapp = 9
6565
6666 let IdxFactoryCfgGwxRewardDapp = 10
6767
6868 let IdxFactoryCfgBirdsDapp = 11
6969
7070 func keyFactoryCfg () = "%s__factoryConfig"
7171
7272
7373 func keyFactoryLp2AssetsMapping (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
7474
7575
7676 func keyFactoryLpList () = "%s__lpTokensList"
7777
7878
7979 func keyFactoryLpAssetToPoolContractAddress (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
8080
8181
8282 func keyFactoryPoolWeight (contractAddress) = makeString(["%s%s", "poolWeight", contractAddress], SEP)
8383
8484
8585 func keyFactoryPoolWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
8686
8787
8888 func readFactoryAddressOrFail () = addressFromStringValue(getStringOrFail(this, keyFactoryAddress()))
8989
9090
9191 func readLpList () = split(valueOrElse(getString(readFactoryAddressOrFail(), keyFactoryLpList()), ""), SEP)
9292
9393
9494 func readFactoryCfgOrFail (factory) = split(getStringOrFail(factory, keyFactoryCfg()), SEP)
9595
9696
9797 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
9898
9999
100100 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
101101
102102
103103 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
104104
105105
106106 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
107107
108108
109109 func keyEmissionRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
110110
111111
112112 func keyEmissionRatePerBlockMaxCurrent () = "%s%s__ratePerBlockMax__current"
113113
114114
115115 func keyEmissionStartBlock () = "%s%s__emission__startBlock"
116116
117117
118118 func keyEmissionDurationInBlocks () = "%s%s__emission__duration"
119119
120120
121121 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
122122
123123
124124 func keyNextPeriod () = "%s__nextPeriod"
125125
126126
127127 func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
128128
129129
130130 let IdxCfgAssetId = 1
131131
132132 let IdxCfgMinLockAmount = 2
133133
134134 let IdxCfgMinLockDuration = 3
135135
136136 let IdxCfgMaxLockDuration = 4
137137
138138 let IdxCfgMathContract = 5
139139
140140 func keyConfig () = "%s__config"
141141
142142
143143 func readConfigArrayOrFail () = split(getStringOrFail(this, keyConfig()), SEP)
144144
145145
146146 func formatConfigS (assetId,minLockAmount,minLockDuration,maxLockDuration,mathContract) = makeString(["%s%d%d%d", assetId, minLockAmount, minLockDuration, maxLockDuration, mathContract], SEP)
147147
148148
149149 func formatConfig (assetId,minLockAmount,minLockDuration,maxLockDuration,mathContract) = formatConfigS(assetId, toString(minLockAmount), toString(minLockDuration), toString(maxLockDuration), mathContract)
150150
151151
152152 let IdxLockUserNum = 1
153153
154154 let IdxLockAmount = 2
155155
156156 let IdxLockStart = 3
157157
158158 let IdxLockDuration = 4
159159
160160 let IdxLockParamK = 5
161161
162162 let IdxLockParamB = 6
163163
164164 func keyLockParamsRecord (userAddress) = makeString(["%s%s__lock", userAddress], SEP)
165165
166166
167167 func readLockParamsRecordOrFail (userAddress) = split(getStringOrFail(this, keyLockParamsRecord(userAddress)), SEP)
168168
169169
170170 func formatLockParamsRecordS (userNum,amount,start,duration,paramK,paramB,lastUpdTimestamp,gwxAmount) = makeString(["%d%d%d%d%d%d%d%d", userNum, amount, start, duration, paramK, paramB, lastUpdTimestamp, gwxAmount], SEP)
171171
172172
173173 func formatLockParamsRecord (userNum,amount,start,duration,paramK,paramB,gwxAmount) = formatLockParamsRecordS(userNum, toString(amount), toString(start), toString(duration), toString(paramK), toString(paramB), toString(lastBlock.timestamp), toString(gwxAmount))
174174
175175
176176 func keyNextUserNum () = "%s__nextUserNum"
177177
178178
179179 func keyUser2NumMapping (userAddress) = makeString(["%s%s%s__mapping__user2num", userAddress], SEP)
180180
181181
182182 func keyNum2UserMapping (num) = makeString(["%s%s%s__mapping__num2user", num], SEP)
183183
184184
185185 func keyLockParamUserAmount (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "amount"], SEP)
186186
187187
188188 func keyLockParamStartBlock (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "start"], SEP)
189189
190190
191191 func keyLockParamDuration (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "duration"], SEP)
192192
193193
194194 func keyLockParamK (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "k"], SEP)
195195
196196
197197 func keyLockParamB (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "b"], SEP)
198198
199199
200200 func keyLockParamByPeriodK (userNum,period) = makeString(["%s%d%s%d__paramByPeriod", userNum, "k", period], SEP)
201201
202202
203203 func keyLockParamByPeriodB (userNum,period) = makeString(["%s%d%s%d__paramByPeriod", userNum, "b", period], SEP)
204204
205205
206206 func keyLockParamTotalAmount () = "%s%s__stats__activeTotalLocked"
207207
208208
209209 func keyStatsLocksDurationSumInBlocks () = "%s%s__stats__locksDurationSumInBlocks"
210210
211211
212212 func keyStatsLocksCount () = "%s%s__stats__locksCount"
213213
214214
215215 func keyStatsUsersCount () = "%s%s__stats__activeUsersCount"
216216
217217
218218 func keyUserBoostEmissionLastINTEGRAL (userNum) = makeString(["%s%d__userBoostEmissionLastInt", userNum], SEP)
219219
220220
221221 func keyUserLpBoostEmissionLastINTEGRAL (userNum,lpAssetId) = makeString(["%s%d__userBoostEmissionLastInt", userNum, lpAssetId], SEP)
222222
223223
224224 func keyUserMaxBoostINTEGRAL (userNum) = makeString(["%s%d__maxBoostInt", userNum], SEP)
225225
226226
227227 func keyTotalMaxBoostINTEGRAL () = "%s%s__maxBoostInt__total"
228228
229229
230230 func keyUserBoostAvalaibleToClaimTotal (userNum) = makeString(["%s%d__userBoostAvaliableToClaimTotal", userNum], SEP)
231231
232232
233233 func keyUserBoostClaimed (userNum) = makeString(["%s%d__userBoostClaimed", userNum], SEP)
234234
235235
236236 func keyUserBoostAvalaibleToClaimCached (userNum,lpAssetId) = makeString(["%s%d%s__userBoostAvaliableToClaim", userNum, lpAssetId], SEP)
237237
238238
239239 func keyTotalCachedGwx () = "%s%s__gwxCached__total"
240240
241241
242242 let factoryContract = readFactoryAddressOrFail()
243243
244244 let factoryCfg = readFactoryCfgOrFail(factoryContract)
245245
246246 let emissionContract = getEmissionAddressOrFail(factoryCfg)
247247
248248 let stakingContract = getStakingAddressOrFail(factoryCfg)
249249
250250 let gwxRewardContract = getGwxRewardAddressOrFail(factoryCfg)
251251
252252 func HistoryEntry (type,user,amount,lockStart,duration,k,b,i) = {
253253 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
254254 let historyDATA = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount), toString(lockStart), toString(duration), toString(k), toString(b)], SEP)
255255 StringEntry(historyKEY, historyDATA)
256256 }
257257
258258
259259 func StatsEntry (totalLockedInc,durationInc,lockCountInc,usersCountInc) = {
260260 let locksDurationSumInBlocksKEY = keyStatsLocksDurationSumInBlocks()
261261 let locksCountKEY = keyStatsLocksCount()
262262 let usersCountKEY = keyStatsUsersCount()
263263 let totalAmountKEY = keyLockParamTotalAmount()
264264 let locksDurationSumInBlocks = getIntOrZero(this, locksDurationSumInBlocksKEY)
265265 let locksCount = getIntOrZero(this, locksCountKEY)
266266 let usersCount = getIntOrZero(this, usersCountKEY)
267267 let totalAmount = getIntOrZero(this, totalAmountKEY)
268268 [IntegerEntry(locksDurationSumInBlocksKEY, (locksDurationSumInBlocks + durationInc)), IntegerEntry(locksCountKEY, (locksCount + lockCountInc)), IntegerEntry(usersCountKEY, (usersCount + usersCountInc)), IntegerEntry(totalAmountKEY, (totalAmount + totalLockedInc))]
269269 }
270270
271271
272272 func calcGwxAmount (kRaw,bRaw,h) = {
273273 let SCALE = 1000
274274 (((kRaw * h) + bRaw) / SCALE)
275275 }
276276
277277
278278 func LockParamsEntry (userAddress,userNum,amount,start,duration,k,b,period) = {
279279 let userAmountKEY = keyLockParamUserAmount(userNum)
280280 let startBlockKEY = keyLockParamStartBlock(userNum)
281281 let durationKEY = keyLockParamDuration(userNum)
282282 let kKEY = keyLockParamK(userNum)
283283 let bKEY = keyLockParamB(userNum)
284284 let kByPerioKEY = keyLockParamByPeriodK(userNum, period)
285285 let bByPeriodKEY = keyLockParamByPeriodB(userNum, period)
286286 let gwxAmount = calcGwxAmount(k, b, height)
287287 [IntegerEntry(userAmountKEY, amount), IntegerEntry(startBlockKEY, start), IntegerEntry(durationKEY, duration), IntegerEntry(kKEY, k), IntegerEntry(bKEY, b), IntegerEntry(kByPerioKEY, k), IntegerEntry(bByPeriodKEY, b), StringEntry(keyLockParamsRecord(userAddress), formatLockParamsRecord(userNum, amount, start, duration, k, b, gwxAmount))]
288288 }
289289
290290
291291 func extractOptionalPaymentAmountOrFail (i,expectedAssetId) = if ((size(i.payments) > 1))
292292 then throw("only one payment is allowed")
293293 else if ((size(i.payments) == 0))
294294 then 0
295295 else {
296296 let pmt = i.payments[0]
297297 if ((value(pmt.assetId) != expectedAssetId))
298298 then throw("invalid asset id in payment")
299299 else pmt.amount
300300 }
301301
302302
303303 func calcCurrentGwxAmount (userAddress) = {
304304 let EMPTY = "empty"
305305 let user2NumMappingKEY = keyUser2NumMapping(userAddress)
306306 let userNum = valueOrElse(getString(user2NumMappingKEY), EMPTY)
307307 let k = valueOrElse(getInteger(keyLockParamK(userNum)), 0)
308308 let b = valueOrElse(getInteger(keyLockParamB(userNum)), 0)
309309 let gwxAmountCalc = calcGwxAmount(k, b, height)
310310 let gwxAmount = if ((0 > gwxAmountCalc))
311311 then 0
312312 else gwxAmountCalc
313313 gwxAmount
314314 }
315315
316316
317317 func internalClaimWxBoost (lpAssetIdStr,userAddressStr,readOnly) = {
318318 let EMPTY = "EMPTY"
319319 let userRecordOrEmpty = valueOrElse(getString(this, keyLockParamsRecord(userAddressStr)), EMPTY)
320320 if ((userRecordOrEmpty == EMPTY))
321321 then $Tuple3(0, nil, "userRecord::is::empty")
322322 else {
323323 let userRecordArray = split(userRecordOrEmpty, SEP)
324324 let userNumStr = userRecordArray[IdxLockUserNum]
325325 let gwxRewardEmissionStartHeight = valueOrElse(getInteger(gwxRewardContract, keyGwxRewardEmissionStartHeight()), 0)
326326 let EMPTYSTR = "empty"
327327 let $t01252513093 = if ((lpAssetIdStr != EMPTYSTR))
328328 then {
329329 let poolAddressStr = valueOrErrorMessage(getString(factoryContract, keyFactoryLp2AssetsMapping(lpAssetIdStr)), ("unsupported lp asset " + lpAssetIdStr))
330330 let pw1 = getIntegerValue(factoryContract, keyFactoryPoolWeight(poolAddressStr))
331331 let pw0 = valueOrElse(getInteger(factoryContract, keyFactoryPoolWeightHistory(poolAddressStr, 0)), pw1)
332332 $Tuple2(pw0, pw1)
333333 }
334334 else if (readOnly)
335335 then $Tuple2(0, 0)
336336 else throw(("not readonly mode: unsupported lp asset " + lpAssetIdStr))
337337 let poolWeight0 = $t01252513093._1
338338 let poolWeight1 = $t01252513093._2
339339 let wxEmissionPerBlock = getIntOrFail(emissionContract, keyEmissionRatePerBlockCurrent())
340340 let emissionStart = getIntOrFail(emissionContract, keyEmissionStartBlock())
341341 let emissionEnd = getIntOrFail(emissionContract, keyEmissionEndBlock())
342342 let h = if ((height > emissionEnd))
343343 then emissionEnd
344344 else height
345345 let dh = max([(h - emissionStart), 0])
346346 let userLpBoostEmissionLastIntegralKEY = keyUserLpBoostEmissionLastINTEGRAL(userNumStr, lpAssetIdStr)
347347 let userBoostEmissionLastIntegralKEY = keyUserBoostEmissionLastINTEGRAL(userNumStr)
348348 let userBoostEmissionLastIntegral = valueOrElse(getInteger(this, userLpBoostEmissionLastIntegralKEY), getIntOrZero(this, userBoostEmissionLastIntegralKEY))
349349 let boostEmissionIntegral = (((wxEmissionPerBlock * dh) * 2) / 3)
350350 let userBoostEmissionIntegral = (boostEmissionIntegral - userBoostEmissionLastIntegral)
351351 let udh = fraction(userBoostEmissionIntegral, 3, (2 * wxEmissionPerBlock))
352352 let uLastH = (h - udh)
353353 let udh0 = max([(gwxRewardEmissionStartHeight - uLastH), 0])
354354 let udh1 = ((h - uLastH) - udh0)
355355 if (if (if ((0 > uLastH))
356356 then true
357357 else (0 > udh1))
358358 then true
359359 else (abs(((udh0 + udh1) - udh)) >= 1))
360360 then throw(((((((("invalid udh calc: udh=" + toString(udh)) + " uLastH=") + toString(uLastH)) + " udh0=") + toString(udh0)) + " udh1=") + toString(udh1)))
361361 else if ((0 > userBoostEmissionIntegral))
362362 then throw("wrong calculations")
363363 else {
364364 let userMaxBoostIntegralKEY = keyUserMaxBoostINTEGRAL(userNumStr)
365365 let totalMaxBoostIntegralKEY = keyTotalMaxBoostINTEGRAL()
366366 let userMaxBoostInt = getIntOrZero(this, userMaxBoostIntegralKEY)
367367 let totalMaxBoostInt = getIntOrZero(this, totalMaxBoostIntegralKEY)
368368 let totalCachedGwxKEY = keyTotalCachedGwx()
369369 let totalCachedGwx = valueOrElse(getInteger(this, totalCachedGwxKEY), 0)
370370 let userCurrGwx = calcCurrentGwxAmount(userAddressStr)
371371 let userBoostAvalaibleToClaimTotalKEY = keyUserBoostAvalaibleToClaimTotal(userNumStr)
372372 let userBoostEmissionIntegral0 = fraction(userBoostEmissionIntegral, udh0, udh)
373373 let userBoostEmissionIntegral1 = fraction(userBoostEmissionIntegral, udh1, udh)
374374 let poolUserBoostEmissionIntegral0 = fraction(userBoostEmissionIntegral0, poolWeight0, POOLWEIGHTMULT)
375375 let poolUserBoostEmissionIntegral1 = fraction(userBoostEmissionIntegral1, poolWeight1, POOLWEIGHTMULT)
376376 let userBoostAvaliableToClaimTotalNew0 = if ((totalCachedGwx == 0))
377377 then 0
378378 else fraction(poolUserBoostEmissionIntegral0, userCurrGwx, totalCachedGwx)
379379 let userBoostAvaliableToClaimTotalNew1 = if ((totalCachedGwx == 0))
380380 then 0
381381 else fraction(poolUserBoostEmissionIntegral1, userCurrGwx, totalCachedGwx)
382382 let userBoostAvalaibleToClaimCachedKEY = keyUserBoostAvalaibleToClaimCached(userNumStr, lpAssetIdStr)
383383 let userBoostAvalaibleToClaimCached = valueOrElse(getInteger(this, userBoostAvalaibleToClaimCachedKEY), 0)
384384 let userBoostAvaliableToClaimTotalNew = ((userBoostAvaliableToClaimTotalNew0 + userBoostAvaliableToClaimTotalNew1) + userBoostAvalaibleToClaimCached)
385385 let dataState = [IntegerEntry(userLpBoostEmissionLastIntegralKEY, boostEmissionIntegral), IntegerEntry(userBoostAvalaibleToClaimCachedKEY, 0)]
386- let debug = makeString([("userBoostEmissionLastIntegral=" + toString(userBoostEmissionLastIntegral)), ("userBoostEmissionIntegral=" + toString(userBoostEmissionIntegral)), ("userMaxBoostInt=" + toString(userMaxBoostInt)), ("totalMaxBoostInt=" + toString(totalMaxBoostInt)), ("userBoostAvaliableToClaimTotalNew=" + toString(userBoostAvaliableToClaimTotalNew)), ("userBoostEmissionIntegral0=" + toString(userBoostEmissionIntegral0)), ("userBoostEmissionIntegral1=" + toString(userBoostEmissionIntegral1)), ("poolUserBoostEmissionIntegral0=" + toString(poolUserBoostEmissionIntegral0)), ("poolUserBoostEmissionIntegral1=" + toString(poolUserBoostEmissionIntegral1)), ("poolWeight0=" + toString(poolWeight0)), ("poolWeight1=" + toString(poolWeight1)), ("h=" + toString(h)), ("udh=" + toString(udh)), ("uLastH=" + toString(uLastH)), ("udh0=" + toString(udh0)), ("udh1=" + toString(udh1)), ("userCurrGwx=" + toString(userCurrGwx)), ("totalCachedGwx=" + toString(totalCachedGwx))], "::")
386+ let debug = makeString([("userBoostEmissionLastIntegral=" + toString(userBoostEmissionLastIntegral)), ("userBoostEmissionIntegral=" + toString(userBoostEmissionIntegral)), ("userBoostAvalaibleToClaimCached=" + toString(userBoostAvalaibleToClaimCached)), ("userBoostAvaliableToClaimTotalNew=" + toString(userBoostAvaliableToClaimTotalNew)), ("userBoostEmissionIntegral0=" + toString(userBoostEmissionIntegral0)), ("userBoostEmissionIntegral1=" + toString(userBoostEmissionIntegral1)), ("poolUserBoostEmissionIntegral0=" + toString(poolUserBoostEmissionIntegral0)), ("poolUserBoostEmissionIntegral1=" + toString(poolUserBoostEmissionIntegral1)), ("poolWeight0=" + toString(poolWeight0)), ("poolWeight1=" + toString(poolWeight1)), ("h=" + toString(h)), ("udh=" + toString(udh)), ("uLastH=" + toString(uLastH)), ("udh0=" + toString(udh0)), ("udh1=" + toString(udh1)), ("userCurrGwx=" + toString(userCurrGwx)), ("totalCachedGwx=" + toString(totalCachedGwx))], "::")
387387 $Tuple3(userBoostAvaliableToClaimTotalNew, dataState, debug)
388388 }
389389 }
390390 }
391391
392392
393393 @Callable(i)
394394 func constructor (factoryAddressStr,lockAssetIdStr,minLockAmount,minDuration,maxDuration,mathContract) = if ((this != i.caller))
395395 then throw("not authorized")
396396 else ([IntegerEntry(keyNextUserNum(), 0), StringEntry(keyConfig(), formatConfig(lockAssetIdStr, minLockAmount, minDuration, maxDuration, mathContract)), StringEntry(keyFactoryAddress(), factoryAddressStr)] ++ StatsEntry(0, 0, 0, 0))
397397
398398
399399
400400 @Callable(i)
401401 func lock (duration) = {
402402 let cfgArray = readConfigArrayOrFail()
403403 let assetIdStr = cfgArray[IdxCfgAssetId]
404404 let assetId = fromBase58String(assetIdStr)
405405 let minLockAmount = parseIntValue(cfgArray[IdxCfgMinLockAmount])
406406 let minLockDuration = parseIntValue(cfgArray[IdxCfgMinLockDuration])
407407 let maxLockDuration = parseIntValue(cfgArray[IdxCfgMaxLockDuration])
408408 let mathContract = addressFromStringValue(cfgArray[IdxCfgMathContract])
409409 if ((size(i.payments) != 1))
410410 then throw("invalid payment - exact one payment must be attached")
411411 else {
412412 let pmt = i.payments[0]
413413 let pmtAmount = pmt.amount
414414 if ((assetId != value(pmt.assetId)))
415415 then throw((("invalid asset is in payment - " + assetIdStr) + " is expected"))
416416 else {
417417 let nextUserNumKEY = keyNextUserNum()
418418 let userAddressStr = toString(i.caller)
419419 let userIsExisting = isDefined(getString(keyUser2NumMapping(userAddressStr)))
420420 let userNumStr = if (userIsExisting)
421421 then value(getString(keyUser2NumMapping(userAddressStr)))
422422 else toString(getIntOrFail(this, nextUserNumKEY))
423423 let userNum = parseIntValue(userNumStr)
424424 let lockStart = height
425425 let startBlockKEY = keyLockParamStartBlock(userNumStr)
426426 let durationKEY = keyLockParamDuration(userNumStr)
427427 let userAmountKEY = keyLockParamUserAmount(userNumStr)
428428 if ((minLockAmount > pmtAmount))
429429 then throw(("amount is less then minLockAmount=" + toString(minLockAmount)))
430430 else if ((minLockDuration > duration))
431431 then throw(("passed duration is less then minLockDuration=" + toString(minLockDuration)))
432432 else if ((duration > maxLockDuration))
433433 then throw(("passed duration is greater then maxLockDuration=" + toString(maxLockDuration)))
434434 else if (if (userIsExisting)
435435 then ((getIntOrFail(this, startBlockKEY) + getIntOrFail(this, durationKEY)) >= lockStart)
436436 else false)
437437 then throw("there is an active lock - consider to use increaseLock")
438438 else if ((getIntOrZero(this, userAmountKEY) > 0))
439439 then throw(("there are locked WXs - consider to use increaseLock " + userAmountKEY))
440440 else {
441441 let coeffX8 = fraction(duration, MULT8, maxLockDuration)
442442 let gWxAmountStart = fraction(pmtAmount, coeffX8, MULT8)
443443 let gWxParamsResultList = asAnyList(invoke(mathContract, "calcGwxParamsREADONLY", [gWxAmountStart, lockStart, duration], nil))
444444 let k = asInt(gWxParamsResultList[0])
445445 let b = asInt(gWxParamsResultList[1])
446446 let period = toString(asInt(gWxParamsResultList[2]))
447447 let wxEmissionPerBlock = getIntOrFail(emissionContract, keyEmissionRatePerBlockCurrent())
448448 let emissionStart = getIntOrFail(emissionContract, keyEmissionStartBlock())
449449 let emissionEnd = getIntOrFail(emissionContract, keyEmissionEndBlock())
450450 let h = if ((height > emissionEnd))
451451 then emissionEnd
452452 else height
453453 let dh = max([(h - emissionStart), 0])
454454 let userBoostEmissionLastIntegralKEY = keyUserBoostEmissionLastINTEGRAL(userNumStr)
455455 let boostEmissionIntegral = (((wxEmissionPerBlock * dh) * 2) / 3)
456456 let userMaxBoostIntegralKEY = keyUserMaxBoostINTEGRAL(userNumStr)
457457 let totalMaxBoostIntegralKEY = keyTotalMaxBoostINTEGRAL()
458458 let userMaxBoostInt = ((gWxAmountStart * duration) / 2)
459459 let totalMaxBoostInt = getIntOrZero(this, totalMaxBoostIntegralKEY)
460460 let totalCachedGwxKEY = keyTotalCachedGwx()
461461 let totalCachedGwx = valueOrElse(getInteger(this, totalCachedGwxKEY), 0)
462462 let arr = if (userIsExisting)
463463 then nil
464464 else [IntegerEntry(nextUserNumKEY, (userNum + 1)), StringEntry(keyUser2NumMapping(userAddressStr), userNumStr), StringEntry(keyNum2UserMapping(userNumStr), userAddressStr)]
465465 ((((arr ++ LockParamsEntry(userAddressStr, userNumStr, pmtAmount, lockStart, duration, k, b, period)) ++ StatsEntry(pmtAmount, duration, 1, if (userIsExisting)
466466 then 0
467467 else 1)) :+ HistoryEntry("lock", userAddressStr, pmtAmount, lockStart, duration, k, b, i)) ++ [IntegerEntry(userBoostEmissionLastIntegralKEY, boostEmissionIntegral), IntegerEntry(totalCachedGwxKEY, (totalCachedGwx + gWxAmountStart))])
468468 }
469469 }
470470 }
471471 }
472472
473473
474474
475475 @Callable(i)
476476 func increaseLock (deltaDuration) = {
477477 let cfgArray = readConfigArrayOrFail()
478478 let assetIdStr = cfgArray[IdxCfgAssetId]
479479 let assetId = fromBase58String(assetIdStr)
480480 let minLockDuration = parseIntValue(cfgArray[IdxCfgMinLockDuration])
481481 let maxLockDuration = parseIntValue(cfgArray[IdxCfgMaxLockDuration])
482482 let mathContract = addressFromStringValue(cfgArray[IdxCfgMathContract])
483483 let pmtAmount = extractOptionalPaymentAmountOrFail(i, assetId)
484484 let userAddressStr = toString(i.caller)
485485 let userRecordArray = readLockParamsRecordOrFail(userAddressStr)
486486 let userNumStr = userRecordArray[IdxLockUserNum]
487487 let userAmount = parseIntValue(userRecordArray[IdxLockAmount])
488488 let lockStart = parseIntValue(userRecordArray[IdxLockStart])
489489 let lockDuration = parseIntValue(userRecordArray[IdxLockDuration])
490490 let lockEnd = (lockStart + lockDuration)
491491 let remainingDuration = max([(lockEnd - height), 0])
492492 let userAmountNew = (userAmount + pmtAmount)
493493 let lockDurationNew = (remainingDuration + deltaDuration)
494494 if ((0 > deltaDuration))
495495 then throw("duration is less then zero")
496496 else if ((minLockDuration > lockDurationNew))
497497 then throw(("lockDurationNew is less then minLockDuration=" + toString(minLockDuration)))
498498 else if ((lockDurationNew > maxLockDuration))
499499 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(maxLockDuration)))
500500 else {
501501 let coeffX8 = fraction(lockDurationNew, MULT8, maxLockDuration)
502502 let gWxAmountStart = fraction(userAmountNew, coeffX8, MULT8)
503503 let lockStartNew = height
504504 let gWxParamsResultList = asAnyList(invoke(mathContract, "calcGwxParamsREADONLY", [gWxAmountStart, lockStartNew, lockDurationNew], nil))
505505 let k = asInt(gWxParamsResultList[0])
506506 let b = asInt(gWxParamsResultList[1])
507507 let period = toString(asInt(gWxParamsResultList[2]))
508508 let wxEmissionPerBlock = getIntOrFail(emissionContract, keyEmissionRatePerBlockCurrent())
509509 let emissionStart = getIntOrFail(emissionContract, keyEmissionStartBlock())
510510 let emissionEnd = getIntOrFail(emissionContract, keyEmissionEndBlock())
511511 let h = if ((height > emissionEnd))
512512 then emissionEnd
513513 else height
514514 let dh = max([(h - emissionStart), 0])
515515 let userBoostEmissionLastIntegralKEY = keyUserBoostEmissionLastINTEGRAL(userNumStr)
516516 let userBoostEmissionLastIntegral = getIntOrZero(this, userBoostEmissionLastIntegralKEY)
517517 let boostEmissionIntegral = (((wxEmissionPerBlock * dh) * 2) / 3)
518518 let userBoostEmissionIntegral = (boostEmissionIntegral - userBoostEmissionLastIntegral)
519519 if ((0 > userBoostEmissionIntegral))
520520 then throw("wrong calculations")
521521 else {
522522 let userMaxBoostIntegralKEY = keyUserMaxBoostINTEGRAL(userNumStr)
523523 let totalMaxBoostIntegralKEY = keyTotalMaxBoostINTEGRAL()
524524 let userMaxBoostInt = getIntOrZero(this, userMaxBoostIntegralKEY)
525525 let totalMaxBoostInt = getIntOrZero(this, totalMaxBoostIntegralKEY)
526526 let currUserGwx = calcCurrentGwxAmount(userAddressStr)
527527 let gwxDiff = (gWxAmountStart - currUserGwx)
528528 if ((0 > gwxDiff))
529529 then throw(("gwxDiff is less then 0: " + toString(gwxDiff)))
530530 else {
531531 let totalCachedGwxKEY = keyTotalCachedGwx()
532532 let totalCachedGwx = valueOrElse(getInteger(this, totalCachedGwxKEY), 0)
533533 let userBoostAvalaibleToClaimTotalKEY = keyUserBoostAvalaibleToClaimTotal(userNumStr)
534534 let userBoostAvaliableToClaimTotal = getIntOrZero(this, userBoostAvalaibleToClaimTotalKEY)
535535 let userBoostAvaliableToClaimTotalNew = fraction(userBoostEmissionIntegral, currUserGwx, totalCachedGwx)
536536 let userMaxBoostIntNew = ((gWxAmountStart * lockDurationNew) / 2)
537537 let remainingUserMaxBoostInt = ((currUserGwx * remainingDuration) / 2)
538538 let userMaxBoostIntDiff = (userMaxBoostIntNew - remainingUserMaxBoostInt)
539539 (((LockParamsEntry(userAddressStr, userNumStr, userAmountNew, lockStartNew, lockDurationNew, k, b, period) ++ StatsEntry(pmtAmount, deltaDuration, 0, 0)) :+ HistoryEntry("lock", userAddressStr, pmtAmount, lockStart, lockDurationNew, k, b, i)) ++ [IntegerEntry(totalCachedGwxKEY, (totalCachedGwx + gwxDiff))])
540540 }
541541 }
542542 }
543543 }
544544
545545
546546
547547 @Callable(i)
548548 func claimWxBoost (lpAssetIdStr,userAddressStr) = if ((stakingContract != i.caller))
549549 then throw("permissions denied")
550550 else {
551- let $t02694627048 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, false)
552- let userBoostAvailable = $t02694627048._1
553- let dataState = $t02694627048._2
554- let debug = $t02694627048._3
551+ let $t02692327025 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, false)
552+ let userBoostAvailable = $t02692327025._1
553+ let dataState = $t02692327025._2
554+ let debug = $t02692327025._3
555555 $Tuple2(dataState, [userBoostAvailable])
556556 }
557557
558558
559559
560560 @Callable(i)
561561 func claimWxBoostREADONLY (lpAssetIdStr,userAddressStr) = {
562- let $t02718027281 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, true)
563- let userBoostAvailable = $t02718027281._1
564- let dataState = $t02718027281._2
565- let debug = $t02718027281._3
562+ let $t02715727258 = internalClaimWxBoost(lpAssetIdStr, userAddressStr, true)
563+ let userBoostAvailable = $t02715727258._1
564+ let dataState = $t02715727258._2
565+ let debug = $t02715727258._3
566566 $Tuple2(nil, [userBoostAvailable, debug])
567567 }
568568
569569
570570
571571 @Callable(i)
572572 func unlock (userAddress) = {
573573 let userRecordArray = readLockParamsRecordOrFail(userAddress)
574574 let userNumStr = userRecordArray[IdxLockUserNum]
575575 let userAmount = parseIntValue(userRecordArray[IdxLockAmount])
576576 let lockStart = parseIntValue(userRecordArray[IdxLockStart])
577577 let lockDuration = parseIntValue(userRecordArray[IdxLockDuration])
578578 let lockEnd = (lockStart + lockDuration)
579579 let cfgArray = readConfigArrayOrFail()
580580 let assetId = fromBase58String(cfgArray[IdxCfgAssetId])
581581 let mathContract = addressFromStringValue(cfgArray[IdxCfgMathContract])
582582 if ((lockEnd >= height))
583583 then throw((("wait " + toString(lockEnd)) + " to unlock"))
584584 else if ((0 >= userAmount))
585585 then throw("nothing to unlock")
586586 else {
587587 let period = valueOrElse(getInteger(mathContract, keyNextPeriod()), 0)
588588 (((LockParamsEntry(userAddress, userNumStr, 0, lockStart, lockDuration, 0, 0, toString(period)) ++ StatsEntry(-(userAmount), 0, 0, -1)) :+ HistoryEntry("unlock", userAddress, userAmount, lockStart, lockDuration, 0, 0, i)) :+ ScriptTransfer(addressFromStringValue(userAddress), userAmount, assetId))
589589 }
590590 }
591591
592592
593593
594594 @Callable(i)
595595 func gwxUserInfoREADONLY (userAddress) = {
596596 let gwxAmount = calcCurrentGwxAmount(userAddress)
597597 $Tuple2(nil, [gwxAmount])
598598 }
599599
600600
601601
602602 @Callable(i)
603603 func normalizeBeforeUnlockAndBurn () = if ((i.caller != this))
604604 then throw("permissions denied")
605605 else {
606606 let tot = getIntOrFail(this, keyNextUserNum())
607607 let lps = split(getStringOrFail(this, keyFactoryLpList()), SEP)
608608 let nextK = "%s__nextUserToNormalaize"
609609 let uN = valueOrElse(getInteger(this, nextK), 0)
610610 if ((uN == tot))
611611 then throw("normalization is finished")
612612 else {
613613 let uS = toString(uN)
614614 let u = getStringOrFail(this, keyNum2UserMapping(uS))
615615 let lp0 = lps[0]
616- let $t02918629240 = internalClaimWxBoost(lp0, u, true)
617- let b0 = $t02918629240._1
618- let ds0 = $t02918629240._2
619- let d0 = $t02918629240._3
616+ let $t02916329217 = internalClaimWxBoost(lp0, u, true)
617+ let b0 = $t02916329217._1
618+ let ds0 = $t02916329217._2
619+ let d0 = $t02916329217._3
620620 let bK0 = keyUserBoostAvalaibleToClaimCached(uS, lp0)
621621 let lp1 = lps[1]
622- let $t02931829372 = internalClaimWxBoost(lp1, u, true)
623- let b1 = $t02931829372._1
624- let ds1 = $t02931829372._2
625- let d1 = $t02931829372._3
622+ let $t02929529349 = internalClaimWxBoost(lp1, u, true)
623+ let b1 = $t02929529349._1
624+ let ds1 = $t02929529349._2
625+ let d1 = $t02929529349._3
626626 let bK1 = keyUserBoostAvalaibleToClaimCached(uS, lp1)
627627 let lp2 = lps[2]
628- let $t02945029504 = internalClaimWxBoost(lp2, u, true)
629- let b2 = $t02945029504._1
630- let ds2 = $t02945029504._2
631- let d2 = $t02945029504._3
628+ let $t02942729481 = internalClaimWxBoost(lp2, u, true)
629+ let b2 = $t02942729481._1
630+ let ds2 = $t02942729481._2
631+ let d2 = $t02942729481._3
632632 let bK2 = keyUserBoostAvalaibleToClaimCached(uS, lp2)
633633 let lp3 = lps[3]
634- let $t02958229636 = internalClaimWxBoost(lp3, u, true)
635- let b3 = $t02958229636._1
636- let ds3 = $t02958229636._2
637- let d3 = $t02958229636._3
634+ let $t02955929613 = internalClaimWxBoost(lp3, u, true)
635+ let b3 = $t02955929613._1
636+ let ds3 = $t02955929613._2
637+ let d3 = $t02955929613._3
638638 let bK3 = keyUserBoostAvalaibleToClaimCached(uS, lp3)
639639 let lp4 = lps[4]
640- let $t02971429768 = internalClaimWxBoost(lp4, u, true)
641- let b4 = $t02971429768._1
642- let ds4 = $t02971429768._2
643- let d4 = $t02971429768._3
640+ let $t02969129745 = internalClaimWxBoost(lp4, u, true)
641+ let b4 = $t02969129745._1
642+ let ds4 = $t02969129745._2
643+ let d4 = $t02969129745._3
644644 let bK4 = keyUserBoostAvalaibleToClaimCached(uS, lp4)
645645 [IntegerEntry(nextK, (uN + 1)), IntegerEntry(bK0, b0), IntegerEntry(bK1, b1), IntegerEntry(bK2, b2), IntegerEntry(bK3, b3), IntegerEntry(bK4, b4), ds0[0], ds1[0], ds2[0], ds3[0], ds4[0]]
646646 }
647647 }
648648
649649

github/deemru/w8io/026f985 
97.00 ms