tx · DtnPPqZXor71n3iJtMQAB13ee419iGiCDx5qvcKjrPbD 3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH: -0.01400000 Waves 2021.03.26 13:36 [1454597] smart account 3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH > SELF 0.00000000 Waves
{ "type": 13, "id": "DtnPPqZXor71n3iJtMQAB13ee419iGiCDx5qvcKjrPbD", "fee": 1400000, "feeAssetId": null, "timestamp": 1616755021238, "version": 1, "sender": "3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH", "senderPublicKey": "HoEvP2nFKMAsffQ9PUyAm6auWisyHgusY9HxDeMASrzZ", "proofs": [ "2kHxkTQKemB8XTgkXTNhvgdZiJRMXDLMaZEUC4emqo3PXNKa2BAgs533yWZNu3dMnyS6Ftw13JftXQeDzs9Jp4Yu" ], "script": "base64:AAIEAAAAAAAAADoIAhIPCg0ICAgBCAEBAQgBAQEBEgMKAQESABIAEgUKAwgICBIFCgMICAgSAwoBCBIECgIIARIDCgEIAAAASgAAAAADU0VQAgAAAAJfXwEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAMZ2V0SW50T3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAADmZhaWxFeGVjdXRlR2V0AAAABQAAAANtc2cAAAAMYmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyAAAADXN1Ym1pdFR4SWRTdHIAAAANb3BlcmF0aW9uVHlwZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAADbXNnAgAAAA86IGJhc2VBc3NldFN0cj0FAAAADGJhc2VBc3NldFN0cgIAAAAQIHVzZXJBZGRyZXNzU3RyPQUAAAAOdXNlckFkZHJlc3NTdHICAAAADyBzdWJtaXRUeElkU3RyPQUAAAANc3VibWl0VHhJZFN0cgIAAAAPIG9wZXJhdGlvblR5cGU9BQAAAA1vcGVyYXRpb25UeXBlAQAAABdmYWlsU3VibWl0TGltaXRzRXhjZWVkcwAAAAQAAAANcmVtYWluaW5nQmFzZQAAAA5yZW1haW5pbmdTaGFyZQAAABBuZXdSZW1haW5pbmdCYXNlAAAAEW5ld1JlbWFpbmluZ1NoYXJlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACtzdWJtaXQgb3BlcmF0aW9uIGxpbWl0cyBoYXZlIGJlZW4gcmVhY2hlZDogAgAAAA8gcmVtYWluaW5nQmFzZT0JAAGkAAAAAQUAAAANcmVtYWluaW5nQmFzZQIAAAAQIHJlbWFpbmluZ1NoYXJlPQkAAaQAAAABBQAAAA5yZW1haW5pbmdTaGFyZQIAAAASIG5ld1JlbWFpbmluZ0Jhc2U9CQABpAAAAAEFAAAAEG5ld1JlbWFpbmluZ0Jhc2UCAAAAEyBuZXdSZW1haW5pbmdTaGFyZT0JAAGkAAAAAQUAAAARbmV3UmVtYWluaW5nU2hhcmUBAAAAFGZhaWxUb3B1cE1hbmFnZXJPbmx5AAAAAQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACNvcGVydGlvbiBkZW5pZWQ6IG9ubHkgdG9wVXBNYW5hZ2VyPQUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwIAAAAbIGNhbiBzZW5kIHN1Y2ggdHJhbnNhY3Rpb25zAQAAABFjb252ZXJ0U2hhcmUyQmFzZQAAAAMAAAALc2hhcmVBbW91bnQAAAAFcHJpY2UAAAAJcHJpY2VNdWx0CQAAawAAAAMFAAAAC3NoYXJlQW1vdW50BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0AQAAABFjb252ZXJ0QmFzZTJTaGFyZQAAAAMAAAAKYmFzZUFtb3VudAAAAAVwcmljZQAAAAlwcmljZU11bHQJAABrAAAAAwUAAAAKYmFzZUFtb3VudAUAAAAJcHJpY2VNdWx0BQAAAAVwcmljZQEAAAALa2V5QXNzZXRDZmcAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAABclcyVzJXNfX2NvbmZpZ19fYXNzZXRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAIAAAAXJXNfX25leHRJbnRlcm5hbEFzc2V0SWQBAAAADGtleVByaWNlTGFzdAAAAAEAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQABLAAAAAICAAAAFSVzJXMlZF9fcHJpY2VfX2xhc3RfXwUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAQAAAAtrZXlQcmljZUFUSAAAAAEAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQABLAAAAAICAAAAFCVzJXMlZF9fcHJpY2VfX2F0aF9fBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIBAAAAEmtleVByaWNlQnlUb3BVcElkeAAAAAIAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAIdG9wVXBJZHgJAAS5AAAAAgkABEwAAAACAgAAABslcyVzJWQlZF9fcHJpY2VfX2J5VG9wVXBJZHgJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAAAh0b3BVcElkeAUAAAADbmlsBQAAAANTRVABAAAAD2tleVByaWNlSGlzdG9yeQAAAAMAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAAAAAWgAAAAJdGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAaJXMlcyVkJWQlZF9fcHJpY2VfX2hpc3RvcnkJAARMAAAAAgUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQAETAAAAAIJAAGkAAAAAQUAAAABaAkABEwAAAACCQABpAAAAAEFAAAACXRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAADmtleVRvdGFsTG9ja2VkAAAAAQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAAEsAAAAAgIAAAAXJXMlcyVkX190b3RhbF9fbG9ja2VkX18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgEAAAAUa2V5VG90YWxMb2NrZWRCeVVzZXIAAAACAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlcyVkJXNfX3RvdGFsX19sb2NrZWQJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAA25pbAUAAAADU0VQAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAABxrZXlNYXBwaW5nc1NoYXJlMmJhc2VBc3NldElkAAAAAQAAAA1zaGFyZUFzc2V0U3RyCQABLAAAAAICAAAAJSVzJXMlc19fbWFwcGluZ3NfX3NoYXJlMmJhc2VBc3NldElkX18FAAAADXNoYXJlQXNzZXRTdHIBAAAAHGtleU1hcHBpbmdzQmFzZUFzc2V0MnNoYXJlSWQAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAACUlcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyc2hhcmVJZF9fBQAAAAxiYXNlQXNzZXRTdHIBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAASwAAAACAgAAABclcyVzJWRfX3NodXRkb3duX19wdXRfXwUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIBAAAAEmtleVNodXRkb3duTWFuYWdlcgAAAAEAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAbJXMlcyVkX19zaHV0ZG93bl9fbWFuYWdlcl9fBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgEAAAASa2V5VG9wVXBDdXJyZW50SWR4AAAAAQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAASwAAAACAgAAABslcyVzJWRfX3RvcHVwX19jdXJyZW50SWR4X18FAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAQAAABJrZXlUb3BVcExhc3RIZWlnaHQAAAACAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgAAAAZzZW5kZXIJAAS5AAAAAgkABEwAAAACAgAAAB8lcyVzJXMlZCVzX190b3B1cF9fbGFzdF9faGVpZ2h0CQAETAAAAAIFAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkABEwAAAACBQAAAAZzZW5kZXIFAAAAA25pbAUAAAADU0VQAQAAAA5rZXlUb3B1cE11dGV4dAAAAAEAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQABLAAAAAICAAAAFiVzJXMlZF9fdG9wdXBfX211dGV4X18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgEAAAAPa2V5VG9wdXBIaXN0b3J5AAAAAgAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIAAAAIdG9wdXBJZHgJAAS5AAAAAgkABEwAAAACAgAAABglcyVzJWQlZF9fdG9wdXBfX2hpc3RvcnkJAARMAAAAAgUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQAETAAAAAIJAAGkAAAAAQUAAAAIdG9wdXBJZHgFAAAAA25pbAUAAAADU0VQAQAAABJrZXlMaW1pdHNSZW1haW5pbmcAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABslcyVzJWRfX2xpbWl0c19fcmVtYWluaW5nX18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgAAAAASSWR4Q2ZnU2hhcmVBc3NldElkAAAAAAAAAAABAAAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAAAAAAAAAAAAgAAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwAAAAAAAAAAAwAAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UAAAAAAAAAAAQAAAAAFElkeENmZ0dldERlbGF5QmxvY2tzAAAAAAAAAAAFAAAAABtJZHhDZmdUb3B1cEludGVydmFsSW5CbG9ja3MAAAAAAAAAAAYAAAAAGklkeENmZ1RvcHVwTWF4TmVnYXRpdmVQYXJ0AAAAAAAAAAAHAAAAABlJZHhDZmdUb3B1cE1hbmFnZXJBZGRyZXNzAAAAAAAAAAAIAAAAABlJZHhDZmdTdWJtaXRMaW1pdHNCYXNlTWF4AAAAAAAAAAAJAAAAABtJZHhDZmdTdWJtaXRMaW1pdHNCYXNlUmVzZXQAAAAAAAAAAAoAAAAAGklkeENmZ1N1Ym1pdExpbWl0c1NoYXJlTWF4AAAAAAAAAAALAAAAABxJZHhDZmdTdWJtaXRMaW1pdHNTaGFyZVJlc2V0AAAAAAAAAAAMAQAAAAxkYXRhQXNzZXRDZmcAAAAMAAAADXNoYXJlQXNzZXRTdHIAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwAAABFkZWNpbWFsc011bHRQcmljZQAAABBnZXREZWxheUluQmxvY2tzAAAAFXRvcHVwSW50ZXJ2YWxJbkJsb2NrcwAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAAAABN0b3B1cE1hbmFnZXJBZGRyZXNzAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgAAAAVc3VibWl0TGltaXRzQmFzZVJlc2V0AAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4AAAAFnN1Ym1pdExpbWl0c1NoYXJlUmVzZXQJAAS5AAAAAgkABEwAAAACAgAAABglcyVkJWQlZCVkJWQlZCVzJWQlZCVkJWQJAARMAAAAAgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAARMAAAAAgkAAaQAAAABBQAAABFkZWNpbWFsc011bHRQcmljZQkABEwAAAACCQABpAAAAAEFAAAAEGdldERlbGF5SW5CbG9ja3MJAARMAAAAAgkAAaQAAAABBQAAABV0b3B1cEludGVydmFsSW5CbG9ja3MJAARMAAAAAgkAAaQAAAABBQAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAkABEwAAAACBQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzCQAETAAAAAIJAAGkAAAAAQUAAAATc3VibWl0TGltaXRzQmFzZU1heAkABEwAAAACCQABpAAAAAEFAAAAFXN1Ym1pdExpbWl0c0Jhc2VSZXNldAkABEwAAAACCQABpAAAAAEFAAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4CQAETAAAAAIJAAGkAAAAAQUAAAAWc3VibWl0TGltaXRzU2hhcmVSZXNldAUAAAADbmlsBQAAAANTRVAAAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQAAAAAAAAAAAQAAAAAVSWR4VG90YWxMb2NrZWRPdXRCYXNlAAAAAAAAAAACAAAAABRJZHhUb3RhbExvY2tlZEluQmFzZQAAAAAAAAAAAwAAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQAAAAAAAAAABAEAAAAPZGF0YVRvdGFsTG9ja2VkAAAABAAAAA1pblNoYXJlQW1vdW50AAAADW91dEJhc2VBbW91bnQAAAAMaW5CYXNlQW1vdW50AAAADm91dFNoYXJlQW1vdW50CQAEuQAAAAIJAARMAAAAAgIAAAAIJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAA1pblNoYXJlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAANb3V0QmFzZUFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADGluQmFzZUFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADm91dFNoYXJlQW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAAAAA1pblNoYXJlQW1vdW50AAAADW91dEJhc2VBbW91bnQAAAAMaW5CYXNlQW1vdW50AAAADm91dFNoYXJlQW1vdW50CQAETAAAAAIA//////////8JAARMAAAAAgUAAAANaW5TaGFyZUFtb3VudAkABEwAAAACBQAAAA1vdXRCYXNlQW1vdW50CQAETAAAAAIFAAAADGluQmFzZUFtb3VudAkABEwAAAACBQAAAA5vdXRTaGFyZUFtb3VudAUAAAADbmlsAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABAAAAA2tleQQAAAAQdG90YWxMb2NrZWRBcnJheQkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAA1NFUAkBAAAAEmRhdGFUb3RhbExvY2tlZEludAAAAAQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABVJZHhUb3RhbExvY2tlZEluU2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABVJZHhUb3RhbExvY2tlZE91dEJhc2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFklkeFRvdGFsTG9ja2VkT3V0U2hhcmUBAAAAE2NhbGNUb3RhbExvY2tlZERpZmYAAAAIAAAACWRpcmVjdGlvbgAAAA1vcGVyYXRpb25UeXBlAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAABXByaWNlAAAACXByaWNlTXVsdAAAAAhpbkFtb3VudAAAAAtiYXNlQXNzZXRJZAAAAAxzaGFyZUFzc2V0SWQEAAAAAXQJAAEsAAAAAgUAAAAJZGlyZWN0aW9uBQAAAA1vcGVyYXRpb25UeXBlAwkAAAAAAAACBQAAAAF0AgAAAAdzdWJtaXRQBAAAAAl0b3RhbERpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhpbkFtb3VudAAAAAAAAAAAAAQAAAAIdXNlckRpZmYFAAAACXRvdGFsRGlmZgkABRYAAAAEBQAAAAl0b3RhbERpZmYFAAAACHVzZXJEaWZmAAAAAAAAAAAACQACWQAAAAECAAAAAAMJAAAAAAAAAgUAAAABdAIAAAAHc3VibWl0RwQAAAAJdG90YWxEaWZmCQEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAUAAAAIaW5BbW91bnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACHVzZXJEaWZmBQAAAAl0b3RhbERpZmYJAAUWAAAABAUAAAAJdG90YWxEaWZmBQAAAAh1c2VyRGlmZgAAAAAAAAAAAAkAAlkAAAABAgAAAAADCQAAAAAAAAIFAAAAAXQCAAAACGV4ZWN1dGVQBAAAAAlvdXRBbW91bnQJAQAAABFjb252ZXJ0QmFzZTJTaGFyZQAAAAMFAAAACGluQW1vdW50BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BAAAAAl0b3RhbERpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAlvdXRBbW91bnQEAAAACHVzZXJEaWZmCQEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAIaW5BbW91bnQAAAAAAAAAAAAJAAUWAAAABAUAAAAJdG90YWxEaWZmBQAAAAh1c2VyRGlmZgUAAAAJb3V0QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQDCQAAAAAAAAIFAAAAAXQCAAAACGV4ZWN1dGVHBAAAAAlvdXRBbW91bnQJAQAAABFjb252ZXJ0U2hhcmUyQmFzZQAAAAMFAAAACGluQW1vdW50BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BAAAAAl0b3RhbERpZmYJAQAAABJkYXRhVG90YWxMb2NrZWRJbnQAAAAEAAAAAAAAAAAABQAAAAlvdXRBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAAEAAAACHVzZXJEaWZmCQEAAAASZGF0YVRvdGFsTG9ja2VkSW50AAAABAUAAAAIaW5BbW91bnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAUWAAAABAUAAAAJdG90YWxEaWZmBQAAAAh1c2VyRGlmZgUAAAAJb3V0QW1vdW50BQAAAAtiYXNlQXNzZXRJZAMJAAAAAAAAAgUAAAABdAIAAAAFdG9wdXAEAAAAEHRvdGFsTG9ja2VkQXJyYXkJAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAXdG90YWxMb2NrZWRJbkJhc2VBbW91bnQJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAAUSWR4VG90YWxMb2NrZWRJbkJhc2UEAAAAGHRvdGFsTG9ja2VkSW5TaGFyZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABVJZHhUb3RhbExvY2tlZEluU2hhcmUEAAAACXRvdGFsRGlmZgkBAAAAEmRhdGFUb3RhbExvY2tlZEludAAAAAQFAAAAGHRvdGFsTG9ja2VkSW5TaGFyZUFtb3VudAkAAGgAAAACAP//////////CQEAAAARY29udmVydFNoYXJlMkJhc2UAAAADBQAAABh0b3RhbExvY2tlZEluU2hhcmVBbW91bnQFAAAABXByaWNlBQAAAAlwcmljZU11bHQFAAAAF3RvdGFsTG9ja2VkSW5CYXNlQW1vdW50CQAAaAAAAAIA//////////8JAQAAABFjb252ZXJ0QmFzZTJTaGFyZQAAAAMFAAAAF3RvdGFsTG9ja2VkSW5CYXNlQW1vdW50BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0CQAFFgAAAAQFAAAACXRvdGFsRGlmZgUAAAADbmlsAAAAAAAAAAAACQACWQAAAAECAAAAAAkAAAIAAAABCQABLAAAAAICAAAAEVVuc3VwcG9ydGVkIFR5cGUgBQAAAAF0AQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwAAAAZhY3Rpb24AAAADa2V5AAAABGRpZmYKAQAAAAZVUERBVEUAAAACAAAAAWEAAAABYgMJAAAAAAAAAgUAAAAGYWN0aW9uAgAAAAlJTkNSRU1FTlQJAABkAAAAAgUAAAABYQUAAAABYgMJAAAAAAAAAgUAAAAGYWN0aW9uAgAAAAlERUNSRU1FTlQJAABlAAAAAgUAAAABYQUAAAABYgkAAAIAAAABCQABLAAAAAICAAAAE1Vuc3VwcG9ydGVkIGFjdGlvbiAFAAAABmFjdGlvbgQAAAAJZGF0YUFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAAA9kYXRhVG90YWxMb2NrZWQAAAAECQEAAAAGVVBEQVRFAAAAAgkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQkAAZEAAAACBQAAAARkaWZmBQAAABVJZHhUb3RhbExvY2tlZEluU2hhcmUJAQAAAAZVUERBVEUAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAVSWR4VG90YWxMb2NrZWRPdXRCYXNlCQABkQAAAAIFAAAABGRpZmYFAAAAFUlkeFRvdGFsTG9ja2VkT3V0QmFzZQkBAAAABlVQREFURQAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQkAAZEAAAACBQAAAARkaWZmBQAAABRJZHhUb3RhbExvY2tlZEluQmFzZQkBAAAABlVQREFURQAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABZJZHhUb3RhbExvY2tlZE91dFNoYXJlCQABkQAAAAIFAAAABGRpZmYFAAAAFklkeFRvdGFsTG9ja2VkT3V0U2hhcmUBAAAADGtleU9wZXJhdGlvbgAAAAQAAAANb3BlcmF0aW9uVHlwZQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAt1c2VyQWRkcmVzcwAAAAR0eElkCQAEuQAAAAIJAARMAAAAAgIAAAAIJXMlZCVzJXMJAARMAAAAAgUAAAANb3BlcmF0aW9uVHlwZQkABEwAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACBQAAAAt1c2VyQWRkcmVzcwkABEwAAAACBQAAAAR0eElkBQAAAANuaWwFAAAAA1NFUAAAAAANSWR4T3BlclN0YXR1cwAAAAAAAAAAAQAAAAAPSWR4T3BlckluQW1vdW50AAAAAAAAAAACAAAAAAxJZHhPcGVyUHJpY2UAAAAAAAAAAAMAAAAAEElkeE9wZXJPdXRBbW91bnQAAAAAAAAAAAQAAAAAEklkeE9wZXJTdGFydEhlaWdodAAAAAAAAAAABQAAAAAVSWR4T3BlclN0YXJ0VGltZXN0YW1wAAAAAAAAAAAGAAAAABBJZHhPcGVyRW5kSGVpZ2h0AAAAAAAAAAAHAAAAABNJZHhPcGVyRW5kVGltZXN0YW1wAAAAAAAAAAAIAAAAABVJZHhPcGVyVG9wdXBVbmxvY2tJZHgAAAAAAAAAAAkBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAkAAAAGc3RhdHVzAAAADWluQXNzZXRBbW91bnQAAAAFcHJpY2UAAAAOb3V0QXNzZXRBbW91bnQAAAALc3RhcnRIZWlnaHQAAAAOc3RhcnRUaW1lc3RhbXAAAAAJZW5kSGVpZ2h0AAAADGVuZFRpbWVzdGFtcAAAAARsb2NrCQAEuQAAAAIJAARMAAAAAgIAAAASJXMlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIFAAAABnN0YXR1cwkABEwAAAACBQAAAA1pbkFzc2V0QW1vdW50CQAETAAAAAIFAAAABXByaWNlCQAETAAAAAIFAAAADm91dEFzc2V0QW1vdW50CQAETAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAETAAAAAIFAAAADnN0YXJ0VGltZXN0YW1wCQAETAAAAAIFAAAACWVuZEhlaWdodAkABEwAAAACBQAAAAxlbmRUaW1lc3RhbXAJAARMAAAAAgUAAAAEbG9jawUAAAADbmlsBQAAAANTRVABAAAADWRhdGFPcGVyYXRpb24AAAAJAAAABnN0YXR1cwAAAA1pbkFzc2V0QW1vdW50AAAABXByaWNlAAAADm91dEFzc2V0QW1vdW50AAAAC3N0YXJ0SGVpZ2h0AAAADnN0YXJ0VGltZXN0YW1wAAAACWVuZEhlaWdodAAAAAxlbmRUaW1lc3RhbXAAAAAOdG9wdXBVbmxvY2tJZHgJAQAAAB5wcml2YXRlRGF0YU9wZXJhdGlvbkFsbFN0cmluZ3MAAAAJBQAAAAZzdGF0dXMJAAGkAAAAAQUAAAANaW5Bc3NldEFtb3VudAkAAaQAAAABBQAAAAVwcmljZQkAAaQAAAABBQAAAA5vdXRBc3NldEFtb3VudAkAAaQAAAABBQAAAAtzdGFydEhlaWdodAkAAaQAAAABBQAAAA5zdGFydFRpbWVzdGFtcAkAAaQAAAABBQAAAAllbmRIZWlnaHQJAAGkAAAAAQUAAAAMZW5kVGltZXN0YW1wCQABpAAAAAEFAAAADnRvcHVwVW5sb2NrSWR4AQAAABxkYXRhT3BlcmF0aW9uRXhlY3V0aW9uVXBkYXRlAAAABAAAAA1jdXJyT3BlckFycmF5AAAACW5ld1N0YXR1cwAAAAhuZXdQcmljZQAAAAxuZXdPdXRBbW91bnQJAQAAAB5wcml2YXRlRGF0YU9wZXJhdGlvbkFsbFN0cmluZ3MAAAAJBQAAAAluZXdTdGF0dXMJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAPSWR4T3BlckluQW1vdW50CQABpAAAAAEFAAAACG5ld1ByaWNlCQABpAAAAAEFAAAADG5ld091dEFtb3VudAkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABJJZHhPcGVyU3RhcnRIZWlnaHQJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAVSWR4T3BlclN0YXJ0VGltZXN0YW1wCQABpAAAAAEFAAAABmhlaWdodAkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABVJZHhPcGVyVG9wdXBVbmxvY2tJZHgBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEAAAAMYmFzZUFzc2V0U3RyBAAAAANrZXkJAQAAAAtrZXlBc3NldENmZwAAAAEFAAAADGJhc2VBc3NldFN0cgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAADa2V5BQAAAANTRVAAAAAAFklkeExpbWl0c1JlbWFpbmluZ0Jhc2UAAAAAAAAAAAEAAAAAF0lkeExpbWl0c1JlbWFpbmluZ1NoYXJlAAAAAAAAAAACAQAAABpSZW1haW5pbmdMaW1pdHNTdHJpbmdFbnRyeQAAAAMAAAADa2V5AAAAEmJhc2VSZW1haW5pbmdMaW1pdAAAABNzaGFyZVJlbWFpbmluZ0xpbWl0CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAASYmFzZVJlbWFpbmluZ0xpbWl0CQAETAAAAAIJAAGkAAAAAQUAAAATc2hhcmVSZW1haW5pbmdMaW1pdAUAAAADbmlsBQAAAANTRVABAAAAElRvcHVwTXV0ZXhJbnRFbnRyeQAAAAIAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAOYWNxdWlyZWRIZWlnaHQJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5VG9wdXBNdXRleHQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOYWNxdWlyZWRIZWlnaHQBAAAAEVRvcHVwSGlzdG9yeUVudHJ5AAAAAgAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAh0b3B1cElkeAIAAAAAAQAAABBnZW5lcmljQ2FsY1ByaWNlAAAABQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAtiYXNlQXNzZXRJZAAAAA90b3BVcEJhc2VBbW91bnQAAAAMc2hhcmVBc3NldElkAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABB0b3RhbExvY2tlZEFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQkBAAAADmtleVRvdGFsTG9ja2VkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAAGHRvdGFsTG9ja2VkT3V0QmFzZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABVJZHhUb3RhbExvY2tlZE91dEJhc2UEAAAAF3RvdGFsTG9ja2VkSW5CYXNlQW1vdW50CQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFElkeFRvdGFsTG9ja2VkSW5CYXNlBAAAABBiYXNlQXNzZXRCYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAC2Jhc2VBc3NldElkBAAAABNiYXNlQXNzZXRCYWxhbmNlV0NPCQAAZQAAAAIJAABlAAAAAgkAAGQAAAACBQAAABBiYXNlQXNzZXRCYWxhbmNlBQAAAA90b3BVcEJhc2VBbW91bnQFAAAAF3RvdGFsTG9ja2VkSW5CYXNlQW1vdW50BQAAABh0b3RhbExvY2tlZE91dEJhc2VBbW91bnQEAAAAGXRvdGFsTG9ja2VkT3V0U2hhcmVBbW91bnQJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQQAAAAYdG90YWxMb2NrZWRJblNoYXJlQW1vdW50CQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQQAAAANc2hhcmVFbWlzc2lvbggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAMc2hhcmVBc3NldElkAAAACHF1YW50aXR5AwkAAGYAAAACAAAAAAAAAAAABQAAABNiYXNlQXNzZXRCYWxhbmNlV0NPCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKmJhc2VBc3NldEJhbGFuY2VXQ08gPCAwOiBiYXNlQXNzZXRCYWxhbmNlPQkAAaQAAAABBQAAABBiYXNlQXNzZXRCYWxhbmNlAgAAABUgYmFzZUFzc2V0QmFsYW5jZVdDTz0JAAGkAAAAAQUAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwQAAAAJbGFzdFByaWNlCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAAAVwcmljZQMJAAAAAAAAAgUAAAANc2hhcmVFbWlzc2lvbgAAAAAAAAAAAAUAAAAJbGFzdFByaWNlCQAAawAAAAMFAAAAE2Jhc2VBc3NldEJhbGFuY2VXQ08FAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAA1zaGFyZUVtaXNzaW9uCQAFFwAAAAUFAAAABXByaWNlBQAAABBiYXNlQXNzZXRCYWxhbmNlAP//////////BQAAABNiYXNlQXNzZXRCYWxhbmNlV0NPBQAAAA1zaGFyZUVtaXNzaW9uAQAAAAljYWxjUHJpY2UAAAAEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAC2Jhc2VBc3NldElkAAAADHNoYXJlQXNzZXRJZAAAABFkZWNpbWFsc011bHRQcmljZQkBAAAAEGdlbmVyaWNDYWxjUHJpY2UAAAAFBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAALYmFzZUFzc2V0SWQAAAAAAAAAAAAFAAAADHNoYXJlQXNzZXRJZAUAAAARZGVjaW1hbHNNdWx0UHJpY2UBAAAABnN1Ym1pdAAAAAUAAAANb3BlcmF0aW9uVHlwZQAAAAFpAAAACGluQW1vdW50AAAACWluQXNzZXRJZAAAAAxiYXNlQXNzZXRTdHIEAAAACmluQXNzZXRTdHIJAAJYAAAAAQUAAAAJaW5Bc3NldElkBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAIY2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADXNoYXJlQXNzZXRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEFAAAADXNoYXJlQXNzZXRTdHIEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAAAlsaW1pdHNLRVkJAQAAABJrZXlMaW1pdHNSZW1haW5pbmcAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAObGltaXRzQ2ZnQXJyYXkJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAACWxpbWl0c0tFWQUAAAADU0VQBAAAABNsaW1pdHNSZW1haW5pbmdCYXNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAObGltaXRzQ2ZnQXJyYXkFAAAAFklkeExpbWl0c1JlbWFpbmluZ0Jhc2UEAAAAFGxpbWl0c1JlbWFpbmluZ1NoYXJlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAObGltaXRzQ2ZnQXJyYXkFAAAAF0lkeExpbWl0c1JlbWFpbmluZ1NoYXJlBAAAAAxpc1B1dEJsb2NrZWQJAQAAABBnZXRCb29sZWFuT3JGYWlsAAAAAQkBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIDBQAAAAxpc1B1dEJsb2NrZWQJAAACAAAAAQIAAAAYcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkBAAAAA9vcGVyYXRpb25zTXV0ZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADmtleVRvcHVwTXV0ZXh0AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAAAAAAAAADCQAAZgAAAAIJAABkAAAAAgUAAAAPb3BlcmF0aW9uc011dGV4AAAAAAAAAAA8BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAuc3VibWl0IG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQgYnkgdG9wdXAgbWFuYWdlcgQAAAAJZGlmZlR1cGxlCQEAAAATY2FsY1RvdGFsTG9ja2VkRGlmZgAAAAgCAAAABnN1Ym1pdAUAAAANb3BlcmF0aW9uVHlwZQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAAAAAAAAAAAAAAAAAAAAAFAAAACGluQW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAAMc2hhcmVBc3NldElkBAAAABZsaW1pdHNSZW1haW5pbmdCYXNlTmV3CQAAZQAAAAIFAAAAE2xpbWl0c1JlbWFpbmluZ0Jhc2UJAAGRAAAAAggFAAAACWRpZmZUdXBsZQAAAAJfMgUAAAAUSWR4VG90YWxMb2NrZWRJbkJhc2UEAAAAF2xpbWl0c1JlbWFpbmluZ1NoYXJlTmV3CQAAZQAAAAIFAAAAFGxpbWl0c1JlbWFpbmluZ1NoYXJlCQABkQAAAAIIBQAAAAlkaWZmVHVwbGUAAAACXzIFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAFmxpbWl0c1JlbWFpbmluZ0Jhc2VOZXcGCQAAZgAAAAIAAAAAAAAAAAAFAAAAF2xpbWl0c1JlbWFpbmluZ1NoYXJlTmV3CQEAAAAXZmFpbFN1Ym1pdExpbWl0c0V4Y2VlZHMAAAAEBQAAABNsaW1pdHNSZW1haW5pbmdCYXNlBQAAABRsaW1pdHNSZW1haW5pbmdTaGFyZQUAAAAWbGltaXRzUmVtYWluaW5nQmFzZU5ldwUAAAAXbGltaXRzUmVtYWluaW5nU2hhcmVOZXcEAAAAD3RvcFVwQ3VycmVudElkeAkBAAAADGdldEludE9yRmFpbAAAAAEJAQAAABJrZXlUb3BVcEN1cnJlbnRJZHgAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5T3BlcmF0aW9uAAAABAUAAAANb3BlcmF0aW9uVHlwZQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAAA1kYXRhT3BlcmF0aW9uAAAACQIAAAAHUEVORElORwUAAAAIaW5BbW91bnQAAAAAAAAAAAAAAAAAAAAAAAAFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAAAAAAAAAAAAAAAAAAAJAABkAAAAAgUAAAAPdG9wVXBDdXJyZW50SWR4AAAAAAAAAAABBQAAAANuaWwJAQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwIAAAAJSU5DUkVNRU5UCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cggFAAAACWRpZmZUdXBsZQAAAAJfMQkBAAAAFlRvdGFsTG9ja2VkU3RyaW5nRW50cnkAAAADAgAAAAlJTkNSRU1FTlQJAQAAABRrZXlUb3RhbExvY2tlZEJ5VXNlcgAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cggFAAAACWRpZmZUdXBsZQAAAAJfMgkBAAAAGlJlbWFpbmluZ0xpbWl0c1N0cmluZ0VudHJ5AAAAAwUAAAAJbGltaXRzS0VZBQAAABZsaW1pdHNSZW1haW5pbmdCYXNlTmV3BQAAABdsaW1pdHNSZW1haW5pbmdTaGFyZU5ldwEAAAAHZXhlY3V0ZQAAAAQAAAANb3BlcmF0aW9uVHlwZQAAAAxiYXNlQXNzZXRTdHIAAAAOdXNlckFkZHJlc3NTdHIAAAANc3VibWl0VHhJZFN0cgQAAAALdXNlckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA1hc3NldENmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAxzaGFyZUFzc2V0SWQJAAJZAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABJJZHhDZmdTaGFyZUFzc2V0SWQEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAABFkZWNpbWFsc011bHRQcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADG9wZXJhdGlvbktleQkBAAAADGtleU9wZXJhdGlvbgAAAAQFAAAADW9wZXJhdGlvblR5cGUFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANc3VibWl0VHhJZFN0cgQAAAAOb3BlcmF0aW9uQXJyYXkJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAADG9wZXJhdGlvbktleQUAAAADU0VQBAAAAAZzdGF0dXMJAAGRAAAAAgUAAAAOb3BlcmF0aW9uQXJyYXkFAAAADUlkeE9wZXJTdGF0dXMEAAAACGluQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAOb3BlcmF0aW9uQXJyYXkFAAAAD0lkeE9wZXJJbkFtb3VudAQAAAAOdG9wdXBVbmxvY2tJZHgJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5vcGVyYXRpb25BcnJheQUAAAAVSWR4T3BlclRvcHVwVW5sb2NrSWR4BAAAAAxjdXJyVG9wVXBJZHgJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAASa2V5VG9wVXBDdXJyZW50SWR4AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAADnByaWNlQnlUb3BVcElkCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEmtleVByaWNlQnlUb3BVcElkeAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAxjdXJyVG9wVXBJZHgDCQEAAAACIT0AAAACBQAAAAZzdGF0dXMCAAAAB1BFTkRJTkcJAQAAAA5mYWlsRXhlY3V0ZUdldAAAAAUCAAAAFVN0YXR1cyBpcyBub3QgUEVORElORwUAAAAMYmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANc3VibWl0VHhJZFN0cgUAAAANb3BlcmF0aW9uVHlwZQMJAABmAAAAAgUAAAAOdG9wdXBVbmxvY2tJZHgFAAAADGN1cnJUb3BVcElkeAkBAAAADmZhaWxFeGVjdXRlR2V0AAAABQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJT3BlckxvY2tbCQABpAAAAAEFAAAADnRvcHVwVW5sb2NrSWR4AgAAAARdID4gCQABpAAAAAEFAAAADGN1cnJUb3BVcElkeAUAAAAMYmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANc3VibWl0VHhJZFN0cgUAAAANb3BlcmF0aW9uVHlwZQQAAAAJZGlmZlR1cGxlCQEAAAATY2FsY1RvdGFsTG9ja2VkRGlmZgAAAAgCAAAAB2V4ZWN1dGUFAAAADW9wZXJhdGlvblR5cGUFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA5wcmljZUJ5VG9wVXBJZAUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAACGluQW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAAMc2hhcmVBc3NldElkBAAAAAlvdXRBbW91bnQIBQAAAAlkaWZmVHVwbGUAAAACXzMEAAAAD291dFRyYW5zZmVyRGF0YQMJAAAAAAAAAggFAAAACWRpZmZUdXBsZQAAAAJfNAUAAAALYmFzZUFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAACW91dEFtb3VudAUAAAALYmFzZUFzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwUAAAAJb3V0QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAAPb3V0VHJhbnNmZXJEYXRhCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxvcGVyYXRpb25LZXkJAQAAABxkYXRhT3BlcmF0aW9uRXhlY3V0aW9uVXBkYXRlAAAABAUAAAAOb3BlcmF0aW9uQXJyYXkCAAAACEZJTklTSEVEBQAAAA5wcmljZUJ5VG9wVXBJZAUAAAAJb3V0QW1vdW50CQEAAAAWVG90YWxMb2NrZWRTdHJpbmdFbnRyeQAAAAMCAAAACURFQ1JFTUVOVAkBAAAADmtleVRvdGFsTG9ja2VkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIIBQAAAAlkaWZmVHVwbGUAAAACXzEJAQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwIAAAAJREVDUkVNRU5UCQEAAAAUa2V5VG90YWxMb2NrZWRCeVVzZXIAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIIBQAAAAlkaWZmVHVwbGUAAAACXzIBAAAAG3ByaXZhdGVDdXJyZW50U3lzUGFyYW1zUkVTVAAAAAEAAAAMYmFzZUFzc2V0U3RyBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAACGNmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAA1zaGFyZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdTaGFyZUFzc2V0SWQEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABBQAAAA1zaGFyZUFzc2V0U3RyBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAACHN5c1N0YXRlCQEAAAAJY2FsY1ByaWNlAAAABAUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAFGAAAAAYJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAVwcmljZQgFAAAACHN5c1N0YXRlAAAAAl8xCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQYmFzZUFzc2V0QmFsYW5jZQgFAAAACHN5c1N0YXRlAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAACLTEIBQAAAAhzeXNTdGF0ZQAAAAJfMwkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE2Jhc2VBc3NldEJhbGFuY2VXQ08IBQAAAAhzeXNTdGF0ZQAAAAJfNAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADXNoYXJlRW1pc3Npb24IBQAAAAhzeXNTdGF0ZQAAAAJfNQAAAAkAAAABaQEAAAASYWRtaW5SZWdpc3RlckFzc2V0AAAADQAAAAxiYXNlQXNzZXRTdHIAAAAOc2hhcmVBc3NldE5hbWUAAAAPc2hhcmVBc3NldERlc2NyAAAAEGdldERlbGF5aW5CbG9ja3MAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwAAAApzdGFydFByaWNlAAAAFXRvcHVwSW50ZXJ2YWxJbkJsb2NrcwAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAAAABN0b3B1cE1hbmFnZXJBZGRyZXNzAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgAAAAVc3VibWl0TGltaXRzQmFzZVJlc2V0AAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4AAAAFnN1Ym1pdExpbWl0c1NoYXJlUmVzZXQEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAIZGVjaW1hbHMICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAC2Jhc2VBc3NldElkAAAACGRlY2ltYWxzBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABFkZWNpbWFsc011bHRQcmljZQkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gEAAAAGHRvcHVwTWF4TmVnYXRpdmVQZXJjZW50cwkAAGsAAAADBQAAABR0b3B1cE1heE5lZ2F0aXZlUGFydAAAAAAAAAAAZAUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAAQYmFzZUFzc2V0QmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAtiYXNlQXNzZXRJZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQDCQAAAAAAAAIFAAAAEGJhc2VBc3NldEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAQlAAAAAQUAAAAEdGhpcwIAAAAiIG11c3QgaGF2ZSBhbnkgaW5pdGlhbCBiYWxhbmNlIG9mIAUAAAAMYmFzZUFzc2V0U3RyAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQAAAgAAAAEJAAEsAAAAAgUAAAAMYmFzZUFzc2V0U3RyAgAAABwgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkAwkBAAAAAiE9AAAAAgkABCUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAAAgAAAAECAAAAHmludmFsaWQgc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwMJAQAAAAIhPQAAAAIJAAQlAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwkAAAIAAAABAgAAABtpbnZhbGlkIHRvcHVwTWFuYWdlckFkZHJlc3MDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEGdldERlbGF5aW5CbG9ja3MJAAACAAAAAQkAASwAAAACAgAAABlpbnZhbGlkIGdldERlbGF5aW5CbG9ja3M9CQABpAAAAAEFAAAAEGdldERlbGF5aW5CbG9ja3MDAwkAAGcAAAACAAAAAAAAAAAABQAAABh0b3B1cE1heE5lZ2F0aXZlUGVyY2VudHMGCQAAZwAAAAIFAAAAGHRvcHVwTWF4TmVnYXRpdmVQZXJjZW50cwAAAAAAAAAAYwkAAAIAAAABAgAAACZpbnZhbGlkIHRvcHVwTWF4TmVnYXRpdmVQYXJ0IHBhcmFtZXRlcgQAAAAPc2hhcmVJbml0QW1vdW50CQEAAAARY29udmVydEJhc2UyU2hhcmUAAAADBQAAABBiYXNlQXNzZXRCYWxhbmNlBQAAAApzdGFydFByaWNlBQAAABFkZWNpbWFsc011bHRQcmljZQQAAAAVc2hhcmVBc3NldElzc3VlQWN0aW9uCQAEQgAAAAUFAAAADnNoYXJlQXNzZXROYW1lBQAAAA9zaGFyZUFzc2V0RGVzY3IFAAAAD3NoYXJlSW5pdEFtb3VudAUAAAAIZGVjaW1hbHMGBAAAAAxzaGFyZUFzc2V0SWQJAAQ4AAAAAQUAAAAVc2hhcmVBc3NldElzc3VlQWN0aW9uBAAAAA1zaGFyZUFzc2V0U3RyCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAQAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABpAAAAAEFAAAAE2ludGVybmFsQmFzZUFzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQEAAAAMZGF0YUFzc2V0Q2ZnAAAADAUAAAANc2hhcmVBc3NldFN0cgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAABBnZXREZWxheWluQmxvY2tzBQAAABV0b3B1cEludGVydmFsSW5CbG9ja3MFAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0BQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzBQAAABNzdWJtaXRMaW1pdHNCYXNlTWF4BQAAABVzdWJtaXRMaW1pdHNCYXNlUmVzZXQFAAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4BQAAABZzdWJtaXRMaW1pdHNTaGFyZVJlc2V0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAUAAAAMYmFzZUFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAca2V5TWFwcGluZ3NTaGFyZTJiYXNlQXNzZXRJZAAAAAEFAAAADXNoYXJlQXNzZXRTdHIFAAAADGJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAca2V5TWFwcGluZ3NCYXNlQXNzZXQyc2hhcmVJZAAAAAEFAAAADGJhc2VBc3NldFN0cgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleU5leHRJbnRlcm5hbEFzc2V0SWQAAAAACQAAZAAAAAIFAAAAE2ludGVybmFsQmFzZUFzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAKc3RhcnRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAApzdGFydFByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5VG9wVXBDdXJyZW50SWR4AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAAAAAAAAAJAARMAAAAAgkBAAAAGlJlbWFpbmluZ0xpbWl0c1N0cmluZ0VudHJ5AAAAAwkBAAAAEmtleUxpbWl0c1JlbWFpbmluZwAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABNzdWJtaXRMaW1pdHNCYXNlTWF4BQAAABRzdWJtaXRMaW1pdHNTaGFyZU1heAkABEwAAAACBQAAABVzaGFyZUFzc2V0SXNzdWVBY3Rpb24FAAAAA25pbAAAAAFpAQAAAAtzaHV0ZG93blB1dAAAAAEAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWaW50ZXJuYWxCYXNlQXNzZXRJZFN0cgkAAaQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkBAAAAA5iYXNlQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABBQAAABZpbnRlcm5hbEJhc2VBc3NldElkU3RyAwkAAGYAAAACAAAAAAAAAAABCQABMQAAAAEFAAAADmJhc2VBc3NldElkU3RyCQAAAgAAAAECAAAAG2ludmFsaWQgaW50ZXJuYWxCYXNlQXNzZXRJZAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAAAgAAAAECAAAADWFjY2VzcyBkZW5pZWQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABdrZXlTaHV0ZG93blB1dE9wZXJhdGlvbgAAAAEJAAGkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAYFAAAAA25pbAAAAAFpAQAAAAlzdWJtaXRQdXQAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACGluQW1vdW50CAUAAAADcG10AAAABmFtb3VudAQAAAAJaW5Bc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGJhc2VBc3NldFN0cgkAAlgAAAABBQAAAAlpbkFzc2V0SWQJAQAAAAZzdWJtaXQAAAAFAgAAAAFQBQAAAAFpBQAAAAhpbkFtb3VudAUAAAAJaW5Bc3NldElkBQAAAAxiYXNlQXNzZXRTdHIAAAABaQEAAAAJc3VibWl0R2V0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhpbkFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAACWluQXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA1zaGFyZUFzc2V0U3RyCQACWAAAAAEFAAAACWluQXNzZXRJZAQAAAAMYmFzZUFzc2V0U3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAHGtleU1hcHBpbmdzU2hhcmUyYmFzZUFzc2V0SWQAAAABBQAAAA1zaGFyZUFzc2V0U3RyCQEAAAAGc3VibWl0AAAABQIAAAABRwUAAAABaQUAAAAIaW5BbW91bnQFAAAACWluQXNzZXRJZAUAAAAMYmFzZUFzc2V0U3RyAAAAAWkBAAAACmV4ZWN1dGVQdXQAAAADAAAADGJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAA1zdWJtaXRUeElkU3RyCQEAAAAHZXhlY3V0ZQAAAAQCAAAAAVAFAAAADGJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADXN1Ym1pdFR4SWRTdHIAAAABaQEAAAAKZXhlY3V0ZUdldAAAAAMAAAAMYmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyAAAADXN1Ym1pdFR4SWRTdHIJAQAAAAdleGVjdXRlAAAABAIAAAABRwUAAAAMYmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANc3VibWl0VHhJZFN0cgAAAAFpAQAAAA9vcGVyYXRpb25zTXV0ZXgAAAABAAAADGJhc2VBc3NldFN0cgQAAAANYXNzZXRDZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAWdG9wVXBNYW5hZ2VyQWRkcmVzc1N0cgkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABlJZHhDZmdUb3B1cE1hbmFnZXJBZGRyZXNzBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQEAAAAUZmFpbFRvcHVwTWFuYWdlck9ubHkAAAABBQAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQAETAAAAAIJAQAAABJUb3B1cE11dGV4SW50RW50cnkAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAGaGVpZ2h0BQAAAANuaWwAAAABaQEAAAAMdG9wVXBCYWxhbmNlAAAAAgAAAAxiYXNlQXNzZXRTdHIAAAAGYW1vdW50BAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADWFzc2V0Q2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAJcHJpY2VNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAADWJvdGhBc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzBAAAABV0b3B1cEludGVydmFsSW5CbG9ja3MJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABtJZHhDZmdUb3B1cEludGVydmFsSW5CbG9ja3MEAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAaSWR4Q2ZnVG9wdXBNYXhOZWdhdGl2ZVBhcnQEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAABZ0b3BVcE1hbmFnZXJBZGRyZXNzU3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAGUlkeENmZ1RvcHVwTWFuYWdlckFkZHJlc3MEAAAAEnRvcFVwQ3VycmVudElkeEtFWQkBAAAAEmtleVRvcFVwQ3VycmVudElkeAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAAAxwcmV2VG9wVXBJZHgJAQAAAAxnZXRJbnRPckZhaWwAAAABBQAAABJ0b3BVcEN1cnJlbnRJZHhLRVkEAAAAD2N1cnJlbnRUb3BVcElkeAkAAGQAAAACBQAAAAxwcmV2VG9wVXBJZHgAAAAAAAAAAAEEAAAABXZhbGlkAwkAAGYAAAACBQAAAAZhbW91bnQAAAAAAAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkAwkBAAAAAiE9AAAAAgUAAAALYmFzZUFzc2V0SWQFAAAACnBtdEFzc2V0SWQJAAACAAAAAQIAAAA+YXR0YWNoZWQgcGF5bWVudCdzIGFzc2V0IGlkIGlzIE5PVCBtYXRjaGVkIHBhc3NlZCBiYXNlQXNzZXRTdHIDCQAAZgAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAgb25seSBvbmUgcGF5bWVudCBjYW4gYmUgYXR0YWNoZWQDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAGYW1vdW50CQAAAgAAAAECAAAAPWF0dGFjaGVkIHBheW1lbnQuYW1vdW50IGlzIE5PVCBtYXRjaGVkIHBhc3NlZCBhbW91bnQgYXJndW1lbnQGAwkAAGYAAAACAAAAAAAAAAAABQAAAAZhbW91bnQEAAAAC2Jhc2VCYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAC2Jhc2VBc3NldElkBAAAAA1hbGxvd2VkQW1vdW50CQAAawAAAAMFAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0BQAAAAtiYXNlQmFsYW5jZQUAAAANYm90aEFzc2V0TXVsdAMJAABmAAAAAgkBAAAAAS0AAAABBQAAAAZhbW91bnQFAAAADWFsbG93ZWRBbW91bnQJAAACAAAAAQkAASwAAAACAgAAAC90b3B1cCBuZWdhdGl2ZSBhbW91bnQgY291bGRuJ3QgYmUgZ3JlYXRlciB0aGFuIAkAAaQAAAABBQAAAA1hbGxvd2VkQW1vdW50BgkAAAIAAAABAgAAABp6ZXJvIGFtb3VudCBpcyBub3QgYWxsb3dlZAQAAAASdG9wVXBMYXN0SGVpZ2h0S0VZCQEAAAASa2V5VG9wVXBMYXN0SGVpZ2h0AAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA90b3BVcExhc3RIZWlnaHQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAASdG9wVXBMYXN0SGVpZ2h0S0VZAAAAAAAAAAAAAwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAFnRvcFVwTWFuYWdlckFkZHJlc3NTdHIJAQAAABRmYWlsVG9wdXBNYW5hZ2VyT25seQAAAAEFAAAAFnRvcFVwTWFuYWdlckFkZHJlc3NTdHIDCQEAAAABIQAAAAEFAAAABXZhbGlkCQAAAgAAAAECAAAAEXZhbGlkYXRpb24gZmFpbGVkAwkAAGYAAAACBQAAABV0b3B1cEludGVydmFsSW5CbG9ja3MJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA90b3BVcExhc3RIZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADDEgdG9wdXAgcGVyIAkAAaQAAAABBQAAABV0b3B1cEludGVydmFsSW5CbG9ja3MCAAAAKCBibG9ja3MgZnJvbSB0aGUgc2FtZSBhZGRyZXNzIGlzIGFsbG93ZWQEAAAABXByaWNlCAkBAAAAEGdlbmVyaWNDYWxjUHJpY2UAAAAFBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAALYmFzZUFzc2V0SWQFAAAABmFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAAlwcmljZU11bHQAAAACXzEEAAAACWRpZmZUdXBsZQkBAAAAE2NhbGNUb3RhbExvY2tlZERpZmYAAAAIAgAAAAV0b3B1cAIAAAAABQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAFcHJpY2UFAAAACXByaWNlTXVsdAAAAAAAAAAAAAUAAAALYmFzZUFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAQAAAAOdG9wdXBUb3RhbERpZmYIBQAAAAlkaWZmVHVwbGUAAAACXzEEAAAAC3ByaWNlQXRoS0VZCQEAAAALa2V5UHJpY2VBVEgAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAMcHJldlByaWNlQVRICQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAC3ByaWNlQXRoS0VZAAAAAAAAAAAACQAETgAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleVByaWNlQnlUb3BVcElkeAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA9jdXJyZW50VG9wVXBJZHgFAAAABXByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJ0b3BVcEN1cnJlbnRJZHhLRVkFAAAAD2N1cnJlbnRUb3BVcElkeAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALcHJpY2VBdGhLRVkDCQAAZgAAAAIFAAAABXByaWNlBQAAAAxwcmV2UHJpY2VBVEgFAAAABXByaWNlBQAAAAxwcmV2UHJpY2VBVEgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEnRvcFVwTGFzdEhlaWdodEtFWQUAAAAGaGVpZ2h0BQAAAANuaWwJAQAAABZUb3RhbExvY2tlZFN0cmluZ0VudHJ5AAAAAwIAAAAJREVDUkVNRU5UCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdG9wdXBUb3RhbERpZmYJAQAAABJUb3B1cE11dGV4SW50RW50cnkAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAAAAAAAAAkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZUFzc2V0SWQJAAGRAAAAAgUAAAAOdG9wdXBUb3RhbERpZmYFAAAAFUlkeFRvdGFsTG9ja2VkSW5TaGFyZQkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQJAQAAAAEtAAAAAQkAAZEAAAACBQAAAA50b3B1cFRvdGFsRGlmZgUAAAAWSWR4VG90YWxMb2NrZWRPdXRTaGFyZQYDCQAAZgAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAQAAAAEtAAAAAQUAAAAGYW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAABaQEAAAAUY3VycmVudFN5c1BhcmFtc1JFU1QAAAABAAAADGJhc2VBc3NldFN0cgQAAAANc3lzU3RhdGVUdXBsZQkBAAAAG3ByaXZhdGVDdXJyZW50U3lzUGFyYW1zUkVTVAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAFcHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMQAAAAV2YWx1ZQQAAAARZGVjaW1hbHNNdWx0UHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMgAAAAV2YWx1ZQQAAAAQYmFzZUFzc2V0QmFsYW5jZQgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl8zAAAABXZhbHVlBAAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfNAAAAAV2YWx1ZQQAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl81AAAABXZhbHVlBAAAAA1zaGFyZUVtaXNzaW9uCAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzYAAAAFdmFsdWUEAAAACHJlc3REYXRhCQAEuQAAAAIJAARMAAAAAgIAAAAZc3RhcnRDdXJyZW50U3lzUGFyYW1zUkVTVAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABBiYXNlQXNzZXRCYWxhbmNlCQAETAAAAAIJAAGkAAAAAQUAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAATYmFzZUFzc2V0QmFsYW5jZVdDTwkABEwAAAACCQABpAAAAAEFAAAADXNoYXJlRW1pc3Npb24JAARMAAAAAgIAAAAXZW5kQ3VycmVudFN5c1BhcmFtc1JFU1QFAAAAA25pbAUAAAADU0VQCQAAAgAAAAEFAAAACHJlc3REYXRhAAAAADi3EUU=", "chainId": 84, "height": 1454597, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F6XVGrwNfKoawn776NeSWJoTD3C1VpuxQxipH3TbBp3F Next: 24w2yoHRoB44ajZVdmtj6acdRUA8Vhf5Xr9niZFGveAw Diff:
Old | New | Differences | |
---|---|---|---|
18 | 18 | func l (m,n,o,p) = throw((((((((("submit operation limits have been reached: " + " remainingBase=") + toString(m)) + " remainingShare=") + toString(n)) + " newRemainingBase=") + toString(o)) + " newRemainingShare=") + toString(p))) | |
19 | 19 | ||
20 | 20 | ||
21 | - | func q (r | |
21 | + | func q (r) = throw((("opertion denied: only topUpManager=" + r) + " can send such transactions")) | |
22 | 22 | ||
23 | 23 | ||
24 | - | func | |
24 | + | func s (t,u,v) = fraction(t, u, v) | |
25 | 25 | ||
26 | 26 | ||
27 | - | func w ( | |
27 | + | func w (x,u,v) = fraction(x, v, u) | |
28 | 28 | ||
29 | 29 | ||
30 | - | func | |
30 | + | func y (h) = ("%s%s%s__config__asset__" + h) | |
31 | 31 | ||
32 | 32 | ||
33 | - | func | |
33 | + | func z () = "%s__nextInternalAssetId" | |
34 | 34 | ||
35 | 35 | ||
36 | - | func A ( | |
36 | + | func A (B) = ("%s%s%d__price__last__" + B) | |
37 | 37 | ||
38 | 38 | ||
39 | - | func | |
39 | + | func C (B) = ("%s%s%d__price__ath__" + B) | |
40 | 40 | ||
41 | 41 | ||
42 | - | func | |
42 | + | func D (E,F) = makeString(["%s%s%d%d__price__byTopUpIdx", E, toString(F)], a) | |
43 | 43 | ||
44 | 44 | ||
45 | - | func | |
45 | + | func G (B,H,I) = makeString(["%s%s%d%d%d__price__history", B, toString(H), toString(I)], a) | |
46 | 46 | ||
47 | 47 | ||
48 | - | func | |
48 | + | func J (B) = ("%s%s%d__total__locked__" + B) | |
49 | 49 | ||
50 | 50 | ||
51 | - | func | |
51 | + | func K (E,i) = makeString(["%s%s%d%s__total__locked", E, i], a) | |
52 | 52 | ||
53 | 53 | ||
54 | - | func L ( | |
54 | + | func L (M) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(M)) | |
55 | 55 | ||
56 | 56 | ||
57 | - | func | |
57 | + | func N (h) = ("%s%s%s__mappings__baseAsset2internalId__" + h) | |
58 | 58 | ||
59 | 59 | ||
60 | - | func O ( | |
60 | + | func O (P) = ("%s%s%s__mappings__share2baseAssetId__" + P) | |
61 | 61 | ||
62 | 62 | ||
63 | - | func | |
63 | + | func Q (h) = ("%s%s%s__mappings__baseAsset2shareId__" + h) | |
64 | 64 | ||
65 | 65 | ||
66 | - | func | |
66 | + | func R (E) = ("%s%s%d__shutdown__put__" + E) | |
67 | 67 | ||
68 | 68 | ||
69 | - | func | |
69 | + | func S (E) = ("%s%s%d__shutdown__manager__" + E) | |
70 | 70 | ||
71 | 71 | ||
72 | - | func | |
72 | + | func T (E) = ("%s%s%d__topup__currentIdx__" + E) | |
73 | 73 | ||
74 | 74 | ||
75 | - | func U ( | |
75 | + | func U (B,V) = makeString(["%s%s%s%d%s__topup__last__height", B, V], a) | |
76 | 76 | ||
77 | 77 | ||
78 | - | let V = 1 | |
79 | - | ||
80 | - | let W = 2 | |
81 | - | ||
82 | - | let X = 3 | |
83 | - | ||
84 | - | let Y = 4 | |
85 | - | ||
86 | - | let Z = 5 | |
87 | - | ||
88 | - | let aa = 6 | |
89 | - | ||
90 | - | let ab = 7 | |
91 | - | ||
92 | - | let ac = 8 | |
93 | - | ||
94 | - | let ad = 9 | |
95 | - | ||
96 | - | let ae = 10 | |
97 | - | ||
98 | - | let af = 11 | |
99 | - | ||
100 | - | let ag = 12 | |
101 | - | ||
102 | - | func ah (N,C,ai,aj,ak,al,am,an,ao,ap,aq,ar) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", N, C, toString(ai), toString(aj), toString(ak), toString(al), toString(am), an, toString(ao), toString(ap), toString(aq), toString(ar)], a) | |
78 | + | func W (B) = ("%s%s%d__topup__mutex__" + B) | |
103 | 79 | ||
104 | 80 | ||
105 | - | let as = 1 | |
106 | - | ||
107 | - | let at = 2 | |
108 | - | ||
109 | - | let au = 3 | |
110 | - | ||
111 | - | let av = 4 | |
112 | - | ||
113 | - | func aw (ax,ay,az,aA) = makeString(["%d%d%d%d", toString(ax), toString(ay), toString(az), toString(aA)], a) | |
81 | + | func X (B,Y) = makeString(["%s%s%d%d__topup__history", B, toString(Y)], a) | |
114 | 82 | ||
115 | 83 | ||
116 | - | func | |
84 | + | func Z (B) = ("%s%s%d__limits__remaining__" + B) | |
117 | 85 | ||
118 | 86 | ||
119 | - | func aC (c) = { | |
120 | - | let aD = split(valueOrElse(getString(this, c), aw(0, 0, 0, 0)), a) | |
121 | - | aB(parseIntValue(aD[as]), parseIntValue(aD[at]), parseIntValue(aD[au]), parseIntValue(aD[av])) | |
87 | + | let aa = 1 | |
88 | + | ||
89 | + | let ab = 2 | |
90 | + | ||
91 | + | let ac = 3 | |
92 | + | ||
93 | + | let ad = 4 | |
94 | + | ||
95 | + | let ae = 5 | |
96 | + | ||
97 | + | let af = 6 | |
98 | + | ||
99 | + | let ag = 7 | |
100 | + | ||
101 | + | let ah = 8 | |
102 | + | ||
103 | + | let ai = 9 | |
104 | + | ||
105 | + | let aj = 10 | |
106 | + | ||
107 | + | let ak = 11 | |
108 | + | ||
109 | + | let al = 12 | |
110 | + | ||
111 | + | func am (P,E,an,ao,ap,aq,ar,r,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(an), toString(ao), toString(ap), toString(aq), toString(ar), r, toString(as), toString(at), toString(au), toString(av)], a) | |
112 | + | ||
113 | + | ||
114 | + | let aw = 1 | |
115 | + | ||
116 | + | let ax = 2 | |
117 | + | ||
118 | + | let ay = 3 | |
119 | + | ||
120 | + | let az = 4 | |
121 | + | ||
122 | + | func aA (aB,aC,aD,aE) = makeString(["%d%d%d%d", toString(aB), toString(aC), toString(aD), toString(aE)], a) | |
123 | + | ||
124 | + | ||
125 | + | func aF (aB,aC,aD,aE) = [-1, aB, aC, aD, aE] | |
126 | + | ||
127 | + | ||
128 | + | func aG (c) = { | |
129 | + | let aH = split(valueOrElse(getString(this, c), aA(0, 0, 0, 0)), a) | |
130 | + | aF(parseIntValue(aH[aw]), parseIntValue(aH[ax]), parseIntValue(aH[ay]), parseIntValue(aH[az])) | |
122 | 131 | } | |
123 | 132 | ||
124 | 133 | ||
125 | - | func | |
126 | - | let | |
127 | - | if (( | |
134 | + | func aI (aJ,k,E,u,v,aK,aL,aM) = { | |
135 | + | let aN = (aJ + k) | |
136 | + | if ((aN == "submitP")) | |
128 | 137 | then { | |
129 | - | let | |
130 | - | let | |
131 | - | $Tuple4( | |
138 | + | let aO = aF(0, 0, aK, 0) | |
139 | + | let aP = aO | |
140 | + | $Tuple4(aO, aP, 0, fromBase58String("")) | |
132 | 141 | } | |
133 | - | else if (( | |
142 | + | else if ((aN == "submitG")) | |
134 | 143 | then { | |
135 | - | let | |
136 | - | let | |
137 | - | $Tuple4( | |
144 | + | let aO = aF(aK, 0, 0, 0) | |
145 | + | let aP = aO | |
146 | + | $Tuple4(aO, aP, 0, fromBase58String("")) | |
138 | 147 | } | |
139 | - | else if (( | |
148 | + | else if ((aN == "executeP")) | |
140 | 149 | then { | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | $Tuple4( | |
150 | + | let aQ = w(aK, u, v) | |
151 | + | let aO = aF(0, 0, 0, aQ) | |
152 | + | let aP = aF(0, 0, aK, 0) | |
153 | + | $Tuple4(aO, aP, aQ, aM) | |
145 | 154 | } | |
146 | - | else if (( | |
155 | + | else if ((aN == "executeG")) | |
147 | 156 | then { | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | $Tuple4( | |
157 | + | let aQ = s(aK, u, v) | |
158 | + | let aO = aF(0, aQ, 0, 0) | |
159 | + | let aP = aF(aK, 0, 0, 0) | |
160 | + | $Tuple4(aO, aP, aQ, aL) | |
152 | 161 | } | |
153 | - | else if (( | |
162 | + | else if ((aN == "topup")) | |
154 | 163 | then { | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | $Tuple4( | |
164 | + | let aH = aG(J(E)) | |
165 | + | let aR = aH[ay] | |
166 | + | let aS = aH[aw] | |
167 | + | let aO = aF(aS, (-1 * s(aS, u, v)), aR, (-1 * w(aR, u, v))) | |
168 | + | $Tuple4(aO, nil, 0, fromBase58String("")) | |
160 | 169 | } | |
161 | - | else throw(("Unsupported Type " + | |
170 | + | else throw(("Unsupported Type " + aN)) | |
162 | 171 | } | |
163 | 172 | ||
164 | 173 | ||
165 | - | func | |
166 | - | func | |
167 | - | then ( | |
168 | - | else if (( | |
169 | - | then ( | |
170 | - | else throw(("Unsupported action " + | |
174 | + | func aT (aU,c,aV) = { | |
175 | + | func aW (aX,aY) = if ((aU == "INCREMENT")) | |
176 | + | then (aX + aY) | |
177 | + | else if ((aU == "DECREMENT")) | |
178 | + | then (aX - aY) | |
179 | + | else throw(("Unsupported action " + aU)) | |
171 | 180 | ||
172 | - | let | |
173 | - | StringEntry(c, aw | |
181 | + | let aZ = aG(c) | |
182 | + | StringEntry(c, aA(aW(aZ[aw], aV[aw]), aW(aZ[ax], aV[ax]), aW(aZ[ay], aV[ay]), aW(aZ[az], aV[az]))) | |
174 | 183 | } | |
175 | 184 | ||
176 | 185 | ||
177 | - | func | |
186 | + | func ba (k,E,bb,bc) = makeString(["%s%d%s%s", k, E, bb, bc], a) | |
178 | 187 | ||
179 | 188 | ||
180 | - | let | |
189 | + | let bd = 1 | |
181 | 190 | ||
182 | - | let | |
191 | + | let be = 2 | |
183 | 192 | ||
184 | - | let | |
193 | + | let bf = 3 | |
185 | 194 | ||
186 | - | let | |
195 | + | let bg = 4 | |
187 | 196 | ||
188 | - | let | |
197 | + | let bh = 5 | |
189 | 198 | ||
190 | - | let | |
199 | + | let bi = 6 | |
191 | 200 | ||
192 | - | let | |
201 | + | let bj = 7 | |
193 | 202 | ||
194 | - | let | |
203 | + | let bk = 8 | |
195 | 204 | ||
196 | - | let | |
205 | + | let bl = 9 | |
197 | 206 | ||
198 | - | func | |
207 | + | func bm (bn,bo,u,bp,bq,br,bs,bt,bu) = makeString(["%s%d%d%d%d%d%d%d%d", bn, bo, u, bp, bq, br, bs, bt, bu], a) | |
199 | 208 | ||
200 | 209 | ||
201 | - | func | |
210 | + | func bv (bn,bo,u,bp,bq,br,bs,bt,bw) = bm(bn, toString(bo), toString(u), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bw)) | |
202 | 211 | ||
203 | 212 | ||
204 | - | func | |
213 | + | func bx (by,bz,bA,bB) = bm(bz, by[be], toString(bA), toString(bB), by[bh], by[bi], toString(height), toString(lastBlock.timestamp), by[bl]) | |
205 | 214 | ||
206 | 215 | ||
207 | - | func | |
208 | - | let c = | |
216 | + | func bC (h) = { | |
217 | + | let c = y(h) | |
209 | 218 | split(b(c), a) | |
210 | 219 | } | |
211 | 220 | ||
212 | 221 | ||
213 | - | let | |
222 | + | let bD = 1 | |
214 | 223 | ||
215 | - | let | |
224 | + | let bE = 2 | |
216 | 225 | ||
217 | - | func | |
226 | + | func bF (c,bG,bH) = StringEntry(c, makeString(["%d%d", toString(bG), toString(bH)], a)) | |
218 | 227 | ||
219 | 228 | ||
220 | - | func bD (C,aH,bE,aI,aj) = { | |
221 | - | let aD = aC(H(C)) | |
222 | - | let bF = aD[at] | |
223 | - | let aN = aD[au] | |
224 | - | let bG = assetBalance(this, aH) | |
225 | - | let bH = (((bG + bE) - aN) - bF) | |
226 | - | let bI = aD[av] | |
227 | - | let aO = aD[as] | |
228 | - | let bJ = value(assetInfo(aI)).quantity | |
229 | - | let bK = (bJ + bI) | |
230 | - | if ((0 > bH)) | |
231 | - | then throw(((("baseAssetBalanceCALC < 0: baseAssetBalance=" + toString(bG)) + " baseAssetBalanceCALC=") + toString(bH))) | |
229 | + | func bI (E,bJ) = IntegerEntry(W(E), bJ) | |
230 | + | ||
231 | + | ||
232 | + | func bK (E,Y) = "" | |
233 | + | ||
234 | + | ||
235 | + | func bL (E,aL,bM,aM,ao) = { | |
236 | + | let aH = aG(J(E)) | |
237 | + | let bN = aH[ax] | |
238 | + | let aR = aH[ay] | |
239 | + | let bO = assetBalance(this, aL) | |
240 | + | let bP = (((bO + bM) - aR) - bN) | |
241 | + | let bQ = aH[az] | |
242 | + | let aS = aH[aw] | |
243 | + | let bR = value(assetInfo(aM)).quantity | |
244 | + | if ((0 > bP)) | |
245 | + | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(bO)) + " baseAssetBalanceWCO=") + toString(bP))) | |
232 | 246 | else { | |
233 | - | let | |
234 | - | let | |
235 | - | then | |
236 | - | else fraction( | |
237 | - | $Tuple5( | |
247 | + | let bS = e(A(E)) | |
248 | + | let u = if ((bR == 0)) | |
249 | + | then bS | |
250 | + | else fraction(bP, ao, bR) | |
251 | + | $Tuple5(u, bO, -1, bP, bR) | |
238 | 252 | } | |
239 | 253 | } | |
240 | 254 | ||
241 | 255 | ||
242 | - | func | |
256 | + | func bT (E,aL,aM,ao) = bL(E, aL, 0, aM, ao) | |
243 | 257 | ||
244 | 258 | ||
245 | - | func | |
246 | - | let | |
247 | - | let i = toString( | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | if ( | |
259 | + | func bU (k,bV,aK,bW,h) = { | |
260 | + | let bX = toBase58String(bW) | |
261 | + | let i = toString(bV.caller) | |
262 | + | let aL = fromBase58String(h) | |
263 | + | let bY = bC(h) | |
264 | + | let P = bY[aa] | |
265 | + | let aM = fromBase58String(P) | |
266 | + | let an = parseIntValue(bY[ac]) | |
267 | + | let E = bY[ab] | |
268 | + | let bZ = Z(E) | |
269 | + | let ca = split(b(bZ), a) | |
270 | + | let cb = parseIntValue(ca[bD]) | |
271 | + | let cc = parseIntValue(ca[bE]) | |
272 | + | let cd = d(R(E)) | |
273 | + | if (cd) | |
260 | 274 | then throw("put operation is blocked") | |
261 | 275 | else { | |
262 | - | let bX = aE("submit", k, C, 0, 0, aG, aH, aI) | |
263 | - | let bY = (bU - bX._2[au]) | |
264 | - | let bZ = (bV - bX._2[as]) | |
265 | - | if (if ((0 > bY)) | |
266 | - | then true | |
267 | - | else (0 > bZ)) | |
268 | - | then l(bU, bV, bY, bZ) | |
276 | + | let ce = valueOrElse(getInteger(this, W(E)), 0) | |
277 | + | if (((ce + 60) > height)) | |
278 | + | then throw("submit operations are blocked by topup manager") | |
269 | 279 | else { | |
270 | - | let ca = e(R(C)) | |
271 | - | ((([StringEntry(aW(k, C, i, toBase58String(bO.transactionId)), br("PENDING", aG, 0, 0, height, lastBlock.timestamp, 0, 0, (ca + 1)))] :+ aP("INCREMENT", H(C), bX._1)) :+ aP("INCREMENT", I(C, i), bX._2)) :+ bA(bS, bY, bZ)) | |
280 | + | let cf = aI("submit", k, E, 0, 0, aK, aL, aM) | |
281 | + | let cg = (cb - cf._2[ay]) | |
282 | + | let ch = (cc - cf._2[aw]) | |
283 | + | if (if ((0 > cg)) | |
284 | + | then true | |
285 | + | else (0 > ch)) | |
286 | + | then l(cb, cc, cg, ch) | |
287 | + | else { | |
288 | + | let ci = e(T(E)) | |
289 | + | ((([StringEntry(ba(k, E, i, toBase58String(bV.transactionId)), bv("PENDING", aK, 0, 0, height, lastBlock.timestamp, 0, 0, (ci + 1)))] :+ aT("INCREMENT", J(E), cf._1)) :+ aT("INCREMENT", K(E, i), cf._2)) :+ bF(bZ, cg, ch)) | |
290 | + | } | |
272 | 291 | } | |
273 | 292 | } | |
274 | 293 | } | |
275 | 294 | ||
276 | 295 | ||
277 | - | func | |
278 | - | let | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let | |
290 | - | let | |
291 | - | if (( | |
296 | + | func cj (k,h,i,j) = { | |
297 | + | let bb = addressFromStringValue(i) | |
298 | + | let ck = bC(h) | |
299 | + | let aM = fromBase58String(ck[aa]) | |
300 | + | let E = ck[ab] | |
301 | + | let ao = parseIntValue(ck[ad]) | |
302 | + | let aL = fromBase58String(h) | |
303 | + | let cl = ba(k, E, i, j) | |
304 | + | let cm = split(b(cl), a) | |
305 | + | let bn = cm[bd] | |
306 | + | let aK = parseIntValue(cm[be]) | |
307 | + | let bw = parseIntValue(cm[bl]) | |
308 | + | let cn = e(T(E)) | |
309 | + | let co = e(D(E, cn)) | |
310 | + | if ((bn != "PENDING")) | |
292 | 311 | then f("Status is not PENDING", h, i, j, k) | |
293 | - | else if (( | |
294 | - | then f(((("OperLock[" + toString( | |
312 | + | else if ((bw > cn)) | |
313 | + | then f(((("OperLock[" + toString(bw)) + "] > ") + toString(cn)), h, i, j, k) | |
295 | 314 | else { | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | then [ScriptTransfer( | |
300 | - | else [ | |
301 | - | ((( | |
315 | + | let cf = aI("execute", k, E, co, ao, aK, aL, aM) | |
316 | + | let aQ = cf._3 | |
317 | + | let cp = if ((cf._4 == aL)) | |
318 | + | then [ScriptTransfer(bb, aQ, aL)] | |
319 | + | else [ScriptTransfer(bb, aQ, aM)] | |
320 | + | (((cp :+ StringEntry(cl, bx(cm, "FINISHED", co, aQ))) :+ aT("DECREMENT", J(E), cf._1)) :+ aT("DECREMENT", K(E, i), cf._2)) | |
302 | 321 | } | |
303 | 322 | } | |
304 | 323 | ||
305 | 324 | ||
306 | - | func | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | $Tuple6(IntegerEntry("price", | |
325 | + | func cq (h) = { | |
326 | + | let aL = fromBase58String(h) | |
327 | + | let bY = bC(h) | |
328 | + | let P = bY[aa] | |
329 | + | let aM = fromBase58String(P) | |
330 | + | let an = parseIntValue(bY[ac]) | |
331 | + | let ao = parseIntValue(bY[ad]) | |
332 | + | let E = bY[ab] | |
333 | + | let cr = bT(E, aL, aM, ao) | |
334 | + | $Tuple6(IntegerEntry("price", cr._1), IntegerEntry("decimalsMultPrice", ao), IntegerEntry("baseAssetBalance", cr._2), IntegerEntry("-1", cr._3), IntegerEntry("baseAssetBalanceWCO", cr._4), IntegerEntry("shareEmission", cr._5)) | |
316 | 335 | } | |
317 | 336 | ||
318 | 337 | ||
319 | - | @Callable( | |
320 | - | func adminRegisterAsset (h, | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | if (( | |
338 | + | @Callable(bV) | |
339 | + | func adminRegisterAsset (h,cs,ct,cu,cv,cw,aq,ar,r,as,at,au,av) = { | |
340 | + | let aL = fromBase58String(h) | |
341 | + | let cx = value(assetInfo(aL)).decimals | |
342 | + | let an = pow(10, 0, cx, 0, 0, DOWN) | |
343 | + | let ao = ((100 * 1000) * 1000) | |
344 | + | let cy = fraction(ar, 100, an) | |
345 | + | let bO = assetBalance(this, aL) | |
346 | + | if ((bV.caller != this)) | |
328 | 347 | then throw("permissions denied") | |
329 | - | else if (( | |
348 | + | else if ((bO == 0)) | |
330 | 349 | then throw(((toString(this) + " must have any initial balance of ") + h)) | |
331 | - | else if (isDefined(getString(this, | |
350 | + | else if (isDefined(getString(this, y(h)))) | |
332 | 351 | then throw((h + " has been already registered")) | |
333 | - | else if ((toString(addressFromStringValue( | |
352 | + | else if ((toString(addressFromStringValue(cv)) != cv)) | |
334 | 353 | then throw("invalid shutdownManagerAddress") | |
335 | - | else if ((toString(addressFromStringValue( | |
354 | + | else if ((toString(addressFromStringValue(r)) != r)) | |
336 | 355 | then throw("invalid topupManagerAddress") | |
337 | - | else if ((0 > | |
338 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
339 | - | else if (if ((0 >= | |
356 | + | else if ((0 > cu)) | |
357 | + | then throw(("invalid getDelayinBlocks=" + toString(cu))) | |
358 | + | else if (if ((0 >= cy)) | |
340 | 359 | then true | |
341 | - | else ( | |
360 | + | else (cy >= 99)) | |
342 | 361 | then throw("invalid topupMaxNegativePart parameter") | |
343 | 362 | else { | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | [StringEntry( | |
363 | + | let cz = w(bO, cw, ao) | |
364 | + | let cA = Issue(cs, ct, cz, cx, true) | |
365 | + | let aM = calculateAssetId(cA) | |
366 | + | let P = toBase58String(aM) | |
367 | + | let cB = valueOrElse(getInteger(this, z()), 0) | |
368 | + | let E = toString(cB) | |
369 | + | [StringEntry(y(h), am(P, E, an, ao, cu, aq, ar, r, as, at, au, av)), StringEntry(L(cB), h), StringEntry(N(h), E), StringEntry(O(P), h), StringEntry(Q(h), P), BooleanEntry(R(E), false), StringEntry(S(E), cv), IntegerEntry(z(), (cB + 1)), IntegerEntry(A(E), cw), IntegerEntry(G(E, height, lastBlock.timestamp), cw), IntegerEntry(T(E), 0), bF(Z(E), as, au), cA] | |
351 | 370 | } | |
352 | 371 | } | |
353 | 372 | ||
354 | 373 | ||
355 | 374 | ||
356 | - | @Callable( | |
357 | - | func shutdownPut ( | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | if ((1 > size( | |
375 | + | @Callable(bV) | |
376 | + | func shutdownPut (cB) = { | |
377 | + | let cC = toString(cB) | |
378 | + | let cD = b(L(cB)) | |
379 | + | let cv = b(S(cC)) | |
380 | + | if ((1 > size(cD))) | |
362 | 381 | then throw("invalid internalBaseAssetId") | |
363 | - | else if ((toString( | |
382 | + | else if ((toString(bV.caller) != cv)) | |
364 | 383 | then throw("access denied") | |
365 | - | else [BooleanEntry( | |
384 | + | else [BooleanEntry(R(toString(cB)), true)] | |
366 | 385 | } | |
367 | 386 | ||
368 | 387 | ||
369 | 388 | ||
370 | - | @Callable( | |
389 | + | @Callable(bV) | |
371 | 390 | func submitPut () = { | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let h = toBase58String( | |
376 | - | | |
391 | + | let cE = value(bV.payments[0]) | |
392 | + | let aK = cE.amount | |
393 | + | let bW = value(cE.assetId) | |
394 | + | let h = toBase58String(bW) | |
395 | + | bU("P", bV, aK, bW, h) | |
377 | 396 | } | |
378 | 397 | ||
379 | 398 | ||
380 | 399 | ||
381 | - | @Callable( | |
400 | + | @Callable(bV) | |
382 | 401 | func submitGet () = { | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let h = b( | |
388 | - | | |
402 | + | let cE = value(bV.payments[0]) | |
403 | + | let aK = cE.amount | |
404 | + | let bW = value(cE.assetId) | |
405 | + | let P = toBase58String(bW) | |
406 | + | let h = b(O(P)) | |
407 | + | bU("G", bV, aK, bW, h) | |
389 | 408 | } | |
390 | 409 | ||
391 | 410 | ||
392 | 411 | ||
393 | - | @Callable( | |
394 | - | func executePut (h,i,j) = | |
412 | + | @Callable(bV) | |
413 | + | func executePut (h,i,j) = cj("P", h, i, j) | |
395 | 414 | ||
396 | 415 | ||
397 | 416 | ||
398 | - | @Callable( | |
399 | - | func executeGet (h,i,j) = | |
417 | + | @Callable(bV) | |
418 | + | func executeGet (h,i,j) = cj("G", h, i, j) | |
400 | 419 | ||
401 | 420 | ||
402 | 421 | ||
403 | - | @Callable(bO) | |
404 | - | func topUpBalance (h,cy) = { | |
405 | - | let aH = fromBase58String(h) | |
406 | - | let cc = bx(h) | |
407 | - | let aI = fromBase58String(cc[V]) | |
408 | - | let t = parseIntValue(cc[Y]) | |
409 | - | let cz = parseIntValue(cc[X]) | |
410 | - | let al = parseIntValue(cc[aa]) | |
411 | - | let am = parseIntValue(cc[ab]) | |
412 | - | let C = cc[W] | |
413 | - | let cA = cc[ac] | |
414 | - | let cB = R(C) | |
415 | - | let cC = e(cB) | |
416 | - | let cD = (cC + 1) | |
417 | - | let cE = if ((cy > 0)) | |
422 | + | @Callable(bV) | |
423 | + | func operationsMutex (h) = { | |
424 | + | let ck = bC(h) | |
425 | + | let cF = ck[ah] | |
426 | + | let E = ck[ab] | |
427 | + | if ((toString(bV.caller) != cF)) | |
428 | + | then q(cF) | |
429 | + | else [bI(E, height)] | |
430 | + | } | |
431 | + | ||
432 | + | ||
433 | + | ||
434 | + | @Callable(bV) | |
435 | + | func topUpBalance (h,cG) = { | |
436 | + | let aL = fromBase58String(h) | |
437 | + | let ck = bC(h) | |
438 | + | let aM = fromBase58String(ck[aa]) | |
439 | + | let v = parseIntValue(ck[ad]) | |
440 | + | let cH = parseIntValue(ck[ac]) | |
441 | + | let aq = parseIntValue(ck[af]) | |
442 | + | let ar = parseIntValue(ck[ag]) | |
443 | + | let E = ck[ab] | |
444 | + | let cF = ck[ah] | |
445 | + | let cI = T(E) | |
446 | + | let cJ = e(cI) | |
447 | + | let cK = (cJ + 1) | |
448 | + | let cL = if ((cG > 0)) | |
418 | 449 | then { | |
419 | - | let | |
420 | - | let | |
421 | - | if (( | |
450 | + | let cE = value(bV.payments[0]) | |
451 | + | let cM = value(cE.assetId) | |
452 | + | if ((aL != cM)) | |
422 | 453 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
423 | - | else if ((size( | |
454 | + | else if ((size(bV.payments) > 1)) | |
424 | 455 | then throw("only one payment can be attached") | |
425 | - | else if (( | |
456 | + | else if ((cE.amount != cG)) | |
426 | 457 | then throw("attached payment.amount is NOT matched passed amount argument") | |
427 | 458 | else true | |
428 | 459 | } | |
429 | - | else if ((0 > | |
460 | + | else if ((0 > cG)) | |
430 | 461 | then { | |
431 | - | let | |
432 | - | let | |
433 | - | if ((-( | |
434 | - | then throw((" | |
462 | + | let cN = assetBalance(this, aL) | |
463 | + | let cO = fraction(ar, cN, cH) | |
464 | + | if ((-(cG) > cO)) | |
465 | + | then throw(("topup negative amount couldn't be greater than " + toString(cO))) | |
435 | 466 | else true | |
436 | 467 | } | |
437 | 468 | else throw("zero amount is not allowed") | |
438 | - | let | |
439 | - | let | |
440 | - | if ((toString( | |
441 | - | then | |
442 | - | else if (!( | |
469 | + | let cP = U(E, toString(bV.caller)) | |
470 | + | let cQ = valueOrElse(getInteger(this, cP), 0) | |
471 | + | if ((toString(bV.caller) != cF)) | |
472 | + | then q(cF) | |
473 | + | else if (!(cL)) | |
443 | 474 | then throw("validation failed") | |
444 | - | else if (( | |
445 | - | then throw((("1 topup per " + toString( | |
475 | + | else if ((aq > (height - cQ))) | |
476 | + | then throw((("1 topup per " + toString(aq)) + " blocks from the same address is allowed")) | |
446 | 477 | else { | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | let | |
451 | - | let | |
452 | - | ((([IntegerEntry( | |
453 | - | then | |
454 | - | else | |
455 | - | then [ScriptTransfer( | |
478 | + | let u = bL(E, aL, cG, aM, v)._1 | |
479 | + | let cf = aI("topup", "", E, u, v, 0, aL, aM) | |
480 | + | let cR = cf._1 | |
481 | + | let cS = C(E) | |
482 | + | let cT = valueOrElse(getInteger(this, cS), 0) | |
483 | + | ((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, cK), u), IntegerEntry(cI, cK), IntegerEntry(cS, if ((u > cT)) | |
484 | + | then u | |
485 | + | else cT), IntegerEntry(cP, height)] :+ aT("DECREMENT", J(E), cR)) :+ bI(E, 0)) :+ Burn(aM, cR[aw])) :+ Reissue(aM, -(cR[az]), true)) ++ (if ((0 > cG)) | |
486 | + | then [ScriptTransfer(bV.caller, -(cG), aL)] | |
456 | 487 | else nil)) | |
457 | 488 | } | |
458 | 489 | } | |
459 | 490 | ||
460 | 491 | ||
461 | 492 | ||
462 | - | @Callable( | |
493 | + | @Callable(bV) | |
463 | 494 | func currentSysParamsREST (h) = { | |
464 | - | let | |
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | let | |
470 | - | let | |
471 | - | let | |
472 | - | throw( | |
495 | + | let cU = cq(h) | |
496 | + | let u = cU._1.value | |
497 | + | let ao = cU._2.value | |
498 | + | let bO = cU._3.value | |
499 | + | let cV = cU._4.value | |
500 | + | let bP = cU._5.value | |
501 | + | let bR = cU._6.value | |
502 | + | let cW = makeString(["startCurrentSysParamsREST", toString(u), toString(ao), toString(bO), toString(cV), toString(bP), toString(bR), "endCurrentSysParamsREST"], a) | |
503 | + | throw(cW) | |
473 | 504 | } | |
474 | 505 | ||
475 | 506 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | func b (c) = valueOrErrorMessage(getString(this, c), ("No data for this.key=" + c)) | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func d (c) = valueOrErrorMessage(getBoolean(this, c), ("No data for this.key=" + c)) | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func e (c) = valueOrErrorMessage(getInteger(this, c), ("No data for this.key=" + c)) | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | func f (g,h,i,j,k) = throw(((((((((g + ": baseAssetStr=") + h) + " userAddressStr=") + i) + " submitTxIdStr=") + j) + " operationType=") + k)) | |
16 | 16 | ||
17 | 17 | ||
18 | 18 | func l (m,n,o,p) = throw((((((((("submit operation limits have been reached: " + " remainingBase=") + toString(m)) + " remainingShare=") + toString(n)) + " newRemainingBase=") + toString(o)) + " newRemainingShare=") + toString(p))) | |
19 | 19 | ||
20 | 20 | ||
21 | - | func q (r | |
21 | + | func q (r) = throw((("opertion denied: only topUpManager=" + r) + " can send such transactions")) | |
22 | 22 | ||
23 | 23 | ||
24 | - | func | |
24 | + | func s (t,u,v) = fraction(t, u, v) | |
25 | 25 | ||
26 | 26 | ||
27 | - | func w ( | |
27 | + | func w (x,u,v) = fraction(x, v, u) | |
28 | 28 | ||
29 | 29 | ||
30 | - | func | |
30 | + | func y (h) = ("%s%s%s__config__asset__" + h) | |
31 | 31 | ||
32 | 32 | ||
33 | - | func | |
33 | + | func z () = "%s__nextInternalAssetId" | |
34 | 34 | ||
35 | 35 | ||
36 | - | func A ( | |
36 | + | func A (B) = ("%s%s%d__price__last__" + B) | |
37 | 37 | ||
38 | 38 | ||
39 | - | func | |
39 | + | func C (B) = ("%s%s%d__price__ath__" + B) | |
40 | 40 | ||
41 | 41 | ||
42 | - | func | |
42 | + | func D (E,F) = makeString(["%s%s%d%d__price__byTopUpIdx", E, toString(F)], a) | |
43 | 43 | ||
44 | 44 | ||
45 | - | func | |
45 | + | func G (B,H,I) = makeString(["%s%s%d%d%d__price__history", B, toString(H), toString(I)], a) | |
46 | 46 | ||
47 | 47 | ||
48 | - | func | |
48 | + | func J (B) = ("%s%s%d__total__locked__" + B) | |
49 | 49 | ||
50 | 50 | ||
51 | - | func | |
51 | + | func K (E,i) = makeString(["%s%s%d%s__total__locked", E, i], a) | |
52 | 52 | ||
53 | 53 | ||
54 | - | func L ( | |
54 | + | func L (M) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(M)) | |
55 | 55 | ||
56 | 56 | ||
57 | - | func | |
57 | + | func N (h) = ("%s%s%s__mappings__baseAsset2internalId__" + h) | |
58 | 58 | ||
59 | 59 | ||
60 | - | func O ( | |
60 | + | func O (P) = ("%s%s%s__mappings__share2baseAssetId__" + P) | |
61 | 61 | ||
62 | 62 | ||
63 | - | func | |
63 | + | func Q (h) = ("%s%s%s__mappings__baseAsset2shareId__" + h) | |
64 | 64 | ||
65 | 65 | ||
66 | - | func | |
66 | + | func R (E) = ("%s%s%d__shutdown__put__" + E) | |
67 | 67 | ||
68 | 68 | ||
69 | - | func | |
69 | + | func S (E) = ("%s%s%d__shutdown__manager__" + E) | |
70 | 70 | ||
71 | 71 | ||
72 | - | func | |
72 | + | func T (E) = ("%s%s%d__topup__currentIdx__" + E) | |
73 | 73 | ||
74 | 74 | ||
75 | - | func U ( | |
75 | + | func U (B,V) = makeString(["%s%s%s%d%s__topup__last__height", B, V], a) | |
76 | 76 | ||
77 | 77 | ||
78 | - | let V = 1 | |
79 | - | ||
80 | - | let W = 2 | |
81 | - | ||
82 | - | let X = 3 | |
83 | - | ||
84 | - | let Y = 4 | |
85 | - | ||
86 | - | let Z = 5 | |
87 | - | ||
88 | - | let aa = 6 | |
89 | - | ||
90 | - | let ab = 7 | |
91 | - | ||
92 | - | let ac = 8 | |
93 | - | ||
94 | - | let ad = 9 | |
95 | - | ||
96 | - | let ae = 10 | |
97 | - | ||
98 | - | let af = 11 | |
99 | - | ||
100 | - | let ag = 12 | |
101 | - | ||
102 | - | func ah (N,C,ai,aj,ak,al,am,an,ao,ap,aq,ar) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", N, C, toString(ai), toString(aj), toString(ak), toString(al), toString(am), an, toString(ao), toString(ap), toString(aq), toString(ar)], a) | |
78 | + | func W (B) = ("%s%s%d__topup__mutex__" + B) | |
103 | 79 | ||
104 | 80 | ||
105 | - | let as = 1 | |
106 | - | ||
107 | - | let at = 2 | |
108 | - | ||
109 | - | let au = 3 | |
110 | - | ||
111 | - | let av = 4 | |
112 | - | ||
113 | - | func aw (ax,ay,az,aA) = makeString(["%d%d%d%d", toString(ax), toString(ay), toString(az), toString(aA)], a) | |
81 | + | func X (B,Y) = makeString(["%s%s%d%d__topup__history", B, toString(Y)], a) | |
114 | 82 | ||
115 | 83 | ||
116 | - | func | |
84 | + | func Z (B) = ("%s%s%d__limits__remaining__" + B) | |
117 | 85 | ||
118 | 86 | ||
119 | - | func aC (c) = { | |
120 | - | let aD = split(valueOrElse(getString(this, c), aw(0, 0, 0, 0)), a) | |
121 | - | aB(parseIntValue(aD[as]), parseIntValue(aD[at]), parseIntValue(aD[au]), parseIntValue(aD[av])) | |
87 | + | let aa = 1 | |
88 | + | ||
89 | + | let ab = 2 | |
90 | + | ||
91 | + | let ac = 3 | |
92 | + | ||
93 | + | let ad = 4 | |
94 | + | ||
95 | + | let ae = 5 | |
96 | + | ||
97 | + | let af = 6 | |
98 | + | ||
99 | + | let ag = 7 | |
100 | + | ||
101 | + | let ah = 8 | |
102 | + | ||
103 | + | let ai = 9 | |
104 | + | ||
105 | + | let aj = 10 | |
106 | + | ||
107 | + | let ak = 11 | |
108 | + | ||
109 | + | let al = 12 | |
110 | + | ||
111 | + | func am (P,E,an,ao,ap,aq,ar,r,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", P, E, toString(an), toString(ao), toString(ap), toString(aq), toString(ar), r, toString(as), toString(at), toString(au), toString(av)], a) | |
112 | + | ||
113 | + | ||
114 | + | let aw = 1 | |
115 | + | ||
116 | + | let ax = 2 | |
117 | + | ||
118 | + | let ay = 3 | |
119 | + | ||
120 | + | let az = 4 | |
121 | + | ||
122 | + | func aA (aB,aC,aD,aE) = makeString(["%d%d%d%d", toString(aB), toString(aC), toString(aD), toString(aE)], a) | |
123 | + | ||
124 | + | ||
125 | + | func aF (aB,aC,aD,aE) = [-1, aB, aC, aD, aE] | |
126 | + | ||
127 | + | ||
128 | + | func aG (c) = { | |
129 | + | let aH = split(valueOrElse(getString(this, c), aA(0, 0, 0, 0)), a) | |
130 | + | aF(parseIntValue(aH[aw]), parseIntValue(aH[ax]), parseIntValue(aH[ay]), parseIntValue(aH[az])) | |
122 | 131 | } | |
123 | 132 | ||
124 | 133 | ||
125 | - | func | |
126 | - | let | |
127 | - | if (( | |
134 | + | func aI (aJ,k,E,u,v,aK,aL,aM) = { | |
135 | + | let aN = (aJ + k) | |
136 | + | if ((aN == "submitP")) | |
128 | 137 | then { | |
129 | - | let | |
130 | - | let | |
131 | - | $Tuple4( | |
138 | + | let aO = aF(0, 0, aK, 0) | |
139 | + | let aP = aO | |
140 | + | $Tuple4(aO, aP, 0, fromBase58String("")) | |
132 | 141 | } | |
133 | - | else if (( | |
142 | + | else if ((aN == "submitG")) | |
134 | 143 | then { | |
135 | - | let | |
136 | - | let | |
137 | - | $Tuple4( | |
144 | + | let aO = aF(aK, 0, 0, 0) | |
145 | + | let aP = aO | |
146 | + | $Tuple4(aO, aP, 0, fromBase58String("")) | |
138 | 147 | } | |
139 | - | else if (( | |
148 | + | else if ((aN == "executeP")) | |
140 | 149 | then { | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | $Tuple4( | |
150 | + | let aQ = w(aK, u, v) | |
151 | + | let aO = aF(0, 0, 0, aQ) | |
152 | + | let aP = aF(0, 0, aK, 0) | |
153 | + | $Tuple4(aO, aP, aQ, aM) | |
145 | 154 | } | |
146 | - | else if (( | |
155 | + | else if ((aN == "executeG")) | |
147 | 156 | then { | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | $Tuple4( | |
157 | + | let aQ = s(aK, u, v) | |
158 | + | let aO = aF(0, aQ, 0, 0) | |
159 | + | let aP = aF(aK, 0, 0, 0) | |
160 | + | $Tuple4(aO, aP, aQ, aL) | |
152 | 161 | } | |
153 | - | else if (( | |
162 | + | else if ((aN == "topup")) | |
154 | 163 | then { | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | $Tuple4( | |
164 | + | let aH = aG(J(E)) | |
165 | + | let aR = aH[ay] | |
166 | + | let aS = aH[aw] | |
167 | + | let aO = aF(aS, (-1 * s(aS, u, v)), aR, (-1 * w(aR, u, v))) | |
168 | + | $Tuple4(aO, nil, 0, fromBase58String("")) | |
160 | 169 | } | |
161 | - | else throw(("Unsupported Type " + | |
170 | + | else throw(("Unsupported Type " + aN)) | |
162 | 171 | } | |
163 | 172 | ||
164 | 173 | ||
165 | - | func | |
166 | - | func | |
167 | - | then ( | |
168 | - | else if (( | |
169 | - | then ( | |
170 | - | else throw(("Unsupported action " + | |
174 | + | func aT (aU,c,aV) = { | |
175 | + | func aW (aX,aY) = if ((aU == "INCREMENT")) | |
176 | + | then (aX + aY) | |
177 | + | else if ((aU == "DECREMENT")) | |
178 | + | then (aX - aY) | |
179 | + | else throw(("Unsupported action " + aU)) | |
171 | 180 | ||
172 | - | let | |
173 | - | StringEntry(c, aw | |
181 | + | let aZ = aG(c) | |
182 | + | StringEntry(c, aA(aW(aZ[aw], aV[aw]), aW(aZ[ax], aV[ax]), aW(aZ[ay], aV[ay]), aW(aZ[az], aV[az]))) | |
174 | 183 | } | |
175 | 184 | ||
176 | 185 | ||
177 | - | func | |
186 | + | func ba (k,E,bb,bc) = makeString(["%s%d%s%s", k, E, bb, bc], a) | |
178 | 187 | ||
179 | 188 | ||
180 | - | let | |
189 | + | let bd = 1 | |
181 | 190 | ||
182 | - | let | |
191 | + | let be = 2 | |
183 | 192 | ||
184 | - | let | |
193 | + | let bf = 3 | |
185 | 194 | ||
186 | - | let | |
195 | + | let bg = 4 | |
187 | 196 | ||
188 | - | let | |
197 | + | let bh = 5 | |
189 | 198 | ||
190 | - | let | |
199 | + | let bi = 6 | |
191 | 200 | ||
192 | - | let | |
201 | + | let bj = 7 | |
193 | 202 | ||
194 | - | let | |
203 | + | let bk = 8 | |
195 | 204 | ||
196 | - | let | |
205 | + | let bl = 9 | |
197 | 206 | ||
198 | - | func | |
207 | + | func bm (bn,bo,u,bp,bq,br,bs,bt,bu) = makeString(["%s%d%d%d%d%d%d%d%d", bn, bo, u, bp, bq, br, bs, bt, bu], a) | |
199 | 208 | ||
200 | 209 | ||
201 | - | func | |
210 | + | func bv (bn,bo,u,bp,bq,br,bs,bt,bw) = bm(bn, toString(bo), toString(u), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bw)) | |
202 | 211 | ||
203 | 212 | ||
204 | - | func | |
213 | + | func bx (by,bz,bA,bB) = bm(bz, by[be], toString(bA), toString(bB), by[bh], by[bi], toString(height), toString(lastBlock.timestamp), by[bl]) | |
205 | 214 | ||
206 | 215 | ||
207 | - | func | |
208 | - | let c = | |
216 | + | func bC (h) = { | |
217 | + | let c = y(h) | |
209 | 218 | split(b(c), a) | |
210 | 219 | } | |
211 | 220 | ||
212 | 221 | ||
213 | - | let | |
222 | + | let bD = 1 | |
214 | 223 | ||
215 | - | let | |
224 | + | let bE = 2 | |
216 | 225 | ||
217 | - | func | |
226 | + | func bF (c,bG,bH) = StringEntry(c, makeString(["%d%d", toString(bG), toString(bH)], a)) | |
218 | 227 | ||
219 | 228 | ||
220 | - | func bD (C,aH,bE,aI,aj) = { | |
221 | - | let aD = aC(H(C)) | |
222 | - | let bF = aD[at] | |
223 | - | let aN = aD[au] | |
224 | - | let bG = assetBalance(this, aH) | |
225 | - | let bH = (((bG + bE) - aN) - bF) | |
226 | - | let bI = aD[av] | |
227 | - | let aO = aD[as] | |
228 | - | let bJ = value(assetInfo(aI)).quantity | |
229 | - | let bK = (bJ + bI) | |
230 | - | if ((0 > bH)) | |
231 | - | then throw(((("baseAssetBalanceCALC < 0: baseAssetBalance=" + toString(bG)) + " baseAssetBalanceCALC=") + toString(bH))) | |
229 | + | func bI (E,bJ) = IntegerEntry(W(E), bJ) | |
230 | + | ||
231 | + | ||
232 | + | func bK (E,Y) = "" | |
233 | + | ||
234 | + | ||
235 | + | func bL (E,aL,bM,aM,ao) = { | |
236 | + | let aH = aG(J(E)) | |
237 | + | let bN = aH[ax] | |
238 | + | let aR = aH[ay] | |
239 | + | let bO = assetBalance(this, aL) | |
240 | + | let bP = (((bO + bM) - aR) - bN) | |
241 | + | let bQ = aH[az] | |
242 | + | let aS = aH[aw] | |
243 | + | let bR = value(assetInfo(aM)).quantity | |
244 | + | if ((0 > bP)) | |
245 | + | then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(bO)) + " baseAssetBalanceWCO=") + toString(bP))) | |
232 | 246 | else { | |
233 | - | let | |
234 | - | let | |
235 | - | then | |
236 | - | else fraction( | |
237 | - | $Tuple5( | |
247 | + | let bS = e(A(E)) | |
248 | + | let u = if ((bR == 0)) | |
249 | + | then bS | |
250 | + | else fraction(bP, ao, bR) | |
251 | + | $Tuple5(u, bO, -1, bP, bR) | |
238 | 252 | } | |
239 | 253 | } | |
240 | 254 | ||
241 | 255 | ||
242 | - | func | |
256 | + | func bT (E,aL,aM,ao) = bL(E, aL, 0, aM, ao) | |
243 | 257 | ||
244 | 258 | ||
245 | - | func | |
246 | - | let | |
247 | - | let i = toString( | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | if ( | |
259 | + | func bU (k,bV,aK,bW,h) = { | |
260 | + | let bX = toBase58String(bW) | |
261 | + | let i = toString(bV.caller) | |
262 | + | let aL = fromBase58String(h) | |
263 | + | let bY = bC(h) | |
264 | + | let P = bY[aa] | |
265 | + | let aM = fromBase58String(P) | |
266 | + | let an = parseIntValue(bY[ac]) | |
267 | + | let E = bY[ab] | |
268 | + | let bZ = Z(E) | |
269 | + | let ca = split(b(bZ), a) | |
270 | + | let cb = parseIntValue(ca[bD]) | |
271 | + | let cc = parseIntValue(ca[bE]) | |
272 | + | let cd = d(R(E)) | |
273 | + | if (cd) | |
260 | 274 | then throw("put operation is blocked") | |
261 | 275 | else { | |
262 | - | let bX = aE("submit", k, C, 0, 0, aG, aH, aI) | |
263 | - | let bY = (bU - bX._2[au]) | |
264 | - | let bZ = (bV - bX._2[as]) | |
265 | - | if (if ((0 > bY)) | |
266 | - | then true | |
267 | - | else (0 > bZ)) | |
268 | - | then l(bU, bV, bY, bZ) | |
276 | + | let ce = valueOrElse(getInteger(this, W(E)), 0) | |
277 | + | if (((ce + 60) > height)) | |
278 | + | then throw("submit operations are blocked by topup manager") | |
269 | 279 | else { | |
270 | - | let ca = e(R(C)) | |
271 | - | ((([StringEntry(aW(k, C, i, toBase58String(bO.transactionId)), br("PENDING", aG, 0, 0, height, lastBlock.timestamp, 0, 0, (ca + 1)))] :+ aP("INCREMENT", H(C), bX._1)) :+ aP("INCREMENT", I(C, i), bX._2)) :+ bA(bS, bY, bZ)) | |
280 | + | let cf = aI("submit", k, E, 0, 0, aK, aL, aM) | |
281 | + | let cg = (cb - cf._2[ay]) | |
282 | + | let ch = (cc - cf._2[aw]) | |
283 | + | if (if ((0 > cg)) | |
284 | + | then true | |
285 | + | else (0 > ch)) | |
286 | + | then l(cb, cc, cg, ch) | |
287 | + | else { | |
288 | + | let ci = e(T(E)) | |
289 | + | ((([StringEntry(ba(k, E, i, toBase58String(bV.transactionId)), bv("PENDING", aK, 0, 0, height, lastBlock.timestamp, 0, 0, (ci + 1)))] :+ aT("INCREMENT", J(E), cf._1)) :+ aT("INCREMENT", K(E, i), cf._2)) :+ bF(bZ, cg, ch)) | |
290 | + | } | |
272 | 291 | } | |
273 | 292 | } | |
274 | 293 | } | |
275 | 294 | ||
276 | 295 | ||
277 | - | func | |
278 | - | let | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let | |
290 | - | let | |
291 | - | if (( | |
296 | + | func cj (k,h,i,j) = { | |
297 | + | let bb = addressFromStringValue(i) | |
298 | + | let ck = bC(h) | |
299 | + | let aM = fromBase58String(ck[aa]) | |
300 | + | let E = ck[ab] | |
301 | + | let ao = parseIntValue(ck[ad]) | |
302 | + | let aL = fromBase58String(h) | |
303 | + | let cl = ba(k, E, i, j) | |
304 | + | let cm = split(b(cl), a) | |
305 | + | let bn = cm[bd] | |
306 | + | let aK = parseIntValue(cm[be]) | |
307 | + | let bw = parseIntValue(cm[bl]) | |
308 | + | let cn = e(T(E)) | |
309 | + | let co = e(D(E, cn)) | |
310 | + | if ((bn != "PENDING")) | |
292 | 311 | then f("Status is not PENDING", h, i, j, k) | |
293 | - | else if (( | |
294 | - | then f(((("OperLock[" + toString( | |
312 | + | else if ((bw > cn)) | |
313 | + | then f(((("OperLock[" + toString(bw)) + "] > ") + toString(cn)), h, i, j, k) | |
295 | 314 | else { | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | then [ScriptTransfer( | |
300 | - | else [ | |
301 | - | ((( | |
315 | + | let cf = aI("execute", k, E, co, ao, aK, aL, aM) | |
316 | + | let aQ = cf._3 | |
317 | + | let cp = if ((cf._4 == aL)) | |
318 | + | then [ScriptTransfer(bb, aQ, aL)] | |
319 | + | else [ScriptTransfer(bb, aQ, aM)] | |
320 | + | (((cp :+ StringEntry(cl, bx(cm, "FINISHED", co, aQ))) :+ aT("DECREMENT", J(E), cf._1)) :+ aT("DECREMENT", K(E, i), cf._2)) | |
302 | 321 | } | |
303 | 322 | } | |
304 | 323 | ||
305 | 324 | ||
306 | - | func | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | $Tuple6(IntegerEntry("price", | |
325 | + | func cq (h) = { | |
326 | + | let aL = fromBase58String(h) | |
327 | + | let bY = bC(h) | |
328 | + | let P = bY[aa] | |
329 | + | let aM = fromBase58String(P) | |
330 | + | let an = parseIntValue(bY[ac]) | |
331 | + | let ao = parseIntValue(bY[ad]) | |
332 | + | let E = bY[ab] | |
333 | + | let cr = bT(E, aL, aM, ao) | |
334 | + | $Tuple6(IntegerEntry("price", cr._1), IntegerEntry("decimalsMultPrice", ao), IntegerEntry("baseAssetBalance", cr._2), IntegerEntry("-1", cr._3), IntegerEntry("baseAssetBalanceWCO", cr._4), IntegerEntry("shareEmission", cr._5)) | |
316 | 335 | } | |
317 | 336 | ||
318 | 337 | ||
319 | - | @Callable( | |
320 | - | func adminRegisterAsset (h, | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | if (( | |
338 | + | @Callable(bV) | |
339 | + | func adminRegisterAsset (h,cs,ct,cu,cv,cw,aq,ar,r,as,at,au,av) = { | |
340 | + | let aL = fromBase58String(h) | |
341 | + | let cx = value(assetInfo(aL)).decimals | |
342 | + | let an = pow(10, 0, cx, 0, 0, DOWN) | |
343 | + | let ao = ((100 * 1000) * 1000) | |
344 | + | let cy = fraction(ar, 100, an) | |
345 | + | let bO = assetBalance(this, aL) | |
346 | + | if ((bV.caller != this)) | |
328 | 347 | then throw("permissions denied") | |
329 | - | else if (( | |
348 | + | else if ((bO == 0)) | |
330 | 349 | then throw(((toString(this) + " must have any initial balance of ") + h)) | |
331 | - | else if (isDefined(getString(this, | |
350 | + | else if (isDefined(getString(this, y(h)))) | |
332 | 351 | then throw((h + " has been already registered")) | |
333 | - | else if ((toString(addressFromStringValue( | |
352 | + | else if ((toString(addressFromStringValue(cv)) != cv)) | |
334 | 353 | then throw("invalid shutdownManagerAddress") | |
335 | - | else if ((toString(addressFromStringValue( | |
354 | + | else if ((toString(addressFromStringValue(r)) != r)) | |
336 | 355 | then throw("invalid topupManagerAddress") | |
337 | - | else if ((0 > | |
338 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
339 | - | else if (if ((0 >= | |
356 | + | else if ((0 > cu)) | |
357 | + | then throw(("invalid getDelayinBlocks=" + toString(cu))) | |
358 | + | else if (if ((0 >= cy)) | |
340 | 359 | then true | |
341 | - | else ( | |
360 | + | else (cy >= 99)) | |
342 | 361 | then throw("invalid topupMaxNegativePart parameter") | |
343 | 362 | else { | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | [StringEntry( | |
363 | + | let cz = w(bO, cw, ao) | |
364 | + | let cA = Issue(cs, ct, cz, cx, true) | |
365 | + | let aM = calculateAssetId(cA) | |
366 | + | let P = toBase58String(aM) | |
367 | + | let cB = valueOrElse(getInteger(this, z()), 0) | |
368 | + | let E = toString(cB) | |
369 | + | [StringEntry(y(h), am(P, E, an, ao, cu, aq, ar, r, as, at, au, av)), StringEntry(L(cB), h), StringEntry(N(h), E), StringEntry(O(P), h), StringEntry(Q(h), P), BooleanEntry(R(E), false), StringEntry(S(E), cv), IntegerEntry(z(), (cB + 1)), IntegerEntry(A(E), cw), IntegerEntry(G(E, height, lastBlock.timestamp), cw), IntegerEntry(T(E), 0), bF(Z(E), as, au), cA] | |
351 | 370 | } | |
352 | 371 | } | |
353 | 372 | ||
354 | 373 | ||
355 | 374 | ||
356 | - | @Callable( | |
357 | - | func shutdownPut ( | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | if ((1 > size( | |
375 | + | @Callable(bV) | |
376 | + | func shutdownPut (cB) = { | |
377 | + | let cC = toString(cB) | |
378 | + | let cD = b(L(cB)) | |
379 | + | let cv = b(S(cC)) | |
380 | + | if ((1 > size(cD))) | |
362 | 381 | then throw("invalid internalBaseAssetId") | |
363 | - | else if ((toString( | |
382 | + | else if ((toString(bV.caller) != cv)) | |
364 | 383 | then throw("access denied") | |
365 | - | else [BooleanEntry( | |
384 | + | else [BooleanEntry(R(toString(cB)), true)] | |
366 | 385 | } | |
367 | 386 | ||
368 | 387 | ||
369 | 388 | ||
370 | - | @Callable( | |
389 | + | @Callable(bV) | |
371 | 390 | func submitPut () = { | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let h = toBase58String( | |
376 | - | | |
391 | + | let cE = value(bV.payments[0]) | |
392 | + | let aK = cE.amount | |
393 | + | let bW = value(cE.assetId) | |
394 | + | let h = toBase58String(bW) | |
395 | + | bU("P", bV, aK, bW, h) | |
377 | 396 | } | |
378 | 397 | ||
379 | 398 | ||
380 | 399 | ||
381 | - | @Callable( | |
400 | + | @Callable(bV) | |
382 | 401 | func submitGet () = { | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let h = b( | |
388 | - | | |
402 | + | let cE = value(bV.payments[0]) | |
403 | + | let aK = cE.amount | |
404 | + | let bW = value(cE.assetId) | |
405 | + | let P = toBase58String(bW) | |
406 | + | let h = b(O(P)) | |
407 | + | bU("G", bV, aK, bW, h) | |
389 | 408 | } | |
390 | 409 | ||
391 | 410 | ||
392 | 411 | ||
393 | - | @Callable( | |
394 | - | func executePut (h,i,j) = | |
412 | + | @Callable(bV) | |
413 | + | func executePut (h,i,j) = cj("P", h, i, j) | |
395 | 414 | ||
396 | 415 | ||
397 | 416 | ||
398 | - | @Callable( | |
399 | - | func executeGet (h,i,j) = | |
417 | + | @Callable(bV) | |
418 | + | func executeGet (h,i,j) = cj("G", h, i, j) | |
400 | 419 | ||
401 | 420 | ||
402 | 421 | ||
403 | - | @Callable(bO) | |
404 | - | func topUpBalance (h,cy) = { | |
405 | - | let aH = fromBase58String(h) | |
406 | - | let cc = bx(h) | |
407 | - | let aI = fromBase58String(cc[V]) | |
408 | - | let t = parseIntValue(cc[Y]) | |
409 | - | let cz = parseIntValue(cc[X]) | |
410 | - | let al = parseIntValue(cc[aa]) | |
411 | - | let am = parseIntValue(cc[ab]) | |
412 | - | let C = cc[W] | |
413 | - | let cA = cc[ac] | |
414 | - | let cB = R(C) | |
415 | - | let cC = e(cB) | |
416 | - | let cD = (cC + 1) | |
417 | - | let cE = if ((cy > 0)) | |
422 | + | @Callable(bV) | |
423 | + | func operationsMutex (h) = { | |
424 | + | let ck = bC(h) | |
425 | + | let cF = ck[ah] | |
426 | + | let E = ck[ab] | |
427 | + | if ((toString(bV.caller) != cF)) | |
428 | + | then q(cF) | |
429 | + | else [bI(E, height)] | |
430 | + | } | |
431 | + | ||
432 | + | ||
433 | + | ||
434 | + | @Callable(bV) | |
435 | + | func topUpBalance (h,cG) = { | |
436 | + | let aL = fromBase58String(h) | |
437 | + | let ck = bC(h) | |
438 | + | let aM = fromBase58String(ck[aa]) | |
439 | + | let v = parseIntValue(ck[ad]) | |
440 | + | let cH = parseIntValue(ck[ac]) | |
441 | + | let aq = parseIntValue(ck[af]) | |
442 | + | let ar = parseIntValue(ck[ag]) | |
443 | + | let E = ck[ab] | |
444 | + | let cF = ck[ah] | |
445 | + | let cI = T(E) | |
446 | + | let cJ = e(cI) | |
447 | + | let cK = (cJ + 1) | |
448 | + | let cL = if ((cG > 0)) | |
418 | 449 | then { | |
419 | - | let | |
420 | - | let | |
421 | - | if (( | |
450 | + | let cE = value(bV.payments[0]) | |
451 | + | let cM = value(cE.assetId) | |
452 | + | if ((aL != cM)) | |
422 | 453 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
423 | - | else if ((size( | |
454 | + | else if ((size(bV.payments) > 1)) | |
424 | 455 | then throw("only one payment can be attached") | |
425 | - | else if (( | |
456 | + | else if ((cE.amount != cG)) | |
426 | 457 | then throw("attached payment.amount is NOT matched passed amount argument") | |
427 | 458 | else true | |
428 | 459 | } | |
429 | - | else if ((0 > | |
460 | + | else if ((0 > cG)) | |
430 | 461 | then { | |
431 | - | let | |
432 | - | let | |
433 | - | if ((-( | |
434 | - | then throw((" | |
462 | + | let cN = assetBalance(this, aL) | |
463 | + | let cO = fraction(ar, cN, cH) | |
464 | + | if ((-(cG) > cO)) | |
465 | + | then throw(("topup negative amount couldn't be greater than " + toString(cO))) | |
435 | 466 | else true | |
436 | 467 | } | |
437 | 468 | else throw("zero amount is not allowed") | |
438 | - | let | |
439 | - | let | |
440 | - | if ((toString( | |
441 | - | then | |
442 | - | else if (!( | |
469 | + | let cP = U(E, toString(bV.caller)) | |
470 | + | let cQ = valueOrElse(getInteger(this, cP), 0) | |
471 | + | if ((toString(bV.caller) != cF)) | |
472 | + | then q(cF) | |
473 | + | else if (!(cL)) | |
443 | 474 | then throw("validation failed") | |
444 | - | else if (( | |
445 | - | then throw((("1 topup per " + toString( | |
475 | + | else if ((aq > (height - cQ))) | |
476 | + | then throw((("1 topup per " + toString(aq)) + " blocks from the same address is allowed")) | |
446 | 477 | else { | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | let | |
451 | - | let | |
452 | - | ((([IntegerEntry( | |
453 | - | then | |
454 | - | else | |
455 | - | then [ScriptTransfer( | |
478 | + | let u = bL(E, aL, cG, aM, v)._1 | |
479 | + | let cf = aI("topup", "", E, u, v, 0, aL, aM) | |
480 | + | let cR = cf._1 | |
481 | + | let cS = C(E) | |
482 | + | let cT = valueOrElse(getInteger(this, cS), 0) | |
483 | + | ((((([IntegerEntry(A(E), u), IntegerEntry(G(E, height, lastBlock.timestamp), u), IntegerEntry(D(E, cK), u), IntegerEntry(cI, cK), IntegerEntry(cS, if ((u > cT)) | |
484 | + | then u | |
485 | + | else cT), IntegerEntry(cP, height)] :+ aT("DECREMENT", J(E), cR)) :+ bI(E, 0)) :+ Burn(aM, cR[aw])) :+ Reissue(aM, -(cR[az]), true)) ++ (if ((0 > cG)) | |
486 | + | then [ScriptTransfer(bV.caller, -(cG), aL)] | |
456 | 487 | else nil)) | |
457 | 488 | } | |
458 | 489 | } | |
459 | 490 | ||
460 | 491 | ||
461 | 492 | ||
462 | - | @Callable( | |
493 | + | @Callable(bV) | |
463 | 494 | func currentSysParamsREST (h) = { | |
464 | - | let | |
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | let | |
470 | - | let | |
471 | - | let | |
472 | - | throw( | |
495 | + | let cU = cq(h) | |
496 | + | let u = cU._1.value | |
497 | + | let ao = cU._2.value | |
498 | + | let bO = cU._3.value | |
499 | + | let cV = cU._4.value | |
500 | + | let bP = cU._5.value | |
501 | + | let bR = cU._6.value | |
502 | + | let cW = makeString(["startCurrentSysParamsREST", toString(u), toString(ao), toString(bO), toString(cV), toString(bP), toString(bR), "endCurrentSysParamsREST"], a) | |
503 | + | throw(cW) | |
473 | 504 | } | |
474 | 505 | ||
475 | 506 |
github/deemru/w8io/169f3d6 200.76 ms ◑