tx · CZpLBavoeneH3HLSnD9uSZ7bVcrixZpQdVx1hGbFCk8v

3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J:  -0.03000000 Waves

2023.10.11 15:41 [2793962] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves

{ "type": 13, "id": "CZpLBavoeneH3HLSnD9uSZ7bVcrixZpQdVx1hGbFCk8v", "fee": 3000000, "feeAssetId": null, "timestamp": 1697028211956, "version": 2, "chainId": 84, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "3x1y2kfKs76R6vo4YxtmqiKvv478WnMDJJve4LiEPRzVyjan1KtBdYEKqUSuVqDBUe4WyrSva9pfJ4QfoxF62HyW", "3zaSiQCMKN9CUz8oRRttsR5Vio9b3UZwhX7C8ZTSffyHZ4bRw97cJ8P6yjDbit4AuxQR98Vv6q8NjD8zPzhCbLEr", "5Sx9FWq3hP4ziH6f82QMiePtKw2xE4mJSz7YXNmBdJP7My8eAtMPxFrmuQQC2FNDhb87V9YnjdiU9pf5UE7X2s9f" ], "script": "base64:BgIzCAISBwoFCAgBAQgSBAoCAQESABIDCgEBEgASABIAEgASABIDCgEIEgQKAggBEgQKAggBXgAJc2VwYXJhdG9yAgJfXwADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUWDYJALYCAQUFTVVMVDYABk1VTFRYOAkAtgIBBQVNVUxUOAAHTVVMVFgxOAkAtgIBAICAkLu61q3wDQAKV0FWRVNJRFNUUgIFV0FWRVMAB1dBVkVTSUQJANkEAQUKV0FWRVNJRFNUUgAJREFZTUlMTElTAIC4mSkACU1BWEJBU0tFVAAJABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAEAGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAACABRJZHhDb250cm9sQ2ZnUnBkRGFwcAADABVJZHhDb250cm9sQ2ZnTWF0aERhcHAABAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAFABVJZHhDb250cm9sQ2ZnUmVzdERhcHAABgAdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAABwAcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAAIABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAkAG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAANAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQCsAgIJAKwCAgkArAICCQCsAgICCm1hbmRhdG9yeSAJAKUIAQUHYWRkcmVzcwIBLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBHWtleUNmZ1gyR25zYnRPZmZlckhlaWdodFN0YXJ0AAIlJXMlc19fY29uZmlnX194Mkduc2J0T2ZmZXJIZWlnaHRTdGFydAEba2V5Q2ZnWDJHbnNidE9mZmVySGVpZ2h0RW5kAAIjJXMlc19fY29uZmlnX194Mkduc2J0T2ZmZXJIZWlnaHRFbmQBEWtleUNvbnRyb2xBZGRyZXNzAAIcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwENa2V5Q29udHJvbENmZwACESVzX19jb250cm9sQ29uZmlnARRyZWFkQ29udHJvbENmZ09yRmFpbAEHY29udHJvbAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUHY29udHJvbAkBDWtleUNvbnRyb2xDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIKY29udHJvbENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmNvbnRyb2xDZmcFA2lkeAkArAICAi1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA9jb250cm9sQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWtleUNvbnRyb2xBZGRyZXNzAAIjM040TlM3ZDRKbzlhNkYxNExpRlVLS1lWZFVra2YyZVA0WngACmNvbnRyb2xDZmcJARRyZWFkQ29udHJvbENmZ09yRmFpbAEFD2NvbnRyb2xDb250cmFjdAAMbWF0aENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUVSWR4Q29udHJvbENmZ01hdGhEYXBwABBuZXV0cmlub0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAPYXVjdGlvbkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAASUkVORVdfU1RBUlRfSEVJR0hUCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAR1rZXlDZmdYMkduc2J0T2ZmZXJIZWlnaHRTdGFydAAAAAAQUkVORVdfRU5EX0hFSUdIVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEba2V5Q2ZnWDJHbnNidE9mZmVySGVpZ2h0RW5kAAAAAQxrZXlCb25kQXNzZXQAAg1ib25kX2Fzc2V0X2lkARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIbJXMlc191c2VyR25zYnRSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAhslc19fbmV1dHJpbm9Db250cmFjdEFkZHJlc3MBFmtleU1hdGhDb250cmFjdEFkZHJlc3MAAhAlc19fbWF0aENvbnRyYWN0ARBrZXlNaW5Mb2NrQW1vdW50AAIRJXNfX21pbkxvY2tBbW91bnQBC2tleUhhbGZMaWZlAAIMJXNfX2hhbGZMaWZlARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICBmFtb3VudAUDbmlsBQlzZXBhcmF0b3IBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIFc3RhcnQFA25pbAUJc2VwYXJhdG9yARVrZXlMb2NrUGFyYW1Vc2VyR25zYnQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIFZ05zYnQFA25pbAUJc2VwYXJhdG9yARlrZXlVc2VyQ29uc2VudGVkVG9YMkduc2J0AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICEmNvbnNlbnRlZFRvWDJHbnNidAUDbmlsBQlzZXBhcmF0b3IBEGtleUhpc3RvcnlSZWNvcmQDBHR5cGULdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAICB2hpc3RvcnkJAMwIAgUEdHlwZQkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAIJANgEAQUEdHhJZAUDbmlsBQlzZXBhcmF0b3IBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAkAuQkCCQDMCAICBCVzJXMJAMwIAgIFc3RhdHMJAMwIAgIRYWN0aXZlVG90YWxMb2NrZWQFA25pbAUJc2VwYXJhdG9yARZrZXlMb2NrUGFyYW1Ub3RhbEduc2J0AAkAuQkCCQDMCAICBCVzJXMJAMwIAgIFc3RhdHMJAMwIAgIQYWN0aXZlVG90YWxHbnNidAUDbmlsBQlzZXBhcmF0b3IBEmtleVN0YXRzTG9ja3NDb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICCmxvY2tzQ291bnQFA25pbAUJc2VwYXJhdG9yARJrZXlTdGF0c1VzZXJzQ291bnQACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgVzdGF0cwkAzAgCAhBhY3RpdmVVc2Vyc0NvdW50BQNuaWwFCXNlcGFyYXRvcgEXa2V5U3RhdHNEZXBvc2l0QW10QnlEYXkBCXRpbWVzdGFtcAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAgVzdGF0cwkAzAgCAg9kZXBvc2l0QW10QnlEYXkJAMwIAgkApAMBBQl0aW1lc3RhbXAFA25pbAUJc2VwYXJhdG9yARhrZXlTdGF0c0RlcG9zaXRBbXRUb3RhbHMACQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICBXN0YXRzCQDMCAICEGRlcG9zaXRBbXRUb3RhbHMFA25pbAUJc2VwYXJhdG9yAQ1rZXlOZXh0UGVyaW9kAAIOJXNfX25leHRQZXJpb2QBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwACFXN1cHBvcnRlZFJld2FyZEFzc2V0cwERa2V5RGVwb3NpdE51bUxhc3QACQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICA2RlcAkAzAgCAgdsYXN0TnVtBQNuaWwFCXNlcGFyYXRvcgEba2V5VXNlclJld2FyZEZyb21EZXBvc2l0TnVtAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhF1c2VyUndkRnJvbURlcE51bQkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQlzZXBhcmF0b3IBFWtleVJld2FyZFBlck5zYnRTdW1BdAIKZGVwb3NpdE51bQN0a24JALkJAgkAzAgCAgQlcyVkCQDMCAICFXJ3ZFBlck5zYnRTdW1CeURlcE51bQkAzAgCCQCkAwEFCmRlcG9zaXROdW0JAMwIAgUDdGtuBQNuaWwFCXNlcGFyYXRvcgEJa2V5UmV3YXJkAgt1c2VyQWRkcmVzcwN0a24JALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIDcndkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFA3RrbgUDbmlsBQlzZXBhcmF0b3IBCmtleUNsYWltZWQCC3VzZXJBZGRyZXNzA3RrbgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgNjbG0JAMwIAgULdXNlckFkZHJlc3MJAMwIAgUDdGtuBQNuaWwFCXNlcGFyYXRvcgEXa2V5Tm90RGlzdHJpYnV0ZWRSZXdhcmQBA3RrbgkAuQkCCQDMCAICBCVzJXMJAMwIAgIObm90RGlzdHJpYnV0ZWQJAMwIAgUDdGtuBQNuaWwFCXNlcGFyYXRvcgEFdG9YMTgCB29yaWdWYWwIb3JpZ011bHQJALwCAwkAtgIBBQdvcmlnVmFsBQdNVUxUWDE4BQhvcmlnTXVsdAEMZ2V0SW50T3JaZXJvAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABDGdldEludE9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsAQxnZXRJbnRPckZhaWwBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFA2tleQkArAICCQCsAgICD01hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDGdldFN0ck9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsAQ90b0FkZHJlc3NPckZhaWwBCmFkZHJlc3NTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQphZGRyZXNzU3RyCQCsAgICIWNvdWxkbid0IHBhcnNlIHBhc3NlZCBhZGRyZXNzU3RyPQUKYWRkcmVzc1N0cgELdG9Bc3NldFZlY3QBCGFzc2V0U3RyAwkAAAIFCGFzc2V0U3RyBQpXQVZFU0lEU1RSBQR1bml0CQDZBAEFCGFzc2V0U3RyAQVhc0ludAEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAETZm9ybWF0SGlzdG9yeVJlY29yZAQJb2xkQW1vdW50CG9sZFN0YXJ0CW5ld0Ftb3VudAhuZXdTdGFydAkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQlvbGRBbW91bnQJAMwIAgkApAMBBQhvbGRTdGFydAkAzAgCCQCkAwEFCW5ld0Ftb3VudAkAzAgCCQCkAwEFCG5ld1N0YXJ0BQNuaWwFCXNlcGFyYXRvcgEYZm9ybWF0Q2xhaW1IaXN0b3J5UmVjb3JkAgR1c2VyDmNsYWltZWRSZXdhcmRzCQC5CQIJAMwIAgIIJXMlZCVkJXMJAMwIAgUEdXNlcgkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgUOY2xhaW1lZFJld2FyZHMFA25pbAUJc2VwYXJhdG9yARJIaXN0b3J5UmVjb3JkRW50cnkHBHR5cGULdXNlckFkZHJlc3MEdHhJZAlvbGRBbW91bnQIb2xkU3RhcnQJbmV3QW1vdW50CG5ld1N0YXJ0CQELU3RyaW5nRW50cnkCCQEQa2V5SGlzdG9yeVJlY29yZAMFBHR5cGUFC3VzZXJBZGRyZXNzBQR0eElkCQETZm9ybWF0SGlzdG9yeVJlY29yZAQFCW9sZEFtb3VudAUIb2xkU3RhcnQFCW5ld0Ftb3VudAUIbmV3U3RhcnQBEUNsYWltSGlzdG9yeUVudHJ5Awt1c2VyQWRkcmVzcwR0eElkDmNsYWltZWRSZXdhcmRzCQELU3RyaW5nRW50cnkCCQEQa2V5SGlzdG9yeVJlY29yZAMCBWNsYWltBQt1c2VyQWRkcmVzcwUEdHhJZAkBGGZvcm1hdENsYWltSGlzdG9yeVJlY29yZAIJAKUIAQULdXNlckFkZHJlc3MFDmNsYWltZWRSZXdhcmRzAQtTdGF0c1Jlc3VsdAQOdG90YWxMb2NrZWRJbmMMbG9ja0NvdW50SW5jDXVzZXJzQ291bnRJbmMNdG90YWxHbnNidEluYwQKbG9ja3NDb3VudAkBDGdldEludE9yWmVybwEJARJrZXlTdGF0c0xvY2tzQ291bnQABAp1c2Vyc0NvdW50CQEMZ2V0SW50T3JaZXJvAQkBEmtleVN0YXRzVXNlcnNDb3VudAAEC3RvdGFsQW1vdW50CQEMZ2V0SW50T3JaZXJvAQkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAQOdG90YWxBbW91bnROZXcJAGQCBQt0b3RhbEFtb3VudAUOdG90YWxMb2NrZWRJbmMECnRvdGFsR25zYnQJAQxnZXRJbnRPckVsc2UCCQEWa2V5TG9ja1BhcmFtVG90YWxHbnNidAAFC3RvdGFsQW1vdW50CQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlTdGF0c0xvY2tzQ291bnQACQBkAgUKbG9ja3NDb3VudAUMbG9ja0NvdW50SW5jCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5U3RhdHNVc2Vyc0NvdW50AAkAZAIFCnVzZXJzQ291bnQFDXVzZXJzQ291bnRJbmMJAMwIAgkBDEludGVnZXJFbnRyeQIJARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAFDnRvdGFsQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtVG90YWxHbnNidAAJAGQCBQp0b3RhbEduc2J0BQ10b3RhbEduc2J0SW5jBQNuaWwFC3RvdGFsQW1vdW50BQ50b3RhbEFtb3VudE5ldwEPTG9ja1BhcmFtc0VudHJ5BAt1c2VyQWRkcmVzcwpuc2J0QW1vdW50BXN0YXJ0C2dOc2J0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtVXNlckFtb3VudAEFC3VzZXJBZGRyZXNzBQpuc2J0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5TG9ja1BhcmFtVXNlckduc2J0AQULdXNlckFkZHJlc3MFC2dOc2J0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQVzdGFydAUDbmlsAQ9nZXRQYXJhbXNPckZhaWwACQCVCgMJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUQbmV1dHJpbm9Db250cmFjdAkBDGtleUJvbmRBc3NldAAJAQxnZXRJbnRPckZhaWwBCQEQa2V5TWluTG9ja0Ftb3VudAAJAQxnZXRJbnRPckZhaWwBCQELa2V5SGFsZkxpZmUAAQxpc0FjdGl2ZVVzZXIBC3VzZXJBZGRyZXNzCQBmAgkBDGdldEludE9yRWxzZQIJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MAAAAAAQ1pc0JvbnVzUGVyaW9kAQFoAwkAZwIFAWgFElJFTkVXX1NUQVJUX0hFSUdIVAkAZwIFEFJFTkVXX0VORF9IRUlHSFQFAWgHARNnZXRVc2VyUGFyYW1zT3JVbml0AQt1c2VyQWRkcmVzcwMJAQxpc0FjdGl2ZVVzZXIBBQt1c2VyQWRkcmVzcwQGYW1vdW50CQEMZ2V0SW50T3JGYWlsAQkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQt1c2VyQWRkcmVzcwkAlgoEBwUGYW1vdW50CQEMZ2V0SW50T3JGYWlsAQkBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBBQt1c2VyQWRkcmVzcwkBDGdldEludE9yRWxzZQIJARVrZXlMb2NrUGFyYW1Vc2VyR25zYnQBBQt1c2VyQWRkcmVzcwUGYW1vdW50BQR1bml0ARNnZXRVc2VyUGFyYW1zT3JGYWlsAQt1c2VyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCsAgIJAKwCAgIFVXNlciAJAKUIAQULdXNlckFkZHJlc3MCDyBpcyBub3QgZGVmaW5lZAASc3VwcG9ydGVkQXNzZXRzU3RyCQEMZ2V0U3RyT3JFbHNlAgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwACAAATc3VwcG9ydGVkQXNzZXRzTGlzdAkAtQkCBRJzdXBwb3J0ZWRBc3NldHNTdHICAV8BCmNhbGNSZXdhcmQFC3VzZXJBZGRyZXNzB2Fzc2V0SWQNc3Rha2VkQW1vdW50WA5kZXBvc2l0TnVtVXNlcg5kZXBvc2l0TnVtTGFzdAQXcmV3YXJkUGVyTnNidFN1bUxhc3RLRVkJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ5kZXBvc2l0TnVtTGFzdAUHYXNzZXRJZAQKc3VtTGFzdFgxOAkApwMBCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQdhc3NldElkAgEwBApzdW1Vc2VyWDE4CQCnAwEJAQxnZXRTdHJPckVsc2UCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUOZGVwb3NpdE51bVVzZXIFB2Fzc2V0SWQCATAEEXJld2FyZER5bmFtaWNQYXJ0CQCgAwEJALwCAwkAuAICBQpzdW1MYXN0WDE4BQpzdW1Vc2VyWDE4BQ1zdGFrZWRBbW91bnRYBQdNVUxUWDE4BBNyZXdhcmRDYWNoZWRQYXJ0S0VZCQEJa2V5UmV3YXJkAgULdXNlckFkZHJlc3MFB2Fzc2V0SWQEEHJld2FyZENhY2hlZFBhcnQJAQxnZXRJbnRPckVsc2UCBRNyZXdhcmRDYWNoZWRQYXJ0S0VZAAAJAJYKBAkAZAIFEHJld2FyZENhY2hlZFBhcnQFEXJld2FyZER5bmFtaWNQYXJ0BRByZXdhcmRDYWNoZWRQYXJ0BRFyZXdhcmREeW5hbWljUGFydAUTcmV3YXJkQ2FjaGVkUGFydEtFWQEMdG9TdGFydE9mRGF5AQl0aW1lc3RhbXAJAGgCCQBpAgUJdGltZXN0YW1wBQlEQVlNSUxMSVMFCURBWU1JTExJUwETZmluZEVsZW1lbnRQb3NpdGlvbgMDc3JjB2VsZW1lbnQDc2VwBAxlbGVtZW50U3RhcnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQNzcmMFB2VsZW1lbnQJAKwCAgkArAICCQCsAgICFnRoZXJlIGlzIG5vIHN1YnN0cmluZyAFB2VsZW1lbnQCBCBpbiAFA3NyYwMJAAACBQxlbGVtZW50U3RhcnQAAAAABARsZWZ0CQCvAgIFA3NyYwUMZWxlbWVudFN0YXJ0CQBlAgkAkAMBCQC1CQIFBGxlZnQFA3NlcAABABNEZXBvc2l0VG90YWxzUFJFRklYAiQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQAEWRlZmF1bHRUb3RhbHNEQVRBCQCsAgIFE0RlcG9zaXRUb3RhbHNQUkVGSVgCNl9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMAEHcGFkTGlzdAECaW4ECGN1cnJTaXplCQBlAgkAkAMBBQJpbgABCgEKbGlzdFBhZGRlcgIDYWNjA2lkeAMJAGYCBQhjdXJyU2l6ZQUDaWR4BQNhY2MJAM0IAgUDYWNjAgEwCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFAmluCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpsaXN0UGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgEJcGFkU3RyaW5nAQJpbgQIY3VyclNpemUJAGUCCQCQAwEJALwJAgUCaW4FA1NFUAABCgEJc3RyUGFkZGVyAgNhY2MDaWR4AwkAZgIFCGN1cnJTaXplBQNpZHgFA2FjYwkArAICBQNhY2MCA19fMAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQJpbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3RyUGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgENUmV3YXJkRW50cmllcwMJaXNOZXdVc2VyC3VzZXJBZGRyZXNzDHN0YWtlZEFtb3VudAQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFC3VzZXJBZGRyZXNzBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAIFYWNjdW0FYXNzZXQEDSR0MDExMzkzMTE1MjgJAQpjYWxjUmV3YXJkBQULdXNlckFkZHJlc3MFBWFzc2V0BQ1zdGFrZWRBbW91bnRYBQ5kZXBvc2l0TnVtVXNlcgUOZGVwb3NpdE51bUxhc3QEC3Jld2FyZFRvdGFsCAUNJHQwMTEzOTMxMTUyOAJfMQQGY2FjaGVkCAUNJHQwMTEzOTMxMTUyOAJfMgQHZHluYW1pYwgFDSR0MDExMzkzMTE1MjgCXzMEE3Jld2FyZENhY2hlZFBhcnRLRVkIBQ0kdDAxMTM5MzExNTI4Al80CQDNCAIFBWFjY3VtCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQULcmV3YXJkVG90YWwDAwkAAAIFDmRlcG9zaXROdW1MYXN0AP///////////wEJAAACBQ5kZXBvc2l0TnVtVXNlcgD///////////8BBwUDbmlsAwMJAAACBQ5kZXBvc2l0TnVtTGFzdAD///////////8BCQBmAgUOZGVwb3NpdE51bVVzZXIA////////////AQcJAAIBAi9pbnZhbGlkIGRlcG9zaXROdW1MYXN0IGFuZCBkZXBvc2l0TnVtVXNlciBzdGF0ZQMDCQBmAgUOZGVwb3NpdE51bUxhc3QA////////////AQkAZwIFDmRlcG9zaXROdW1Vc2VyAP///////////wEHAwUJaXNOZXdVc2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0BQNuaWwJAM0IAgoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARtmb3JFYWNoQXNzZXRDYWNoZVVzZXJSZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDkJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0CQACAQkArAICCQCsAgIJAKwCAgIkdW5jb3ZlcmVkIGNvbmRpdGlvbjogZGVwb3NpdE51bUxhc3Q9CQCkAwEFDmRlcG9zaXROdW1MYXN0AhAgZGVwb3NpdE51bVVzZXI9CQCkAwEFDmRlcG9zaXROdW1Vc2VyASJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AgN0a24JYW1vdW50SW5jBBdub3REaXN0cmlidXRlZFJld2FyZEtFWQkBF2tleU5vdERpc3RyaWJ1dGVkUmV3YXJkAQUDdGtuBBRub3REaXN0cmlidXRlZFJld2FyZAkBDGdldEludE9yRWxzZQIFF25vdERpc3RyaWJ1dGVkUmV3YXJkS0VZAAAJAQxJbnRlZ2VyRW50cnkCBRdub3REaXN0cmlidXRlZFJld2FyZEtFWQkAZAIFFG5vdERpc3RyaWJ1dGVkUmV3YXJkBQlhbW91bnRJbmMBC2NvbW1vbkNsYWltAgt1c2VyQWRkcmVzcwFpBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhlwYXltZW50cyBhcmUgbm90IGFjY2VwdGVkBA0kdDAxNDQ2OTE0NTkwCQELdmFsdWVPckVsc2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCWCgQGAAAAAAAABAlpc05ld1VzZXIIBQ0kdDAxNDQ2OTE0NTkwAl8xBAxzdGFrZWRBbW91bnQIBQ0kdDAxNDQ2OTE0NTkwAl8yBAxzdGFraW5nU3RhcnQIBQ0kdDAxNDQ2OTE0NTkwAl8zBAtnTnNidEFtb3VudAgFDSR0MDE0NDY5MTQ1OTACXzQEDXN0YWtlZEFtb3VudFgJALYCAQULZ05zYnRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFDnVzZXJBZGRyZXNzU3RyBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQCBWFjY3VtBWFzc2V0BA0kdDAxNDk2MDE1MDk4CQEKY2FsY1Jld2FyZAUFDnVzZXJBZGRyZXNzU3RyBQVhc3NldAUNc3Rha2VkQW1vdW50WAUOZGVwb3NpdE51bVVzZXIFDmRlcG9zaXROdW1MYXN0BAtyZXdhcmRUb3RhbAgFDSR0MDE0OTYwMTUwOTgCXzEEBmNhY2hlZAgFDSR0MDE0OTYwMTUwOTgCXzIEB2R5bmFtaWMIBQ0kdDAxNDk2MDE1MDk4Al8zBBNyZXdhcmRDYWNoZWRQYXJ0S0VZCAUNJHQwMTQ5NjAxNTA5OAJfNAQKY2xhaW1lZEtFWQkBCmtleUNsYWltZWQCBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQEDSR0MDE1MTU4MTUxOTUFBWFjY3VtBARkYXRhCAUNJHQwMTUxNTgxNTE5NQJfMQQRY2xhaW1lZEFtdEJ5QXNzZXQIBQ0kdDAxNTE1ODE1MTk1Al8yBAduZXdQYXJ0CQC5CQIJAMwIAgUFYXNzZXQJAMwIAgkApAMBBQtyZXdhcmRUb3RhbAUDbmlsAgE6BBRjbGFpbWVkQW10QnlBc3NldE5ldwkAuQkCCQDMCAIFEWNsYWltZWRBbXRCeUFzc2V0CQDMCAIFB25ld1BhcnQFA25pbAIBXwMJAGcCAAAFC3Jld2FyZFRvdGFsCQCUCgIFBGRhdGEFFGNsYWltZWRBbXRCeUFzc2V0TmV3CQCUCgIJAM0IAgkAzQgCCQDNCAIFBGRhdGEJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQtyZXdhcmRUb3RhbAkBC3RvQXNzZXRWZWN0AQUFYXNzZXQJAQxJbnRlZ2VyRW50cnkCBQpjbGFpbWVkS0VZCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpjbGFpbWVkS0VZAAAFC3Jld2FyZFRvdGFsCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQAABRRjbGFpbWVkQW10QnlBc3NldE5ldwQNJHQwMTU2NTUxNTc2OAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwCAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQJdHJhbnNmZXJzCAUNJHQwMTU2NTUxNTc2OAJfMQQXY2xhaW1lZEFtdEJ5QXNzZXRSZXN1bHQIBQ0kdDAxNTY1NTE1NzY4Al8yAwkAZwIAAAkAkAMBBQl0cmFuc2ZlcnMJAJQKAgUDbmlsAAAJAJQKAgkAzQgCCQDNCAIFCXRyYW5zZmVycwkBDEludGVnZXJFbnRyeQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUOZGVwb3NpdE51bUxhc3QJARFDbGFpbUhpc3RvcnlFbnRyeQMFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQCwAgIFF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0AAEJAJADAQUJdHJhbnNmZXJzARhyZWFkVXNlckNvbnNlbnRUb1gyR25zYnQBC3VzZXJBZGRyZXNzBANrZXkJARlrZXlVc2VyQ29uc2VudGVkVG9YMkduc2J0AQULdXNlckFkZHJlc3MEA3ZhbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHCQCUCgIFA2tleQUDdmFsAQ1jb21tb25YMkduc2J0Agt1c2VyQWRkcmVzcwFpAwkBASEBCQENaXNCb251c1BlcmlvZAEFBmhlaWdodAkAAgECJk5vICdEb3VibGUgZ05TQlQgYWN0aW9uJyBhdmFpbGFibGUgbm93BA0kdDAxNjMzMDE2MzkxCQELY29tbW9uQ2xhaW0CBQt1c2VyQWRkcmVzcwUBaQQMY2xhaW1BY3Rpb25zCAUNJHQwMTYzMzAxNjM5MQJfMQQLY2xhaW1SZXN1bHQIBQ0kdDAxNjMzMDE2MzkxAl8yBA0kdDAxNjM5NDE2NTE5CQELdmFsdWVPckVsc2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCWCgQGAAAA////////////AQAABAlpc05ld1VzZXIIBQ0kdDAxNjM5NDE2NTE5Al8xBApsb2NrQW1vdW50CAUNJHQwMTYzOTQxNjUxOQJfMgQPbG9ja1N0YXJ0SGVpZ2h0CAUNJHQwMTYzOTQxNjUxOQJfMwQNY3VyclVzZXJHbnNidAgFDSR0MDE2Mzk0MTY1MTkCXzQDBQlpc05ld1VzZXIJAAIBAhtZb3UgaGF2ZSBub3RoaW5nIHRvIHJlc3Rha2UEDG5ld1VzZXJHbnNidAkAaAIAAgUKbG9ja0Ftb3VudAQJdG90YWxOc2J0CQEMZ2V0SW50T3JaZXJvAQkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAQKdG90YWxHbnNidAkBDGdldEludE9yRWxzZQIJARZrZXlMb2NrUGFyYW1Ub3RhbEduc2J0AAUJdG90YWxOc2J0BA1uZXdUb3RhbEduc2J0CQBkAgkAZQIFCnRvdGFsR25zYnQFDWN1cnJVc2VyR25zYnQFDG5ld1VzZXJHbnNidAQQdXNlckNvbnNlbnRUdXBsZQkBGHJlYWRVc2VyQ29uc2VudFRvWDJHbnNidAEFC3VzZXJBZGRyZXNzBBl1c2VyQ29uc2VudGVkVG9YMkduc2J0S0VZCAUQdXNlckNvbnNlbnRUdXBsZQJfMQQWdXNlckNvbnNlbnRlZFRvWDJHbnNidAgFEHVzZXJDb25zZW50VHVwbGUCXzIDBRZ1c2VyQ29uc2VudGVkVG9YMkduc2J0CQACAQIoVXNlciBoYXMgYWxyZWFkeSBkb3VibGVkIGl0cyBnTlNCVCB2YWx1ZQkAlAoCCQDNCAIJAM0IAgkAzggCBQxjbGFpbUFjdGlvbnMJAQ9Mb2NrUGFyYW1zRW50cnkEBQt1c2VyQWRkcmVzcwUKbG9ja0Ftb3VudAUGaGVpZ2h0BQxuZXdVc2VyR25zYnQJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtVG90YWxHbnNidAAFDW5ld1RvdGFsR25zYnQJAQxCb29sZWFuRW50cnkCBRl1c2VyQ29uc2VudGVkVG9YMkduc2J0S0VZBgULY2xhaW1SZXN1bHQMAWkBDWNvbnN0cnVjdG9yVjEFF25ldXRyaW5vQ29udHJhY3RBZGRyZXNzE21hdGhDb250cmFjdEFkZHJlc3MNbWluTG9ja0Ftb3VudAhoYWxmTGlmZRVzdXBwb3J0ZWRSZXdhcmRBc3NldHMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MABRduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAFE21hdGhDb250cmFjdEFkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlNaW5Mb2NrQW1vdW50AAUNbWluTG9ja0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUhhbGZMaWZlAAUIaGFsZkxpZmUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwAFFXN1cHBvcnRlZFJld2FyZEFzc2V0cwUDbmlsAWkBDWNvbnN0cnVjdG9yVjICF3gyR25zYnRPZmZlckhlaWdodFN0YXJ0FXgyR25zYnRPZmZlckhlaWdodEVuZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEda2V5Q2ZnWDJHbnNidE9mZmVySGVpZ2h0U3RhcnQABRd4Mkduc2J0T2ZmZXJIZWlnaHRTdGFydAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG2tleUNmZ1gyR25zYnRPZmZlckhlaWdodEVuZAAFFXgyR25zYnRPZmZlckhlaWdodEVuZAUDbmlsAWkBBXN0YWtlAAQNJHQwMTgyMTUxODI3NwkBD2dldFBhcmFtc09yRmFpbAAEC2JvbmRBc3NldElkCAUNJHQwMTgyMTUxODI3NwJfMQQNbWluTG9ja0Ftb3VudAgFDSR0MDE4MjE1MTgyNzcCXzIECGhhbGZMaWZlCAUNJHQwMTgyMTUxODI3NwJfMwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECFUludmFsaWQgcGF5bWVudHMgc2l6ZQQHcGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQIBQdwYXltZW50BmFtb3VudAQTaW52YWxpZEFzc2V0TWVzc2FnZQkArAICCQCsAgICD0ludmFsaWQgYXNzZXQuIAkA2AQBBQtib25kQXNzZXRJZAIMIGlzIGV4cGVjdGVkBAdhc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQdwYXltZW50B2Fzc2V0SWQFE2ludmFsaWRBc3NldE1lc3NhZ2UDCQECIT0CBQdhc3NldElkBQtib25kQXNzZXRJZAkAAgEFE2ludmFsaWRBc3NldE1lc3NhZ2UEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTg4MTkxODk0NAkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlgoEBgAAAP///////////wEAAAQJaXNOZXdVc2VyCAUNJHQwMTg4MTkxODk0NAJfMQQKbG9ja0Ftb3VudAgFDSR0MDE4ODE5MTg5NDQCXzIED2xvY2tTdGFydEhlaWdodAgFDSR0MDE4ODE5MTg5NDQCXzMEDWN1cnJVc2VyR25zYnQIBQ0kdDAxODgxOTE4OTQ0Al80BAxtZXJnZWRBbW91bnQDBQlpc05ld1VzZXIFBmFtb3VudAkAZAIFBmFtb3VudAUKbG9ja0Ftb3VudAQRbWVyZ2VkU3RhcnRIZWlnaHQDBQlpc05ld1VzZXIFBmhlaWdodAkBBWFzSW50AQkA/AcEBQxtYXRoQ29udHJhY3QCE21lcmdlU3Rha2VzUkVBRE9OTFkJAMwIAgUGYW1vdW50CQDMCAIFBmhlaWdodAkAzAgCBQpsb2NrQW1vdW50CQDMCAIFD2xvY2tTdGFydEhlaWdodAkAzAgCBQhoYWxmTGlmZQUDbmlsBQNuaWwDCQBmAgUNbWluTG9ja0Ftb3VudAUMbWVyZ2VkQW1vdW50CQACAQkArAICAhNNaW4gbG9jayBhbW91bnQgaXMgCQCkAwEFDW1pbkxvY2tBbW91bnQEEHVzZXJDb25zZW50VHVwbGUJARhyZWFkVXNlckNvbnNlbnRUb1gyR25zYnQBBQt1c2VyQWRkcmVzcwQZdXNlckNvbnNlbnRlZFRvWDJHbnNidEtFWQgFEHVzZXJDb25zZW50VHVwbGUCXzEEFnVzZXJDb25zZW50ZWRUb1gyR25zYnQIBRB1c2VyQ29uc2VudFR1cGxlAl8yBA5kZWx0YVVzZXJHbnNidAMDCQENaXNCb251c1BlcmlvZAEFBmhlaWdodAMFCWlzTmV3VXNlcgYFFnVzZXJDb25zZW50ZWRUb1gyR25zYnQHCQBoAgACBQZhbW91bnQFBmFtb3VudAQTeDJHbnNidENvbnNlbnRFbnRyeQMFCWlzTmV3VXNlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUZdXNlckNvbnNlbnRlZFRvWDJHbnNidEtFWQYFA25pbAUDbmlsBA0kdDAxOTk0ODIwMDY2CQELU3RhdHNSZXN1bHQEBQZhbW91bnQAAQMFCWlzTmV3VXNlcgABAAAFDmRlbHRhVXNlckduc2J0BAxzdGF0c0VudHJpZXMIBQ0kdDAxOTk0ODIwMDY2Al8xBAt0b3RhbFN0YWtlZAgFDSR0MDE5OTQ4MjAwNjYCXzIEDnRvdGFsU3Rha2VkTmV3CAUNJHQwMTk5NDgyMDA2NgJfMwkAzggCCQDOCAIJAM4IAgkAzggCCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgVzdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFCmxvY2tBbW91bnQFD2xvY2tTdGFydEhlaWdodAUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAUDbmlsCQENUmV3YXJkRW50cmllcwMFCWlzTmV3VXNlcgUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkEBQt1c2VyQWRkcmVzcwUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAkAZAIFDWN1cnJVc2VyR25zYnQFDmRlbHRhVXNlckduc2J0BQxzdGF0c0VudHJpZXMFE3gyR25zYnRDb25zZW50RW50cnkBaQEHdW5zdGFrZQEGYW1vdW50AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIjdW5zdGFrZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnQEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEDnVzZXJBZGRyZXNzU3RyCQClCAEFC3VzZXJBZGRyZXNzBA0kdDAyMDYwOTIwNjcxCQEPZ2V0UGFyYW1zT3JGYWlsAAQLYm9uZEFzc2V0SWQIBQ0kdDAyMDYwOTIwNjcxAl8xBA1taW5Mb2NrQW1vdW50CAUNJHQwMjA2MDkyMDY3MQJfMgQIaGFsZkxpZmUIBQ0kdDAyMDYwOTIwNjcxAl8zBA0kdDAyMDY3NDIwNzYzCQETZ2V0VXNlclBhcmFtc09yRmFpbAEFC3VzZXJBZGRyZXNzBAlpc05ld1VzZXIIBQ0kdDAyMDY3NDIwNzYzAl8xBApsb2NrQW1vdW50CAUNJHQwMjA2NzQyMDc2MwJfMgQJbG9ja1N0YXJ0CAUNJHQwMjA2NzQyMDc2MwJfMwQNY3VyclVzZXJHbnNidAgFDSR0MDIwNjc0MjA3NjMCXzQDCQBnAgAABQpsb2NrQW1vdW50CQACAQISTm90aGluZyB0byB1bnN0YWtlAwkAZgIFBmFtb3VudAUKbG9ja0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICClJlcXVlc3RlZCAJAKQDAQUGYW1vdW50AhIsIGJ1dCBzdGFrZWQgb25seSAJAKQDAQUKbG9ja0Ftb3VudAQBdAgJAQV2YWx1ZQEJAO0HAQUGaGVpZ2h0CXRpbWVzdGFtcAQLcmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEFDnVzZXJBZGRyZXNzU3RyAAADCQBnAgULcmVsZWFzZVRpbWUFAXQJAAIBCQCsAgICO1lvdXIgZ05zYnQgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFC3JlbGVhc2VUaW1lBA9jb21pc3Npb25BbW91bnQJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AiFnZXRVbnN0YWtlQ29taXNzaW9uQW1vdW50UkVBRE9OTFkJAMwIAgUGYW1vdW50CQDMCAIFCWxvY2tTdGFydAkAzAgCBQhoYWxmTGlmZQUDbmlsBQNuaWwEDmJvbnVzR25zYnRQYXJ0CQBlAgUNY3VyclVzZXJHbnNidAUKbG9ja0Ftb3VudAQPYm9udXNOc2J0QW1vdW50CQCXAwEJAMwIAgUGYW1vdW50CQDMCAIFDmJvbnVzR25zYnRQYXJ0BQNuaWwECmRlbHRhR25zYnQJAGQCBQ9ib251c05zYnRBbW91bnQFBmFtb3VudAQNJHQwMjE2MDEyMTc3MgkBC1N0YXRzUmVzdWx0BAkBAS0BBQZhbW91bnQDCQAAAgUGYW1vdW50BQpsb2NrQW1vdW50AP///////////wEAAAMJAAACBQZhbW91bnQFCmxvY2tBbW91bnQA////////////AQAACQEBLQEFCmRlbHRhR25zYnQEDHN0YXRzRW50cmllcwgFDSR0MDIxNjAxMjE3NzICXzEEC3RvdGFsU3Rha2VkCAUNJHQwMjE2MDEyMTc3MgJfMgQOdG90YWxTdGFrZWROZXcIBQ0kdDAyMTYwMTIxNzcyAl8zCQDOCAIJAM4IAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzCQBlAgUGYW1vdW50BQ9jb21pc3Npb25BbW91bnQFC2JvbmRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD2F1Y3Rpb25Db250cmFjdAUPY29taXNzaW9uQW1vdW50BQtib25kQXNzZXRJZAkAzAgCCQESSGlzdG9yeVJlY29yZEVudHJ5BwIHdW5zdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFCmxvY2tBbW91bnQFCWxvY2tTdGFydAkAZQIFCmxvY2tBbW91bnQFBmFtb3VudAUJbG9ja1N0YXJ0BQNuaWwJAQ1SZXdhcmRFbnRyaWVzAwcFDnVzZXJBZGRyZXNzU3RyBQpsb2NrQW1vdW50CQEPTG9ja1BhcmFtc0VudHJ5BAULdXNlckFkZHJlc3MJAGUCBQpsb2NrQW1vdW50BQZhbW91bnQFCWxvY2tTdGFydAkAZQIFDWN1cnJVc2VyR25zYnQFCmRlbHRhR25zYnQFDHN0YXRzRW50cmllcwFpAQdkZXBvc2l0AAQLdG90YWxTdGFrZWQJAQxnZXRJbnRPckVsc2UCCQEWa2V5TG9ja1BhcmFtVG90YWxHbnNidAAJAQxnZXRJbnRPckVsc2UCCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAADCQBmAgAABQt0b3RhbFN0YWtlZAkAAgECG1RPRE86IGNhc2UgaXMgbm90IHN1cHBvcnRlZAQRZGVwb3NpdE51bUxhc3RLRVkJARFrZXlEZXBvc2l0TnVtTGFzdAAEDmRlcG9zaXROdW1MYXN0CQEMZ2V0SW50T3JFbHNlAgURZGVwb3NpdE51bUxhc3RLRVkA////////////AQQNZGVwb3NpdE51bU5ldwkAZAIFDmRlcG9zaXROdW1MYXN0AAEECXRvdGFsc0tFWQkBGGtleVN0YXRzRGVwb3NpdEFtdFRvdGFscwAECGJ5RGF5S0VZCQEXa2V5U3RhdHNEZXBvc2l0QW10QnlEYXkBCQEMdG9TdGFydE9mRGF5AQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECmN1cnJUb3RhbHMJAQdwYWRMaXN0AQkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCXRvdGFsc0tFWQURZGVmYXVsdFRvdGFsc0RBVEEFA1NFUAoBA2RlcAIDYWNjA3BtdAQGYW1vdW50CAUDcG10BmFtb3VudAQNcG10QXNzZXRJZFN0cgkA2AQBCQELdmFsdWVPckVsc2UCCAUDcG10B2Fzc2V0SWQFB1dBVkVTSUQDCQEBIQEJAQhjb250YWlucwIFEnN1cHBvcnRlZEFzc2V0c1N0cgUNcG10QXNzZXRJZFN0cgkAAgEJAKwCAgkArAICBRJzdXBwb3J0ZWRBc3NldHNTdHICESBkb2Vzbid0IGNvbnRhaW4gBQ1wbXRBc3NldElkU3RyAwkAAAIFC3RvdGFsU3Rha2VkAAAJAJYKBAkAzQgCCAUDYWNjAl8xCQEiSW5jcmVtZW50Tm90RGlzdHJpYnV0ZWRSZXdhcmRFbnRyeQIFDXBtdEFzc2V0SWRTdHIFBmFtb3VudAkAzQgCCAUDYWNjAl8yBQ1wbXRBc3NldElkU3RyCQDNCAIIBQNhY2MCXzMJALYCAQAACQDNCAIIBQNhY2MCXzQFBmFtb3VudAQQcmV3YXJkUGVyTnNidFgxOAkAvAIDCQC2AgEFBmFtb3VudAUHTVVMVFgxOAkAtgIBBQt0b3RhbFN0YWtlZAkAlgoECAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIFDXBtdEFzc2V0SWRTdHIJAM0IAggFA2FjYwJfMwUQcmV3YXJkUGVyTnNidFgxOAkAzQgCCAUDYWNjAl80BQZhbW91bnQECnBtdHNSZXN1bHQKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDZGVwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCgEZcmVmcmVzaFJld2FyZFVwZGF0ZVRvdGFscwIFYWNjdW0JbmV4dEFzc2V0BAFrCAUFYWNjdW0CXzMECnN1bUxhc3RTdHIJAQxnZXRTdHJPckVsc2UCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUOZGVwb3NpdE51bUxhc3QFCW5leHRBc3NldAIBMAQDaWR4CQDPCAIIBQpwbXRzUmVzdWx0Al8yBQluZXh0QXNzZXQEA3N1bQMJAQlpc0RlZmluZWQBBQNpZHgEAWoJAQV2YWx1ZQEFA2lkeAQKc3RhdHNEZWx0YQkAkQMCCAUKcG10c1Jlc3VsdAJfNAUBagkAlAoCCQCmAwEJALcCAgkApwMBBQpzdW1MYXN0U3RyCQCRAwIIBQpwbXRzUmVzdWx0Al8zBQFqCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VyclRvdGFscwkAZAIFAWsAAQUKc3RhdHNEZWx0YQkAlAoCBQpzdW1MYXN0U3RyCQCRAwIFCmN1cnJUb3RhbHMJAGQCBQFrAAEJAJUKAwkAzQgCCAUFYWNjdW0CXzEJAQtTdHJpbmdFbnRyeQIJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ1kZXBvc2l0TnVtTmV3BQluZXh0QXNzZXQIBQNzdW0CXzEJAKwCAgkArAICCAUFYWNjdW0CXzIFA1NFUAgFA3N1bQJfMgkAZAIFAWsAAQQMYXNzZXRzUmVzdWx0CgACJGwFE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUTRGVwb3NpdFRvdGFsc1BSRUZJWAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARlyZWZyZXNoUmV3YXJkVXBkYXRlVG90YWxzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJBAZ0b3RhbHMJAQlwYWRTdHJpbmcBCAUMYXNzZXRzUmVzdWx0Al8yCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFCnBtdHNSZXN1bHQCXzEIBQxhc3NldHNSZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBRFkZXBvc2l0TnVtTGFzdEtFWQUNZGVwb3NpdE51bU5ldwkBC1N0cmluZ0VudHJ5AgUJdG90YWxzS0VZBQZ0b3RhbHMJAQtTdHJpbmdFbnRyeQIFCGJ5RGF5S0VZBQZ0b3RhbHMFDWRlcG9zaXROdW1OZXcBaQEMY2xhaW1SZXdhcmRzAAkBC2NvbW1vbkNsYWltAggFAWkGY2FsbGVyBQFpAWkBGmNsYWltUmV3YXJkc0J5T3JpZ2luQ2FsbGVyAAkBC2NvbW1vbkNsYWltAggFAWkMb3JpZ2luQ2FsbGVyBQFpAWkBB3gyR25zYnQACQENY29tbW9uWDJHbnNidAIIBQFpBmNhbGxlcgUBaQFpARV4Mkduc2J0QnlPcmlnaW5DYWxsZXIACQENY29tbW9uWDJHbnNidAIIBQFpDG9yaWdpbkNhbGxlcgUBaQFpARh1bmNsYWltZWRSZXdhcmRzUkVBRE9OTFkBDnVzZXJBZGRyZXNzU3RyCgEWZm9yRWFjaEFzc2V0WmVyb1Jld2FyZAIFYWNjdW0FYXNzZXQJAKwCAgkArAICBQVhY2N1bQkAuQkCCQDMCAIFBWFzc2V0CQDMCAICATAJAMwIAgIBMAUDbmlsAgE6AgFfBBJ1bmNsYWltZWRSZXdhcmRTdHIDCQAAAgUOdXNlckFkZHJlc3NTdHICAAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZmb3JFYWNoQXNzZXRaZXJvUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEDSR0MDI1ODM2MjU5NTUJAQt2YWx1ZU9yRWxzZQIJARNnZXRVc2VyUGFyYW1zT3JVbml0AQULdXNlckFkZHJlc3MJAJYKBAYAAAAAAAAECWlzTmV3VXNlcggFDSR0MDI1ODM2MjU5NTUCXzEEDHN0YWtlZEFtb3VudAgFDSR0MDI1ODM2MjU5NTUCXzIEDHN0YWtpbmdTdGFydAgFDSR0MDI1ODM2MjU5NTUCXzMECXVzZXJHbnNidAgFDSR0MDI1ODM2MjU5NTUCXzQEDXN0YWtlZEFtb3VudFgJALYCAQUJdXNlckduc2J0BBt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkJARtrZXlVc2VyUmV3YXJkRnJvbURlcG9zaXROdW0BBQ51c2VyQWRkcmVzc1N0cgQOZGVwb3NpdE51bVVzZXIJAQxnZXRJbnRPckVsc2UCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkA////////////AQQOZGVwb3NpdE51bUxhc3QJAQxnZXRJbnRPckVsc2UCCQERa2V5RGVwb3NpdE51bUxhc3QAAP///////////wEKAR9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAgVhY2N1bQVhc3NldAQNJHQwMjYyOTgyNjQzNgkBCmNhbGNSZXdhcmQFBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQFDXN0YWtlZEFtb3VudFgFDmRlcG9zaXROdW1Vc2VyBQ5kZXBvc2l0TnVtTGFzdAQLcmV3YXJkVG90YWwIBQ0kdDAyNjI5ODI2NDM2Al8xBAZjYWNoZWQIBQ0kdDAyNjI5ODI2NDM2Al8yBAdkeW5hbWljCAUNJHQwMjYyOTgyNjQzNgJfMwQTcmV3YXJkQ2FjaGVkUGFydEtFWQgFDSR0MDI2Mjk4MjY0MzYCXzQEB2NsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBCmtleUNsYWltZWQCBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQAAAkArAICCQCsAgIFBWFjY3VtCQC5CQIJAMwIAgUFYXNzZXQJAMwIAgkApAMBBQtyZXdhcmRUb3RhbAkAzAgCCQCkAwEFB2NsYWltZWQFA25pbAIBOgIBXwoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAR9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJCQCUCgIFA25pbAkAswICBRJ1bmNsYWltZWRSZXdhcmRTdHIAAQFpARhuc2J0VW5zdGFraW5nU1lTUkVBRE9OTFkCFXVzZXJBZGRyZXNzU3RyT3JFbXB0eQt1bnN0YWtlQW10UAQLcmVzdWx0QXJyYXkDCQAAAgUVdXNlckFkZHJlc3NTdHJPckVtcHR5AgAJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAABQNuaWwEC3VzZXJBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRV1c2VyQWRkcmVzc1N0ck9yRW1wdHkEB2NmZ0RBVEEJAQ9nZXRQYXJhbXNPckZhaWwABAtuc2J0QXNzZXRJZAgFB2NmZ0RBVEECXzEEDW1pbkxvY2tBbW91bnQIBQdjZmdEQVRBAl8yBAhoYWxmTGlmZQgFB2NmZ0RBVEECXzMECHVzZXJEQVRBCQELdmFsdWVPckVsc2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCWCgQGAAAAAAAABAlpc05ld1VzZXIIBQh1c2VyREFUQQJfMQQMc3Rha2VkQW1vdW50CAUIdXNlckRBVEECXzIECWxvY2tTdGFydAgFCHVzZXJEQVRBAl8zBAp1bnN0YWtlQW10AwkAZgIFC3Vuc3Rha2VBbXRQBQxzdGFrZWRBbW91bnQFDHN0YWtlZEFtb3VudAULdW5zdGFrZUFtdFAED3N0YWtlZEFtb3VudE5FVwkAZQIFDHN0YWtlZEFtb3VudAUKdW5zdGFrZUFtdAQPY29taXNzaW9uQW1vdW50AwkAAAIFCnVuc3Rha2VBbXQAAAAACQEFYXNJbnQBCQD8BwQFDG1hdGhDb250cmFjdAIhZ2V0VW5zdGFrZUNvbWlzc2lvbkFtb3VudFJFQURPTkxZCQDMCAIFCnVuc3Rha2VBbXQJAMwIAgUJbG9ja1N0YXJ0CQDMCAIFCGhhbGZMaWZlBQNuaWwFA25pbAQNcmVjZWl2ZUFtb3VudAkAZQIFCnVuc3Rha2VBbXQFD2NvbWlzc2lvbkFtb3VudAkAzAgCBQxzdGFrZWRBbW91bnQJAMwIAgUPc3Rha2VkQW1vdW50TkVXCQDMCAIFDXJlY2VpdmVBbW91bnQJAMwIAgUPY29taXNzaW9uQW1vdW50BQNuaWwJAJQKAgUDbmlsBQtyZXN1bHRBcnJheQFpARZuc2J0U3Rha2luZ1NZU1JFQURPTkxZAg51c2VyQWRkcmVzc1N0cghuc2J0RGlmZgQMdG90YWxOc2J0QW10CQEMZ2V0SW50T3JFbHNlAgkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAAABAp0b3RhbEduc2J0CQEMZ2V0SW50T3JFbHNlAgkBFmtleUxvY2tQYXJhbVRvdGFsR25zYnQABQx0b3RhbE5zYnRBbXQDCQAAAgUOdXNlckFkZHJlc3NTdHICAAkAlAoCBQNuaWwJAMwIAgAACQDMCAIFDHRvdGFsTnNidEFtdAkAzAgCAAAJAMwIAgAACQDMCAIFCnRvdGFsR25zYnQFA25pbAQLdXNlckFkZHJlc3MJAQ90b0FkZHJlc3NPckZhaWwBBQ51c2VyQWRkcmVzc1N0cgQNJHQwMjgyMjYyODM0NAkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlgoEBgAAAAAAAAQJaXNOZXdVc2VyCAUNJHQwMjgyMjYyODM0NAJfMQQLdXNlck5zYnRBbXQIBQ0kdDAyODIyNjI4MzQ0Al8yBAxzdGFraW5nU3RhcnQIBQ0kdDAyODIyNjI4MzQ0Al8zBAl1c2VyR25zYnQIBQ0kdDAyODIyNjI4MzQ0Al80CQCUCgIFA25pbAkAzAgCBQt1c2VyTnNidEFtdAkAzAgCBQx0b3RhbE5zYnRBbXQJAMwIAgUMc3Rha2luZ1N0YXJ0CQDMCAIFCXVzZXJHbnNidAkAzAgCBQp0b3RhbEduc2J0BQNuaWwBAnR4AQZ2ZXJpZnkABBNwdWJLZXlBZG1pbnNMaXN0U3RyCQC5CQIJAMwIAgIsRXh0RUVLMTlubUtqOW1DcG5XeXZFRUpGWUFUTE1jVkVNdm9oaFVIa3lITm0JAMwIAgIsRXY1cHk1RmZCUVg5Y1pwWUtuZlFyVEI0OUJ5ZjhRbXBaV2VEVlJpbTR5VjcJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIFA25pbAUDU0VQBBBwdWJLZXlBZG1pbnNMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY29udHJvbENvbnRyYWN0Agwlc19fbXVsdGlzaWcFE3B1YktleUFkbWluc0xpc3RTdHIFA1NFUAQFY291bnQJAGQCCQBkAgkAZAIDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAAAAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAEAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAgABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwADCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAADAAIAAAkAZwIFBWNvdW50AAPnadIS", "height": 2793962, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E9gAqUH1Z8mkHbm3WA7PuJ6LcJtfqf8YPasCL2gwpmhC Next: 4EVkYYtm3ADUPKvwauKoi8qTiV8QeXKz9gZjPCEGd25Y Diff:
OldNewDifferences
4646 func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
4747
4848
49-func y () = "%s%s__config__controlAddress"
49+func y () = "%s%s__config__x2GnsbtOfferHeightStart"
5050
5151
52-func z () = "%s__controlConfig"
52+func z () = "%s%s__config__x2GnsbtOfferHeightEnd"
5353
5454
55-func A (B) = split_4C(v(B, z()), b)
55+func A () = "%s%s__config__controlAddress"
5656
5757
58-func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E)))
58+func B () = "%s__controlConfig"
5959
6060
61-let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
62-
63-let D = A(F)
64-
65-let G = C(D, o)
66-
67-let H = C(D, l)
68-
69-let I = C(D, m)
70-
71-let J = C(D, u)
72-
73-func K () = "bond_asset_id"
61+func C (D) = split_4C(v(D, B()), b)
7462
7563
76-func L (M) = ("%s%s_userGnsbtReleaseTime__" + M)
64+func E (F,G) = valueOrErrorMessage(addressFromString(F[G]), ("Control cfg doesn't contain address at index " + toString(G)))
7765
7866
79-func N () = "%s__neutrinoContractAddress"
67+let H = addressFromStringValue(valueOrElse(getString(this, A()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
68+
69+let F = C(H)
70+
71+let I = E(F, o)
72+
73+let J = E(F, l)
74+
75+let K = E(F, m)
76+
77+let L = E(F, u)
78+
79+let M = valueOrElse(getInteger(this, y()), 0)
80+
81+let N = valueOrElse(getInteger(this, z()), 0)
82+
83+func O () = "bond_asset_id"
8084
8185
82-func O () = "%s__mathContract"
86+func P (Q) = ("%s%s_userGnsbtReleaseTime__" + Q)
8387
8488
85-func P () = "%s__minLockAmount"
89+func R () = "%s__neutrinoContractAddress"
8690
8791
88-func Q () = "%s__halfLife"
92+func S () = "%s__mathContract"
8993
9094
91-func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a)
95+func T () = "%s__minLockAmount"
9296
9397
94-func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a)
98+func U () = "%s__halfLife"
9599
96100
97-func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a)
101+func V (W) = makeString(["%s%s%s", "paramByUser", toString(W), "amount"], a)
98102
99103
100-func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
104+func X (W) = makeString(["%s%s%s", "paramByUser", toString(W), "start"], a)
101105
102106
103-func Y () = makeString(["%s%s", "stats", "locksCount"], a)
107+func Y (W) = makeString(["%s%s%s", "paramByUser", toString(W), "gNsbt"], a)
104108
105109
106-func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a)
110+func Z (W) = makeString(["%s%s%s", "paramByUser", toString(W), "consentedToX2Gnsbt"], a)
107111
108112
109-func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a)
113+func aa (ab,W,ac) = makeString(["%s%s%s%s", "history", ab, toString(W), toBase58String(ac)], a)
110114
111115
112-func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
116+func ad () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
113117
114118
115-func ad () = "%s__nextPeriod"
119+func ae () = makeString(["%s%s", "stats", "activeTotalGnsbt"], a)
116120
117121
118-func ae () = "supportedRewardAssets"
122+func af () = makeString(["%s%s", "stats", "locksCount"], a)
119123
120124
121-func af () = makeString(["%s%s%s", "dep", "lastNum"], a)
125+func ag () = makeString(["%s%s", "stats", "activeUsersCount"], a)
122126
123127
124-func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a)
128+func ah (ai) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ai)], a)
125129
126130
127-func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a)
131+func aj () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
128132
129133
130-func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a)
134+func ak () = "%s__nextPeriod"
131135
132136
133-func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a)
137+func al () = "supportedRewardAssets"
134138
135139
136-func am (aj) = makeString(["%s%s", "notDistributed", aj], a)
140+func am () = makeString(["%s%s%s", "dep", "lastNum"], a)
137141
138142
139-func an (ao,ap) = fraction(toBigInt(ao), g, ap)
143+func an (W) = makeString(["%s%s%s", "userRwdFromDepNum", W], a)
140144
141145
142-func aq (x) = valueOrElse(getInteger(this, x), 0)
146+func ao (ap,aq) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ap), aq], a)
143147
144148
145-func ar (x,as) = valueOrElse(getInteger(this, x), as)
149+func ar (W,aq) = makeString(["%s%s%s", "rwd", W, aq], a)
146150
147151
148-func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
152+func as (W,aq) = makeString(["%s%s%s", "clm", W, aq], a)
149153
150154
151-func au (x,as) = valueOrElse(getString(this, x), as)
155+func at (aq) = makeString(["%s%s", "notDistributed", aq], a)
152156
153157
154-func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw))
158+func au (av,aw) = fraction(toBigInt(av), g, aw)
155159
156160
157-func ax (ay) = if ((ay == h))
158- then unit
159- else fromBase58String(ay)
161+func ax (x) = valueOrElse(getInteger(this, x), 0)
160162
161163
162-func az (aA) = {
163- let aB = aA
164- if ($isInstanceOf(aB, "Int"))
164+func ay (x,az) = valueOrElse(getInteger(this, x), az)
165+
166+
167+func aA (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
168+
169+
170+func aB (x,az) = valueOrElse(getString(this, x), az)
171+
172+
173+func aC (aD) = valueOrErrorMessage(addressFromString(aD), ("couldn't parse passed addressStr=" + aD))
174+
175+
176+func aE (aF) = if ((aF == h))
177+ then unit
178+ else fromBase58String(aF)
179+
180+
181+func aG (aH) = {
182+ let aI = aH
183+ if ($isInstanceOf(aI, "Int"))
165184 then {
166- let aC = aB
167- aC
185+ let aJ = aI
186+ aJ
168187 }
169188 else throw("fail to cast into Int")
170189 }
171190
172191
173-func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a)
192+func aK (aL,aM,aN,aO) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aL), toString(aM), toString(aN), toString(aO)], a)
174193
175194
176-func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a)
195+func aP (aQ,aR) = makeString(["%s%d%d%s", aQ, toString(lastBlock.height), toString(lastBlock.timestamp), aR], a)
177196
178197
179-func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH))
198+func aS (ab,W,ac,aL,aM,aN,aO) = StringEntry(aa(ab, W, ac), aK(aL, aM, aN, aO))
180199
181200
182-func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK))
201+func aT (W,ac,aR) = StringEntry(aa("claim", W, ac), aP(toString(W), aR))
183202
184203
185-func aN (aO,aP,aQ) = {
186- let aR = aq(Y())
187- let aS = aq(Z())
188- let aT = aq(X())
189- let aU = (aT + aO)
190- $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU)
204+func aU (aV,aW,aX,aY) = {
205+ let aZ = ax(af())
206+ let ba = ax(ag())
207+ let bb = ax(ad())
208+ let bc = (bb + aV)
209+ let bd = ay(ae(), bb)
210+ $Tuple3([IntegerEntry(af(), (aZ + aW)), IntegerEntry(ag(), (ba + aX)), IntegerEntry(ad(), bc), IntegerEntry(ae(), (bd + aY))], bb, bc)
191211 }
192212
193213
194-func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)]
214+func be (W,bf,bg,bh) = [IntegerEntry(V(W), bf), IntegerEntry(Y(W), bh), IntegerEntry(X(W), bg)]
195215
196216
197-func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q()))
217+func bi () = $Tuple3(fromBase58String(getStringValue(J, O())), aA(T()), aA(U()))
198218
199219
200-func aZ (S) = (ar(R(S), 0) > 0)
220+func bj (W) = (ay(V(W), 0) > 0)
201221
202222
203-func ba (S) = if (aZ(S))
204- then $Tuple3(false, at(R(S)), at(T(S)))
223+func bk (bl) = if ((bl >= M))
224+ then (N >= bl)
225+ else false
226+
227+
228+func bm (W) = if (bj(W))
229+ then {
230+ let bn = aA(V(W))
231+ $Tuple4(false, bn, aA(X(W)), ay(Y(W), bn))
232+ }
205233 else unit
206234
207235
208-func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined"))
236+func bo (W) = valueOrErrorMessage(bm(W), (("User " + toString(W)) + " is not defined"))
209237
210238
211-let bc = au(ae(), "")
239+let bp = aB(al(), "")
212240
213-let bd = split(bc, "_")
241+let bq = split(bp, "_")
214242
215-func be (S,bf,bg,bh,bi) = {
216- let bj = ah(bi, bf)
217- let bk = parseBigIntValue(au(ah(bi, bf), "0"))
218- let bl = parseBigIntValue(au(ah(bh, bf), "0"))
219- let bm = toInt(fraction((bk - bl), bg, g))
220- let bn = ak(S, bf)
221- let bo = ar(bn, 0)
222- $Tuple4((bo + bm), bo, bm, bn)
243+func br (W,bs,bt,bu,bv) = {
244+ let bw = ao(bv, bs)
245+ let bx = parseBigIntValue(aB(ao(bv, bs), "0"))
246+ let by = parseBigIntValue(aB(ao(bu, bs), "0"))
247+ let bz = toInt(fraction((bx - by), bt, g))
248+ let bA = ar(W, bs)
249+ let bB = ay(bA, 0)
250+ $Tuple4((bB + bz), bB, bz, bA)
223251 }
224252
225253
226-func bp (ab) = ((ab / j) * j)
254+func bC (ai) = ((ai / j) * j)
227255
228256
229-func bq (br,bs,bt) = {
230- let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br))
231- if ((bu == 0))
257+func bD (bE,bF,bG) = {
258+ let bH = valueOrErrorMessage(indexOf(bE, bF), ((("there is no substring " + bF) + " in ") + bE))
259+ if ((bH == 0))
232260 then 0
233261 else {
234- let bv = take(br, bu)
235- (size(split(bv, bt)) - 1)
262+ let bI = take(bE, bH)
263+ (size(split(bI, bG)) - 1)
236264 }
237265 }
238266
239267
240-let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
268+let bJ = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
241269
242-let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
270+let bK = (bJ + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
243271
244-func by (bz) = {
245- let bA = (size(bz) - 1)
246- func bB (bC,E) = if ((bA > E))
247- then bC
248- else (bC :+ "0")
272+func bL (bM) = {
273+ let bN = (size(bM) - 1)
274+ func bO (bP,G) = if ((bN > G))
275+ then bP
276+ else (bP :+ "0")
249277
250- let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
251- let bE = size(bD)
252- let bF = bz
253- func bG (bH,bI) = if ((bI >= bE))
254- then bH
255- else bB(bH, bD[bI])
278+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
279+ let bR = size(bQ)
280+ let bS = bM
281+ func bT (bU,bV) = if ((bV >= bR))
282+ then bU
283+ else bO(bU, bQ[bV])
256284
257- func bJ (bH,bI) = if ((bI >= bE))
258- then bH
285+ func bW (bU,bV) = if ((bV >= bR))
286+ then bU
259287 else throw("List size exceeds 18")
260288
261- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
289+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
262290 }
263291
264292
265-func bK (bz) = {
266- let bA = (size(split_4C(bz, b)) - 1)
267- func bL (bC,E) = if ((bA > E))
268- then bC
269- else (bC + "__0")
293+func bX (bM) = {
294+ let bN = (size(split_4C(bM, b)) - 1)
295+ func bY (bP,G) = if ((bN > G))
296+ then bP
297+ else (bP + "__0")
270298
271- let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
272- let bE = size(bD)
273- let bF = bz
274- func bG (bH,bI) = if ((bI >= bE))
275- then bH
276- else bL(bH, bD[bI])
299+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
300+ let bR = size(bQ)
301+ let bS = bM
302+ func bT (bU,bV) = if ((bV >= bR))
303+ then bU
304+ else bY(bU, bQ[bV])
277305
278- func bJ (bH,bI) = if ((bI >= bE))
279- then bH
306+ func bW (bU,bV) = if ((bV >= bR))
307+ then bU
280308 else throw("List size exceeds 18")
281309
282- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
310+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
283311 }
284312
285313
286-func bM (bN,S,bO) = {
287- let bg = toBigInt(bO)
288- let bP = ag(S)
289- let bh = ar(bP, -1)
290- let bi = ar(af(), -1)
291- func bQ (bR,bS) = {
292- let bT = be(S, bS, bg, bh, bi)
293- let bU = bT._1
294- let bV = bT._2
295- let bW = bT._3
296- let bn = bT._4
297- (bR :+ IntegerEntry(bn, bU))
314+func bZ (ca,W,cb) = {
315+ let bt = toBigInt(cb)
316+ let cc = an(W)
317+ let bu = ay(cc, -1)
318+ let bv = ay(am(), -1)
319+ func cd (ce,cf) = {
320+ let cg = br(W, cf, bt, bu, bv)
321+ let ch = cg._1
322+ let ci = cg._2
323+ let cj = cg._3
324+ let bA = cg._4
325+ (ce :+ IntegerEntry(bA, ch))
298326 }
299327
300- if (if ((bi == -1))
301- then (bh == -1)
328+ if (if ((bv == -1))
329+ then (bu == -1)
302330 else false)
303331 then nil
304- else if (if ((bi == -1))
305- then (bh > -1)
332+ else if (if ((bv == -1))
333+ then (bu > -1)
306334 else false)
307335 then throw("invalid depositNumLast and depositNumUser state")
308- else if (if ((bi > -1))
309- then (bh >= -1)
336+ else if (if ((bv > -1))
337+ then (bu >= -1)
310338 else false)
311- then if (bN)
312- then [IntegerEntry(bP, bi)]
339+ then if (ca)
340+ then [IntegerEntry(cc, bv)]
313341 else ({
314- let bD = bd
315- let bE = size(bD)
316- let bF = nil
317- func bG (bH,bI) = if ((bI >= bE))
318- then bH
319- else bQ(bH, bD[bI])
342+ let bQ = bq
343+ let bR = size(bQ)
344+ let bS = nil
345+ func bT (bU,bV) = if ((bV >= bR))
346+ then bU
347+ else cd(bU, bQ[bV])
320348
321- func bJ (bH,bI) = if ((bI >= bE))
322- then bH
349+ func bW (bU,bV) = if ((bV >= bR))
350+ then bU
323351 else throw("List size exceeds 9")
324352
325- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
326- } :+ IntegerEntry(bP, bi))
327- else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh)))
353+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
354+ } :+ IntegerEntry(cc, bv))
355+ else throw(((("uncovered condition: depositNumLast=" + toString(bv)) + " depositNumUser=") + toString(bu)))
328356 }
329357
330358
331-func bX (aj,bY) = {
332- let bZ = am(aj)
333- let ca = ar(bZ, 0)
334- IntegerEntry(bZ, (ca + bY))
359+func ck (aq,cl) = {
360+ let cm = at(aq)
361+ let cn = ay(cm, 0)
362+ IntegerEntry(cm, (cn + cl))
335363 }
336364
337365
338-func cb (S,cc) = {
339- let cd = toString(S)
340- if ((size(cc.payments) > 0))
366+func co (W,cp) = {
367+ let cq = toString(W)
368+ if ((size(cp.payments) > 0))
341369 then throw("payments are not accepted")
342370 else {
343- let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0))
344- let bN = ce._1
345- let bO = ce._2
346- let cf = ce._3
347- let bg = toBigInt(bO)
348- let bP = ag(cd)
349- let bh = ar(bP, -1)
350- let bi = ar(af(), -1)
351- func cg (bR,bS) = {
352- let ch = be(cd, bS, bg, bh, bi)
353- let bU = ch._1
354- let bV = ch._2
355- let bW = ch._3
356- let bn = ch._4
357- let ci = al(cd, bS)
358- let cj = bR
359- let ck = cj._1
360- let cl = cj._2
361- let cm = makeString([bS, toString(bU)], ":")
362- let cn = makeString([cl, cm], "_")
363- if ((0 >= bU))
364- then $Tuple2(ck, cn)
365- else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn)
371+ let cr = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
372+ let ca = cr._1
373+ let cb = cr._2
374+ let cs = cr._3
375+ let bh = cr._4
376+ let bt = toBigInt(bh)
377+ let cc = an(cq)
378+ let bu = ay(cc, -1)
379+ let bv = ay(am(), -1)
380+ func ct (ce,cf) = {
381+ let cu = br(cq, cf, bt, bu, bv)
382+ let ch = cu._1
383+ let ci = cu._2
384+ let cj = cu._3
385+ let bA = cu._4
386+ let cv = as(cq, cf)
387+ let cw = ce
388+ let cx = cw._1
389+ let cy = cw._2
390+ let cz = makeString([cf, toString(ch)], ":")
391+ let cA = makeString([cy, cz], "_")
392+ if ((0 >= ch))
393+ then $Tuple2(cx, cA)
394+ else $Tuple2((((cx :+ ScriptTransfer(W, ch, aE(cf))) :+ IntegerEntry(cv, (valueOrElse(getInteger(cv), 0) + ch))) :+ IntegerEntry(bA, 0)), cA)
366395 }
367396
368- let co = {
369- let bD = bd
370- let bE = size(bD)
371- let bF = $Tuple2(nil, "")
372- func bG (bH,bI) = if ((bI >= bE))
373- then bH
374- else cg(bH, bD[bI])
397+ let cB = {
398+ let bQ = bq
399+ let bR = size(bQ)
400+ let bS = $Tuple2(nil, "")
401+ func bT (bU,bV) = if ((bV >= bR))
402+ then bU
403+ else ct(bU, bQ[bV])
375404
376- func bJ (bH,bI) = if ((bI >= bE))
377- then bH
405+ func bW (bU,bV) = if ((bV >= bR))
406+ then bU
378407 else throw("List size exceeds 9")
379408
380- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
409+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
381410 }
382- let cp = co._1
383- let cq = co._2
384- if ((0 >= size(cp)))
411+ let cC = cB._1
412+ let cD = cB._2
413+ if ((0 >= size(cC)))
385414 then $Tuple2(nil, 0)
386- else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp))
415+ else $Tuple2(((cC :+ IntegerEntry(cc, bv)) :+ aT(W, cp.transactionId, drop(cD, 1))), size(cC))
387416 }
388417 }
389418
390419
391-@Callable(cc)
392-func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this))
420+func cE (W) = {
421+ let x = Z(W)
422+ let aH = valueOrElse(getBoolean(this, x), false)
423+ $Tuple2(x, aH)
424+ }
425+
426+
427+func cF (W,cp) = if (!(bk(height)))
428+ then throw("No 'Double gNSBT action' available now")
429+ else {
430+ let cG = co(W, cp)
431+ let cH = cG._1
432+ let cI = cG._2
433+ let cJ = valueOrElse(bm(W), $Tuple4(true, 0, -1, 0))
434+ let ca = cJ._1
435+ let cK = cJ._2
436+ let cL = cJ._3
437+ let cM = cJ._4
438+ if (ca)
439+ then throw("You have nothing to restake")
440+ else {
441+ let cN = (2 * cK)
442+ let cO = ax(ad())
443+ let bd = ay(ae(), cO)
444+ let cP = ((bd - cM) + cN)
445+ let cQ = cE(W)
446+ let cR = cQ._1
447+ let cS = cQ._2
448+ if (cS)
449+ then throw("User has already doubled its gNSBT value")
450+ else $Tuple2((((cH ++ be(W, cK, height, cN)) :+ IntegerEntry(ae(), cP)) :+ BooleanEntry(cR, true)), cI)
451+ }
452+ }
453+
454+
455+@Callable(cp)
456+func constructorV1 (cT,cU,cV,cW,cX) = if ((cp.caller != this))
393457 then throw("Permission denied")
394- else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)]
458+ else [StringEntry(R(), cT), StringEntry(S(), cU), IntegerEntry(T(), cV), IntegerEntry(U(), cW), StringEntry(al(), cX)]
395459
396460
397461
398-@Callable(cc)
462+@Callable(cp)
463+func constructorV2 (cY,cZ) = if ((cp.caller != this))
464+ then throw("Permission denied")
465+ else [IntegerEntry(y(), cY), IntegerEntry(z(), cZ)]
466+
467+
468+
469+@Callable(cp)
399470 func stake () = {
400- let cw = aY()
401- let cx = cw._1
402- let ct = cw._2
403- let cu = cw._3
404- if ((size(cc.payments) != 1))
471+ let da = bi()
472+ let db = da._1
473+ let cV = da._2
474+ let cW = da._3
475+ if ((size(cp.payments) != 1))
405476 then throw("Invalid payments size")
406477 else {
407- let cy = cc.payments[0]
408- let aW = cy.amount
409- let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected")
410- let bf = valueOrErrorMessage(cy.assetId, cz)
411- if ((bf != cx))
412- then throw(cz)
478+ let dc = cp.payments[0]
479+ let bn = dc.amount
480+ let dd = (("Invalid asset. " + toBase58String(db)) + " is expected")
481+ let bs = valueOrErrorMessage(dc.assetId, dd)
482+ if ((bs != db))
483+ then throw(dd)
413484 else {
414- let S = cc.caller
415- let cd = toString(cc.caller)
416- let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1))
417- let bN = cA._1
418- let cB = cA._2
419- let cC = cA._3
420- let cD = if (bN)
421- then aW
422- else (aW + cB)
423- let cE = if (bN)
485+ let W = cp.caller
486+ let cq = toString(cp.caller)
487+ let de = valueOrElse(bm(W), $Tuple4(true, 0, -1, 0))
488+ let ca = de._1
489+ let cK = de._2
490+ let cL = de._3
491+ let cM = de._4
492+ let df = if (ca)
493+ then bn
494+ else (bn + cK)
495+ let dg = if (ca)
424496 then height
425- else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil))
426- if ((ct > cD))
427- then throw(("Min lock amount is " + toString(ct)))
497+ else aG(invoke(I, "mergeStakesREADONLY", [bn, height, cK, cL, cW], nil))
498+ if ((cV > df))
499+ then throw(("Min lock amount is " + toString(cV)))
428500 else {
429- let cF = aN(aW, 1, if (bN)
501+ let cQ = cE(W)
502+ let cR = cQ._1
503+ let cS = cQ._2
504+ let dh = if (if (bk(height))
505+ then if (ca)
506+ then true
507+ else cS
508+ else false)
509+ then (2 * bn)
510+ else bn
511+ let di = if (ca)
512+ then [BooleanEntry(cR, true)]
513+ else nil
514+ let dj = aU(bn, 1, if (ca)
430515 then 1
431- else 0)
432- let cG = cF._1
433- let cH = cF._2
434- let cI = cF._3
435- ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG)
516+ else 0, dh)
517+ let dk = dj._1
518+ let dl = dj._2
519+ let dm = dj._3
520+ (((([aS("stake", W, cp.transactionId, cK, cL, df, dg)] ++ bZ(ca, cq, cK)) ++ be(W, df, dg, (cM + dh))) ++ dk) ++ di)
436521 }
437522 }
438523 }
440525
441526
442527
443-@Callable(cc)
444-func unstake (aW) = if ((size(cc.payments) != 0))
528+@Callable(cp)
529+func unstake (bn) = if ((size(cp.payments) != 0))
445530 then throw("unstake doesn't require any payment")
446531 else {
447- let S = cc.caller
448- let cd = toString(S)
449- let cJ = aY()
450- let cx = cJ._1
451- let ct = cJ._2
452- let cu = cJ._3
453- let cK = bb(S)
454- let bN = cK._1
455- let cB = cK._2
456- let cL = cK._3
457- if ((0 >= cB))
532+ let W = cp.caller
533+ let cq = toString(W)
534+ let dn = bi()
535+ let db = dn._1
536+ let cV = dn._2
537+ let cW = dn._3
538+ let do = bo(W)
539+ let ca = do._1
540+ let cK = do._2
541+ let dp = do._3
542+ let cM = do._4
543+ if ((0 >= cK))
458544 then throw("Nothing to unstake")
459- else if ((aW > cB))
460- then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB)))
545+ else if ((bn > cK))
546+ then throw(((("Requested " + toString(bn)) + ", but staked only ") + toString(cK)))
461547 else {
462- let cM = value(blockInfoByHeight(height)).timestamp
463- let cN = valueOrElse(getInteger(J, L(cd)), 0)
464- if ((cN >= cM))
465- then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN)))
548+ let dq = value(blockInfoByHeight(height)).timestamp
549+ let dr = valueOrElse(getInteger(L, P(cq)), 0)
550+ if ((dr >= dq))
551+ then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(dr)))
466552 else {
467- let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil))
468- let cP = aN(-(aW), if ((aW == cB))
553+ let ds = aG(invoke(I, "getUnstakeComissionAmountREADONLY", [bn, dp, cW], nil))
554+ let dt = (cM - cK)
555+ let du = min([bn, dt])
556+ let dv = (du + bn)
557+ let dw = aU(-(bn), if ((bn == cK))
469558 then -1
470- else 0, if ((aW == cB))
559+ else 0, if ((bn == cK))
471560 then -1
472- else 0)
473- let cG = cP._1
474- let cH = cP._2
475- let cI = cP._3
476- ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG)
561+ else 0, -(dv))
562+ let dk = dw._1
563+ let dl = dw._2
564+ let dm = dw._3
565+ ((([ScriptTransfer(W, (bn - ds), db), ScriptTransfer(K, ds, db), aS("unstake", W, cp.transactionId, cK, dp, (cK - bn), dp)] ++ bZ(false, cq, cK)) ++ be(W, (cK - bn), dp, (cM - dv))) ++ dk)
477566 }
478567 }
479568 }
480569
481570
482571
483-@Callable(cc)
572+@Callable(cp)
484573 func deposit () = {
485- let cH = ar(X(), 0)
486- if ((0 > cH))
574+ let dl = ay(ae(), ay(ad(), 0))
575+ if ((0 > dl))
487576 then throw("TODO: case is not supported")
488577 else {
489- let cQ = af()
490- let bi = ar(cQ, -1)
491- let cR = (bi + 1)
492- let cS = ac()
493- let cT = aa(bp(lastBlock.timestamp))
494- let cU = by(split(valueOrElse(getString(cS), bx), b))
495- func cV (bC,cW) = {
496- let aW = cW.amount
497- let cX = toBase58String(valueOrElse(cW.assetId, i))
498- if (!(contains(bc, cX)))
499- then throw(((bc + " doesn't contain ") + cX))
500- else if ((cH == 0))
501- then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW))
578+ let dx = am()
579+ let bv = ay(dx, -1)
580+ let dy = (bv + 1)
581+ let dz = aj()
582+ let dA = ah(bC(lastBlock.timestamp))
583+ let dB = bL(split(valueOrElse(getString(dz), bK), b))
584+ func dC (bP,dD) = {
585+ let bn = dD.amount
586+ let dE = toBase58String(valueOrElse(dD.assetId, i))
587+ if (!(contains(bp, dE)))
588+ then throw(((bp + " doesn't contain ") + dE))
589+ else if ((dl == 0))
590+ then $Tuple4((bP._1 :+ ck(dE, bn)), (bP._2 :+ dE), (bP._3 :+ toBigInt(0)), (bP._4 :+ bn))
502591 else {
503- let cY = fraction(toBigInt(aW), g, toBigInt(cH))
504- $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW))
592+ let dF = fraction(toBigInt(bn), g, toBigInt(dl))
593+ $Tuple4(bP._1, (bP._2 :+ dE), (bP._3 :+ dF), (bP._4 :+ bn))
505594 }
506595 }
507596
508- let cZ = {
509- let bD = cc.payments
510- let bE = size(bD)
511- let bF = $Tuple4(nil, nil, nil, nil)
512- func bG (bH,bI) = if ((bI >= bE))
513- then bH
514- else cV(bH, bD[bI])
597+ let dG = {
598+ let bQ = cp.payments
599+ let bR = size(bQ)
600+ let bS = $Tuple4(nil, nil, nil, nil)
601+ func bT (bU,bV) = if ((bV >= bR))
602+ then bU
603+ else dC(bU, bQ[bV])
515604
516- func bJ (bH,bI) = if ((bI >= bE))
517- then bH
605+ func bW (bU,bV) = if ((bV >= bR))
606+ then bU
518607 else throw("List size exceeds 10")
519608
520- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
609+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
521610 }
522- func da (bR,db) = {
523- let dc = bR._3
524- let dd = au(ah(bi, db), "0")
525- let E = indexOf(cZ._2, db)
526- let de = if (isDefined(E))
611+ func dH (ce,dI) = {
612+ let dJ = ce._3
613+ let dK = aB(ao(bv, dI), "0")
614+ let G = indexOf(dG._2, dI)
615+ let dL = if (isDefined(G))
527616 then {
528- let df = value(E)
529- let dg = cZ._4[df]
530- $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg)))
617+ let dM = value(G)
618+ let dN = dG._4[dM]
619+ $Tuple2(toString((parseBigIntValue(dK) + dG._3[dM])), toString((parseIntValue(dB[(dJ + 1)]) + dN)))
531620 }
532- else $Tuple2(dd, cU[(dc + 1)])
533- $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1))
621+ else $Tuple2(dK, dB[(dJ + 1)])
622+ $Tuple3((ce._1 :+ StringEntry(ao(dy, dI), dL._1)), ((ce._2 + b) + dL._2), (dJ + 1))
534623 }
535624
536- let dh = {
537- let bD = bd
538- let bE = size(bD)
539- let bF = $Tuple3(nil, bw, 0)
540- func di (bH,bI) = if ((bI >= bE))
541- then bH
542- else da(bH, bD[bI])
625+ let dO = {
626+ let bQ = bq
627+ let bR = size(bQ)
628+ let bS = $Tuple3(nil, bJ, 0)
629+ func dP (bU,bV) = if ((bV >= bR))
630+ then bU
631+ else dH(bU, bQ[bV])
543632
544- func dj (bH,bI) = if ((bI >= bE))
545- then bH
633+ func dQ (bU,bV) = if ((bV >= bR))
634+ then bU
546635 else throw("List size exceeds 9")
547636
548- dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
637+ dQ(dP(dP(dP(dP(dP(dP(dP(dP(dP(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
549638 }
550- let dk = bK(dh._2)
551- $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR)
639+ let dR = bX(dO._2)
640+ $Tuple2(((((dG._1 ++ dO._1) :+ IntegerEntry(dx, dy)) :+ StringEntry(dz, dR)) :+ StringEntry(dA, dR)), dy)
552641 }
553642 }
554643
555644
556645
557-@Callable(cc)
558-func claimRewards () = cb(cc.caller, cc)
646+@Callable(cp)
647+func claimRewards () = co(cp.caller, cp)
559648
560649
561650
562-@Callable(cc)
563-func claimRewardsByOriginCaller () = cb(cc.originCaller, cc)
651+@Callable(cp)
652+func claimRewardsByOriginCaller () = co(cp.originCaller, cp)
564653
565654
566655
567-@Callable(cc)
568-func unclaimedRewardsREADONLY (cd) = {
569- func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_")
656+@Callable(cp)
657+func x2Gnsbt () = cF(cp.caller, cp)
570658
571- let dm = if ((cd == ""))
659+
660+
661+@Callable(cp)
662+func x2GnsbtByOriginCaller () = cF(cp.originCaller, cp)
663+
664+
665+
666+@Callable(cp)
667+func unclaimedRewardsREADONLY (cq) = {
668+ func dS (ce,cf) = ((ce + makeString([cf, "0", "0"], ":")) + "_")
669+
670+ let dT = if ((cq == ""))
572671 then {
573- let bD = bd
574- let bE = size(bD)
575- let bF = ""
576- func bG (bH,bI) = if ((bI >= bE))
577- then bH
578- else dl(bH, bD[bI])
672+ let bQ = bq
673+ let bR = size(bQ)
674+ let bS = ""
675+ func bT (bU,bV) = if ((bV >= bR))
676+ then bU
677+ else dS(bU, bQ[bV])
579678
580- func bJ (bH,bI) = if ((bI >= bE))
581- then bH
679+ func bW (bU,bV) = if ((bV >= bR))
680+ then bU
582681 else throw("List size exceeds 9")
583682
584- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
683+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
585684 }
586685 else {
587- let S = addressFromStringValue(cd)
588- let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0))
589- let bN = dn._1
590- let bO = dn._2
591- let cf = dn._3
592- let bg = toBigInt(bO)
593- let bP = ag(cd)
594- let bh = ar(bP, -1)
595- let bi = ar(af(), -1)
596- func cg (bR,bS) = {
597- let do = be(cd, bS, bg, bh, bi)
598- let bU = do._1
599- let bV = do._2
600- let bW = do._3
601- let bn = do._4
602- let dp = valueOrElse(getInteger(al(cd, bS)), 0)
603- ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_")
686+ let W = addressFromStringValue(cq)
687+ let dU = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
688+ let ca = dU._1
689+ let cb = dU._2
690+ let cs = dU._3
691+ let dV = dU._4
692+ let bt = toBigInt(dV)
693+ let cc = an(cq)
694+ let bu = ay(cc, -1)
695+ let bv = ay(am(), -1)
696+ func ct (ce,cf) = {
697+ let dW = br(cq, cf, bt, bu, bv)
698+ let ch = dW._1
699+ let ci = dW._2
700+ let cj = dW._3
701+ let bA = dW._4
702+ let dX = valueOrElse(getInteger(as(cq, cf)), 0)
703+ ((ce + makeString([cf, toString(ch), toString(dX)], ":")) + "_")
604704 }
605705
606- let bD = bd
607- let bE = size(bD)
608- let bF = ""
609- func bG (bH,bI) = if ((bI >= bE))
610- then bH
611- else cg(bH, bD[bI])
706+ let bQ = bq
707+ let bR = size(bQ)
708+ let bS = ""
709+ func bT (bU,bV) = if ((bV >= bR))
710+ then bU
711+ else ct(bU, bQ[bV])
612712
613- func bJ (bH,bI) = if ((bI >= bE))
614- then bH
713+ func bW (bU,bV) = if ((bV >= bR))
714+ then bU
615715 else throw("List size exceeds 9")
616716
617- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
717+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
618718 }
619- $Tuple2(nil, dropRight(dm, 1))
719+ $Tuple2(nil, dropRight(dT, 1))
620720 }
621721
622722
623723
624-@Callable(cc)
625-func nsbtUnstakingSYSREADONLY (dq,dr) = {
626- let ds = if ((dq == ""))
724+@Callable(cp)
725+func nsbtUnstakingSYSREADONLY (dY,dZ) = {
726+ let ea = if ((dY == ""))
627727 then [0, 0, 0, 0]
628728 else {
629- let S = addressFromStringValue(dq)
630- let dt = aY()
631- let du = dt._1
632- let ct = dt._2
633- let cu = dt._3
634- let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0))
635- let bN = dv._1
636- let bO = dv._2
637- let cL = dv._3
638- let dw = if ((dr > bO))
639- then bO
640- else dr
641- let dx = (bO - dw)
642- let cO = if ((dw == 0))
729+ let W = addressFromStringValue(dY)
730+ let eb = bi()
731+ let ec = eb._1
732+ let cV = eb._2
733+ let cW = eb._3
734+ let ed = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
735+ let ca = ed._1
736+ let cb = ed._2
737+ let dp = ed._3
738+ let ee = if ((dZ > cb))
739+ then cb
740+ else dZ
741+ let ef = (cb - ee)
742+ let ds = if ((ee == 0))
643743 then 0
644- else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil))
645- let dy = (dw - cO)
646-[bO, dx, dy, cO]
744+ else aG(invoke(I, "getUnstakeComissionAmountREADONLY", [ee, dp, cW], nil))
745+ let eg = (ee - ds)
746+[cb, ef, eg, ds]
647747 }
648- $Tuple2(nil, ds)
748+ $Tuple2(nil, ea)
649749 }
650750
651751
652752
653-@Callable(cc)
654-func nsbtStakingSYSREADONLY (cd,dz) = {
655- let dA = ar(X(), 0)
656- if ((cd == ""))
657- then $Tuple2(nil, [0, dA, 0])
753+@Callable(cp)
754+func nsbtStakingSYSREADONLY (cq,eh) = {
755+ let ei = ay(ad(), 0)
756+ let bd = ay(ae(), ei)
757+ if ((cq == ""))
758+ then $Tuple2(nil, [0, ei, 0, 0, bd])
658759 else {
659- let S = av(cd)
660- let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0))
661- let bN = dB._1
662- let dC = dB._2
663- let cf = dB._3
664- $Tuple2(nil, [dC, dA, cf])
760+ let W = aC(cq)
761+ let ej = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
762+ let ca = ej._1
763+ let ek = ej._2
764+ let cs = ej._3
765+ let dV = ej._4
766+ $Tuple2(nil, [ek, ei, cs, dV, bd])
665767 }
666768 }
667769
668770
669-@Verifier(dD)
670-func dE () = {
671- let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
672- let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b)
673- let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0])))
771+@Verifier(el)
772+func em () = {
773+ let en = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
774+ let eo = split(valueOrElse(getString(H, "%s__multisig"), en), b)
775+ let ep = ((((if (sigVerify(el.bodyBytes, el.proofs[0], fromBase58String(eo[0])))
674776 then 1
675- else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1])))
777+ else 0) + (if (sigVerify(el.bodyBytes, el.proofs[1], fromBase58String(eo[1])))
676778 then 1
677- else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2])))
779+ else 0)) + (if (sigVerify(el.bodyBytes, el.proofs[2], fromBase58String(eo[2])))
678780 then 1
679- else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3])))
781+ else 0)) + (if (sigVerify(el.bodyBytes, el.proofs[3], fromBase58String(eo[3])))
680782 then 2
681783 else 0))
682- (dH >= 3)
784+ (ep >= 3)
683785 }
684786
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = "__"
77
88 let c = 1000000
99
1010 let d = 100000000
1111
1212 let e = toBigInt(c)
1313
1414 let f = toBigInt(d)
1515
1616 let g = toBigInt(1000000000000000000)
1717
1818 let h = "WAVES"
1919
2020 let i = fromBase58String(h)
2121
2222 let j = 86400000
2323
2424 let k = 9
2525
2626 let l = 1
2727
2828 let m = 2
2929
3030 let n = 3
3131
3232 let o = 4
3333
3434 let p = 5
3535
3636 let q = 6
3737
3838 let r = 7
3939
4040 let s = 8
4141
4242 let t = 9
4343
4444 let u = 13
4545
4646 func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
4747
4848
49-func y () = "%s%s__config__controlAddress"
49+func y () = "%s%s__config__x2GnsbtOfferHeightStart"
5050
5151
52-func z () = "%s__controlConfig"
52+func z () = "%s%s__config__x2GnsbtOfferHeightEnd"
5353
5454
55-func A (B) = split_4C(v(B, z()), b)
55+func A () = "%s%s__config__controlAddress"
5656
5757
58-func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E)))
58+func B () = "%s__controlConfig"
5959
6060
61-let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
62-
63-let D = A(F)
64-
65-let G = C(D, o)
66-
67-let H = C(D, l)
68-
69-let I = C(D, m)
70-
71-let J = C(D, u)
72-
73-func K () = "bond_asset_id"
61+func C (D) = split_4C(v(D, B()), b)
7462
7563
76-func L (M) = ("%s%s_userGnsbtReleaseTime__" + M)
64+func E (F,G) = valueOrErrorMessage(addressFromString(F[G]), ("Control cfg doesn't contain address at index " + toString(G)))
7765
7866
79-func N () = "%s__neutrinoContractAddress"
67+let H = addressFromStringValue(valueOrElse(getString(this, A()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
68+
69+let F = C(H)
70+
71+let I = E(F, o)
72+
73+let J = E(F, l)
74+
75+let K = E(F, m)
76+
77+let L = E(F, u)
78+
79+let M = valueOrElse(getInteger(this, y()), 0)
80+
81+let N = valueOrElse(getInteger(this, z()), 0)
82+
83+func O () = "bond_asset_id"
8084
8185
82-func O () = "%s__mathContract"
86+func P (Q) = ("%s%s_userGnsbtReleaseTime__" + Q)
8387
8488
85-func P () = "%s__minLockAmount"
89+func R () = "%s__neutrinoContractAddress"
8690
8791
88-func Q () = "%s__halfLife"
92+func S () = "%s__mathContract"
8993
9094
91-func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a)
95+func T () = "%s__minLockAmount"
9296
9397
94-func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a)
98+func U () = "%s__halfLife"
9599
96100
97-func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a)
101+func V (W) = makeString(["%s%s%s", "paramByUser", toString(W), "amount"], a)
98102
99103
100-func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
104+func X (W) = makeString(["%s%s%s", "paramByUser", toString(W), "start"], a)
101105
102106
103-func Y () = makeString(["%s%s", "stats", "locksCount"], a)
107+func Y (W) = makeString(["%s%s%s", "paramByUser", toString(W), "gNsbt"], a)
104108
105109
106-func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a)
110+func Z (W) = makeString(["%s%s%s", "paramByUser", toString(W), "consentedToX2Gnsbt"], a)
107111
108112
109-func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a)
113+func aa (ab,W,ac) = makeString(["%s%s%s%s", "history", ab, toString(W), toBase58String(ac)], a)
110114
111115
112-func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
116+func ad () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
113117
114118
115-func ad () = "%s__nextPeriod"
119+func ae () = makeString(["%s%s", "stats", "activeTotalGnsbt"], a)
116120
117121
118-func ae () = "supportedRewardAssets"
122+func af () = makeString(["%s%s", "stats", "locksCount"], a)
119123
120124
121-func af () = makeString(["%s%s%s", "dep", "lastNum"], a)
125+func ag () = makeString(["%s%s", "stats", "activeUsersCount"], a)
122126
123127
124-func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a)
128+func ah (ai) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ai)], a)
125129
126130
127-func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a)
131+func aj () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a)
128132
129133
130-func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a)
134+func ak () = "%s__nextPeriod"
131135
132136
133-func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a)
137+func al () = "supportedRewardAssets"
134138
135139
136-func am (aj) = makeString(["%s%s", "notDistributed", aj], a)
140+func am () = makeString(["%s%s%s", "dep", "lastNum"], a)
137141
138142
139-func an (ao,ap) = fraction(toBigInt(ao), g, ap)
143+func an (W) = makeString(["%s%s%s", "userRwdFromDepNum", W], a)
140144
141145
142-func aq (x) = valueOrElse(getInteger(this, x), 0)
146+func ao (ap,aq) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ap), aq], a)
143147
144148
145-func ar (x,as) = valueOrElse(getInteger(this, x), as)
149+func ar (W,aq) = makeString(["%s%s%s", "rwd", W, aq], a)
146150
147151
148-func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
152+func as (W,aq) = makeString(["%s%s%s", "clm", W, aq], a)
149153
150154
151-func au (x,as) = valueOrElse(getString(this, x), as)
155+func at (aq) = makeString(["%s%s", "notDistributed", aq], a)
152156
153157
154-func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw))
158+func au (av,aw) = fraction(toBigInt(av), g, aw)
155159
156160
157-func ax (ay) = if ((ay == h))
158- then unit
159- else fromBase58String(ay)
161+func ax (x) = valueOrElse(getInteger(this, x), 0)
160162
161163
162-func az (aA) = {
163- let aB = aA
164- if ($isInstanceOf(aB, "Int"))
164+func ay (x,az) = valueOrElse(getInteger(this, x), az)
165+
166+
167+func aA (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined"))
168+
169+
170+func aB (x,az) = valueOrElse(getString(this, x), az)
171+
172+
173+func aC (aD) = valueOrErrorMessage(addressFromString(aD), ("couldn't parse passed addressStr=" + aD))
174+
175+
176+func aE (aF) = if ((aF == h))
177+ then unit
178+ else fromBase58String(aF)
179+
180+
181+func aG (aH) = {
182+ let aI = aH
183+ if ($isInstanceOf(aI, "Int"))
165184 then {
166- let aC = aB
167- aC
185+ let aJ = aI
186+ aJ
168187 }
169188 else throw("fail to cast into Int")
170189 }
171190
172191
173-func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a)
192+func aK (aL,aM,aN,aO) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aL), toString(aM), toString(aN), toString(aO)], a)
174193
175194
176-func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a)
195+func aP (aQ,aR) = makeString(["%s%d%d%s", aQ, toString(lastBlock.height), toString(lastBlock.timestamp), aR], a)
177196
178197
179-func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH))
198+func aS (ab,W,ac,aL,aM,aN,aO) = StringEntry(aa(ab, W, ac), aK(aL, aM, aN, aO))
180199
181200
182-func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK))
201+func aT (W,ac,aR) = StringEntry(aa("claim", W, ac), aP(toString(W), aR))
183202
184203
185-func aN (aO,aP,aQ) = {
186- let aR = aq(Y())
187- let aS = aq(Z())
188- let aT = aq(X())
189- let aU = (aT + aO)
190- $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU)
204+func aU (aV,aW,aX,aY) = {
205+ let aZ = ax(af())
206+ let ba = ax(ag())
207+ let bb = ax(ad())
208+ let bc = (bb + aV)
209+ let bd = ay(ae(), bb)
210+ $Tuple3([IntegerEntry(af(), (aZ + aW)), IntegerEntry(ag(), (ba + aX)), IntegerEntry(ad(), bc), IntegerEntry(ae(), (bd + aY))], bb, bc)
191211 }
192212
193213
194-func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)]
214+func be (W,bf,bg,bh) = [IntegerEntry(V(W), bf), IntegerEntry(Y(W), bh), IntegerEntry(X(W), bg)]
195215
196216
197-func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q()))
217+func bi () = $Tuple3(fromBase58String(getStringValue(J, O())), aA(T()), aA(U()))
198218
199219
200-func aZ (S) = (ar(R(S), 0) > 0)
220+func bj (W) = (ay(V(W), 0) > 0)
201221
202222
203-func ba (S) = if (aZ(S))
204- then $Tuple3(false, at(R(S)), at(T(S)))
223+func bk (bl) = if ((bl >= M))
224+ then (N >= bl)
225+ else false
226+
227+
228+func bm (W) = if (bj(W))
229+ then {
230+ let bn = aA(V(W))
231+ $Tuple4(false, bn, aA(X(W)), ay(Y(W), bn))
232+ }
205233 else unit
206234
207235
208-func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined"))
236+func bo (W) = valueOrErrorMessage(bm(W), (("User " + toString(W)) + " is not defined"))
209237
210238
211-let bc = au(ae(), "")
239+let bp = aB(al(), "")
212240
213-let bd = split(bc, "_")
241+let bq = split(bp, "_")
214242
215-func be (S,bf,bg,bh,bi) = {
216- let bj = ah(bi, bf)
217- let bk = parseBigIntValue(au(ah(bi, bf), "0"))
218- let bl = parseBigIntValue(au(ah(bh, bf), "0"))
219- let bm = toInt(fraction((bk - bl), bg, g))
220- let bn = ak(S, bf)
221- let bo = ar(bn, 0)
222- $Tuple4((bo + bm), bo, bm, bn)
243+func br (W,bs,bt,bu,bv) = {
244+ let bw = ao(bv, bs)
245+ let bx = parseBigIntValue(aB(ao(bv, bs), "0"))
246+ let by = parseBigIntValue(aB(ao(bu, bs), "0"))
247+ let bz = toInt(fraction((bx - by), bt, g))
248+ let bA = ar(W, bs)
249+ let bB = ay(bA, 0)
250+ $Tuple4((bB + bz), bB, bz, bA)
223251 }
224252
225253
226-func bp (ab) = ((ab / j) * j)
254+func bC (ai) = ((ai / j) * j)
227255
228256
229-func bq (br,bs,bt) = {
230- let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br))
231- if ((bu == 0))
257+func bD (bE,bF,bG) = {
258+ let bH = valueOrErrorMessage(indexOf(bE, bF), ((("there is no substring " + bF) + " in ") + bE))
259+ if ((bH == 0))
232260 then 0
233261 else {
234- let bv = take(br, bu)
235- (size(split(bv, bt)) - 1)
262+ let bI = take(bE, bH)
263+ (size(split(bI, bG)) - 1)
236264 }
237265 }
238266
239267
240-let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
268+let bJ = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
241269
242-let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
270+let bK = (bJ + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0")
243271
244-func by (bz) = {
245- let bA = (size(bz) - 1)
246- func bB (bC,E) = if ((bA > E))
247- then bC
248- else (bC :+ "0")
272+func bL (bM) = {
273+ let bN = (size(bM) - 1)
274+ func bO (bP,G) = if ((bN > G))
275+ then bP
276+ else (bP :+ "0")
249277
250- let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
251- let bE = size(bD)
252- let bF = bz
253- func bG (bH,bI) = if ((bI >= bE))
254- then bH
255- else bB(bH, bD[bI])
278+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
279+ let bR = size(bQ)
280+ let bS = bM
281+ func bT (bU,bV) = if ((bV >= bR))
282+ then bU
283+ else bO(bU, bQ[bV])
256284
257- func bJ (bH,bI) = if ((bI >= bE))
258- then bH
285+ func bW (bU,bV) = if ((bV >= bR))
286+ then bU
259287 else throw("List size exceeds 18")
260288
261- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
289+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
262290 }
263291
264292
265-func bK (bz) = {
266- let bA = (size(split_4C(bz, b)) - 1)
267- func bL (bC,E) = if ((bA > E))
268- then bC
269- else (bC + "__0")
293+func bX (bM) = {
294+ let bN = (size(split_4C(bM, b)) - 1)
295+ func bY (bP,G) = if ((bN > G))
296+ then bP
297+ else (bP + "__0")
270298
271- let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
272- let bE = size(bD)
273- let bF = bz
274- func bG (bH,bI) = if ((bI >= bE))
275- then bH
276- else bL(bH, bD[bI])
299+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
300+ let bR = size(bQ)
301+ let bS = bM
302+ func bT (bU,bV) = if ((bV >= bR))
303+ then bU
304+ else bY(bU, bQ[bV])
277305
278- func bJ (bH,bI) = if ((bI >= bE))
279- then bH
306+ func bW (bU,bV) = if ((bV >= bR))
307+ then bU
280308 else throw("List size exceeds 18")
281309
282- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
310+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
283311 }
284312
285313
286-func bM (bN,S,bO) = {
287- let bg = toBigInt(bO)
288- let bP = ag(S)
289- let bh = ar(bP, -1)
290- let bi = ar(af(), -1)
291- func bQ (bR,bS) = {
292- let bT = be(S, bS, bg, bh, bi)
293- let bU = bT._1
294- let bV = bT._2
295- let bW = bT._3
296- let bn = bT._4
297- (bR :+ IntegerEntry(bn, bU))
314+func bZ (ca,W,cb) = {
315+ let bt = toBigInt(cb)
316+ let cc = an(W)
317+ let bu = ay(cc, -1)
318+ let bv = ay(am(), -1)
319+ func cd (ce,cf) = {
320+ let cg = br(W, cf, bt, bu, bv)
321+ let ch = cg._1
322+ let ci = cg._2
323+ let cj = cg._3
324+ let bA = cg._4
325+ (ce :+ IntegerEntry(bA, ch))
298326 }
299327
300- if (if ((bi == -1))
301- then (bh == -1)
328+ if (if ((bv == -1))
329+ then (bu == -1)
302330 else false)
303331 then nil
304- else if (if ((bi == -1))
305- then (bh > -1)
332+ else if (if ((bv == -1))
333+ then (bu > -1)
306334 else false)
307335 then throw("invalid depositNumLast and depositNumUser state")
308- else if (if ((bi > -1))
309- then (bh >= -1)
336+ else if (if ((bv > -1))
337+ then (bu >= -1)
310338 else false)
311- then if (bN)
312- then [IntegerEntry(bP, bi)]
339+ then if (ca)
340+ then [IntegerEntry(cc, bv)]
313341 else ({
314- let bD = bd
315- let bE = size(bD)
316- let bF = nil
317- func bG (bH,bI) = if ((bI >= bE))
318- then bH
319- else bQ(bH, bD[bI])
342+ let bQ = bq
343+ let bR = size(bQ)
344+ let bS = nil
345+ func bT (bU,bV) = if ((bV >= bR))
346+ then bU
347+ else cd(bU, bQ[bV])
320348
321- func bJ (bH,bI) = if ((bI >= bE))
322- then bH
349+ func bW (bU,bV) = if ((bV >= bR))
350+ then bU
323351 else throw("List size exceeds 9")
324352
325- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
326- } :+ IntegerEntry(bP, bi))
327- else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh)))
353+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
354+ } :+ IntegerEntry(cc, bv))
355+ else throw(((("uncovered condition: depositNumLast=" + toString(bv)) + " depositNumUser=") + toString(bu)))
328356 }
329357
330358
331-func bX (aj,bY) = {
332- let bZ = am(aj)
333- let ca = ar(bZ, 0)
334- IntegerEntry(bZ, (ca + bY))
359+func ck (aq,cl) = {
360+ let cm = at(aq)
361+ let cn = ay(cm, 0)
362+ IntegerEntry(cm, (cn + cl))
335363 }
336364
337365
338-func cb (S,cc) = {
339- let cd = toString(S)
340- if ((size(cc.payments) > 0))
366+func co (W,cp) = {
367+ let cq = toString(W)
368+ if ((size(cp.payments) > 0))
341369 then throw("payments are not accepted")
342370 else {
343- let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0))
344- let bN = ce._1
345- let bO = ce._2
346- let cf = ce._3
347- let bg = toBigInt(bO)
348- let bP = ag(cd)
349- let bh = ar(bP, -1)
350- let bi = ar(af(), -1)
351- func cg (bR,bS) = {
352- let ch = be(cd, bS, bg, bh, bi)
353- let bU = ch._1
354- let bV = ch._2
355- let bW = ch._3
356- let bn = ch._4
357- let ci = al(cd, bS)
358- let cj = bR
359- let ck = cj._1
360- let cl = cj._2
361- let cm = makeString([bS, toString(bU)], ":")
362- let cn = makeString([cl, cm], "_")
363- if ((0 >= bU))
364- then $Tuple2(ck, cn)
365- else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn)
371+ let cr = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
372+ let ca = cr._1
373+ let cb = cr._2
374+ let cs = cr._3
375+ let bh = cr._4
376+ let bt = toBigInt(bh)
377+ let cc = an(cq)
378+ let bu = ay(cc, -1)
379+ let bv = ay(am(), -1)
380+ func ct (ce,cf) = {
381+ let cu = br(cq, cf, bt, bu, bv)
382+ let ch = cu._1
383+ let ci = cu._2
384+ let cj = cu._3
385+ let bA = cu._4
386+ let cv = as(cq, cf)
387+ let cw = ce
388+ let cx = cw._1
389+ let cy = cw._2
390+ let cz = makeString([cf, toString(ch)], ":")
391+ let cA = makeString([cy, cz], "_")
392+ if ((0 >= ch))
393+ then $Tuple2(cx, cA)
394+ else $Tuple2((((cx :+ ScriptTransfer(W, ch, aE(cf))) :+ IntegerEntry(cv, (valueOrElse(getInteger(cv), 0) + ch))) :+ IntegerEntry(bA, 0)), cA)
366395 }
367396
368- let co = {
369- let bD = bd
370- let bE = size(bD)
371- let bF = $Tuple2(nil, "")
372- func bG (bH,bI) = if ((bI >= bE))
373- then bH
374- else cg(bH, bD[bI])
397+ let cB = {
398+ let bQ = bq
399+ let bR = size(bQ)
400+ let bS = $Tuple2(nil, "")
401+ func bT (bU,bV) = if ((bV >= bR))
402+ then bU
403+ else ct(bU, bQ[bV])
375404
376- func bJ (bH,bI) = if ((bI >= bE))
377- then bH
405+ func bW (bU,bV) = if ((bV >= bR))
406+ then bU
378407 else throw("List size exceeds 9")
379408
380- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
409+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
381410 }
382- let cp = co._1
383- let cq = co._2
384- if ((0 >= size(cp)))
411+ let cC = cB._1
412+ let cD = cB._2
413+ if ((0 >= size(cC)))
385414 then $Tuple2(nil, 0)
386- else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp))
415+ else $Tuple2(((cC :+ IntegerEntry(cc, bv)) :+ aT(W, cp.transactionId, drop(cD, 1))), size(cC))
387416 }
388417 }
389418
390419
391-@Callable(cc)
392-func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this))
420+func cE (W) = {
421+ let x = Z(W)
422+ let aH = valueOrElse(getBoolean(this, x), false)
423+ $Tuple2(x, aH)
424+ }
425+
426+
427+func cF (W,cp) = if (!(bk(height)))
428+ then throw("No 'Double gNSBT action' available now")
429+ else {
430+ let cG = co(W, cp)
431+ let cH = cG._1
432+ let cI = cG._2
433+ let cJ = valueOrElse(bm(W), $Tuple4(true, 0, -1, 0))
434+ let ca = cJ._1
435+ let cK = cJ._2
436+ let cL = cJ._3
437+ let cM = cJ._4
438+ if (ca)
439+ then throw("You have nothing to restake")
440+ else {
441+ let cN = (2 * cK)
442+ let cO = ax(ad())
443+ let bd = ay(ae(), cO)
444+ let cP = ((bd - cM) + cN)
445+ let cQ = cE(W)
446+ let cR = cQ._1
447+ let cS = cQ._2
448+ if (cS)
449+ then throw("User has already doubled its gNSBT value")
450+ else $Tuple2((((cH ++ be(W, cK, height, cN)) :+ IntegerEntry(ae(), cP)) :+ BooleanEntry(cR, true)), cI)
451+ }
452+ }
453+
454+
455+@Callable(cp)
456+func constructorV1 (cT,cU,cV,cW,cX) = if ((cp.caller != this))
393457 then throw("Permission denied")
394- else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)]
458+ else [StringEntry(R(), cT), StringEntry(S(), cU), IntegerEntry(T(), cV), IntegerEntry(U(), cW), StringEntry(al(), cX)]
395459
396460
397461
398-@Callable(cc)
462+@Callable(cp)
463+func constructorV2 (cY,cZ) = if ((cp.caller != this))
464+ then throw("Permission denied")
465+ else [IntegerEntry(y(), cY), IntegerEntry(z(), cZ)]
466+
467+
468+
469+@Callable(cp)
399470 func stake () = {
400- let cw = aY()
401- let cx = cw._1
402- let ct = cw._2
403- let cu = cw._3
404- if ((size(cc.payments) != 1))
471+ let da = bi()
472+ let db = da._1
473+ let cV = da._2
474+ let cW = da._3
475+ if ((size(cp.payments) != 1))
405476 then throw("Invalid payments size")
406477 else {
407- let cy = cc.payments[0]
408- let aW = cy.amount
409- let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected")
410- let bf = valueOrErrorMessage(cy.assetId, cz)
411- if ((bf != cx))
412- then throw(cz)
478+ let dc = cp.payments[0]
479+ let bn = dc.amount
480+ let dd = (("Invalid asset. " + toBase58String(db)) + " is expected")
481+ let bs = valueOrErrorMessage(dc.assetId, dd)
482+ if ((bs != db))
483+ then throw(dd)
413484 else {
414- let S = cc.caller
415- let cd = toString(cc.caller)
416- let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1))
417- let bN = cA._1
418- let cB = cA._2
419- let cC = cA._3
420- let cD = if (bN)
421- then aW
422- else (aW + cB)
423- let cE = if (bN)
485+ let W = cp.caller
486+ let cq = toString(cp.caller)
487+ let de = valueOrElse(bm(W), $Tuple4(true, 0, -1, 0))
488+ let ca = de._1
489+ let cK = de._2
490+ let cL = de._3
491+ let cM = de._4
492+ let df = if (ca)
493+ then bn
494+ else (bn + cK)
495+ let dg = if (ca)
424496 then height
425- else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil))
426- if ((ct > cD))
427- then throw(("Min lock amount is " + toString(ct)))
497+ else aG(invoke(I, "mergeStakesREADONLY", [bn, height, cK, cL, cW], nil))
498+ if ((cV > df))
499+ then throw(("Min lock amount is " + toString(cV)))
428500 else {
429- let cF = aN(aW, 1, if (bN)
501+ let cQ = cE(W)
502+ let cR = cQ._1
503+ let cS = cQ._2
504+ let dh = if (if (bk(height))
505+ then if (ca)
506+ then true
507+ else cS
508+ else false)
509+ then (2 * bn)
510+ else bn
511+ let di = if (ca)
512+ then [BooleanEntry(cR, true)]
513+ else nil
514+ let dj = aU(bn, 1, if (ca)
430515 then 1
431- else 0)
432- let cG = cF._1
433- let cH = cF._2
434- let cI = cF._3
435- ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG)
516+ else 0, dh)
517+ let dk = dj._1
518+ let dl = dj._2
519+ let dm = dj._3
520+ (((([aS("stake", W, cp.transactionId, cK, cL, df, dg)] ++ bZ(ca, cq, cK)) ++ be(W, df, dg, (cM + dh))) ++ dk) ++ di)
436521 }
437522 }
438523 }
439524 }
440525
441526
442527
443-@Callable(cc)
444-func unstake (aW) = if ((size(cc.payments) != 0))
528+@Callable(cp)
529+func unstake (bn) = if ((size(cp.payments) != 0))
445530 then throw("unstake doesn't require any payment")
446531 else {
447- let S = cc.caller
448- let cd = toString(S)
449- let cJ = aY()
450- let cx = cJ._1
451- let ct = cJ._2
452- let cu = cJ._3
453- let cK = bb(S)
454- let bN = cK._1
455- let cB = cK._2
456- let cL = cK._3
457- if ((0 >= cB))
532+ let W = cp.caller
533+ let cq = toString(W)
534+ let dn = bi()
535+ let db = dn._1
536+ let cV = dn._2
537+ let cW = dn._3
538+ let do = bo(W)
539+ let ca = do._1
540+ let cK = do._2
541+ let dp = do._3
542+ let cM = do._4
543+ if ((0 >= cK))
458544 then throw("Nothing to unstake")
459- else if ((aW > cB))
460- then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB)))
545+ else if ((bn > cK))
546+ then throw(((("Requested " + toString(bn)) + ", but staked only ") + toString(cK)))
461547 else {
462- let cM = value(blockInfoByHeight(height)).timestamp
463- let cN = valueOrElse(getInteger(J, L(cd)), 0)
464- if ((cN >= cM))
465- then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN)))
548+ let dq = value(blockInfoByHeight(height)).timestamp
549+ let dr = valueOrElse(getInteger(L, P(cq)), 0)
550+ if ((dr >= dq))
551+ then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(dr)))
466552 else {
467- let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil))
468- let cP = aN(-(aW), if ((aW == cB))
553+ let ds = aG(invoke(I, "getUnstakeComissionAmountREADONLY", [bn, dp, cW], nil))
554+ let dt = (cM - cK)
555+ let du = min([bn, dt])
556+ let dv = (du + bn)
557+ let dw = aU(-(bn), if ((bn == cK))
469558 then -1
470- else 0, if ((aW == cB))
559+ else 0, if ((bn == cK))
471560 then -1
472- else 0)
473- let cG = cP._1
474- let cH = cP._2
475- let cI = cP._3
476- ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG)
561+ else 0, -(dv))
562+ let dk = dw._1
563+ let dl = dw._2
564+ let dm = dw._3
565+ ((([ScriptTransfer(W, (bn - ds), db), ScriptTransfer(K, ds, db), aS("unstake", W, cp.transactionId, cK, dp, (cK - bn), dp)] ++ bZ(false, cq, cK)) ++ be(W, (cK - bn), dp, (cM - dv))) ++ dk)
477566 }
478567 }
479568 }
480569
481570
482571
483-@Callable(cc)
572+@Callable(cp)
484573 func deposit () = {
485- let cH = ar(X(), 0)
486- if ((0 > cH))
574+ let dl = ay(ae(), ay(ad(), 0))
575+ if ((0 > dl))
487576 then throw("TODO: case is not supported")
488577 else {
489- let cQ = af()
490- let bi = ar(cQ, -1)
491- let cR = (bi + 1)
492- let cS = ac()
493- let cT = aa(bp(lastBlock.timestamp))
494- let cU = by(split(valueOrElse(getString(cS), bx), b))
495- func cV (bC,cW) = {
496- let aW = cW.amount
497- let cX = toBase58String(valueOrElse(cW.assetId, i))
498- if (!(contains(bc, cX)))
499- then throw(((bc + " doesn't contain ") + cX))
500- else if ((cH == 0))
501- then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW))
578+ let dx = am()
579+ let bv = ay(dx, -1)
580+ let dy = (bv + 1)
581+ let dz = aj()
582+ let dA = ah(bC(lastBlock.timestamp))
583+ let dB = bL(split(valueOrElse(getString(dz), bK), b))
584+ func dC (bP,dD) = {
585+ let bn = dD.amount
586+ let dE = toBase58String(valueOrElse(dD.assetId, i))
587+ if (!(contains(bp, dE)))
588+ then throw(((bp + " doesn't contain ") + dE))
589+ else if ((dl == 0))
590+ then $Tuple4((bP._1 :+ ck(dE, bn)), (bP._2 :+ dE), (bP._3 :+ toBigInt(0)), (bP._4 :+ bn))
502591 else {
503- let cY = fraction(toBigInt(aW), g, toBigInt(cH))
504- $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW))
592+ let dF = fraction(toBigInt(bn), g, toBigInt(dl))
593+ $Tuple4(bP._1, (bP._2 :+ dE), (bP._3 :+ dF), (bP._4 :+ bn))
505594 }
506595 }
507596
508- let cZ = {
509- let bD = cc.payments
510- let bE = size(bD)
511- let bF = $Tuple4(nil, nil, nil, nil)
512- func bG (bH,bI) = if ((bI >= bE))
513- then bH
514- else cV(bH, bD[bI])
597+ let dG = {
598+ let bQ = cp.payments
599+ let bR = size(bQ)
600+ let bS = $Tuple4(nil, nil, nil, nil)
601+ func bT (bU,bV) = if ((bV >= bR))
602+ then bU
603+ else dC(bU, bQ[bV])
515604
516- func bJ (bH,bI) = if ((bI >= bE))
517- then bH
605+ func bW (bU,bV) = if ((bV >= bR))
606+ then bU
518607 else throw("List size exceeds 10")
519608
520- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
609+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
521610 }
522- func da (bR,db) = {
523- let dc = bR._3
524- let dd = au(ah(bi, db), "0")
525- let E = indexOf(cZ._2, db)
526- let de = if (isDefined(E))
611+ func dH (ce,dI) = {
612+ let dJ = ce._3
613+ let dK = aB(ao(bv, dI), "0")
614+ let G = indexOf(dG._2, dI)
615+ let dL = if (isDefined(G))
527616 then {
528- let df = value(E)
529- let dg = cZ._4[df]
530- $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg)))
617+ let dM = value(G)
618+ let dN = dG._4[dM]
619+ $Tuple2(toString((parseBigIntValue(dK) + dG._3[dM])), toString((parseIntValue(dB[(dJ + 1)]) + dN)))
531620 }
532- else $Tuple2(dd, cU[(dc + 1)])
533- $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1))
621+ else $Tuple2(dK, dB[(dJ + 1)])
622+ $Tuple3((ce._1 :+ StringEntry(ao(dy, dI), dL._1)), ((ce._2 + b) + dL._2), (dJ + 1))
534623 }
535624
536- let dh = {
537- let bD = bd
538- let bE = size(bD)
539- let bF = $Tuple3(nil, bw, 0)
540- func di (bH,bI) = if ((bI >= bE))
541- then bH
542- else da(bH, bD[bI])
625+ let dO = {
626+ let bQ = bq
627+ let bR = size(bQ)
628+ let bS = $Tuple3(nil, bJ, 0)
629+ func dP (bU,bV) = if ((bV >= bR))
630+ then bU
631+ else dH(bU, bQ[bV])
543632
544- func dj (bH,bI) = if ((bI >= bE))
545- then bH
633+ func dQ (bU,bV) = if ((bV >= bR))
634+ then bU
546635 else throw("List size exceeds 9")
547636
548- dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
637+ dQ(dP(dP(dP(dP(dP(dP(dP(dP(dP(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
549638 }
550- let dk = bK(dh._2)
551- $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR)
639+ let dR = bX(dO._2)
640+ $Tuple2(((((dG._1 ++ dO._1) :+ IntegerEntry(dx, dy)) :+ StringEntry(dz, dR)) :+ StringEntry(dA, dR)), dy)
552641 }
553642 }
554643
555644
556645
557-@Callable(cc)
558-func claimRewards () = cb(cc.caller, cc)
646+@Callable(cp)
647+func claimRewards () = co(cp.caller, cp)
559648
560649
561650
562-@Callable(cc)
563-func claimRewardsByOriginCaller () = cb(cc.originCaller, cc)
651+@Callable(cp)
652+func claimRewardsByOriginCaller () = co(cp.originCaller, cp)
564653
565654
566655
567-@Callable(cc)
568-func unclaimedRewardsREADONLY (cd) = {
569- func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_")
656+@Callable(cp)
657+func x2Gnsbt () = cF(cp.caller, cp)
570658
571- let dm = if ((cd == ""))
659+
660+
661+@Callable(cp)
662+func x2GnsbtByOriginCaller () = cF(cp.originCaller, cp)
663+
664+
665+
666+@Callable(cp)
667+func unclaimedRewardsREADONLY (cq) = {
668+ func dS (ce,cf) = ((ce + makeString([cf, "0", "0"], ":")) + "_")
669+
670+ let dT = if ((cq == ""))
572671 then {
573- let bD = bd
574- let bE = size(bD)
575- let bF = ""
576- func bG (bH,bI) = if ((bI >= bE))
577- then bH
578- else dl(bH, bD[bI])
672+ let bQ = bq
673+ let bR = size(bQ)
674+ let bS = ""
675+ func bT (bU,bV) = if ((bV >= bR))
676+ then bU
677+ else dS(bU, bQ[bV])
579678
580- func bJ (bH,bI) = if ((bI >= bE))
581- then bH
679+ func bW (bU,bV) = if ((bV >= bR))
680+ then bU
582681 else throw("List size exceeds 9")
583682
584- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
683+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
585684 }
586685 else {
587- let S = addressFromStringValue(cd)
588- let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0))
589- let bN = dn._1
590- let bO = dn._2
591- let cf = dn._3
592- let bg = toBigInt(bO)
593- let bP = ag(cd)
594- let bh = ar(bP, -1)
595- let bi = ar(af(), -1)
596- func cg (bR,bS) = {
597- let do = be(cd, bS, bg, bh, bi)
598- let bU = do._1
599- let bV = do._2
600- let bW = do._3
601- let bn = do._4
602- let dp = valueOrElse(getInteger(al(cd, bS)), 0)
603- ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_")
686+ let W = addressFromStringValue(cq)
687+ let dU = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
688+ let ca = dU._1
689+ let cb = dU._2
690+ let cs = dU._3
691+ let dV = dU._4
692+ let bt = toBigInt(dV)
693+ let cc = an(cq)
694+ let bu = ay(cc, -1)
695+ let bv = ay(am(), -1)
696+ func ct (ce,cf) = {
697+ let dW = br(cq, cf, bt, bu, bv)
698+ let ch = dW._1
699+ let ci = dW._2
700+ let cj = dW._3
701+ let bA = dW._4
702+ let dX = valueOrElse(getInteger(as(cq, cf)), 0)
703+ ((ce + makeString([cf, toString(ch), toString(dX)], ":")) + "_")
604704 }
605705
606- let bD = bd
607- let bE = size(bD)
608- let bF = ""
609- func bG (bH,bI) = if ((bI >= bE))
610- then bH
611- else cg(bH, bD[bI])
706+ let bQ = bq
707+ let bR = size(bQ)
708+ let bS = ""
709+ func bT (bU,bV) = if ((bV >= bR))
710+ then bU
711+ else ct(bU, bQ[bV])
612712
613- func bJ (bH,bI) = if ((bI >= bE))
614- then bH
713+ func bW (bU,bV) = if ((bV >= bR))
714+ then bU
615715 else throw("List size exceeds 9")
616716
617- bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
717+ bW(bT(bT(bT(bT(bT(bT(bT(bT(bT(bS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
618718 }
619- $Tuple2(nil, dropRight(dm, 1))
719+ $Tuple2(nil, dropRight(dT, 1))
620720 }
621721
622722
623723
624-@Callable(cc)
625-func nsbtUnstakingSYSREADONLY (dq,dr) = {
626- let ds = if ((dq == ""))
724+@Callable(cp)
725+func nsbtUnstakingSYSREADONLY (dY,dZ) = {
726+ let ea = if ((dY == ""))
627727 then [0, 0, 0, 0]
628728 else {
629- let S = addressFromStringValue(dq)
630- let dt = aY()
631- let du = dt._1
632- let ct = dt._2
633- let cu = dt._3
634- let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0))
635- let bN = dv._1
636- let bO = dv._2
637- let cL = dv._3
638- let dw = if ((dr > bO))
639- then bO
640- else dr
641- let dx = (bO - dw)
642- let cO = if ((dw == 0))
729+ let W = addressFromStringValue(dY)
730+ let eb = bi()
731+ let ec = eb._1
732+ let cV = eb._2
733+ let cW = eb._3
734+ let ed = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
735+ let ca = ed._1
736+ let cb = ed._2
737+ let dp = ed._3
738+ let ee = if ((dZ > cb))
739+ then cb
740+ else dZ
741+ let ef = (cb - ee)
742+ let ds = if ((ee == 0))
643743 then 0
644- else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil))
645- let dy = (dw - cO)
646-[bO, dx, dy, cO]
744+ else aG(invoke(I, "getUnstakeComissionAmountREADONLY", [ee, dp, cW], nil))
745+ let eg = (ee - ds)
746+[cb, ef, eg, ds]
647747 }
648- $Tuple2(nil, ds)
748+ $Tuple2(nil, ea)
649749 }
650750
651751
652752
653-@Callable(cc)
654-func nsbtStakingSYSREADONLY (cd,dz) = {
655- let dA = ar(X(), 0)
656- if ((cd == ""))
657- then $Tuple2(nil, [0, dA, 0])
753+@Callable(cp)
754+func nsbtStakingSYSREADONLY (cq,eh) = {
755+ let ei = ay(ad(), 0)
756+ let bd = ay(ae(), ei)
757+ if ((cq == ""))
758+ then $Tuple2(nil, [0, ei, 0, 0, bd])
658759 else {
659- let S = av(cd)
660- let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0))
661- let bN = dB._1
662- let dC = dB._2
663- let cf = dB._3
664- $Tuple2(nil, [dC, dA, cf])
760+ let W = aC(cq)
761+ let ej = valueOrElse(bm(W), $Tuple4(true, 0, 0, 0))
762+ let ca = ej._1
763+ let ek = ej._2
764+ let cs = ej._3
765+ let dV = ej._4
766+ $Tuple2(nil, [ek, ei, cs, dV, bd])
665767 }
666768 }
667769
668770
669-@Verifier(dD)
670-func dE () = {
671- let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
672- let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b)
673- let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0])))
771+@Verifier(el)
772+func em () = {
773+ let en = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
774+ let eo = split(valueOrElse(getString(H, "%s__multisig"), en), b)
775+ let ep = ((((if (sigVerify(el.bodyBytes, el.proofs[0], fromBase58String(eo[0])))
674776 then 1
675- else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1])))
777+ else 0) + (if (sigVerify(el.bodyBytes, el.proofs[1], fromBase58String(eo[1])))
676778 then 1
677- else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2])))
779+ else 0)) + (if (sigVerify(el.bodyBytes, el.proofs[2], fromBase58String(eo[2])))
678780 then 1
679- else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3])))
781+ else 0)) + (if (sigVerify(el.bodyBytes, el.proofs[3], fromBase58String(eo[3])))
680782 then 2
681783 else 0))
682- (dH >= 3)
784+ (ep >= 3)
683785 }
684786

github/deemru/w8io/169f3d6 
306.07 ms