tx · Bz9P6rJGoJT1hMCKddpY611edWW1zwMgyhJKKsaQjUjB

3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq:  -0.03600000 Waves

2022.06.30 10:42 [2118881] smart account 3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq > SELF 0.00000000 Waves

{ "type": 13, "id": "Bz9P6rJGoJT1hMCKddpY611edWW1zwMgyhJKKsaQjUjB", "fee": 3600000, "feeAssetId": null, "timestamp": 1656574940008, "version": 2, "chainId": 84, "sender": "3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq", "senderPublicKey": "644NyMVpLnyzhSJG4FPftw1Gn3yQfD6hbZJQvvoavceg", "proofs": [ "hZjaJPs8nn5NoJnLjvz4KTjLwkaaMq2uwN6KBzHc1Vp7o2D9quMpi7yc2eXmBwiWUmG3fUv7EjJXhEah1s6yzha", "2WSrGwQN4FnoqunMYKMdDMJUX1yw7M7yzVxzCfuJejb9b1RDGm21znTrpbYxZJqyBicuxATMz6VsyewuoSbhp4hy" ], "script": "base64:BgJKCAISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERJLAAd2ZXJzaW9uAgUxLjAuMAAIa1ZlcnNpb24CB3ZlcnNpb24AB2tBY3RpdmUCBmFjdGl2ZQAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa0JhbGFuY2VJbml0QQIMQV9hc3NldF9pbml0AA1rQmFsYW5jZUluaXRCAgxCX2Fzc2V0X2luaXQADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rRmlyc3RIYXJ2ZXN0Ag1maXJzdF9oYXJ2ZXN0ABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AhRmaXJzdF9oYXJ2ZXN0X2hlaWdodAALa1NoYXJlTGltaXQCHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAC2tCYXNlUGVyaW9kAgtiYXNlX3BlcmlvZAANa1BlcmlvZExlbmd0aAINcGVyaW9kX2xlbmd0aAAMa1N0YXJ0SGVpZ2h0AgxzdGFydF9oZWlnaHQADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAxrRVVSTkFkZHJlc3MCFHN0YWtpbmdfZXVybl9hZGRyZXNzAA5rTGVhc2luZ0Ftb3VudAIObGVhc2luZ19hbW91bnQADGtVU0ROQXNzZXRJZAINdXNkbl9hc3NldF9pZAAMa0VVUk5Bc3NldElkAg1ldXJuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMADWtPcmFjbGVBY3RpdmUCFGFjdGl2ZV9hbGxfY29udHJhY3RzABdrT3JhY2xlQWN0aXZlRXhjaGFuZ2VycwIYYWN0aXZlX2dsb2JhbF9leGNoYW5nZXJzAAprRGlzY291bnRzAglkaXNjb3VudHMAD2tEaXNjb3VudFZhbHVlcwIPZGlzY291bnRfdmFsdWVzAA5rVXNlclN3b3BJbkdvdgIMX1NXT1BfYW1vdW50AAtrT3JhY2xlUG9vbAIFcG9vbF8ADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAPa0Zhcm1pbmdBZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MABm9yYWNsZQkBB0FkZHJlc3MBARoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5JbnZva2VQdWJLZXkJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAA12b3RpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUOa1ZvdGluZ0FkZHJlc3MACmdvdkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrR292QWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAARFVVJOCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtFVVJOQXNzZXRJZAANc3Rha2luZ0Fzc2V0cwkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ5rU3Rha2luZ0Fzc2V0cwASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzABJzdGFraW5nRVVSTkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrRVVSTkFkZHJlc3MACmJhc2VQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQtrQmFzZVBlcmlvZAIRRW1wdHkga0Jhc2VQZXJpb2QAC3N0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUMa1N0YXJ0SGVpZ2h0AhJFbXB0eSBrU3RhcnRIZWlnaHQADHBlcmlvZExlbmd0aAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDWtQZXJpb2RMZW5ndGgCE0VtcHR5IGtQZXJpb2RMZW5ndGgAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAkAZAIJAGQCBQpiYXNlUGVyaW9kCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAADAAZhY3RpdmUDCQERQGV4dHJOYXRpdmUoMTA1MSkCBQZvcmFjbGUFDWtPcmFjbGVBY3RpdmUJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBm9yYWNsZQUXa09yYWNsZUFjdGl2ZUV4Y2hhbmdlcnMHAAlmZWVTY2FsZTYAwIQ9AAZzY2FsZTgAgMLXLwEOYWNjb3VudEJhbGFuY2UCB2Fzc2V0SWQEcG9vbAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQRwb29sBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEcG9vbAlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEMc3Rha2VkQW1vdW50Agdhc3NldElkBHBvb2wEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEcG9vbAMJAAACBQNhSWQFBEVVUk4JAJoIAgUSc3Rha2luZ0VVUk5BZGRyZXNzCQCsAgIJAKwCAgkArAICAhglcyVzJXNfX3N0YWtpbmdCYWxhbmNlX18JANgEAQUDYUlkAgJfXwkApQgBBQRwb29sAAADCQABAgUHJG1hdGNoMAIEVW5pdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQRwb29sBQ5rTGVhc2luZ0Ftb3VudAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAABDGdldEFzc2V0SW5mbwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMDCQABAgUHJG1hdGNoMAIGU3RyaW5nBgkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBAskdDAzOTY3NDEzOQQHJG1hdGNoMQUCaWQDCQABAgUHJG1hdGNoMQIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gxCQCUCgIJANgEAQUDYUlkBQNhSWQDCQABAgUHJG1hdGNoMQIGU3RyaW5nBANhSWQFByRtYXRjaDEJAJQKAgUDYUlkCQDZBAEFA2FJZAkAAgECC01hdGNoIGVycm9yBAhzdHJpbmdJZAgFCyR0MDM5Njc0MTM5Al8xBAdieXRlc0lkCAULJHQwMzk2NzQxMzkCXzIEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQdieXRlc0lkCQCsAgIJAKwCAgIGQXNzZXQgBQhzdHJpbmdJZAIOIGRvZXNuJ3QgZXhpc3QJAJUKAwUIc3RyaW5nSWQIBQRpbmZvBG5hbWUIBQRpbmZvCGRlY2ltYWxzAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQCVCgMCBVdBVkVTAgVXQVZFUwAICQACAQILTWF0Y2ggZXJyb3IBB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIJAKUIAQUIdXNlckFkZHIFDmtVc2VyU3dvcEluR292AAAEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAEBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgENY2FsY3VsYXRlRmVlcwYJcG10QW1vdW50Em1pbkFtb3VudFRvUmVjZWl2ZQl0b2tlbkZyb20HdG9rZW5UbwNmZWUNZmVlR292ZXJuYW5jZQQQYW1vdW50V2l0aG91dEZlZQkAawMFB3Rva2VuVG8FCXBtdEFtb3VudAkAZAIFCXBtdEFtb3VudAUJdG9rZW5Gcm9tBA1hbW91bnRXaXRoRmVlCQBrAwUQYW1vdW50V2l0aG91dEZlZQkAZQIFCWZlZVNjYWxlNgUDZmVlBQlmZWVTY2FsZTYEEGdvdmVybmFuY2VSZXdhcmQJAGsDBRBhbW91bnRXaXRob3V0RmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQBmAgUSbWluQW1vdW50VG9SZWNlaXZlBQ1hbW91bnRXaXRoRmVlCQACAQkArAICCQCsAgIJAKwCAgIdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAKQDAQUNYW1vdW50V2l0aEZlZQIgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAKQDAQUSbWluQW1vdW50VG9SZWNlaXZlCQCVCgMFEGFtb3VudFdpdGhvdXRGZWUFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQBEGNhbGN1bGF0ZVZpcnRHZXQDCXBtdEFtb3VudAdiYWxhbmNlA2ZlZQQBYQABBAFiCQBlAgkAZAIJAGQCBQdiYWxhbmNlCQBrAwUHYmFsYW5jZQkAZQIFCWZlZVNjYWxlNgUDZmVlBQlmZWVTY2FsZTYJAGsDBQlwbXRBbW91bnQJAGUCBQlmZWVTY2FsZTYFA2ZlZQUJZmVlU2NhbGU2BQlwbXRBbW91bnQEAWMJALkCAgkAvgIBCQC2AgEFB2JhbGFuY2UJALYCAQUJcG10QW1vdW50BAFECQC4AgIJALkCAgkAtgIBBQFiCQC2AgEFAWIJALkCAgkAuQICCQC2AgEABAkAtgIBBQFhBQFjCQBoAgkAoAMBCQC6AgIJALcCAgkAvgIBCQC2AgEFAWIJAHYGBQFEAAAJALYCAQAFAAEAAAUERE9XTgkAtgIBAAIFAWEBEXBhcnNlUGF5bWVudEFzc2V0AQdhc3NldElkAwkAAAIFB2Fzc2V0SWQBAAUEdW5pdAUHYXNzZXRJZAERc3VzcGVuZFN1c3BpY2lvdXMGD2FjY291bnRCYWxhbmNlQQ9hY2NvdW50QmFsYW5jZUIIYmFsYW5jZUEIYmFsYW5jZUIIYXNzZXRJZEEIYXNzZXRJZEIJAQdzdXNwZW5kAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIjU3VzcGljaW91cyBzdGF0ZS4gQWN0dWFsIGJhbGFuY2VzOiAJAKQDAQUPYWNjb3VudEJhbGFuY2VBAgEgBQhhc3NldElkQQICLCAJAKQDAQUPYWNjb3VudEJhbGFuY2VCAgEgBQhhc3NldElkQgIJLiBTdGF0ZTogCQCkAwEFCGJhbGFuY2VBAgEgBQhhc3NldElkQQICLCAJAKQDAQUIYmFsYW5jZUICASAFCGFzc2V0SWRCAQhpc0FjdGl2ZQADBQZhY3RpdmUFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQxpc09yYWNsZVBvb2wBC3Bvb2xBZGRyZXNzAwkBCWlzRGVmaW5lZAEJAJ0IAgUGb3JhY2xlCQCsAgIFC2tPcmFjbGVQb29sBQtwb29sQWRkcmVzcwUEdW5pdAkAAgECG0RBcHAgaXMgbm90IHJlZ2lzdGVyZWQgcG9vbAEPZ2V0UG9vbEJhbGFuY2VzAwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBAhiYWxhbmNlQQkBEUBleHRyTmF0aXZlKDEwNTApAgUEcG9vbAUJa0JhbGFuY2VBBAhiYWxhbmNlQgkBEUBleHRyTmF0aXZlKDEwNTApAgUEcG9vbAUJa0JhbGFuY2VCBA1zdGFrZWRBbW91bnRBCQEMc3Rha2VkQW1vdW50AgUIYXNzZXRJZEEFBHBvb2wEDXN0YWtlZEFtb3VudEIJAQxzdGFrZWRBbW91bnQCBQhhc3NldElkQgUEcG9vbAQPYWNjb3VudEJhbGFuY2VBCQBkAgkBDmFjY291bnRCYWxhbmNlAgUIYXNzZXRJZEEFBHBvb2wFDXN0YWtlZEFtb3VudEEED2FjY291bnRCYWxhbmNlQgkAZAIJAQ5hY2NvdW50QmFsYW5jZQIFCGFzc2V0SWRCBQRwb29sBQ1zdGFrZWRBbW91bnRCBAtzaGFyZVN1cHBseQkBEUBleHRyTmF0aXZlKDEwNTApAgUEcG9vbAURa1NoYXJlQXNzZXRTdXBwbHkJAJcKBQUIYmFsYW5jZUEFCGJhbGFuY2VCBQ9hY2NvdW50QmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQgULc2hhcmVTdXBwbHkBDWdldFBvb2xBc3NldHMBBHBvb2wEC3N0ckFzc2V0SWRBCQERQGV4dHJOYXRpdmUoMTA1MykCBQRwb29sBQlrQXNzZXRJZEEEC3N0ckFzc2V0SWRCCQERQGV4dHJOYXRpdmUoMTA1MykCBQRwb29sBQlrQXNzZXRJZEIECGFzc2V0SWRBAwkAAAIFC3N0ckFzc2V0SWRBAgVXQVZFUwUEdW5pdAkA2QQBBQtzdHJBc3NldElkQQQIYXNzZXRJZEIDCQAAAgULc3RyQXNzZXRJZEICBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRCBAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEcG9vbAUNa1NoYXJlQXNzZXRJZAkAlwoFBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIFCGFzc2V0SWRBBQhhc3NldElkQgUMc2hhcmVBc3NldElkAQxnZXRGZWVQYXJhbXMCBHBvb2wGY2FsbGVyBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQUGY2FsbGVyBANmZWUJAG4ECQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sBQRrRmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBAZnb3ZGZWUJAG4ECQBrAwUDZmVlACgAZAULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwkAlAoCBQNmZWUFBmdvdkZlZQkBaQEEaW5pdAQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQLJHQwODg1MTg5MjkJAJQKAgkAkQMCBQhwQW1vdW50cwAACQERcGFyc2VQYXltZW50QXNzZXQBCQCRAwIFCXBBc3NldElkcwAABApwbXRBbW91bnRBCAULJHQwODg1MTg5MjkCXzEEC3BtdEFzc2V0SWRBCAULJHQwODg1MTg5MjkCXzIECyR0MDg5MzQ5MDEyCQCUCgIJAJEDAgUIcEFtb3VudHMAAQkBEXBhcnNlUGF5bWVudEFzc2V0AQkAkQMCBQlwQXNzZXRJZHMAAQQKcG10QW1vdW50QggFCyR0MDg5MzQ5MDEyAl8xBAtwbXRBc3NldElkQggFCyR0MDg5MzQ5MDEyAl8yAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwkAzAgCBRFhZG1pbkludm9rZVB1YktleQUDbmlsCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQEJaXNEZWZpbmVkAQkAmwgCBQZjYWxsZXIFB2tBY3RpdmUJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkAAAIFC3BtdEFzc2V0SWRBBQtwbXRBc3NldElkQgkAAgECGEFzc2V0cyBtdXN0IGJlIGRpZmZlcmVudAQLJHQwOTM4Mjk0NTkJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQQQOcG10U3RyQXNzZXRJZEEIBQskdDA5MzgyOTQ1OQJfMQQNcG10QXNzZXROYW1lQQgFCyR0MDkzODI5NDU5Al8yBAxwbXREZWNpbWFsc0EIBQskdDA5MzgyOTQ1OQJfMwQLJHQwOTQ2ODk1NDUJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQskdDA5NDY4OTU0NQJfMQQNcG10QXNzZXROYW1lQggFCyR0MDk0Njg5NTQ1Al8yBAxwbXREZWNpbWFsc0IIBQskdDA5NDY4OTU0NQJfMwQMZmlyc3RIYXJ2ZXN0CQAAAgkAkQMCBQRhcmdzAAACBHRydWUECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEBGFyZzEJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04EBGFyZzIJAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04EBGFyZzMJAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04EEnNoYXJlSW5pdGlhbFN1cHBseQkAawMFBGFyZzEFBGFyZzIFBGFyZzMECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEEJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEEFDnBtdFN0ckFzc2V0SWRBCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBc3NldElkQgUOcG10U3RyQXNzZXRJZEIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQUKcG10QW1vdW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRrRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQZvcmFjbGUCDWJhc2VfZmVlX2NwbW0JAMwIAgUKc2hhcmVJc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFDHNoYXJlSXNzdWVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkFEnNoYXJlSW5pdGlhbFN1cHBseQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFEnNoYXJlSW5pdGlhbFN1cHBseQUMc2hhcmVJc3N1ZUlkBQNuaWwDBQxmaXJzdEhhcnZlc3QJAJQKAgUDbmlsCQCUCgIJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rRmlyc3RIYXJ2ZXN0BQxmaXJzdEhhcnZlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tGaXJzdEhhcnZlc3RIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkAaAIFFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUMcGVyaW9kTGVuZ3RoBQNuaWwFA25pbAkAlAoCBQNuaWwJAJQKAgUJYmFzZUVudHJ5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERaW5pdFdpdGhJbml0UmF0aW8EC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzBAZjYWxsZXIJAQdBZGRyZXNzAQULY2FsbGVyQnl0ZXMEDSR0MDExNzkwMTE5OTAJAJcKBQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAQkAkQMCBQRhcmdzAAIJAJEDAgUEYXJncwADCQAAAgkAkQMCBQRhcmdzAAQCBHRydWUECWFtdEFzc2V0QQgFDSR0MDExNzkwMTE5OTACXzEECWFtdEFzc2V0QggFDSR0MDExNzkwMTE5OTACXzIEC2Fzc2V0SWRBU3RyCAUNJHQwMTE3OTAxMTk5MAJfMwQLYXNzZXRJZEJTdHIIBQ0kdDAxMTc5MDExOTkwAl80BAxmaXJzdEhhcnZlc3QIBQ0kdDAxMTc5MDExOTkwAl81AwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwkAzAgCBRFhZG1pbkludm9rZVB1YktleQUDbmlsCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQEJaXNEZWZpbmVkAQkAmwgCBQZjYWxsZXIFB2tBY3RpdmUJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkAAAIFC2Fzc2V0SWRBU3RyBQthc3NldElkQlN0cgkAAgECGEFzc2V0cyBtdXN0IGJlIGRpZmZlcmVudAQNJHQwMTIzNjAxMjQzNwkBDGdldEFzc2V0SW5mbwEFC2Fzc2V0SWRBU3RyBA5wbXRTdHJBc3NldElkQQgFDSR0MDEyMzYwMTI0MzcCXzEEDXBtdEFzc2V0TmFtZUEIBQ0kdDAxMjM2MDEyNDM3Al8yBAxwbXREZWNpbWFsc0EIBQ0kdDAxMjM2MDEyNDM3Al8zBA0kdDAxMjQ0NjEyNTIzCQEMZ2V0QXNzZXRJbmZvAQULYXNzZXRJZEJTdHIEDnBtdFN0ckFzc2V0SWRCCAUNJHQwMTI0NDYxMjUyMwJfMQQNcG10QXNzZXROYW1lQggFDSR0MDEyNDQ2MTI1MjMCXzIEDHBtdERlY2ltYWxzQggFDSR0MDEyNDQ2MTI1MjMCXzMECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQAABApzaGFyZUlzc3VlCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgUSc2hhcmVJbml0aWFsU3VwcGx5BQ1zaGFyZURlY2ltYWxzBgQMc2hhcmVJc3N1ZUlkCQC4CAEFCnNoYXJlSXNzdWUECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVyc2lvbgUHdmVyc2lvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRBBQ5wbXRTdHJBc3NldElkQQkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEIFDnBtdFN0ckFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rQmFsYW5jZUluaXRBBQlhbXRBc3NldEEJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtCYWxhbmNlSW5pdEIFCWFtdEFzc2V0QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRrRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQZvcmFjbGUCDWJhc2VfZmVlX2NwbW0JAMwIAgUKc2hhcmVJc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFDHNoYXJlSXNzdWVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkFEnNoYXJlSW5pdGlhbFN1cHBseQUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQCUCgIFA25pbAkAlAoCCQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQNuaWwJAJQKAgUDbmlsCQCUCgIFCWJhc2VFbnRyeQUDbmlsAWkBGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMJAQt2YWx1ZU9yRWxzZQIJAQxpc09yYWNsZVBvb2wBCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMJAMwIAgURYWRtaW5JbnZva2VQdWJLZXkFA25pbAgFAWkVb3JpZ2luQ2FsbGVyUHVibGljS2V5CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBApzaGFyZUxpbWl0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwAACQCUCgIFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrU2hhcmVMaW1pdAUKc2hhcmVMaW1pdAUDbmlsBQNuaWwBaQEIZXhjaGFuZ2UEC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQNJHQwMTQ4NDgxNDkyNAkAlAoCCQCRAwIFCHBBbW91bnRzAAAJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAAECXBtdEFtb3VudAgFDSR0MDE0ODQ4MTQ5MjQCXzEECnBtdEFzc2V0SWQIBQ0kdDAxNDg0ODE0OTI0Al8yBBJtaW5BbW91bnRUb1JlY2VpdmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRhcmdzAAAEDSR0MDE0OTk3MTUwNzMJAQ1nZXRQb29sQXNzZXRzAQgFAWkGY2FsbGVyBAtzdHJBc3NldElkQQgFDSR0MDE0OTk3MTUwNzMCXzEEC3N0ckFzc2V0SWRCCAUNJHQwMTQ5OTcxNTA3MwJfMgQIYXNzZXRJZEEIBQ0kdDAxNDk5NzE1MDczAl8zBAhhc3NldElkQggFDSR0MDE0OTk3MTUwNzMCXzQEDSR0MDE1MDg2MTUxOTIJAQ9nZXRQb29sQmFsYW5jZXMDCAUBaQZjYWxsZXIFCGFzc2V0SWRBBQhhc3NldElkQgQIYmFsYW5jZUEIBQ0kdDAxNTA4NjE1MTkyAl8xBAhiYWxhbmNlQggFDSR0MDE1MDg2MTUxOTICXzIED2FjY291bnRCYWxhbmNlQQgFDSR0MDE1MDg2MTUxOTICXzMED2FjY291bnRCYWxhbmNlQggFDSR0MDE1MDg2MTUxOTICXzQDAwkAAAIFCGJhbGFuY2VBAAAGCQAAAgUIYmFsYW5jZUIAAAkAAgECIENhbid0IGV4Y2hhbmdlIHdpdGggemVybyBiYWxhbmNlAwkAZwIAAAUSbWluQW1vdW50VG9SZWNlaXZlCQACAQkArAICAjRNaW5pbWFsIGFtb3VudCB0byByZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQCkAwEFEm1pbkFtb3VudFRvUmVjZWl2ZQMJAQIhPQIJAJADAQUIcEFtb3VudHMAAQkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQhhc3NldElkQQkAzAgCBQhhc3NldElkQgUDbmlsBQpwbXRBc3NldElkCQACAQkArAICCQCsAgIJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQtzdHJBc3NldElkQQIEIG9yIAULc3RyQXNzZXRJZEIDAwkAZgIFCGJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUEGCQBmAgUIYmFsYW5jZUIFD2FjY291bnRCYWxhbmNlQgkAlAoCBQNuaWwJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMGBQ9hY2NvdW50QmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQgUIYmFsYW5jZUEFCGJhbGFuY2VCBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIEDSR0MDE2MDc3MTYxMzUJAQxnZXRGZWVQYXJhbXMCCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQDZmVlCAUNJHQwMTYwNzcxNjEzNQJfMQQGZ292RmVlCAUNJHQwMTYwNzcxNjEzNQJfMgQNJHQwMTYxNTIxNjQ4OQMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkBDWNhbGN1bGF0ZUZlZXMGBQlwbXRBbW91bnQFEm1pbkFtb3VudFRvUmVjZWl2ZQUIYmFsYW5jZUEFCGJhbGFuY2VCBQNmZWUFBmdvdkZlZQkBDWNhbGN1bGF0ZUZlZXMGBQlwbXRBbW91bnQFEm1pbkFtb3VudFRvUmVjZWl2ZQUIYmFsYW5jZUIFCGJhbGFuY2VBBQNmZWUFBmdvdkZlZQQQYW1vdW50V2l0aG91dEZlZQgFDSR0MDE2MTUyMTY0ODkCXzEEDWFtb3VudFdpdGhGZWUIBQ0kdDAxNjE1MjE2NDg5Al8yBBBnb3Zlcm5hbmNlUmV3YXJkCAUNJHQwMTYxNTIxNjQ4OQJfMwQNJHQwMTY1MDcxNjgzMgMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAlQoDCQBkAgUIYmFsYW5jZUEFCXBtdEFtb3VudAkAZQIJAGUCBQhiYWxhbmNlQgUNYW1vdW50V2l0aEZlZQUQZ292ZXJuYW5jZVJld2FyZAUIYXNzZXRJZEIJAJUKAwkAZQIJAGUCBQhiYWxhbmNlQQUNYW1vdW50V2l0aEZlZQUQZ292ZXJuYW5jZVJld2FyZAkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQFCGFzc2V0SWRBBAtuZXdCYWxhbmNlQQgFDSR0MDE2NTA3MTY4MzICXzEEC25ld0JhbGFuY2VCCAUNJHQwMTY1MDcxNjgzMgJfMgQLYXNzZXRJZFNlbmQIBQ0kdDAxNjUwNzE2ODMyAl8zBA0kdDAxNjg1MDE3MTAwAwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIFCXBtdEFtb3VudAkAZAIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQJAJQKAgkAZAIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCXBtdEFtb3VudAQMc3Rha2VBbW91bnRBCAUNJHQwMTY4NTAxNzEwMAJfMQQMc3Rha2VBbW91bnRCCAUNJHQwMTY4NTAxNzEwMAJfMgQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQDMCAIFDHN0YWtlQW1vdW50QQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCCQDMCAIFDHN0YWtlQW1vdW50QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBBQtuZXdCYWxhbmNlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQtuZXdCYWxhbmNlQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFDWFtb3VudFdpdGhGZWUFC2Fzc2V0SWRTZW5kCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUQZ292ZXJuYW5jZVJld2FyZAULYXNzZXRJZFNlbmQFA25pbAkAzAgCBQ1hbW91bnRXaXRoRmVlCQDMCAIFC2Fzc2V0SWRTZW5kBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMJAQt2YWx1ZU9yRWxzZQIJAQxpc09yYWNsZVBvb2wBCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQGY2FsbGVyCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBAtwbXRBc3NldElkQQkBEXBhcnNlUGF5bWVudEFzc2V0AQkAkQMCBQlwQXNzZXRJZHMAAAQLcG10QXNzZXRJZEIJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAEEDHN0YWtlRmFybWluZwkAAAIJAJEDAgUEYXJncwAAAgR0cnVlBA0kdDAxODMxMjE4NDAyCQENZ2V0UG9vbEFzc2V0cwEIBQFpBmNhbGxlcgQLc3RyQXNzZXRJZEEIBQ0kdDAxODMxMjE4NDAyAl8xBAtzdHJBc3NldElkQggFDSR0MDE4MzEyMTg0MDICXzIECGFzc2V0SWRBCAUNJHQwMTgzMTIxODQwMgJfMwQIYXNzZXRJZEIIBQ0kdDAxODMxMjE4NDAyAl80BAxzaGFyZUFzc2V0SWQIBQ0kdDAxODMxMjE4NDAyAl81BA0kdDAxODQxNTE4NTM5CQEPZ2V0UG9vbEJhbGFuY2VzAwgFAWkGY2FsbGVyBQhhc3NldElkQQUIYXNzZXRJZEIECGJhbGFuY2VBCAUNJHQwMTg0MTUxODUzOQJfMQQIYmFsYW5jZUIIBQ0kdDAxODQxNTE4NTM5Al8yBA9hY2NvdW50QmFsYW5jZUEIBQ0kdDAxODQxNTE4NTM5Al8zBA9hY2NvdW50QmFsYW5jZUIIBQ0kdDAxODQxNTE4NTM5Al80BBBzaGFyZUFzc2V0U3VwcGx5CAUNJHQwMTg0MTUxODUzOQJfNQMJAQIhPQIJAJADAQUIcEFtb3VudHMAAgkAAgECHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAiE9AgULcG10QXNzZXRJZEEFCGFzc2V0SWRBBgkBAiE9AgULcG10QXNzZXRJZEIFCGFzc2V0SWRCCQACAQkArAICCQCsAgIJAKwCAgIlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAULc3RyQXNzZXRJZEECBSBhbmQgBQtzdHJBc3NldElkQgMDCQBmAgUIYmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQQYJAGYCBQhiYWxhbmNlQgUPYWNjb3VudEJhbGFuY2VCCQCUCgIFA25pbAkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAkQMCBQhwQW1vdW50cwAABQtwbXRBc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAJEDAgUIcEFtb3VudHMAAQULcG10QXNzZXRJZEIFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzBgUPYWNjb3VudEJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VBBQhiYWxhbmNlQgULc3RyQXNzZXRJZEEFC3N0ckFzc2V0SWRCBA0kdDAxOTIxMTE5Mjg4CQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMTkyMTExOTI4OAJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDE5MjExMTkyODgCXzIEDHBtdERlY2ltYWxzQQgFDSR0MDE5MjExMTkyODgCXzMEDSR0MDE5MzA1MTkzODIJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAxOTMwNTE5MzgyAl8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMTkzMDUxOTM4MgJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMTkzMDUxOTM4MgJfMwQHaW5pdGlhbAkAAAIJAGQCBQhiYWxhbmNlQQUIYmFsYW5jZUIAAAQNJHQwMTk0NTcyMDMwMAMFB2luaXRpYWwJAJcKBQkAkQMCBQhwQW1vdW50cwAACQCRAwIFCHBBbW91bnRzAAEAAAULcG10QXNzZXRJZEEAAQQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFBnNjYWxlOAkAkQMCBQhwQW1vdW50cwAABQhiYWxhbmNlQQQTcmF0aW9TaGFyZVRva2Vuc0luQgkAawMFBnNjYWxlOAkAkQMCBQhwQW1vdW50cwABBQhiYWxhbmNlQgMJAGYCBRNyYXRpb1NoYXJlVG9rZW5zSW5CBRNyYXRpb1NoYXJlVG9rZW5zSW5BBANwbXQJAGsDCQCRAwIFCHBBbW91bnRzAAAFCGJhbGFuY2VCBQhiYWxhbmNlQQkAlwoFCQCRAwIFCHBBbW91bnRzAAAFA3BtdAkAZQIJAJEDAgUIcEFtb3VudHMAAQUDcG10BQtwbXRBc3NldElkQgUTcmF0aW9TaGFyZVRva2Vuc0luQQQDcG10CQBrAwkAkQMCBQhwQW1vdW50cwABBQhiYWxhbmNlQQUIYmFsYW5jZUIJAJcKBQUDcG10CQCRAwIFCHBBbW91bnRzAAEJAGUCCQCRAwIFCHBBbW91bnRzAAAFA3BtdAULcG10QXNzZXRJZEEFE3JhdGlvU2hhcmVUb2tlbnNJbkIECnBtdEFtb3VudEEIBQ0kdDAxOTQ1NzIwMzAwAl8xBApwbXRBbW91bnRCCAUNJHQwMTk0NTcyMDMwMAJfMgQGY2hhbmdlCAUNJHQwMTk0NTcyMDMwMAJfMwQNY2hhbmdlQXNzZXRJZAgFDSR0MDE5NDU3MjAzMDACXzQED3NoYXJlVG9rZW5SYXRpbwgFDSR0MDE5NDU3MjAzMDACXzUEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAMFB2luaXRpYWwEDXNoYXJlRGVjaW1hbHMJAGkCCQBkAgUMcG10RGVjaW1hbHNBBQxwbXREZWNpbWFsc0IAAgkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04JAGsDBQ9zaGFyZVRva2VuUmF0aW8FEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAMJAAACBRVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAkAAgECHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkAZgIAAAUGY2hhbmdlCQACAQIKQ2hhbmdlIDwgMAQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEEJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQMc2hhcmVUb2tlblNUAwUMc3Rha2VGYXJtaW5nBAdyZWlzc3VlCQD8BwQIBQFpBmNhbGxlcgIRcmVpc3N1ZVNoYXJlVG9rZW4JAMwIAgUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwFA25pbAMJAAACBQdyZWlzc3VlBQdyZWlzc3VlBAZzdGFrZTMJAPwHBAUOZmFybWluZ0FkZHJlc3MCD2xvY2tTaGFyZVRva2VucwkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsAwkAAAIFBnN0YWtlMwUGc3Rha2UzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFDHNoYXJlQXNzZXRJZAUDbmlsCQCUCgIFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQpwbXRBbW91bnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQZjaGFuZ2UFDWNoYW5nZUFzc2V0SWQFA25pbAUMc2hhcmVUb2tlblNUBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVcmVwbGVuaXNoV2l0aE9uZVRva2VuBAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEJAKUIAQgFAWkGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAZjYWxsZXIJAQdBZGRyZXNzAQULY2FsbGVyQnl0ZXMECnBtdEFzc2V0SWQJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAAECXBtdEFtb3VudAkAkQMCBQhwQW1vdW50cwAABBB2aXJ0R2V0TWluQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwAABAxzdGFrZUZhcm1pbmcJAAACCQCRAwIFBGFyZ3MAAQIEdHJ1ZQQNJHQwMjI4NTUyMjk0NQkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMjI4NTUyMjk0NQJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAyMjg1NTIyOTQ1Al8yBAhhc3NldElkQQgFDSR0MDIyODU1MjI5NDUCXzMECGFzc2V0SWRCCAUNJHQwMjI4NTUyMjk0NQJfNAQMc2hhcmVBc3NldElkCAUNJHQwMjI4NTUyMjk0NQJfNQQNJHQwMjI5NTgyMzA4MgkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDIyOTU4MjMwODICXzEECGJhbGFuY2VCCAUNJHQwMjI5NTgyMzA4MgJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMjI5NTgyMzA4MgJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMjI5NTgyMzA4MgJfNAQQc2hhcmVBc3NldFN1cHBseQgFDSR0MDIyOTU4MjMwODICXzUEB2luaXRpYWwJAAACCQBkAgUIYmFsYW5jZUEFCGJhbGFuY2VCAAADCQECIT0CCQCQAwEFCHBBbW91bnRzAAEJAAIBAhxPbmUgYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQgcJAAIBCQCsAgIJAKwCAgkArAICAiRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAFC3N0ckFzc2V0SWRBAgQgb3IgBQtzdHJBc3NldElkQgMFB2luaXRpYWwJAAIBAjBGb3IgaW5pdGlhbCBleGNoYW5nZXIgeW91IG5lZWQgdG8gdXNlIHR3byB0b2tlbnMDAwkAZgIFCGJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUEGCQBmAgUIYmFsYW5jZUIFD2FjY291bnRCYWxhbmNlQgkAlAoCBQNuaWwJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMGBQ9hY2NvdW50QmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQgUIYmFsYW5jZUEFCGJhbGFuY2VCBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIEDSR0MDIzODM2MjM4OTQJAQxnZXRGZWVQYXJhbXMCCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQDZmVlCAUNJHQwMjM4MzYyMzg5NAJfMQQGZ292RmVlCAUNJHQwMjM4MzYyMzg5NAJfMgQNJHQwMjM5MTEyNTc5NwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQQNdmlydFBheUFtb3VudAkBEGNhbGN1bGF0ZVZpcnRHZXQDBQlwbXRBbW91bnQFCGJhbGFuY2VBBQNmZWUEDSR0MDI0MTkwMjQzMjcJAQ1jYWxjdWxhdGVGZWVzBgUNdmlydFBheUFtb3VudAUQdmlydEdldE1pbkFtb3VudAUIYmFsYW5jZUEFCGJhbGFuY2VCBQNmZWUFBmdvdkZlZQQQYW1vdW50V2l0aG91dEZlZQgFDSR0MDI0MTkwMjQzMjcCXzEEDWFtb3VudFdpdGhGZWUIBQ0kdDAyNDE5MDI0MzI3Al8yBBBnb3Zlcm5hbmNlUmV3YXJkCAUNJHQwMjQxOTAyNDMyNwJfMwQLbmV3QmFsYW5jZUEJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50BAtuZXdCYWxhbmNlQgkAZQIFCGJhbGFuY2VCBRBnb3Zlcm5hbmNlUmV3YXJkBBNyYXRpb1NoYXJlVG9rZW5zSW5BCQBrAwkAZQIFCXBtdEFtb3VudAUNdmlydFBheUFtb3VudAUGc2NhbGU4BQtuZXdCYWxhbmNlQQQTcmF0aW9TaGFyZVRva2Vuc0luQgkAawMFDWFtb3VudFdpdGhGZWUFBnNjYWxlOAULbmV3QmFsYW5jZUIEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAawMJAJcDAQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5BCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFA25pbAUQc2hhcmVBc3NldFN1cHBseQUGc2NhbGU4CQCZCgcFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgUVc2hhcmVUb2tlblRvUGF5QW1vdW50BRBnb3Zlcm5hbmNlUmV3YXJkBQhhc3NldElkQgULc3RyQXNzZXRJZEIFC3N0ckFzc2V0SWRBBA12aXJ0UGF5QW1vdW50CQEQY2FsY3VsYXRlVmlydEdldAMFCXBtdEFtb3VudAUIYmFsYW5jZUIFA2ZlZQQNJHQwMjUwNjIyNTE5OQkBDWNhbGN1bGF0ZUZlZXMGBQ12aXJ0UGF5QW1vdW50BRB2aXJ0R2V0TWluQW1vdW50BQhiYWxhbmNlQgUIYmFsYW5jZUEFA2ZlZQUGZ292RmVlBBBhbW91bnRXaXRob3V0RmVlCAUNJHQwMjUwNjIyNTE5OQJfMQQNYW1vdW50V2l0aEZlZQgFDSR0MDI1MDYyMjUxOTkCXzIEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAyNTA2MjI1MTk5Al8zBAtuZXdCYWxhbmNlQQkAZQIFCGJhbGFuY2VBBRBnb3Zlcm5hbmNlUmV3YXJkBAtuZXdCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQEE3JhdGlvU2hhcmVUb2tlbnNJbkEJAGsDBQ1hbW91bnRXaXRoRmVlBQZzY2FsZTgFC25ld0JhbGFuY2VBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwkAZQIFCXBtdEFtb3VudAUNdmlydFBheUFtb3VudAUGc2NhbGU4BQtuZXdCYWxhbmNlQgQVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBrAwkAlwMBCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkEJAMwIAgUTcmF0aW9TaGFyZVRva2Vuc0luQgUDbmlsBRBzaGFyZUFzc2V0U3VwcGx5BQZzY2FsZTgJAJkKBwULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFEGdvdmVybmFuY2VSZXdhcmQFCGFzc2V0SWRBBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIEC25ld0JhbGFuY2VBCAUNJHQwMjM5MTEyNTc5NwJfMQQLbmV3QmFsYW5jZUIIBQ0kdDAyMzkxMTI1Nzk3Al8yBBVzaGFyZVRva2VuVG9QYXlBbW91bnQIBQ0kdDAyMzkxMTI1Nzk3Al8zBAlnb3ZSZXdhcmQIBQ0kdDAyMzkxMTI1Nzk3Al80BA5nb3ZSZXdhcmRBc3NldAgFDSR0MDIzOTExMjU3OTcCXzUEEWdvdlJld2FyZEFzc2V0U3RyCAUNJHQwMjM5MTEyNTc5NwJfNgQNcG10QXNzZXRJZFN0cggFDSR0MDIzOTExMjU3OTcCXzcDCQAAAgUVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAJAAIBAh1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUNcG10QXNzZXRJZFN0cgkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQlwbXRBbW91bnQJAMwIAgUNcG10QXNzZXRJZFN0cgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwURZ292UmV3YXJkQXNzZXRTdHIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgUJZ292UmV3YXJkCQDMCAIFEWdvdlJld2FyZEFzc2V0U3RyBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyBAxzaGFyZVRva2VuU1QDBQxzdGFrZUZhcm1pbmcEB3JlaXNzdWUJAPwHBAgFAWkGY2FsbGVyAhFyZWlzc3VlU2hhcmVUb2tlbgkAzAgCBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFA25pbAUDbmlsAwkAAAIFB3JlaXNzdWUFB3JlaXNzdWUEBnN0YWtlMwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwDCQAAAgUGc3Rha2UzBQZzdGFrZTMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUMc2hhcmVBc3NldElkBQNuaWwJAJQKAgUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBBQtuZXdCYWxhbmNlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQtuZXdCYWxhbmNlQgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQlnb3ZSZXdhcmQFDmdvdlJld2FyZEFzc2V0BQNuaWwFDHNoYXJlVG9rZW5TVAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3BAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEJAKUIAQgFAWkGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAZjYWxsZXIJAQdBZGRyZXNzAQULY2FsbGVyQnl0ZXMEDSR0MDI3NjA5Mjc2OTkJAQ1nZXRQb29sQXNzZXRzAQgFAWkGY2FsbGVyBAtzdHJBc3NldElkQQgFDSR0MDI3NjA5Mjc2OTkCXzEEC3N0ckFzc2V0SWRCCAUNJHQwMjc2MDkyNzY5OQJfMgQIYXNzZXRJZEEIBQ0kdDAyNzYwOTI3Njk5Al8zBAhhc3NldElkQggFDSR0MDI3NjA5Mjc2OTkCXzQEDHNoYXJlQXNzZXRJZAgFDSR0MDI3NjA5Mjc2OTkCXzUEDSR0MDI3NzEyMjc4MzYJAQ9nZXRQb29sQmFsYW5jZXMDCAUBaQZjYWxsZXIFCGFzc2V0SWRBBQhhc3NldElkQgQIYmFsYW5jZUEIBQ0kdDAyNzcxMjI3ODM2Al8xBAhiYWxhbmNlQggFDSR0MDI3NzEyMjc4MzYCXzIED2FjY291bnRCYWxhbmNlQQgFDSR0MDI3NzEyMjc4MzYCXzMED2FjY291bnRCYWxhbmNlQggFDSR0MDI3NzEyMjc4MzYCXzQEEHNoYXJlQXNzZXRTdXBwbHkIBQ0kdDAyNzcxMjI3ODM2Al81BA0kdDAyNzg0OTI4MjU3AwkAAAIJAJADAQUIcEFtb3VudHMAAQQGcEFzc2V0CQERcGFyc2VQYXltZW50QXNzZXQBCQCRAwIFCXBBc3NldElkcwAAAwkBAiE9AgUGcEFzc2V0BQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQJAJQKAgkAkQMCBQhwQW1vdW50cwAABQZwQXNzZXQJAJQKAgAABQxzaGFyZUFzc2V0SWQECXBtdEFtb3VudAgFDSR0MDI3ODQ5MjgyNTcCXzEECnBtdEFzc2V0SWQIBQ0kdDAyNzg0OTI4MjU3Al8yAwkAZgIJAJADAQUIcEFtb3VudHMAAQkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwMJAGYCBQhiYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VBBgkAZgIFCGJhbGFuY2VCBQ9hY2NvdW50QmFsYW5jZUIJAJQKAgUDbmlsCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzBgUPYWNjb3VudEJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VBBQhiYWxhbmNlQgULc3RyQXNzZXRJZEEFC3N0ckFzc2V0SWRCBAx1bmxvY2tBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkBC3ZhbHVlT3JFbHNlAgkAkQMCBQRhcmdzAAACATAEBnVubG9jawMJAGYCBQx1bmxvY2tBbW91bnQAAAkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCBQxhbW91bnRUb1BheUEJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQD8BwQIBQFpBmNhbGxlcgIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMdW5sb2NrQW1vdW50BQxzaGFyZUFzc2V0SWQFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCBQhiYWxhbmNlQgUMYW1vdW50VG9QYXlCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFEHNoYXJlQXNzZXRTdXBwbHkFDndpdGhkcmF3QW1vdW50CQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQxhbW91bnRUb1BheUIFCGFzc2V0SWRCBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB3aXRoZHJhd09uZVRva2VuBAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEJAKUIAQgFAWkGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAZjYWxsZXIJAQdBZGRyZXNzAQULY2FsbGVyQnl0ZXMEDXdpdGhkcmF3QXNzZXQDCQAAAgkAkQMCBQRhcmdzAAACAAUEdW5pdAkA2QQBCQCRAwIFBGFyZ3MAAAQNJHQwMzA0NjUzMDU1NQkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMzA0NjUzMDU1NQJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAzMDQ2NTMwNTU1Al8yBAhhc3NldElkQQgFDSR0MDMwNDY1MzA1NTUCXzMECGFzc2V0SWRCCAUNJHQwMzA0NjUzMDU1NQJfNAQMc2hhcmVBc3NldElkCAUNJHQwMzA0NjUzMDU1NQJfNQQNJHQwMzA1NjgzMDY5MgkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDMwNTY4MzA2OTICXzEECGJhbGFuY2VCCAUNJHQwMzA1NjgzMDY5MgJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMzA1NjgzMDY5MgJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMzA1NjgzMDY5MgJfNAQQc2hhcmVBc3NldFN1cHBseQgFDSR0MDMwNTY4MzA2OTICXzUEDSR0MDMwNzA1MzEwODUDCQAAAgkAkAMBBQhwQW1vdW50cwABBAZwQXNzZXQJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAADCQECIT0CBQZwQXNzZXQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCQCRAwIFCHBBbW91bnRzAAAFBnBBc3NldAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMzA3MDUzMTA4NQJfMQQKcG10QXNzZXRJZAgFDSR0MDMwNzA1MzEwODUCXzIED3ZpcnRNaW5Ub1JlY2l2ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAQMJAQIhPQIJAJADAQUIcEFtb3VudHMAAQkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAiE9AgUKcG10QXNzZXRJZAUMc2hhcmVBc3NldElkCQACAQkArAICAiRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJANgEAQUMc2hhcmVBc3NldElkAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQhhc3NldElkQQkAzAgCBQhhc3NldElkQgUDbmlsBQ13aXRoZHJhd0Fzc2V0CQACAQIZSW5jb3JyZWN0IHdpdGhkcmF3IGFzc2V0LgMDCQBmAgUIYmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQQYJAGYCBQhiYWxhbmNlQgUPYWNjb3VudEJhbGFuY2VCCQCUCgIFA25pbAkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwYFD2FjY291bnRCYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VCBQhiYWxhbmNlQQUIYmFsYW5jZUIFC3N0ckFzc2V0SWRBBQtzdHJBc3NldElkQgQMdW5sb2NrQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAQt2YWx1ZU9yRWxzZQIJAJEDAgUEYXJncwACAgEwBAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBA53aXRoZHJhd0Ftb3VudAkAZAIFCXBtdEFtb3VudAUMdW5sb2NrQW1vdW50BAxhbW91bnRUb1BheUEJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQgUQc2hhcmVBc3NldFN1cHBseQQNJHQwMzIzMzAzMjM4OAkBDGdldEZlZVBhcmFtcwIIBQFpBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBANmZWUIBQ0kdDAzMjMzMDMyMzg4Al8xBAZnb3ZGZWUIBQ0kdDAzMjMzMDMyMzg4Al8yBA0kdDAzMjQwNTMyNzQ1AwkAAAIFDXdpdGhkcmF3QXNzZXQFCGFzc2V0SWRBCQENY2FsY3VsYXRlRmVlcwYFDGFtb3VudFRvUGF5QgUPdmlydE1pblRvUmVjaXZlBQhiYWxhbmNlQgUIYmFsYW5jZUEFA2ZlZQUGZ292RmVlCQENY2FsY3VsYXRlRmVlcwYFDGFtb3VudFRvUGF5QQUPdmlydE1pblRvUmVjaXZlBQhiYWxhbmNlQQUIYmFsYW5jZUIFA2ZlZQUGZ292RmVlBBBhbW91bnRXaXRob3V0RmVlCAUNJHQwMzI0MDUzMjc0NQJfMQQNYW1vdW50V2l0aEZlZQgFDSR0MDMyNDA1MzI3NDUCXzIEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAzMjQwNTMyNzQ1Al8zBA0kdDAzMjc2MjM0MTA4AwkAAAIFDXdpdGhkcmF3QXNzZXQFCGFzc2V0SWRBBAd1bnN0YWtlAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIJAGQCBQxhbW91bnRUb1BheUEFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAlgoECQBlAgkAZQIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBBQ1hbW91bnRXaXRoRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQhiYWxhbmNlQgUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBkAgUMYW1vdW50VG9QYXlBBQ1hbW91bnRXaXRoRmVlBQhhc3NldElkQQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAd1bnN0YWtlAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIJAGQCBQxhbW91bnRUb1BheUIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQJAMwIAgULc3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAlgoEBQhiYWxhbmNlQQkAZQIJAGUCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgUNYW1vdW50V2l0aEZlZQUQZ292ZXJuYW5jZVJld2FyZAUIYXNzZXRJZEIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBkAgUMYW1vdW50VG9QYXlCBQ1hbW91bnRXaXRoRmVlBQhhc3NldElkQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAtuZXdCYWxhbmNlQQgFDSR0MDMyNzYyMzQxMDgCXzEEC25ld0JhbGFuY2VCCAUNJHQwMzI3NjIzNDEwOAJfMgQQZ292UmV3YXJkQXNzZXRJZAgFDSR0MDMyNzYyMzQxMDgCXzMEDHVzZXJUcmFuc2ZlcggFDSR0MDMyNzYyMzQxMDgCXzQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDHVubG9ja0Ftb3VudAUMc2hhcmVBc3NldElkBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC25ld0JhbGFuY2VBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC25ld0JhbGFuY2VCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFEHNoYXJlQXNzZXRTdXBwbHkFDndpdGhkcmF3QW1vdW50CQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFEGdvdmVybmFuY2VSZXdhcmQFEGdvdlJld2FyZEFzc2V0SWQFA25pbAUMdXNlclRyYW5zZmVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMJAQt2YWx1ZU9yRWxzZQIJAQxpc09yYWNsZVBvb2wBCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQNJHQwMzQ4MzMzNDkwOQkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMzQ4MzMzNDkwOQJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAzNDgzMzM0OTA5Al8yBAhhc3NldElkQQgFDSR0MDM0ODMzMzQ5MDkCXzMECGFzc2V0SWRCCAUNJHQwMzQ4MzMzNDkwOQJfNAQNJHQwMzQ5MjIzNTAyOAkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDM0OTIyMzUwMjgCXzEECGJhbGFuY2VCCAUNJHQwMzQ5MjIzNTAyOAJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMzQ5MjIzNTAyOAJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMzQ5MjIzNTAyOAJfNAQNYW1vdW50RW5yb2xsQQkAZQIFD2FjY291bnRCYWxhbmNlQQUIYmFsYW5jZUEEDWFtb3VudEVucm9sbEIJAGUCBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VCAwkBAiE9AgUPbW9uZXlCb3hBZGRyZXNzCAUBaQxvcmlnaW5DYWxsZXIJAAIBAiZPbmx5IHRoZSB3YWxsZXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMDCQBmAgAABQ1hbW91bnRFbnJvbGxBBgkAZgIAAAUNYW1vdW50RW5yb2xsQgkBB3N1c3BlbmQBAhZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAAACBQ1hbW91bnRFbnJvbGxBAAAJAAACBQ1hbW91bnRFbnJvbGxCAAAHCQACAQIQTm8gbW9uZXkgdG8gdGFrZQQGc3Rha2UxAwMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRBCQBmAgUNYW1vdW50RW5yb2xsQQAABwkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUNYW1vdW50RW5yb2xsQQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQBmAgUNYW1vdW50RW5yb2xsQgAABwkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUNYW1vdW50RW5yb2xsQgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFDWFtb3VudEVucm9sbEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQ1hbW91bnRFbnJvbGxCBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgUTbXVsdGlTaWduZWRCeUFkbWluczvT2SU=", "height": 2118881, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CgVZmLAtrgWv2UwNfL7Reazswo2WebQZsK434ZcXta3N Next: DtFwinjC8cbkAWcPjTwRSSqTs1VXSbLgXbVWL43u6jTs Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
5555
5656 let A = "active_global_exchangers"
5757
58-let B = "admin_pub_1"
58+let B = "discounts"
5959
60-let C = "admin_pub_2"
60+let C = "discount_values"
6161
62-let D = "admin_pub_3"
62+let D = "_SWOP_amount"
6363
64-let E = "admin_invoke_pub"
64+let E = "pool_"
6565
66-let F = "money_box_address"
66+let F = "admin_pub_1"
6767
68-let G = "voting_address"
68+let G = "admin_pub_2"
6969
70-let H = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
70+let H = "admin_pub_3"
7171
72-func I (J) = {
73- let K = getString(H, J)
74- if ($isInstanceOf(K, "String"))
72+let I = "admin_invoke_pub"
73+
74+let J = "money_box_address"
75+
76+let K = "voting_address"
77+
78+let L = "governance_address"
79+
80+let M = "farming_address"
81+
82+let N = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
83+
84+func O (P) = {
85+ let Q = getString(N, P)
86+ if ($isInstanceOf(Q, "String"))
7587 then {
76- let L = K
77- fromBase58String(L)
88+ let R = Q
89+ fromBase58String(R)
7890 }
7991 else {
80- let M = K
81- throw((J + "is empty"))
92+ let S = Q
93+ throw((P + "is empty"))
8294 }
8395 }
8496
8597
86-let N = I(B)
98+let T = O(F)
8799
88-let O = I(C)
100+let U = O(G)
89101
90-let P = I(D)
102+let V = O(H)
91103
92-let Q = I(E)
104+let W = O(I)
93105
94-let R = Address(I(F))
106+let X = Address(O(J))
95107
96-let S = Address(I(G))
108+let Y = Address(O(K))
97109
98-let T = I(w)
110+let Z = Address(O(L))
99111
100-let U = I(x)
112+let aa = Address(O(M))
101113
102-let V = getStringValue(H, y)
114+let ab = O(w)
103115
104-let W = Address(I(t))
116+let ac = O(x)
105117
106-let X = Address(I(u))
118+let ad = getStringValue(N, y)
107119
108-let Y = valueOrErrorMessage(getInteger(S, q), "Empty kBasePeriod")
120+let ae = Address(O(t))
109121
110-let Z = valueOrErrorMessage(getInteger(S, s), "Empty kStartHeight")
122+let af = Address(O(u))
111123
112-let aa = valueOrErrorMessage(getInteger(S, r), "Empty kPeriodLength")
124+let ag = valueOrErrorMessage(getInteger(Y, q), "Empty kBasePeriod")
113125
114-let ab = ((Y + ((height - Z) / aa)) + 3)
126+let ah = valueOrErrorMessage(getInteger(Y, s), "Empty kStartHeight")
115127
116-let ac = if (getBooleanValue(H, z))
117- then getBooleanValue(H, A)
128+let ai = valueOrErrorMessage(getInteger(Y, r), "Empty kPeriodLength")
129+
130+let aj = ((ag + ((height - ah) / ai)) + 3)
131+
132+let ak = if (getBooleanValue(N, z))
133+ then getBooleanValue(N, A)
118134 else false
119135
120-let ad = 1000000
136+let al = 1000000
121137
122-let ae = 100000000
138+let am = 100000000
123139
124-func af (ag,ah) = {
125- let K = ag
126- if ($isInstanceOf(K, "ByteVector"))
140+func an (ao,ap) = {
141+ let Q = ao
142+ if ($isInstanceOf(Q, "ByteVector"))
127143 then {
128- let ai = K
129- assetBalance(ah, ai)
144+ let aq = Q
145+ assetBalance(ap, aq)
130146 }
131- else if ($isInstanceOf(K, "Unit"))
147+ else if ($isInstanceOf(Q, "Unit"))
132148 then {
133- let aj = K
134- wavesBalance(ah).available
149+ let ar = Q
150+ wavesBalance(ap).available
135151 }
136152 else throw("Match error")
137153 }
138154
139155
140-func ak (ag,ah) = {
141- let al = {
142- let K = ag
143- if ($isInstanceOf(K, "ByteVector"))
156+func as (ao,ap) = {
157+ let at = {
158+ let Q = ao
159+ if ($isInstanceOf(Q, "ByteVector"))
144160 then {
145- let am = K
146- if ((am == T))
147- then getInteger(W, ((("rpd_balance_" + toBase58String(am)) + "_") + toString(ah)))
148- else if ((am == U))
149- then getInteger(X, ((("%s%s%s__stakingBalance__" + toBase58String(am)) + "__") + toString(ah)))
161+ let au = Q
162+ if ((au == ab))
163+ then getInteger(ae, ((("rpd_balance_" + toBase58String(au)) + "_") + toString(ap)))
164+ else if ((au == ac))
165+ then getInteger(af, ((("%s%s%s__stakingBalance__" + toBase58String(au)) + "__") + toString(ap)))
150166 else 0
151167 }
152- else if ($isInstanceOf(K, "Unit"))
153- then valueOrElse(getInteger(ah, v), 0)
168+ else if ($isInstanceOf(Q, "Unit"))
169+ then valueOrElse(getInteger(ap, v), 0)
154170 else throw("Match error")
155171 }
156- let K = al
157- if ($isInstanceOf(K, "Int"))
172+ let Q = at
173+ if ($isInstanceOf(Q, "Int"))
158174 then {
159- let an = K
160- an
175+ let av = Q
176+ av
161177 }
162178 else 0
163179 }
164180
165181
166-func ao (ag) = {
167- let K = ag
168- if (if ($isInstanceOf(K, "String"))
182+func aw (ao) = {
183+ let Q = ao
184+ if (if ($isInstanceOf(Q, "String"))
169185 then true
170- else $isInstanceOf(K, "ByteVector"))
186+ else $isInstanceOf(Q, "ByteVector"))
171187 then {
172- let ai = K
173- let ap = {
174- let aq = ai
175- if ($isInstanceOf(aq, "ByteVector"))
188+ let aq = Q
189+ let ax = {
190+ let ay = aq
191+ if ($isInstanceOf(ay, "ByteVector"))
176192 then {
177- let am = aq
178- $Tuple2(toBase58String(am), am)
193+ let au = ay
194+ $Tuple2(toBase58String(au), au)
179195 }
180- else if ($isInstanceOf(aq, "String"))
196+ else if ($isInstanceOf(ay, "String"))
181197 then {
182- let am = aq
183- $Tuple2(am, fromBase58String(am))
198+ let au = ay
199+ $Tuple2(au, fromBase58String(au))
184200 }
185201 else throw("Match error")
186202 }
187- let ar = ap._1
188- let as = ap._2
189- let at = valueOrErrorMessage(assetInfo(as), (("Asset " + ar) + " doesn't exist"))
190- $Tuple3(ar, at.name, at.decimals)
203+ let az = ax._1
204+ let aA = ax._2
205+ let aB = valueOrErrorMessage(assetInfo(aA), (("Asset " + az) + " doesn't exist"))
206+ $Tuple3(az, aB.name, aB.decimals)
191207 }
192- else if ($isInstanceOf(K, "Unit"))
208+ else if ($isInstanceOf(Q, "Unit"))
193209 then {
194- let aj = K
210+ let ar = Q
195211 $Tuple3("WAVES", "WAVES", 8)
196212 }
197213 else throw("Match error")
198214 }
199215
200216
201-func au (av) = [BooleanEntry(c, false), StringEntry(m, av)]
217+func aC (aD) = [BooleanEntry(c, false), StringEntry(m, aD)]
202218
203219
204-func aw (ax,ay,az,aA,aB,aC) = {
205- let aD = fraction(aA, ax, (ax + az))
206- let aE = fraction(aD, (ad - aB), ad)
207- let aF = fraction(aD, aC, ad)
208- if ((ay > aE))
209- then throw(((("Calculated amount to receive " + toString(aE)) + " is less than specified minimum ") + toString(ay)))
210- else $Tuple3(aD, aE, aF)
220+func aE (aF) = {
221+ let aG = valueOrElse(getInteger(Z, (toString(aF) + D)), 0)
222+ let aH = split(getStringValue(N, C), ",")
223+ let aI = split(getStringValue(N, B), ",")
224+ if (if ((aG >= parseIntValue(aH[0])))
225+ then (parseIntValue(aH[1]) > aG)
226+ else false)
227+ then (al - parseIntValue(aI[0]))
228+ else if (if ((aG >= parseIntValue(aH[1])))
229+ then (parseIntValue(aH[2]) > aG)
230+ else false)
231+ then (al - parseIntValue(aI[1]))
232+ else if (if ((aG >= parseIntValue(aH[2])))
233+ then (parseIntValue(aH[3]) > aG)
234+ else false)
235+ then (al - parseIntValue(aI[2]))
236+ else if (if ((aG >= parseIntValue(aH[3])))
237+ then (parseIntValue(aH[4]) > aG)
238+ else false)
239+ then (al - parseIntValue(aI[3]))
240+ else if ((aG >= parseIntValue(aH[4])))
241+ then (al - parseIntValue(aI[4]))
242+ else al
211243 }
212244
213245
214-func aG (aH,aI,aJ,aK,aL,aM) = au(((((((((((((((("Suspicious state. Actual balances: " + toString(aH)) + " ") + aL) + ", ") + toString(aI)) + " ") + aM) + ". State: ") + toString(aJ)) + " ") + aL) + ", ") + toString(aK)) + " ") + aM))
246+func aJ (aK,aL,aM,aN,aO,aP) = {
247+ let aQ = fraction(aN, aK, (aK + aM))
248+ let aR = fraction(aQ, (al - aO), al)
249+ let aS = fraction(aQ, aP, al)
250+ if ((aL > aR))
251+ then throw(((("Calculated amount to receive " + toString(aR)) + " is less than specified minimum ") + toString(aL)))
252+ else $Tuple3(aQ, aR, aS)
253+ }
215254
216255
217-func aN () = if (ac)
256+func aT (aK,aU,aO) = {
257+ let aV = 1
258+ let aW = (((aU + fraction(aU, (al - aO), al)) + fraction(aK, (al - aO), al)) - aK)
259+ let aX = (-(toBigInt(aU)) * toBigInt(aK))
260+ let aY = ((toBigInt(aW) * toBigInt(aW)) - ((toBigInt(4) * toBigInt(aV)) * aX))
261+ (toInt(((-(toBigInt(aW)) + pow(aY, 0, toBigInt(5), 1, 0, DOWN)) / toBigInt(2))) * aV)
262+ }
263+
264+
265+func aZ (ao) = if ((ao == base58''))
266+ then unit
267+ else ao
268+
269+
270+func ba (bb,bc,bd,be,bf,bg) = aC(((((((((((((((("Suspicious state. Actual balances: " + toString(bb)) + " ") + bf) + ", ") + toString(bc)) + " ") + bg) + ". State: ") + toString(bd)) + " ") + bf) + ", ") + toString(be)) + " ") + bg))
271+
272+
273+func bh () = if (ak)
218274 then unit
219275 else throw("DApp is inactive at this moment")
220276
221277
222-func aO (ah,aL,aM) = {
223- let aJ = getIntegerValue(ah, f)
224- let aK = getIntegerValue(ah, g)
225- let aP = ak(aL, ah)
226- let aQ = ak(aM, ah)
227- let aH = (af(aL, ah) + aP)
228- let aI = (af(aM, ah) + aQ)
229- let aR = getIntegerValue(ah, k)
230- $Tuple5(aJ, aK, aH, aI, aR)
278+func bi (bj) = if (isDefined(getString(N, (E + bj))))
279+ then unit
280+ else throw("DApp is not registered pool")
281+
282+
283+func bk (ap,bf,bg) = {
284+ let bd = getIntegerValue(ap, f)
285+ let be = getIntegerValue(ap, g)
286+ let bl = as(bf, ap)
287+ let bm = as(bg, ap)
288+ let bb = (an(bf, ap) + bl)
289+ let bc = (an(bg, ap) + bm)
290+ let bn = getIntegerValue(ap, k)
291+ $Tuple5(bd, be, bb, bc, bn)
231292 }
232293
233294
234-func aS (ah) = {
235- let aT = getStringValue(ah, d)
236- let aU = getStringValue(ah, e)
237- let aL = if ((aT == "WAVES"))
295+func bo (ap) = {
296+ let bp = getStringValue(ap, d)
297+ let bq = getStringValue(ap, e)
298+ let bf = if ((bp == "WAVES"))
238299 then unit
239- else fromBase58String(aT)
240- let aM = if ((aU == "WAVES"))
300+ else fromBase58String(bp)
301+ let bg = if ((bq == "WAVES"))
241302 then unit
242- else fromBase58String(aU)
243- let aV = fromBase58String(getStringValue(ah, j))
244- $Tuple5(aT, aU, aL, aM, aV)
303+ else fromBase58String(bq)
304+ let br = fromBase58String(getStringValue(ap, j))
305+ $Tuple5(bp, bq, bf, bg, br)
245306 }
246307
247308
248-func aW (ah) = {
249- let aB = getIntegerValue(ah, l)
250- let aX = fraction(aB, 40, 100)
251- $Tuple2(aB, aX)
309+func bs (ap,bt) = {
310+ let bu = aE(bt)
311+ let aO = fraction(getIntegerValue(ap, l), bu, al, CEILING)
312+ let bv = fraction(fraction(aO, 40, 100), bu, al, CEILING)
313+ $Tuple2(aO, bv)
252314 }
253315
254316
255-@Callable(an)
256-func init (aY,aZ,ba,bb) = {
257- let bc = Address(aY)
258- let bd = $Tuple2(ba[0], bb[0])
259- let be = bd._1
260- let bf = bd._2
261- let bg = $Tuple2(ba[1], bb[1])
262- let bh = bg._1
263- let bi = bg._2
264- if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
317+@Callable(av)
318+func init (bw,bx,by,bz) = {
319+ let bt = Address(bw)
320+ let bA = $Tuple2(by[0], aZ(bz[0]))
321+ let bB = bA._1
322+ let bC = bA._2
323+ let bD = $Tuple2(by[1], aZ(bz[1]))
324+ let bE = bD._1
325+ let bF = bD._2
326+ if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
265327 then throw("Only admin can call this function")
266- else if (isDefined(getBoolean(bc, c)))
328+ else if (isDefined(getBoolean(bt, c)))
267329 then throw("DApp is already active")
268- else if ((bf == bi))
330+ else if ((bC == bF))
269331 then throw("Assets must be different")
270332 else {
271- let bj = ao(bf)
272- let bk = bj._1
273- let bl = bj._2
274- let bm = bj._3
275- let bn = ao(bi)
276- let bo = bn._1
277- let bp = bn._2
278- let bq = bn._3
279- let br = (aZ[0] == "true")
280- let bs = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
281- let bt = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
282- let bu = ((bm + bq) / 2)
283- let bv = pow(be, bm, 5, 1, bm, DOWN)
284- let bw = pow(bh, bq, 5, 1, bq, DOWN)
285- let bx = pow(10, 0, bu, 0, 0, DOWN)
286- let by = fraction(bv, bw, bx)
287- let bz = Issue(bs, bt, by, bu, true)
288- let bA = calculateAssetId(bz)
289- let bB = if (contains(V, bk))
290- then invoke(an.caller, "stakeUnstake", [true, be, bk], nil)
333+ let bG = aw(bC)
334+ let bH = bG._1
335+ let bI = bG._2
336+ let bJ = bG._3
337+ let bK = aw(bF)
338+ let bL = bK._1
339+ let bM = bK._2
340+ let bN = bK._3
341+ let bO = (bx[0] == "true")
342+ let bP = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
343+ let bQ = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
344+ let bR = ((bJ + bN) / 2)
345+ let bS = pow(bB, bJ, 5, 1, bJ, DOWN)
346+ let bT = pow(bE, bN, 5, 1, bN, DOWN)
347+ let bU = pow(10, 0, bR, 0, 0, DOWN)
348+ let bV = fraction(bS, bT, bU)
349+ let bW = Issue(bP, bQ, bV, bR, true)
350+ let bX = calculateAssetId(bW)
351+ let bY = if (contains(ad, bH))
352+ then invoke(av.caller, "stakeUnstake", [true, bB, bH], nil)
291353 else 0
292- if ((bB == bB))
354+ if ((bY == bY))
293355 then {
294- let bC = if (contains(V, bo))
295- then invoke(an.caller, "stakeUnstake", [true, bh, bo], nil)
356+ let bZ = if (contains(ad, bL))
357+ then invoke(av.caller, "stakeUnstake", [true, bE, bL], nil)
296358 else 0
297- if ((bC == bC))
359+ if ((bZ == bZ))
298360 then {
299- let bD = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(l, getIntegerValue(H, "base_fee_cpmm")), bz, StringEntry(j, toBase58String(bA)), IntegerEntry(k, by), ScriptTransfer(bc, by, bA)]
300- if (br)
301- then $Tuple2(nil, (bD ++ [BooleanEntry(n, br), IntegerEntry(o, (Z + (ab * aa)))]))
302- else $Tuple2(nil, bD)
361+ let ca = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, getIntegerValue(N, "base_fee_cpmm")), bW, StringEntry(j, toBase58String(bX)), IntegerEntry(k, bV), ScriptTransfer(bt, bV, bX)]
362+ if (bO)
363+ then $Tuple2(nil, $Tuple2((ca ++ [BooleanEntry(n, bO), IntegerEntry(o, (ah + (aj * ai)))]), nil))
364+ else $Tuple2(nil, $Tuple2(ca, nil))
303365 }
304366 else throw("Strict value is not equal to itself.")
305367 }
309371
310372
311373
312-@Callable(an)
313-func initWithInitRatio (aY,aZ,ba,bb) = {
314- let bc = Address(aY)
315- let bE = $Tuple5(parseIntValue(aZ[0]), parseIntValue(aZ[1]), aZ[2], aZ[3], (aZ[4] == "true"))
316- let bF = bE._1
317- let bG = bE._2
318- let bH = bE._3
319- let bI = bE._4
320- let br = bE._5
321- if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
374+@Callable(av)
375+func initWithInitRatio (bw,bx,by,bz) = {
376+ let bt = Address(bw)
377+ let cb = $Tuple5(parseIntValue(bx[0]), parseIntValue(bx[1]), bx[2], bx[3], (bx[4] == "true"))
378+ let cc = cb._1
379+ let cd = cb._2
380+ let ce = cb._3
381+ let cf = cb._4
382+ let bO = cb._5
383+ if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
322384 then throw("Only admin can call this function")
323- else if (isDefined(getBoolean(bc, c)))
385+ else if (isDefined(getBoolean(bt, c)))
324386 then throw("DApp is already active")
325- else if ((bH == bI))
387+ else if ((ce == cf))
326388 then throw("Assets must be different")
327389 else {
328- let bJ = ao(bH)
329- let bk = bJ._1
330- let bl = bJ._2
331- let bm = bJ._3
332- let bK = ao(bI)
333- let bo = bK._1
334- let bp = bK._2
335- let bq = bK._3
336- let bs = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
337- let bt = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
338- let bu = ((bm + bq) / 2)
339- let by = 0
340- let bz = Issue(bs, bt, by, bu, true)
341- let bA = calculateAssetId(bz)
342- let bD = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(h, bF), IntegerEntry(i, bG), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(H, "base_fee_cpmm")), bz, StringEntry(j, toBase58String(bA)), IntegerEntry(k, by)]
343- if (br)
344- then $Tuple2(nil, (bD ++ [BooleanEntry(n, br), IntegerEntry(o, (Z + (ab * aa)))]))
345- else $Tuple2(nil, bD)
390+ let cg = aw(ce)
391+ let bH = cg._1
392+ let bI = cg._2
393+ let bJ = cg._3
394+ let ch = aw(cf)
395+ let bL = ch._1
396+ let bM = ch._2
397+ let bN = ch._3
398+ let bP = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
399+ let bQ = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
400+ let bR = ((bJ + bN) / 2)
401+ let bV = 0
402+ let bW = Issue(bP, bQ, bV, bR, true)
403+ let bX = calculateAssetId(bW)
404+ let ca = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(N, "base_fee_cpmm")), bW, StringEntry(j, toBase58String(bX)), IntegerEntry(k, bV)]
405+ if (bO)
406+ then $Tuple2(nil, $Tuple2((ca ++ [BooleanEntry(n, bO), IntegerEntry(o, (ah + (aj * ai)))]), nil))
407+ else $Tuple2(nil, $Tuple2(ca, nil))
346408 }
347409 }
348410
349411
350412
351-@Callable(an)
352-func keepLimitForFirstHarvest (aY,aZ,ba,bb) = valueOrElse(aN(), if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
413+@Callable(av)
414+func keepLimitForFirstHarvest (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
353415 then throw("Only admin can call this function")
354416 else {
355- let bL = parseIntValue(aZ[0])
356- $Tuple2(nil, [IntegerEntry(p, bL)])
357- })
417+ let ci = parseIntValue(bx[0])
418+ $Tuple2(nil, $Tuple2([IntegerEntry(p, ci)], nil))
419+ }))
358420
359421
360422
361-@Callable(an)
362-func exchange (aY,aZ,ba,bb) = valueOrElse(aN(), {
363- let bc = Address(aY)
364- let bM = $Tuple2(ba[0], bb[0])
365- let ax = bM._1
366- let bN = bM._2
367- let ay = parseIntValue(aZ[0])
368- let bO = aS(an.caller)
369- let aT = bO._1
370- let aU = bO._2
371- let aL = bO._3
372- let aM = bO._4
373- let bP = aO(an.caller, aL, aM)
374- let aJ = bP._1
375- let aK = bP._2
376- let aH = bP._3
377- let aI = bP._4
378- if (if ((aJ == 0))
423+@Callable(av)
424+func exchange (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
425+ let bt = Address(bw)
426+ let cj = $Tuple2(by[0], aZ(bz[0]))
427+ let aK = cj._1
428+ let ck = cj._2
429+ let aL = parseIntValue(bx[0])
430+ let cl = bo(av.caller)
431+ let bp = cl._1
432+ let bq = cl._2
433+ let bf = cl._3
434+ let bg = cl._4
435+ let cm = bk(av.caller, bf, bg)
436+ let bd = cm._1
437+ let be = cm._2
438+ let bb = cm._3
439+ let bc = cm._4
440+ if (if ((bd == 0))
379441 then true
380- else (aK == 0))
442+ else (be == 0))
381443 then throw("Can't exchange with zero balance")
382- else if ((0 >= ay))
383- then throw(("Minimal amount to receive must be positive. Actual: " + toString(ay)))
384- else if ((size(ba) != 1))
444+ else if ((0 >= aL))
445+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(aL)))
446+ else if ((size(by) != 1))
385447 then throw("One attached payment expected")
386- else if (!(containsElement([aL, aM], bN)))
387- then throw(((("Incorrect asset attached. Expected: " + aT) + " or ") + aU))
388- else if (if ((aJ > aH))
448+ else if (!(containsElement([bf, bg], ck)))
449+ then throw(((("Incorrect asset attached. Expected: " + bp) + " or ") + bq))
450+ else if (if ((bd > bb))
389451 then true
390- else (aK > aI))
391- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
452+ else (be > bc))
453+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
392454 else {
393- let bQ = aW(an.caller)
394- let aB = bQ._1
395- let aX = bQ._2
396- let bR = if ((bN == aL))
397- then aw(ax, ay, aJ, aK, aB, aX)
398- else aw(ax, ay, aK, aJ, aB, aX)
399- let aD = bR._1
400- let aE = bR._2
401- let aF = bR._3
402- let bS = if ((bN == aL))
403- then $Tuple3((aJ + ax), ((aK - aE) - aF), aM)
404- else $Tuple3(((aJ - aE) - aF), (aK + ax), aL)
405- let bT = bS._1
406- let bU = bS._2
407- let bV = bS._3
408- let bW = if ((bN == aL))
409- then $Tuple2(ax, (aE + aF))
410- else $Tuple2((aE + aF), ax)
411- let bX = bW._1
412- let bY = bW._2
413- let bB = if (contains(V, aT))
414- then invoke(an.caller, "stakeUnstake", [(bN == aL), bX, aT], nil)
455+ let cn = bs(av.caller, av.originCaller)
456+ let aO = cn._1
457+ let bv = cn._2
458+ let co = if ((ck == bf))
459+ then aJ(aK, aL, bd, be, aO, bv)
460+ else aJ(aK, aL, be, bd, aO, bv)
461+ let aQ = co._1
462+ let aR = co._2
463+ let aS = co._3
464+ let cp = if ((ck == bf))
465+ then $Tuple3((bd + aK), ((be - aR) - aS), bg)
466+ else $Tuple3(((bd - aR) - aS), (be + aK), bf)
467+ let cq = cp._1
468+ let cr = cp._2
469+ let cs = cp._3
470+ let ct = if ((ck == bf))
471+ then $Tuple2(aK, (aR + aS))
472+ else $Tuple2((aR + aS), aK)
473+ let cu = ct._1
474+ let cv = ct._2
475+ let bY = if (contains(ad, bp))
476+ then invoke(av.caller, "stakeUnstake", [(ck == bf), cu, bp], nil)
415477 else 0
416- if ((bB == bB))
478+ if ((bY == bY))
417479 then {
418- let bC = if (contains(V, aU))
419- then invoke(an.caller, "stakeUnstake", [(bN == aM), bY, aU], nil)
480+ let bZ = if (contains(ad, bq))
481+ then invoke(av.caller, "stakeUnstake", [(ck == bg), cv, bq], nil)
420482 else 0
421- if ((bC == bC))
422- then $Tuple2(nil, [IntegerEntry(f, bT), IntegerEntry(g, bU), ScriptTransfer(bc, aE, bV), ScriptTransfer(R, aF, bV)])
483+ if ((bZ == bZ))
484+ then $Tuple2(nil, $Tuple2([IntegerEntry(f, cq), IntegerEntry(g, cr), ScriptTransfer(bt, aR, cs), ScriptTransfer(X, aS, cs)], [aR, cs]))
423485 else throw("Strict value is not equal to itself.")
424486 }
425487 else throw("Strict value is not equal to itself.")
426488 }
427- })
489+ }))
428490
429491
430492
431-@Callable(an)
432-func replenishWithTwoTokens (aY,aZ,ba,bb) = valueOrElse(aN(), {
433- let bc = Address(aY)
434- let bf = bb[0]
435- let bi = bb[1]
436- let bZ = aS(an.caller)
437- let aT = bZ._1
438- let aU = bZ._2
439- let aL = bZ._3
440- let aM = bZ._4
441- let aV = bZ._5
442- let ca = aO(an.caller, aL, aM)
443- let aJ = ca._1
444- let aK = ca._2
445- let aH = ca._3
446- let aI = ca._4
447- let cb = ca._5
448- if ((size(ba) != 2))
493+@Callable(av)
494+func replenishWithTwoTokens (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
495+ let bt = Address(bw)
496+ let bC = aZ(bz[0])
497+ let bF = aZ(bz[1])
498+ let cw = (bx[0] == "true")
499+ let cx = bo(av.caller)
500+ let bp = cx._1
501+ let bq = cx._2
502+ let bf = cx._3
503+ let bg = cx._4
504+ let br = cx._5
505+ let cy = bk(av.caller, bf, bg)
506+ let bd = cy._1
507+ let be = cy._2
508+ let bb = cy._3
509+ let bc = cy._4
510+ let cz = cy._5
511+ if ((size(by) != 2))
449512 then throw("Two attached assets expected")
450- else if (if ((bf != aL))
513+ else if (if ((bC != bf))
451514 then true
452- else (bi != aM))
453- then throw(((("Incorrect assets attached. Expected: " + aT) + " and ") + aU))
454- else if (if ((aJ > aH))
515+ else (bF != bg))
516+ then throw(((("Incorrect assets attached. Expected: " + bp) + " and ") + bq))
517+ else if (if ((bd > bb))
455518 then true
456- else (aK > aI))
457- then $Tuple2(nil, ([ScriptTransfer(bc, ba[0], bf), ScriptTransfer(bc, ba[1], bi)] ++ aG(aH, aI, aJ, aK, aT, aU)))
519+ else (be > bc))
520+ then $Tuple2(nil, ([ScriptTransfer(bt, by[0], bC), ScriptTransfer(bt, by[1], bF)] ++ ba(bb, bc, bd, be, bp, bq)))
458521 else {
459- let cc = ao(bf)
460- let bk = cc._1
461- let bl = cc._2
462- let bm = cc._3
463- let cd = ao(bi)
464- let bo = cd._1
465- let bp = cd._2
466- let bq = cd._3
467- let ce = ((aJ + aK) == 0)
468- let cf = if (ce)
469- then $Tuple5(ba[0], ba[1], 0, bf, 1)
522+ let cA = aw(bC)
523+ let bH = cA._1
524+ let bI = cA._2
525+ let bJ = cA._3
526+ let cB = aw(bF)
527+ let bL = cB._1
528+ let bM = cB._2
529+ let bN = cB._3
530+ let cC = ((bd + be) == 0)
531+ let cD = if (cC)
532+ then $Tuple5(by[0], by[1], 0, bC, 1)
470533 else {
471- let cg = fraction(ae, ba[0], aJ)
472- let ch = fraction(ae, ba[1], aK)
473- if ((ch > cg))
534+ let cE = fraction(am, by[0], bd)
535+ let cF = fraction(am, by[1], be)
536+ if ((cF > cE))
474537 then {
475- let ci = fraction(ba[0], aK, aJ)
476- $Tuple5(ba[0], ci, (ba[1] - ci), bi, cg)
538+ let cG = fraction(by[0], be, bd)
539+ $Tuple5(by[0], cG, (by[1] - cG), bF, cE)
477540 }
478541 else {
479- let ci = fraction(ba[1], aJ, aK)
480- $Tuple5(ci, ba[1], (ba[0] - ci), bf, ch)
542+ let cG = fraction(by[1], bd, be)
543+ $Tuple5(cG, by[1], (by[0] - cG), bC, cF)
481544 }
482545 }
483- let be = cf._1
484- let bh = cf._2
485- let cj = cf._3
486- let ck = cf._4
487- let cl = cf._5
488- let cm = if (ce)
546+ let bB = cD._1
547+ let bE = cD._2
548+ let cH = cD._3
549+ let cI = cD._4
550+ let cJ = cD._5
551+ let cK = if (cC)
489552 then {
490- let bu = ((bm + bq) / 2)
491- fraction(pow(be, bm, 5, 1, bm, DOWN), pow(bh, bq, 5, 1, bq, DOWN), pow(10, 0, bu, 0, 0, DOWN))
553+ let bR = ((bJ + bN) / 2)
554+ fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bR, 0, 0, DOWN))
492555 }
493- else fraction(cl, cb, ae)
494- if ((cm == 0))
556+ else fraction(cJ, cz, am)
557+ if ((cK == 0))
495558 then throw("Too small amount to replenish")
496- else {
497- let bB = if (contains(V, bk))
498- then invoke(an.caller, "stakeUnstake", [true, be, bk], nil)
499- else 0
500- if ((bB == bB))
501- then {
502- let bC = if (contains(V, bo))
503- then invoke(an.caller, "stakeUnstake", [true, bh, bo], nil)
504- else 0
505- if ((bC == bC))
506- then $Tuple2(nil, [Reissue(aV, cm, true), IntegerEntry(f, (aJ + be)), IntegerEntry(g, (aK + bh)), IntegerEntry(k, (cb + cm)), ScriptTransfer(bc, cm, aV), ScriptTransfer(bc, cj, ck)])
507- else throw("Strict value is not equal to itself.")
508- }
509- else throw("Strict value is not equal to itself.")
510- }
559+ else if ((0 > cH))
560+ then throw("Change < 0")
561+ else {
562+ let bY = if (contains(ad, bH))
563+ then invoke(av.caller, "stakeUnstake", [true, bB, bH], nil)
564+ else 0
565+ if ((bY == bY))
566+ then {
567+ let bZ = if (contains(ad, bL))
568+ then invoke(av.caller, "stakeUnstake", [true, bE, bL], nil)
569+ else 0
570+ if ((bZ == bZ))
571+ then {
572+ let cL = if (cw)
573+ then {
574+ let cM = invoke(av.caller, "reissueShareToken", [cK], nil)
575+ if ((cM == cM))
576+ then {
577+ let cN = invoke(aa, "lockShareTokens", [toString(av.caller)], [AttachedPayment(br, cK)])
578+ if ((cN == cN))
579+ then nil
580+ else throw("Strict value is not equal to itself.")
581+ }
582+ else throw("Strict value is not equal to itself.")
583+ }
584+ else [Reissue(br, cK, true), ScriptTransfer(bt, cK, br)]
585+ $Tuple2(nil, $Tuple2(([IntegerEntry(f, (bd + bB)), IntegerEntry(g, (be + bE)), IntegerEntry(k, (cz + cK)), ScriptTransfer(bt, cH, cI)] ++ cL), nil))
586+ }
587+ else throw("Strict value is not equal to itself.")
588+ }
589+ else throw("Strict value is not equal to itself.")
590+ }
511591 }
512- })
592+ }))
513593
514594
515595
516-@Callable(an)
517-func replenishWithOneToken (aY,aZ,ba,bb) = valueOrElse(aN(), {
518- let bc = Address(aY)
519- let bN = bb[0]
520- let ax = ba[0]
521- let cn = parseIntValue(aZ[0])
522- let co = aS(an.caller)
523- let aT = co._1
524- let aU = co._2
525- let aL = co._3
526- let aM = co._4
527- let aV = co._5
528- let cp = aO(an.caller, aL, aM)
529- let aJ = cp._1
530- let aK = cp._2
531- let aH = cp._3
532- let aI = cp._4
533- let cb = cp._5
534- let ce = ((aJ + aK) == 0)
535- if ((size(ba) != 1))
596+@Callable(av)
597+func replenishWithOneToken (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
598+ let bt = Address(bw)
599+ let ck = aZ(bz[0])
600+ let aK = by[0]
601+ let cO = parseIntValue(bx[0])
602+ let cw = (bx[1] == "true")
603+ let cP = bo(av.caller)
604+ let bp = cP._1
605+ let bq = cP._2
606+ let bf = cP._3
607+ let bg = cP._4
608+ let br = cP._5
609+ let cQ = bk(av.caller, bf, bg)
610+ let bd = cQ._1
611+ let be = cQ._2
612+ let bb = cQ._3
613+ let bc = cQ._4
614+ let cz = cQ._5
615+ let cC = ((bd + be) == 0)
616+ if ((size(by) != 1))
536617 then throw("One attached assets expected")
537- else if (if ((bN != aL))
538- then (bN != aM)
618+ else if (if ((ck != bf))
619+ then (ck != bg)
539620 else false)
540- then throw(((("Incorrect asset attached. Expected: " + aT) + " or ") + aU))
541- else if (ce)
621+ then throw(((("Incorrect asset attached. Expected: " + bp) + " or ") + bq))
622+ else if (cC)
542623 then throw("For initial exchanger you need to use two tokens")
543- else if (if ((aJ > aH))
624+ else if (if ((bd > bb))
544625 then true
545- else (aK > aI))
546- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
626+ else (be > bc))
627+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
547628 else {
548- let cq = aW(an.caller)
549- let aB = cq._1
550- let aX = cq._2
551- let cr = if ((bN == aL))
629+ let cR = bs(av.caller, av.originCaller)
630+ let aO = cR._1
631+ let bv = cR._2
632+ let cS = if ((ck == bf))
552633 then {
553- let cs = aw(ax, cn, aJ, aK, aB, aX)
554- let aD = cs._1
555- let aE = cs._2
556- let aF = cs._3
557- let bT = (aJ + ax)
558- let bU = (aK - aF)
559- let cg = fraction((ax / 2), ae, bT)
560- let ch = fraction(aE, ae, bU)
561- let cm = fraction(min([cg, ch]), cb, ae)
562- $Tuple6(bT, bU, cm, aF, aM, aU)
634+ let cT = aT(aK, bd, aO)
635+ let cU = aJ(cT, cO, bd, be, aO, bv)
636+ let aQ = cU._1
637+ let aR = cU._2
638+ let aS = cU._3
639+ let cq = (bd + aK)
640+ let cr = (be - aS)
641+ let cE = fraction((aK - cT), am, cq)
642+ let cF = fraction(aR, am, cr)
643+ let cK = fraction(min([cE, cF]), cz, am)
644+ $Tuple7(cq, cr, cK, aS, bg, bq, bp)
563645 }
564646 else {
565- let ct = aw(ax, cn, aK, aJ, aB, aX)
566- let aD = ct._1
567- let aE = ct._2
568- let aF = ct._3
569- let bT = (aJ - aF)
570- let bU = (aK + ax)
571- let cg = fraction(aE, ae, bT)
572- let ch = fraction((ax / 2), ae, bU)
573- let cm = fraction(min([cg, ch]), cb, ae)
574- $Tuple6(bT, bU, cm, aF, aL, aT)
647+ let cT = aT(aK, be, aO)
648+ let cV = aJ(cT, cO, be, bd, aO, bv)
649+ let aQ = cV._1
650+ let aR = cV._2
651+ let aS = cV._3
652+ let cq = (bd - aS)
653+ let cr = (be + aK)
654+ let cE = fraction(aR, am, cq)
655+ let cF = fraction((aK - cT), am, cr)
656+ let cK = fraction(min([cE, cF]), cz, am)
657+ $Tuple7(cq, cr, cK, aS, bf, bp, bq)
575658 }
576- let bT = cr._1
577- let bU = cr._2
578- let cm = cr._3
579- let cu = cr._4
580- let cv = cr._5
581- let cw = cr._6
582- if ((cm == 0))
659+ let cq = cS._1
660+ let cr = cS._2
661+ let cK = cS._3
662+ let cW = cS._4
663+ let cX = cS._5
664+ let cY = cS._6
665+ let cZ = cS._7
666+ if ((cK == 0))
583667 then throw("Too small amount to replenish")
584668 else {
585- let bB = if (contains(V, cw))
586- then invoke(an.caller, "stakeUnstake", [false, cu, cw], nil)
669+ let bY = if (contains(ad, cZ))
670+ then invoke(av.caller, "stakeUnstake", [true, aK, cZ], nil)
587671 else 0
588- if ((bB == bB))
589- then $Tuple2(nil, [IntegerEntry(f, bT), IntegerEntry(g, bU), IntegerEntry(k, (cb + cm)), Reissue(aV, cm, true), ScriptTransfer(bc, cm, aV), ScriptTransfer(R, cu, cv)])
672+ if ((bY == bY))
673+ then {
674+ let bZ = if (contains(ad, cY))
675+ then invoke(av.caller, "stakeUnstake", [false, cW, cY], nil)
676+ else 0
677+ if ((bZ == bZ))
678+ then {
679+ let cL = if (cw)
680+ then {
681+ let cM = invoke(av.caller, "reissueShareToken", [cK], nil)
682+ if ((cM == cM))
683+ then {
684+ let cN = invoke(aa, "lockShareTokens", [toString(av.caller)], [AttachedPayment(br, cK)])
685+ if ((cN == cN))
686+ then nil
687+ else throw("Strict value is not equal to itself.")
688+ }
689+ else throw("Strict value is not equal to itself.")
690+ }
691+ else [Reissue(br, cK, true), ScriptTransfer(bt, cK, br)]
692+ $Tuple2(nil, $Tuple2(([IntegerEntry(f, cq), IntegerEntry(g, cr), IntegerEntry(k, (cz + cK)), ScriptTransfer(X, cW, cX)] ++ cL), nil))
693+ }
694+ else throw("Strict value is not equal to itself.")
695+ }
590696 else throw("Strict value is not equal to itself.")
591697 }
592698 }
593- })
699+ }))
594700
595701
596702
597-@Callable(an)
598-func withdraw (aY,aZ,ba,bb) = valueOrElse(aN(), {
599- let bc = Address(aY)
600- let cx = $Tuple2(ba[0], bb[0])
601- let ax = cx._1
602- let bN = cx._2
603- let cy = aS(an.caller)
604- let aT = cy._1
605- let aU = cy._2
606- let aL = cy._3
607- let aM = cy._4
608- let aV = cy._5
609- let cz = aO(an.caller, aL, aM)
610- let aJ = cz._1
611- let aK = cz._2
612- let aH = cz._3
613- let aI = cz._4
614- let cb = cz._5
615- if ((size(ba) != 1))
703+@Callable(av)
704+func withdraw (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
705+ let bt = Address(bw)
706+ let da = bo(av.caller)
707+ let bp = da._1
708+ let bq = da._2
709+ let bf = da._3
710+ let bg = da._4
711+ let br = da._5
712+ let db = bk(av.caller, bf, bg)
713+ let bd = db._1
714+ let be = db._2
715+ let bb = db._3
716+ let bc = db._4
717+ let cz = db._5
718+ let dc = if ((size(by) == 1))
719+ then {
720+ let dd = aZ(bz[0])
721+ if ((dd != br))
722+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
723+ else $Tuple2(by[0], dd)
724+ }
725+ else $Tuple2(0, br)
726+ let aK = dc._1
727+ let ck = dc._2
728+ if ((size(by) > 1))
616729 then throw("One attached payment expected")
617- else if ((bN != aV))
618- then throw(("Incorrect asset attached. Expected: " + toBase58String(aV)))
619- else if (if ((aJ > aH))
620- then true
621- else (aK > aI))
622- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
730+ else if (if ((bd > bb))
731+ then true
732+ else (be > bc))
733+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
734+ else {
735+ let de = parseIntValue(valueOrElse(bx[0], "0"))
736+ let df = if ((de > 0))
737+ then invoke(aa, "withdrawShareTokens", [toString(av.caller), de], nil)
738+ else 0
739+ if ((df == df))
740+ then {
741+ let dg = (aK + de)
742+ let dh = fraction(dg, bd, cz)
743+ let di = fraction(dg, be, cz)
744+ let bY = if (contains(ad, bp))
745+ then invoke(av.caller, "stakeUnstake", [false, dh, bp], nil)
746+ else 0
747+ if ((bY == bY))
748+ then {
749+ let bZ = if (contains(ad, bq))
750+ then invoke(av.caller, "stakeUnstake", [false, di, bq], nil)
751+ else 0
752+ if ((bZ == bZ))
753+ then $Tuple2([ScriptTransfer(av.caller, de, br)], $Tuple2([IntegerEntry(f, (bd - dh)), IntegerEntry(g, (be - di)), IntegerEntry(k, (cz - dg)), Burn(br, dg), ScriptTransfer(bt, dh, bf), ScriptTransfer(bt, di, bg)], nil))
754+ else throw("Strict value is not equal to itself.")
755+ }
756+ else throw("Strict value is not equal to itself.")
757+ }
758+ else throw("Strict value is not equal to itself.")
759+ }
760+ }))
761+
762+
763+
764+@Callable(av)
765+func withdrawOneToken (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
766+ let bt = Address(bw)
767+ let dj = if ((bx[0] == ""))
768+ then unit
769+ else fromBase58String(bx[0])
770+ let dk = bo(av.caller)
771+ let bp = dk._1
772+ let bq = dk._2
773+ let bf = dk._3
774+ let bg = dk._4
775+ let br = dk._5
776+ let dl = bk(av.caller, bf, bg)
777+ let bd = dl._1
778+ let be = dl._2
779+ let bb = dl._3
780+ let bc = dl._4
781+ let cz = dl._5
782+ let dm = if ((size(by) == 1))
783+ then {
784+ let dd = aZ(bz[0])
785+ if ((dd != br))
786+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
787+ else $Tuple2(by[0], dd)
788+ }
789+ else $Tuple2(0, br)
790+ let aK = dm._1
791+ let ck = dm._2
792+ let dn = parseIntValue(bx[1])
793+ if ((size(by) != 1))
794+ then throw("One attached payment expected")
795+ else if ((ck != br))
796+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
797+ else if (!(containsElement([bf, bg], dj)))
798+ then throw("Incorrect withdraw asset.")
799+ else if (if ((bd > bb))
800+ then true
801+ else (be > bc))
802+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
803+ else {
804+ let de = parseIntValue(valueOrElse(bx[2], "0"))
805+ let df = if ((de > 0))
806+ then invoke(aa, "withdrawShareTokens", [toString(av.caller), de], nil)
807+ else 0
808+ if ((df == df))
809+ then {
810+ let dg = (aK + de)
811+ let dh = fraction(dg, bd, cz)
812+ let di = fraction(dg, be, cz)
813+ let do = bs(av.caller, av.originCaller)
814+ let aO = do._1
815+ let bv = do._2
816+ let dp = if ((dj == bf))
817+ then aJ(di, dn, be, bd, aO, bv)
818+ else aJ(dh, dn, bd, be, aO, bv)
819+ let aQ = dp._1
820+ let aR = dp._2
821+ let aS = dp._3
822+ let dq = if ((dj == bf))
823+ then {
824+ let dr = if (contains(ad, bp))
825+ then invoke(av.caller, "stakeUnstake", [false, ((dh + aR) + aS), bp], nil)
826+ else 0
827+ if ((dr == dr))
828+ then $Tuple4((((bd - dh) - aR) - aS), be, bf, [ScriptTransfer(bt, (dh + aR), bf)])
829+ else throw("Strict value is not equal to itself.")
830+ }
831+ else {
832+ let dr = if (contains(ad, bq))
833+ then invoke(av.caller, "stakeUnstake", [false, ((di + aR) + aS), bq], nil)
834+ else 0
835+ if ((dr == dr))
836+ then $Tuple4(bd, (((be - di) - aR) - aS), bg, [ScriptTransfer(bt, (di + aR), bg)])
837+ else throw("Strict value is not equal to itself.")
838+ }
839+ let cq = dq._1
840+ let cr = dq._2
841+ let ds = dq._3
842+ let dt = dq._4
843+ $Tuple2([ScriptTransfer(av.caller, de, br)], $Tuple2(([IntegerEntry(f, cq), IntegerEntry(g, cr), IntegerEntry(k, (cz - dg)), Burn(br, dg), ScriptTransfer(X, aS, ds)] ++ dt), nil))
844+ }
845+ else throw("Strict value is not equal to itself.")
846+ }
847+ }))
848+
849+
850+
851+@Callable(av)
852+func takeIntoAccountExtraFunds (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
853+ let du = bo(av.caller)
854+ let bp = du._1
855+ let bq = du._2
856+ let bf = du._3
857+ let bg = du._4
858+ let dv = bk(av.caller, bf, bg)
859+ let bd = dv._1
860+ let be = dv._2
861+ let bb = dv._3
862+ let bc = dv._4
863+ let dw = (bb - bd)
864+ let dx = (bc - be)
865+ if ((X != av.originCaller))
866+ then throw("Only the wallet can call this function")
867+ else if (if ((0 > dw))
868+ then true
869+ else (0 > dx))
870+ then aC("Enroll amount negative")
871+ else if (if ((dw == 0))
872+ then (dx == 0)
873+ else false)
874+ then throw("No money to take")
623875 else {
624- let cA = fraction(ax, aJ, cb)
625- let cB = fraction(ax, aK, cb)
626- let bB = if (contains(V, aT))
627- then invoke(an.caller, "stakeUnstake", [false, cA, aT], nil)
876+ let bY = if (if (contains(ad, bp))
877+ then (dw > 0)
878+ else false)
879+ then invoke(this, "stakeUnstake", [true, dw, bp], nil)
628880 else 0
629- if ((bB == bB))
881+ if ((bY == bY))
630882 then {
631- let bC = if (contains(V, aU))
632- then invoke(an.caller, "stakeUnstake", [false, cB, aU], nil)
883+ let bZ = if (if (contains(ad, bq))
884+ then (dx > 0)
885+ else false)
886+ then invoke(this, "stakeUnstake", [true, dx, bq], nil)
633887 else 0
634- if ((bC == bC))
635- then $Tuple2(nil, [IntegerEntry(f, (aJ - cA)), IntegerEntry(g, (aK - cB)), IntegerEntry(k, (cb - ax)), Burn(aV, ax), ScriptTransfer(bc, cA, aL), ScriptTransfer(bc, cB, aM)])
888+ if ((bZ == bZ))
889+ then $Tuple2(nil, $Tuple2([IntegerEntry(f, (bd + dw)), IntegerEntry(g, (be + dx))], nil))
636890 else throw("Strict value is not equal to itself.")
637891 }
638892 else throw("Strict value is not equal to itself.")
639893 }
640- })
894+ }))
641895
642896
643-
644-@Callable(an)
645-func takeIntoAccountExtraFunds (aY,aZ,ba,bb) = valueOrElse(aN(), {
646- let cC = aS(an.caller)
647- let aT = cC._1
648- let aU = cC._2
649- let aL = cC._3
650- let aM = cC._4
651- let cD = aO(an.caller, aL, aM)
652- let aJ = cD._1
653- let aK = cD._2
654- let aH = cD._3
655- let aI = cD._4
656- let cE = (aH - aJ)
657- let cF = (aI - aK)
658- if ((R != an.originCaller))
659- then throw("Only the wallet can call this function")
660- else if (if ((0 > cE))
661- then true
662- else (0 > cF))
663- then au("Enroll amount negative")
664- else if (if ((cE == 0))
665- then (cF == 0)
666- else false)
667- then throw("No money to take")
668- else {
669- let bB = if (if (contains(V, aT))
670- then (cE > 0)
671- else false)
672- then invoke(this, "stakeUnstake", [true, cE, aT], nil)
673- else 0
674- if ((bB == bB))
675- then {
676- let bC = if (if (contains(V, aU))
677- then (cF > 0)
678- else false)
679- then invoke(this, "stakeUnstake", [true, cF, aU], nil)
680- else 0
681- if ((bC == bC))
682- then $Tuple2(nil, [IntegerEntry(f, (aJ + cE)), IntegerEntry(g, (aK + cF))])
683- else throw("Strict value is not equal to itself.")
684- }
685- else throw("Strict value is not equal to itself.")
686- }
687- })
688-
689-
690-@Verifier(cG)
691-func cH () = {
692- let cI = {
693- let cJ = if (sigVerify(cG.bodyBytes, cG.proofs[0], N))
897+@Verifier(dy)
898+func dz () = {
899+ let dA = {
900+ let dB = if (sigVerify(dy.bodyBytes, dy.proofs[0], T))
694901 then 1
695902 else 0
696- let cK = if (sigVerify(cG.bodyBytes, cG.proofs[1], O))
903+ let dC = if (sigVerify(dy.bodyBytes, dy.proofs[1], U))
697904 then 1
698905 else 0
699- let cL = if (sigVerify(cG.bodyBytes, cG.proofs[2], P))
906+ let dD = if (sigVerify(dy.bodyBytes, dy.proofs[2], V))
700907 then 1
701908 else 0
702- (((cJ + cK) + cL) >= 2)
909+ (((dB + dC) + dD) >= 2)
703910 }
704- cI
911+ dA
705912 }
706913
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "shutdown_cause"
2929
3030 let n = "first_harvest"
3131
3232 let o = "first_harvest_height"
3333
3434 let p = "share_limit_on_first_harvest"
3535
3636 let q = "base_period"
3737
3838 let r = "period_length"
3939
4040 let s = "start_height"
4141
4242 let t = "staking_usdnnsbt_address"
4343
4444 let u = "staking_eurn_address"
4545
4646 let v = "leasing_amount"
4747
4848 let w = "usdn_asset_id"
4949
5050 let x = "eurn_asset_id"
5151
5252 let y = "staking_assets"
5353
5454 let z = "active_all_contracts"
5555
5656 let A = "active_global_exchangers"
5757
58-let B = "admin_pub_1"
58+let B = "discounts"
5959
60-let C = "admin_pub_2"
60+let C = "discount_values"
6161
62-let D = "admin_pub_3"
62+let D = "_SWOP_amount"
6363
64-let E = "admin_invoke_pub"
64+let E = "pool_"
6565
66-let F = "money_box_address"
66+let F = "admin_pub_1"
6767
68-let G = "voting_address"
68+let G = "admin_pub_2"
6969
70-let H = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
70+let H = "admin_pub_3"
7171
72-func I (J) = {
73- let K = getString(H, J)
74- if ($isInstanceOf(K, "String"))
72+let I = "admin_invoke_pub"
73+
74+let J = "money_box_address"
75+
76+let K = "voting_address"
77+
78+let L = "governance_address"
79+
80+let M = "farming_address"
81+
82+let N = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
83+
84+func O (P) = {
85+ let Q = getString(N, P)
86+ if ($isInstanceOf(Q, "String"))
7587 then {
76- let L = K
77- fromBase58String(L)
88+ let R = Q
89+ fromBase58String(R)
7890 }
7991 else {
80- let M = K
81- throw((J + "is empty"))
92+ let S = Q
93+ throw((P + "is empty"))
8294 }
8395 }
8496
8597
86-let N = I(B)
98+let T = O(F)
8799
88-let O = I(C)
100+let U = O(G)
89101
90-let P = I(D)
102+let V = O(H)
91103
92-let Q = I(E)
104+let W = O(I)
93105
94-let R = Address(I(F))
106+let X = Address(O(J))
95107
96-let S = Address(I(G))
108+let Y = Address(O(K))
97109
98-let T = I(w)
110+let Z = Address(O(L))
99111
100-let U = I(x)
112+let aa = Address(O(M))
101113
102-let V = getStringValue(H, y)
114+let ab = O(w)
103115
104-let W = Address(I(t))
116+let ac = O(x)
105117
106-let X = Address(I(u))
118+let ad = getStringValue(N, y)
107119
108-let Y = valueOrErrorMessage(getInteger(S, q), "Empty kBasePeriod")
120+let ae = Address(O(t))
109121
110-let Z = valueOrErrorMessage(getInteger(S, s), "Empty kStartHeight")
122+let af = Address(O(u))
111123
112-let aa = valueOrErrorMessage(getInteger(S, r), "Empty kPeriodLength")
124+let ag = valueOrErrorMessage(getInteger(Y, q), "Empty kBasePeriod")
113125
114-let ab = ((Y + ((height - Z) / aa)) + 3)
126+let ah = valueOrErrorMessage(getInteger(Y, s), "Empty kStartHeight")
115127
116-let ac = if (getBooleanValue(H, z))
117- then getBooleanValue(H, A)
128+let ai = valueOrErrorMessage(getInteger(Y, r), "Empty kPeriodLength")
129+
130+let aj = ((ag + ((height - ah) / ai)) + 3)
131+
132+let ak = if (getBooleanValue(N, z))
133+ then getBooleanValue(N, A)
118134 else false
119135
120-let ad = 1000000
136+let al = 1000000
121137
122-let ae = 100000000
138+let am = 100000000
123139
124-func af (ag,ah) = {
125- let K = ag
126- if ($isInstanceOf(K, "ByteVector"))
140+func an (ao,ap) = {
141+ let Q = ao
142+ if ($isInstanceOf(Q, "ByteVector"))
127143 then {
128- let ai = K
129- assetBalance(ah, ai)
144+ let aq = Q
145+ assetBalance(ap, aq)
130146 }
131- else if ($isInstanceOf(K, "Unit"))
147+ else if ($isInstanceOf(Q, "Unit"))
132148 then {
133- let aj = K
134- wavesBalance(ah).available
149+ let ar = Q
150+ wavesBalance(ap).available
135151 }
136152 else throw("Match error")
137153 }
138154
139155
140-func ak (ag,ah) = {
141- let al = {
142- let K = ag
143- if ($isInstanceOf(K, "ByteVector"))
156+func as (ao,ap) = {
157+ let at = {
158+ let Q = ao
159+ if ($isInstanceOf(Q, "ByteVector"))
144160 then {
145- let am = K
146- if ((am == T))
147- then getInteger(W, ((("rpd_balance_" + toBase58String(am)) + "_") + toString(ah)))
148- else if ((am == U))
149- then getInteger(X, ((("%s%s%s__stakingBalance__" + toBase58String(am)) + "__") + toString(ah)))
161+ let au = Q
162+ if ((au == ab))
163+ then getInteger(ae, ((("rpd_balance_" + toBase58String(au)) + "_") + toString(ap)))
164+ else if ((au == ac))
165+ then getInteger(af, ((("%s%s%s__stakingBalance__" + toBase58String(au)) + "__") + toString(ap)))
150166 else 0
151167 }
152- else if ($isInstanceOf(K, "Unit"))
153- then valueOrElse(getInteger(ah, v), 0)
168+ else if ($isInstanceOf(Q, "Unit"))
169+ then valueOrElse(getInteger(ap, v), 0)
154170 else throw("Match error")
155171 }
156- let K = al
157- if ($isInstanceOf(K, "Int"))
172+ let Q = at
173+ if ($isInstanceOf(Q, "Int"))
158174 then {
159- let an = K
160- an
175+ let av = Q
176+ av
161177 }
162178 else 0
163179 }
164180
165181
166-func ao (ag) = {
167- let K = ag
168- if (if ($isInstanceOf(K, "String"))
182+func aw (ao) = {
183+ let Q = ao
184+ if (if ($isInstanceOf(Q, "String"))
169185 then true
170- else $isInstanceOf(K, "ByteVector"))
186+ else $isInstanceOf(Q, "ByteVector"))
171187 then {
172- let ai = K
173- let ap = {
174- let aq = ai
175- if ($isInstanceOf(aq, "ByteVector"))
188+ let aq = Q
189+ let ax = {
190+ let ay = aq
191+ if ($isInstanceOf(ay, "ByteVector"))
176192 then {
177- let am = aq
178- $Tuple2(toBase58String(am), am)
193+ let au = ay
194+ $Tuple2(toBase58String(au), au)
179195 }
180- else if ($isInstanceOf(aq, "String"))
196+ else if ($isInstanceOf(ay, "String"))
181197 then {
182- let am = aq
183- $Tuple2(am, fromBase58String(am))
198+ let au = ay
199+ $Tuple2(au, fromBase58String(au))
184200 }
185201 else throw("Match error")
186202 }
187- let ar = ap._1
188- let as = ap._2
189- let at = valueOrErrorMessage(assetInfo(as), (("Asset " + ar) + " doesn't exist"))
190- $Tuple3(ar, at.name, at.decimals)
203+ let az = ax._1
204+ let aA = ax._2
205+ let aB = valueOrErrorMessage(assetInfo(aA), (("Asset " + az) + " doesn't exist"))
206+ $Tuple3(az, aB.name, aB.decimals)
191207 }
192- else if ($isInstanceOf(K, "Unit"))
208+ else if ($isInstanceOf(Q, "Unit"))
193209 then {
194- let aj = K
210+ let ar = Q
195211 $Tuple3("WAVES", "WAVES", 8)
196212 }
197213 else throw("Match error")
198214 }
199215
200216
201-func au (av) = [BooleanEntry(c, false), StringEntry(m, av)]
217+func aC (aD) = [BooleanEntry(c, false), StringEntry(m, aD)]
202218
203219
204-func aw (ax,ay,az,aA,aB,aC) = {
205- let aD = fraction(aA, ax, (ax + az))
206- let aE = fraction(aD, (ad - aB), ad)
207- let aF = fraction(aD, aC, ad)
208- if ((ay > aE))
209- then throw(((("Calculated amount to receive " + toString(aE)) + " is less than specified minimum ") + toString(ay)))
210- else $Tuple3(aD, aE, aF)
220+func aE (aF) = {
221+ let aG = valueOrElse(getInteger(Z, (toString(aF) + D)), 0)
222+ let aH = split(getStringValue(N, C), ",")
223+ let aI = split(getStringValue(N, B), ",")
224+ if (if ((aG >= parseIntValue(aH[0])))
225+ then (parseIntValue(aH[1]) > aG)
226+ else false)
227+ then (al - parseIntValue(aI[0]))
228+ else if (if ((aG >= parseIntValue(aH[1])))
229+ then (parseIntValue(aH[2]) > aG)
230+ else false)
231+ then (al - parseIntValue(aI[1]))
232+ else if (if ((aG >= parseIntValue(aH[2])))
233+ then (parseIntValue(aH[3]) > aG)
234+ else false)
235+ then (al - parseIntValue(aI[2]))
236+ else if (if ((aG >= parseIntValue(aH[3])))
237+ then (parseIntValue(aH[4]) > aG)
238+ else false)
239+ then (al - parseIntValue(aI[3]))
240+ else if ((aG >= parseIntValue(aH[4])))
241+ then (al - parseIntValue(aI[4]))
242+ else al
211243 }
212244
213245
214-func aG (aH,aI,aJ,aK,aL,aM) = au(((((((((((((((("Suspicious state. Actual balances: " + toString(aH)) + " ") + aL) + ", ") + toString(aI)) + " ") + aM) + ". State: ") + toString(aJ)) + " ") + aL) + ", ") + toString(aK)) + " ") + aM))
246+func aJ (aK,aL,aM,aN,aO,aP) = {
247+ let aQ = fraction(aN, aK, (aK + aM))
248+ let aR = fraction(aQ, (al - aO), al)
249+ let aS = fraction(aQ, aP, al)
250+ if ((aL > aR))
251+ then throw(((("Calculated amount to receive " + toString(aR)) + " is less than specified minimum ") + toString(aL)))
252+ else $Tuple3(aQ, aR, aS)
253+ }
215254
216255
217-func aN () = if (ac)
256+func aT (aK,aU,aO) = {
257+ let aV = 1
258+ let aW = (((aU + fraction(aU, (al - aO), al)) + fraction(aK, (al - aO), al)) - aK)
259+ let aX = (-(toBigInt(aU)) * toBigInt(aK))
260+ let aY = ((toBigInt(aW) * toBigInt(aW)) - ((toBigInt(4) * toBigInt(aV)) * aX))
261+ (toInt(((-(toBigInt(aW)) + pow(aY, 0, toBigInt(5), 1, 0, DOWN)) / toBigInt(2))) * aV)
262+ }
263+
264+
265+func aZ (ao) = if ((ao == base58''))
266+ then unit
267+ else ao
268+
269+
270+func ba (bb,bc,bd,be,bf,bg) = aC(((((((((((((((("Suspicious state. Actual balances: " + toString(bb)) + " ") + bf) + ", ") + toString(bc)) + " ") + bg) + ". State: ") + toString(bd)) + " ") + bf) + ", ") + toString(be)) + " ") + bg))
271+
272+
273+func bh () = if (ak)
218274 then unit
219275 else throw("DApp is inactive at this moment")
220276
221277
222-func aO (ah,aL,aM) = {
223- let aJ = getIntegerValue(ah, f)
224- let aK = getIntegerValue(ah, g)
225- let aP = ak(aL, ah)
226- let aQ = ak(aM, ah)
227- let aH = (af(aL, ah) + aP)
228- let aI = (af(aM, ah) + aQ)
229- let aR = getIntegerValue(ah, k)
230- $Tuple5(aJ, aK, aH, aI, aR)
278+func bi (bj) = if (isDefined(getString(N, (E + bj))))
279+ then unit
280+ else throw("DApp is not registered pool")
281+
282+
283+func bk (ap,bf,bg) = {
284+ let bd = getIntegerValue(ap, f)
285+ let be = getIntegerValue(ap, g)
286+ let bl = as(bf, ap)
287+ let bm = as(bg, ap)
288+ let bb = (an(bf, ap) + bl)
289+ let bc = (an(bg, ap) + bm)
290+ let bn = getIntegerValue(ap, k)
291+ $Tuple5(bd, be, bb, bc, bn)
231292 }
232293
233294
234-func aS (ah) = {
235- let aT = getStringValue(ah, d)
236- let aU = getStringValue(ah, e)
237- let aL = if ((aT == "WAVES"))
295+func bo (ap) = {
296+ let bp = getStringValue(ap, d)
297+ let bq = getStringValue(ap, e)
298+ let bf = if ((bp == "WAVES"))
238299 then unit
239- else fromBase58String(aT)
240- let aM = if ((aU == "WAVES"))
300+ else fromBase58String(bp)
301+ let bg = if ((bq == "WAVES"))
241302 then unit
242- else fromBase58String(aU)
243- let aV = fromBase58String(getStringValue(ah, j))
244- $Tuple5(aT, aU, aL, aM, aV)
303+ else fromBase58String(bq)
304+ let br = fromBase58String(getStringValue(ap, j))
305+ $Tuple5(bp, bq, bf, bg, br)
245306 }
246307
247308
248-func aW (ah) = {
249- let aB = getIntegerValue(ah, l)
250- let aX = fraction(aB, 40, 100)
251- $Tuple2(aB, aX)
309+func bs (ap,bt) = {
310+ let bu = aE(bt)
311+ let aO = fraction(getIntegerValue(ap, l), bu, al, CEILING)
312+ let bv = fraction(fraction(aO, 40, 100), bu, al, CEILING)
313+ $Tuple2(aO, bv)
252314 }
253315
254316
255-@Callable(an)
256-func init (aY,aZ,ba,bb) = {
257- let bc = Address(aY)
258- let bd = $Tuple2(ba[0], bb[0])
259- let be = bd._1
260- let bf = bd._2
261- let bg = $Tuple2(ba[1], bb[1])
262- let bh = bg._1
263- let bi = bg._2
264- if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
317+@Callable(av)
318+func init (bw,bx,by,bz) = {
319+ let bt = Address(bw)
320+ let bA = $Tuple2(by[0], aZ(bz[0]))
321+ let bB = bA._1
322+ let bC = bA._2
323+ let bD = $Tuple2(by[1], aZ(bz[1]))
324+ let bE = bD._1
325+ let bF = bD._2
326+ if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
265327 then throw("Only admin can call this function")
266- else if (isDefined(getBoolean(bc, c)))
328+ else if (isDefined(getBoolean(bt, c)))
267329 then throw("DApp is already active")
268- else if ((bf == bi))
330+ else if ((bC == bF))
269331 then throw("Assets must be different")
270332 else {
271- let bj = ao(bf)
272- let bk = bj._1
273- let bl = bj._2
274- let bm = bj._3
275- let bn = ao(bi)
276- let bo = bn._1
277- let bp = bn._2
278- let bq = bn._3
279- let br = (aZ[0] == "true")
280- let bs = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
281- let bt = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
282- let bu = ((bm + bq) / 2)
283- let bv = pow(be, bm, 5, 1, bm, DOWN)
284- let bw = pow(bh, bq, 5, 1, bq, DOWN)
285- let bx = pow(10, 0, bu, 0, 0, DOWN)
286- let by = fraction(bv, bw, bx)
287- let bz = Issue(bs, bt, by, bu, true)
288- let bA = calculateAssetId(bz)
289- let bB = if (contains(V, bk))
290- then invoke(an.caller, "stakeUnstake", [true, be, bk], nil)
333+ let bG = aw(bC)
334+ let bH = bG._1
335+ let bI = bG._2
336+ let bJ = bG._3
337+ let bK = aw(bF)
338+ let bL = bK._1
339+ let bM = bK._2
340+ let bN = bK._3
341+ let bO = (bx[0] == "true")
342+ let bP = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
343+ let bQ = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
344+ let bR = ((bJ + bN) / 2)
345+ let bS = pow(bB, bJ, 5, 1, bJ, DOWN)
346+ let bT = pow(bE, bN, 5, 1, bN, DOWN)
347+ let bU = pow(10, 0, bR, 0, 0, DOWN)
348+ let bV = fraction(bS, bT, bU)
349+ let bW = Issue(bP, bQ, bV, bR, true)
350+ let bX = calculateAssetId(bW)
351+ let bY = if (contains(ad, bH))
352+ then invoke(av.caller, "stakeUnstake", [true, bB, bH], nil)
291353 else 0
292- if ((bB == bB))
354+ if ((bY == bY))
293355 then {
294- let bC = if (contains(V, bo))
295- then invoke(an.caller, "stakeUnstake", [true, bh, bo], nil)
356+ let bZ = if (contains(ad, bL))
357+ then invoke(av.caller, "stakeUnstake", [true, bE, bL], nil)
296358 else 0
297- if ((bC == bC))
359+ if ((bZ == bZ))
298360 then {
299- let bD = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(l, getIntegerValue(H, "base_fee_cpmm")), bz, StringEntry(j, toBase58String(bA)), IntegerEntry(k, by), ScriptTransfer(bc, by, bA)]
300- if (br)
301- then $Tuple2(nil, (bD ++ [BooleanEntry(n, br), IntegerEntry(o, (Z + (ab * aa)))]))
302- else $Tuple2(nil, bD)
361+ let ca = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, getIntegerValue(N, "base_fee_cpmm")), bW, StringEntry(j, toBase58String(bX)), IntegerEntry(k, bV), ScriptTransfer(bt, bV, bX)]
362+ if (bO)
363+ then $Tuple2(nil, $Tuple2((ca ++ [BooleanEntry(n, bO), IntegerEntry(o, (ah + (aj * ai)))]), nil))
364+ else $Tuple2(nil, $Tuple2(ca, nil))
303365 }
304366 else throw("Strict value is not equal to itself.")
305367 }
306368 else throw("Strict value is not equal to itself.")
307369 }
308370 }
309371
310372
311373
312-@Callable(an)
313-func initWithInitRatio (aY,aZ,ba,bb) = {
314- let bc = Address(aY)
315- let bE = $Tuple5(parseIntValue(aZ[0]), parseIntValue(aZ[1]), aZ[2], aZ[3], (aZ[4] == "true"))
316- let bF = bE._1
317- let bG = bE._2
318- let bH = bE._3
319- let bI = bE._4
320- let br = bE._5
321- if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
374+@Callable(av)
375+func initWithInitRatio (bw,bx,by,bz) = {
376+ let bt = Address(bw)
377+ let cb = $Tuple5(parseIntValue(bx[0]), parseIntValue(bx[1]), bx[2], bx[3], (bx[4] == "true"))
378+ let cc = cb._1
379+ let cd = cb._2
380+ let ce = cb._3
381+ let cf = cb._4
382+ let bO = cb._5
383+ if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
322384 then throw("Only admin can call this function")
323- else if (isDefined(getBoolean(bc, c)))
385+ else if (isDefined(getBoolean(bt, c)))
324386 then throw("DApp is already active")
325- else if ((bH == bI))
387+ else if ((ce == cf))
326388 then throw("Assets must be different")
327389 else {
328- let bJ = ao(bH)
329- let bk = bJ._1
330- let bl = bJ._2
331- let bm = bJ._3
332- let bK = ao(bI)
333- let bo = bK._1
334- let bp = bK._2
335- let bq = bK._3
336- let bs = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
337- let bt = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
338- let bu = ((bm + bq) / 2)
339- let by = 0
340- let bz = Issue(bs, bt, by, bu, true)
341- let bA = calculateAssetId(bz)
342- let bD = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(h, bF), IntegerEntry(i, bG), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(H, "base_fee_cpmm")), bz, StringEntry(j, toBase58String(bA)), IntegerEntry(k, by)]
343- if (br)
344- then $Tuple2(nil, (bD ++ [BooleanEntry(n, br), IntegerEntry(o, (Z + (ab * aa)))]))
345- else $Tuple2(nil, bD)
390+ let cg = aw(ce)
391+ let bH = cg._1
392+ let bI = cg._2
393+ let bJ = cg._3
394+ let ch = aw(cf)
395+ let bL = ch._1
396+ let bM = ch._2
397+ let bN = ch._3
398+ let bP = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
399+ let bQ = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
400+ let bR = ((bJ + bN) / 2)
401+ let bV = 0
402+ let bW = Issue(bP, bQ, bV, bR, true)
403+ let bX = calculateAssetId(bW)
404+ let ca = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(N, "base_fee_cpmm")), bW, StringEntry(j, toBase58String(bX)), IntegerEntry(k, bV)]
405+ if (bO)
406+ then $Tuple2(nil, $Tuple2((ca ++ [BooleanEntry(n, bO), IntegerEntry(o, (ah + (aj * ai)))]), nil))
407+ else $Tuple2(nil, $Tuple2(ca, nil))
346408 }
347409 }
348410
349411
350412
351-@Callable(an)
352-func keepLimitForFirstHarvest (aY,aZ,ba,bb) = valueOrElse(aN(), if (!(containsElement([N, O, P, Q], an.originCallerPublicKey)))
413+@Callable(av)
414+func keepLimitForFirstHarvest (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), if (!(containsElement([T, U, V, W], av.originCallerPublicKey)))
353415 then throw("Only admin can call this function")
354416 else {
355- let bL = parseIntValue(aZ[0])
356- $Tuple2(nil, [IntegerEntry(p, bL)])
357- })
417+ let ci = parseIntValue(bx[0])
418+ $Tuple2(nil, $Tuple2([IntegerEntry(p, ci)], nil))
419+ }))
358420
359421
360422
361-@Callable(an)
362-func exchange (aY,aZ,ba,bb) = valueOrElse(aN(), {
363- let bc = Address(aY)
364- let bM = $Tuple2(ba[0], bb[0])
365- let ax = bM._1
366- let bN = bM._2
367- let ay = parseIntValue(aZ[0])
368- let bO = aS(an.caller)
369- let aT = bO._1
370- let aU = bO._2
371- let aL = bO._3
372- let aM = bO._4
373- let bP = aO(an.caller, aL, aM)
374- let aJ = bP._1
375- let aK = bP._2
376- let aH = bP._3
377- let aI = bP._4
378- if (if ((aJ == 0))
423+@Callable(av)
424+func exchange (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
425+ let bt = Address(bw)
426+ let cj = $Tuple2(by[0], aZ(bz[0]))
427+ let aK = cj._1
428+ let ck = cj._2
429+ let aL = parseIntValue(bx[0])
430+ let cl = bo(av.caller)
431+ let bp = cl._1
432+ let bq = cl._2
433+ let bf = cl._3
434+ let bg = cl._4
435+ let cm = bk(av.caller, bf, bg)
436+ let bd = cm._1
437+ let be = cm._2
438+ let bb = cm._3
439+ let bc = cm._4
440+ if (if ((bd == 0))
379441 then true
380- else (aK == 0))
442+ else (be == 0))
381443 then throw("Can't exchange with zero balance")
382- else if ((0 >= ay))
383- then throw(("Minimal amount to receive must be positive. Actual: " + toString(ay)))
384- else if ((size(ba) != 1))
444+ else if ((0 >= aL))
445+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(aL)))
446+ else if ((size(by) != 1))
385447 then throw("One attached payment expected")
386- else if (!(containsElement([aL, aM], bN)))
387- then throw(((("Incorrect asset attached. Expected: " + aT) + " or ") + aU))
388- else if (if ((aJ > aH))
448+ else if (!(containsElement([bf, bg], ck)))
449+ then throw(((("Incorrect asset attached. Expected: " + bp) + " or ") + bq))
450+ else if (if ((bd > bb))
389451 then true
390- else (aK > aI))
391- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
452+ else (be > bc))
453+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
392454 else {
393- let bQ = aW(an.caller)
394- let aB = bQ._1
395- let aX = bQ._2
396- let bR = if ((bN == aL))
397- then aw(ax, ay, aJ, aK, aB, aX)
398- else aw(ax, ay, aK, aJ, aB, aX)
399- let aD = bR._1
400- let aE = bR._2
401- let aF = bR._3
402- let bS = if ((bN == aL))
403- then $Tuple3((aJ + ax), ((aK - aE) - aF), aM)
404- else $Tuple3(((aJ - aE) - aF), (aK + ax), aL)
405- let bT = bS._1
406- let bU = bS._2
407- let bV = bS._3
408- let bW = if ((bN == aL))
409- then $Tuple2(ax, (aE + aF))
410- else $Tuple2((aE + aF), ax)
411- let bX = bW._1
412- let bY = bW._2
413- let bB = if (contains(V, aT))
414- then invoke(an.caller, "stakeUnstake", [(bN == aL), bX, aT], nil)
455+ let cn = bs(av.caller, av.originCaller)
456+ let aO = cn._1
457+ let bv = cn._2
458+ let co = if ((ck == bf))
459+ then aJ(aK, aL, bd, be, aO, bv)
460+ else aJ(aK, aL, be, bd, aO, bv)
461+ let aQ = co._1
462+ let aR = co._2
463+ let aS = co._3
464+ let cp = if ((ck == bf))
465+ then $Tuple3((bd + aK), ((be - aR) - aS), bg)
466+ else $Tuple3(((bd - aR) - aS), (be + aK), bf)
467+ let cq = cp._1
468+ let cr = cp._2
469+ let cs = cp._3
470+ let ct = if ((ck == bf))
471+ then $Tuple2(aK, (aR + aS))
472+ else $Tuple2((aR + aS), aK)
473+ let cu = ct._1
474+ let cv = ct._2
475+ let bY = if (contains(ad, bp))
476+ then invoke(av.caller, "stakeUnstake", [(ck == bf), cu, bp], nil)
415477 else 0
416- if ((bB == bB))
478+ if ((bY == bY))
417479 then {
418- let bC = if (contains(V, aU))
419- then invoke(an.caller, "stakeUnstake", [(bN == aM), bY, aU], nil)
480+ let bZ = if (contains(ad, bq))
481+ then invoke(av.caller, "stakeUnstake", [(ck == bg), cv, bq], nil)
420482 else 0
421- if ((bC == bC))
422- then $Tuple2(nil, [IntegerEntry(f, bT), IntegerEntry(g, bU), ScriptTransfer(bc, aE, bV), ScriptTransfer(R, aF, bV)])
483+ if ((bZ == bZ))
484+ then $Tuple2(nil, $Tuple2([IntegerEntry(f, cq), IntegerEntry(g, cr), ScriptTransfer(bt, aR, cs), ScriptTransfer(X, aS, cs)], [aR, cs]))
423485 else throw("Strict value is not equal to itself.")
424486 }
425487 else throw("Strict value is not equal to itself.")
426488 }
427- })
489+ }))
428490
429491
430492
431-@Callable(an)
432-func replenishWithTwoTokens (aY,aZ,ba,bb) = valueOrElse(aN(), {
433- let bc = Address(aY)
434- let bf = bb[0]
435- let bi = bb[1]
436- let bZ = aS(an.caller)
437- let aT = bZ._1
438- let aU = bZ._2
439- let aL = bZ._3
440- let aM = bZ._4
441- let aV = bZ._5
442- let ca = aO(an.caller, aL, aM)
443- let aJ = ca._1
444- let aK = ca._2
445- let aH = ca._3
446- let aI = ca._4
447- let cb = ca._5
448- if ((size(ba) != 2))
493+@Callable(av)
494+func replenishWithTwoTokens (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
495+ let bt = Address(bw)
496+ let bC = aZ(bz[0])
497+ let bF = aZ(bz[1])
498+ let cw = (bx[0] == "true")
499+ let cx = bo(av.caller)
500+ let bp = cx._1
501+ let bq = cx._2
502+ let bf = cx._3
503+ let bg = cx._4
504+ let br = cx._5
505+ let cy = bk(av.caller, bf, bg)
506+ let bd = cy._1
507+ let be = cy._2
508+ let bb = cy._3
509+ let bc = cy._4
510+ let cz = cy._5
511+ if ((size(by) != 2))
449512 then throw("Two attached assets expected")
450- else if (if ((bf != aL))
513+ else if (if ((bC != bf))
451514 then true
452- else (bi != aM))
453- then throw(((("Incorrect assets attached. Expected: " + aT) + " and ") + aU))
454- else if (if ((aJ > aH))
515+ else (bF != bg))
516+ then throw(((("Incorrect assets attached. Expected: " + bp) + " and ") + bq))
517+ else if (if ((bd > bb))
455518 then true
456- else (aK > aI))
457- then $Tuple2(nil, ([ScriptTransfer(bc, ba[0], bf), ScriptTransfer(bc, ba[1], bi)] ++ aG(aH, aI, aJ, aK, aT, aU)))
519+ else (be > bc))
520+ then $Tuple2(nil, ([ScriptTransfer(bt, by[0], bC), ScriptTransfer(bt, by[1], bF)] ++ ba(bb, bc, bd, be, bp, bq)))
458521 else {
459- let cc = ao(bf)
460- let bk = cc._1
461- let bl = cc._2
462- let bm = cc._3
463- let cd = ao(bi)
464- let bo = cd._1
465- let bp = cd._2
466- let bq = cd._3
467- let ce = ((aJ + aK) == 0)
468- let cf = if (ce)
469- then $Tuple5(ba[0], ba[1], 0, bf, 1)
522+ let cA = aw(bC)
523+ let bH = cA._1
524+ let bI = cA._2
525+ let bJ = cA._3
526+ let cB = aw(bF)
527+ let bL = cB._1
528+ let bM = cB._2
529+ let bN = cB._3
530+ let cC = ((bd + be) == 0)
531+ let cD = if (cC)
532+ then $Tuple5(by[0], by[1], 0, bC, 1)
470533 else {
471- let cg = fraction(ae, ba[0], aJ)
472- let ch = fraction(ae, ba[1], aK)
473- if ((ch > cg))
534+ let cE = fraction(am, by[0], bd)
535+ let cF = fraction(am, by[1], be)
536+ if ((cF > cE))
474537 then {
475- let ci = fraction(ba[0], aK, aJ)
476- $Tuple5(ba[0], ci, (ba[1] - ci), bi, cg)
538+ let cG = fraction(by[0], be, bd)
539+ $Tuple5(by[0], cG, (by[1] - cG), bF, cE)
477540 }
478541 else {
479- let ci = fraction(ba[1], aJ, aK)
480- $Tuple5(ci, ba[1], (ba[0] - ci), bf, ch)
542+ let cG = fraction(by[1], bd, be)
543+ $Tuple5(cG, by[1], (by[0] - cG), bC, cF)
481544 }
482545 }
483- let be = cf._1
484- let bh = cf._2
485- let cj = cf._3
486- let ck = cf._4
487- let cl = cf._5
488- let cm = if (ce)
546+ let bB = cD._1
547+ let bE = cD._2
548+ let cH = cD._3
549+ let cI = cD._4
550+ let cJ = cD._5
551+ let cK = if (cC)
489552 then {
490- let bu = ((bm + bq) / 2)
491- fraction(pow(be, bm, 5, 1, bm, DOWN), pow(bh, bq, 5, 1, bq, DOWN), pow(10, 0, bu, 0, 0, DOWN))
553+ let bR = ((bJ + bN) / 2)
554+ fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bR, 0, 0, DOWN))
492555 }
493- else fraction(cl, cb, ae)
494- if ((cm == 0))
556+ else fraction(cJ, cz, am)
557+ if ((cK == 0))
495558 then throw("Too small amount to replenish")
496- else {
497- let bB = if (contains(V, bk))
498- then invoke(an.caller, "stakeUnstake", [true, be, bk], nil)
499- else 0
500- if ((bB == bB))
501- then {
502- let bC = if (contains(V, bo))
503- then invoke(an.caller, "stakeUnstake", [true, bh, bo], nil)
504- else 0
505- if ((bC == bC))
506- then $Tuple2(nil, [Reissue(aV, cm, true), IntegerEntry(f, (aJ + be)), IntegerEntry(g, (aK + bh)), IntegerEntry(k, (cb + cm)), ScriptTransfer(bc, cm, aV), ScriptTransfer(bc, cj, ck)])
507- else throw("Strict value is not equal to itself.")
508- }
509- else throw("Strict value is not equal to itself.")
510- }
559+ else if ((0 > cH))
560+ then throw("Change < 0")
561+ else {
562+ let bY = if (contains(ad, bH))
563+ then invoke(av.caller, "stakeUnstake", [true, bB, bH], nil)
564+ else 0
565+ if ((bY == bY))
566+ then {
567+ let bZ = if (contains(ad, bL))
568+ then invoke(av.caller, "stakeUnstake", [true, bE, bL], nil)
569+ else 0
570+ if ((bZ == bZ))
571+ then {
572+ let cL = if (cw)
573+ then {
574+ let cM = invoke(av.caller, "reissueShareToken", [cK], nil)
575+ if ((cM == cM))
576+ then {
577+ let cN = invoke(aa, "lockShareTokens", [toString(av.caller)], [AttachedPayment(br, cK)])
578+ if ((cN == cN))
579+ then nil
580+ else throw("Strict value is not equal to itself.")
581+ }
582+ else throw("Strict value is not equal to itself.")
583+ }
584+ else [Reissue(br, cK, true), ScriptTransfer(bt, cK, br)]
585+ $Tuple2(nil, $Tuple2(([IntegerEntry(f, (bd + bB)), IntegerEntry(g, (be + bE)), IntegerEntry(k, (cz + cK)), ScriptTransfer(bt, cH, cI)] ++ cL), nil))
586+ }
587+ else throw("Strict value is not equal to itself.")
588+ }
589+ else throw("Strict value is not equal to itself.")
590+ }
511591 }
512- })
592+ }))
513593
514594
515595
516-@Callable(an)
517-func replenishWithOneToken (aY,aZ,ba,bb) = valueOrElse(aN(), {
518- let bc = Address(aY)
519- let bN = bb[0]
520- let ax = ba[0]
521- let cn = parseIntValue(aZ[0])
522- let co = aS(an.caller)
523- let aT = co._1
524- let aU = co._2
525- let aL = co._3
526- let aM = co._4
527- let aV = co._5
528- let cp = aO(an.caller, aL, aM)
529- let aJ = cp._1
530- let aK = cp._2
531- let aH = cp._3
532- let aI = cp._4
533- let cb = cp._5
534- let ce = ((aJ + aK) == 0)
535- if ((size(ba) != 1))
596+@Callable(av)
597+func replenishWithOneToken (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
598+ let bt = Address(bw)
599+ let ck = aZ(bz[0])
600+ let aK = by[0]
601+ let cO = parseIntValue(bx[0])
602+ let cw = (bx[1] == "true")
603+ let cP = bo(av.caller)
604+ let bp = cP._1
605+ let bq = cP._2
606+ let bf = cP._3
607+ let bg = cP._4
608+ let br = cP._5
609+ let cQ = bk(av.caller, bf, bg)
610+ let bd = cQ._1
611+ let be = cQ._2
612+ let bb = cQ._3
613+ let bc = cQ._4
614+ let cz = cQ._5
615+ let cC = ((bd + be) == 0)
616+ if ((size(by) != 1))
536617 then throw("One attached assets expected")
537- else if (if ((bN != aL))
538- then (bN != aM)
618+ else if (if ((ck != bf))
619+ then (ck != bg)
539620 else false)
540- then throw(((("Incorrect asset attached. Expected: " + aT) + " or ") + aU))
541- else if (ce)
621+ then throw(((("Incorrect asset attached. Expected: " + bp) + " or ") + bq))
622+ else if (cC)
542623 then throw("For initial exchanger you need to use two tokens")
543- else if (if ((aJ > aH))
624+ else if (if ((bd > bb))
544625 then true
545- else (aK > aI))
546- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
626+ else (be > bc))
627+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
547628 else {
548- let cq = aW(an.caller)
549- let aB = cq._1
550- let aX = cq._2
551- let cr = if ((bN == aL))
629+ let cR = bs(av.caller, av.originCaller)
630+ let aO = cR._1
631+ let bv = cR._2
632+ let cS = if ((ck == bf))
552633 then {
553- let cs = aw(ax, cn, aJ, aK, aB, aX)
554- let aD = cs._1
555- let aE = cs._2
556- let aF = cs._3
557- let bT = (aJ + ax)
558- let bU = (aK - aF)
559- let cg = fraction((ax / 2), ae, bT)
560- let ch = fraction(aE, ae, bU)
561- let cm = fraction(min([cg, ch]), cb, ae)
562- $Tuple6(bT, bU, cm, aF, aM, aU)
634+ let cT = aT(aK, bd, aO)
635+ let cU = aJ(cT, cO, bd, be, aO, bv)
636+ let aQ = cU._1
637+ let aR = cU._2
638+ let aS = cU._3
639+ let cq = (bd + aK)
640+ let cr = (be - aS)
641+ let cE = fraction((aK - cT), am, cq)
642+ let cF = fraction(aR, am, cr)
643+ let cK = fraction(min([cE, cF]), cz, am)
644+ $Tuple7(cq, cr, cK, aS, bg, bq, bp)
563645 }
564646 else {
565- let ct = aw(ax, cn, aK, aJ, aB, aX)
566- let aD = ct._1
567- let aE = ct._2
568- let aF = ct._3
569- let bT = (aJ - aF)
570- let bU = (aK + ax)
571- let cg = fraction(aE, ae, bT)
572- let ch = fraction((ax / 2), ae, bU)
573- let cm = fraction(min([cg, ch]), cb, ae)
574- $Tuple6(bT, bU, cm, aF, aL, aT)
647+ let cT = aT(aK, be, aO)
648+ let cV = aJ(cT, cO, be, bd, aO, bv)
649+ let aQ = cV._1
650+ let aR = cV._2
651+ let aS = cV._3
652+ let cq = (bd - aS)
653+ let cr = (be + aK)
654+ let cE = fraction(aR, am, cq)
655+ let cF = fraction((aK - cT), am, cr)
656+ let cK = fraction(min([cE, cF]), cz, am)
657+ $Tuple7(cq, cr, cK, aS, bf, bp, bq)
575658 }
576- let bT = cr._1
577- let bU = cr._2
578- let cm = cr._3
579- let cu = cr._4
580- let cv = cr._5
581- let cw = cr._6
582- if ((cm == 0))
659+ let cq = cS._1
660+ let cr = cS._2
661+ let cK = cS._3
662+ let cW = cS._4
663+ let cX = cS._5
664+ let cY = cS._6
665+ let cZ = cS._7
666+ if ((cK == 0))
583667 then throw("Too small amount to replenish")
584668 else {
585- let bB = if (contains(V, cw))
586- then invoke(an.caller, "stakeUnstake", [false, cu, cw], nil)
669+ let bY = if (contains(ad, cZ))
670+ then invoke(av.caller, "stakeUnstake", [true, aK, cZ], nil)
587671 else 0
588- if ((bB == bB))
589- then $Tuple2(nil, [IntegerEntry(f, bT), IntegerEntry(g, bU), IntegerEntry(k, (cb + cm)), Reissue(aV, cm, true), ScriptTransfer(bc, cm, aV), ScriptTransfer(R, cu, cv)])
672+ if ((bY == bY))
673+ then {
674+ let bZ = if (contains(ad, cY))
675+ then invoke(av.caller, "stakeUnstake", [false, cW, cY], nil)
676+ else 0
677+ if ((bZ == bZ))
678+ then {
679+ let cL = if (cw)
680+ then {
681+ let cM = invoke(av.caller, "reissueShareToken", [cK], nil)
682+ if ((cM == cM))
683+ then {
684+ let cN = invoke(aa, "lockShareTokens", [toString(av.caller)], [AttachedPayment(br, cK)])
685+ if ((cN == cN))
686+ then nil
687+ else throw("Strict value is not equal to itself.")
688+ }
689+ else throw("Strict value is not equal to itself.")
690+ }
691+ else [Reissue(br, cK, true), ScriptTransfer(bt, cK, br)]
692+ $Tuple2(nil, $Tuple2(([IntegerEntry(f, cq), IntegerEntry(g, cr), IntegerEntry(k, (cz + cK)), ScriptTransfer(X, cW, cX)] ++ cL), nil))
693+ }
694+ else throw("Strict value is not equal to itself.")
695+ }
590696 else throw("Strict value is not equal to itself.")
591697 }
592698 }
593- })
699+ }))
594700
595701
596702
597-@Callable(an)
598-func withdraw (aY,aZ,ba,bb) = valueOrElse(aN(), {
599- let bc = Address(aY)
600- let cx = $Tuple2(ba[0], bb[0])
601- let ax = cx._1
602- let bN = cx._2
603- let cy = aS(an.caller)
604- let aT = cy._1
605- let aU = cy._2
606- let aL = cy._3
607- let aM = cy._4
608- let aV = cy._5
609- let cz = aO(an.caller, aL, aM)
610- let aJ = cz._1
611- let aK = cz._2
612- let aH = cz._3
613- let aI = cz._4
614- let cb = cz._5
615- if ((size(ba) != 1))
703+@Callable(av)
704+func withdraw (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
705+ let bt = Address(bw)
706+ let da = bo(av.caller)
707+ let bp = da._1
708+ let bq = da._2
709+ let bf = da._3
710+ let bg = da._4
711+ let br = da._5
712+ let db = bk(av.caller, bf, bg)
713+ let bd = db._1
714+ let be = db._2
715+ let bb = db._3
716+ let bc = db._4
717+ let cz = db._5
718+ let dc = if ((size(by) == 1))
719+ then {
720+ let dd = aZ(bz[0])
721+ if ((dd != br))
722+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
723+ else $Tuple2(by[0], dd)
724+ }
725+ else $Tuple2(0, br)
726+ let aK = dc._1
727+ let ck = dc._2
728+ if ((size(by) > 1))
616729 then throw("One attached payment expected")
617- else if ((bN != aV))
618- then throw(("Incorrect asset attached. Expected: " + toBase58String(aV)))
619- else if (if ((aJ > aH))
620- then true
621- else (aK > aI))
622- then $Tuple2(nil, ([ScriptTransfer(bc, ax, bN)] ++ aG(aH, aI, aJ, aK, aT, aU)))
730+ else if (if ((bd > bb))
731+ then true
732+ else (be > bc))
733+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
734+ else {
735+ let de = parseIntValue(valueOrElse(bx[0], "0"))
736+ let df = if ((de > 0))
737+ then invoke(aa, "withdrawShareTokens", [toString(av.caller), de], nil)
738+ else 0
739+ if ((df == df))
740+ then {
741+ let dg = (aK + de)
742+ let dh = fraction(dg, bd, cz)
743+ let di = fraction(dg, be, cz)
744+ let bY = if (contains(ad, bp))
745+ then invoke(av.caller, "stakeUnstake", [false, dh, bp], nil)
746+ else 0
747+ if ((bY == bY))
748+ then {
749+ let bZ = if (contains(ad, bq))
750+ then invoke(av.caller, "stakeUnstake", [false, di, bq], nil)
751+ else 0
752+ if ((bZ == bZ))
753+ then $Tuple2([ScriptTransfer(av.caller, de, br)], $Tuple2([IntegerEntry(f, (bd - dh)), IntegerEntry(g, (be - di)), IntegerEntry(k, (cz - dg)), Burn(br, dg), ScriptTransfer(bt, dh, bf), ScriptTransfer(bt, di, bg)], nil))
754+ else throw("Strict value is not equal to itself.")
755+ }
756+ else throw("Strict value is not equal to itself.")
757+ }
758+ else throw("Strict value is not equal to itself.")
759+ }
760+ }))
761+
762+
763+
764+@Callable(av)
765+func withdrawOneToken (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
766+ let bt = Address(bw)
767+ let dj = if ((bx[0] == ""))
768+ then unit
769+ else fromBase58String(bx[0])
770+ let dk = bo(av.caller)
771+ let bp = dk._1
772+ let bq = dk._2
773+ let bf = dk._3
774+ let bg = dk._4
775+ let br = dk._5
776+ let dl = bk(av.caller, bf, bg)
777+ let bd = dl._1
778+ let be = dl._2
779+ let bb = dl._3
780+ let bc = dl._4
781+ let cz = dl._5
782+ let dm = if ((size(by) == 1))
783+ then {
784+ let dd = aZ(bz[0])
785+ if ((dd != br))
786+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
787+ else $Tuple2(by[0], dd)
788+ }
789+ else $Tuple2(0, br)
790+ let aK = dm._1
791+ let ck = dm._2
792+ let dn = parseIntValue(bx[1])
793+ if ((size(by) != 1))
794+ then throw("One attached payment expected")
795+ else if ((ck != br))
796+ then throw(("Incorrect asset attached. Expected: " + toBase58String(br)))
797+ else if (!(containsElement([bf, bg], dj)))
798+ then throw("Incorrect withdraw asset.")
799+ else if (if ((bd > bb))
800+ then true
801+ else (be > bc))
802+ then $Tuple2(nil, ([ScriptTransfer(bt, aK, ck)] ++ ba(bb, bc, bd, be, bp, bq)))
803+ else {
804+ let de = parseIntValue(valueOrElse(bx[2], "0"))
805+ let df = if ((de > 0))
806+ then invoke(aa, "withdrawShareTokens", [toString(av.caller), de], nil)
807+ else 0
808+ if ((df == df))
809+ then {
810+ let dg = (aK + de)
811+ let dh = fraction(dg, bd, cz)
812+ let di = fraction(dg, be, cz)
813+ let do = bs(av.caller, av.originCaller)
814+ let aO = do._1
815+ let bv = do._2
816+ let dp = if ((dj == bf))
817+ then aJ(di, dn, be, bd, aO, bv)
818+ else aJ(dh, dn, bd, be, aO, bv)
819+ let aQ = dp._1
820+ let aR = dp._2
821+ let aS = dp._3
822+ let dq = if ((dj == bf))
823+ then {
824+ let dr = if (contains(ad, bp))
825+ then invoke(av.caller, "stakeUnstake", [false, ((dh + aR) + aS), bp], nil)
826+ else 0
827+ if ((dr == dr))
828+ then $Tuple4((((bd - dh) - aR) - aS), be, bf, [ScriptTransfer(bt, (dh + aR), bf)])
829+ else throw("Strict value is not equal to itself.")
830+ }
831+ else {
832+ let dr = if (contains(ad, bq))
833+ then invoke(av.caller, "stakeUnstake", [false, ((di + aR) + aS), bq], nil)
834+ else 0
835+ if ((dr == dr))
836+ then $Tuple4(bd, (((be - di) - aR) - aS), bg, [ScriptTransfer(bt, (di + aR), bg)])
837+ else throw("Strict value is not equal to itself.")
838+ }
839+ let cq = dq._1
840+ let cr = dq._2
841+ let ds = dq._3
842+ let dt = dq._4
843+ $Tuple2([ScriptTransfer(av.caller, de, br)], $Tuple2(([IntegerEntry(f, cq), IntegerEntry(g, cr), IntegerEntry(k, (cz - dg)), Burn(br, dg), ScriptTransfer(X, aS, ds)] ++ dt), nil))
844+ }
845+ else throw("Strict value is not equal to itself.")
846+ }
847+ }))
848+
849+
850+
851+@Callable(av)
852+func takeIntoAccountExtraFunds (bw,bx,by,bz) = valueOrElse(bi(toString(av.caller)), valueOrElse(bh(), {
853+ let du = bo(av.caller)
854+ let bp = du._1
855+ let bq = du._2
856+ let bf = du._3
857+ let bg = du._4
858+ let dv = bk(av.caller, bf, bg)
859+ let bd = dv._1
860+ let be = dv._2
861+ let bb = dv._3
862+ let bc = dv._4
863+ let dw = (bb - bd)
864+ let dx = (bc - be)
865+ if ((X != av.originCaller))
866+ then throw("Only the wallet can call this function")
867+ else if (if ((0 > dw))
868+ then true
869+ else (0 > dx))
870+ then aC("Enroll amount negative")
871+ else if (if ((dw == 0))
872+ then (dx == 0)
873+ else false)
874+ then throw("No money to take")
623875 else {
624- let cA = fraction(ax, aJ, cb)
625- let cB = fraction(ax, aK, cb)
626- let bB = if (contains(V, aT))
627- then invoke(an.caller, "stakeUnstake", [false, cA, aT], nil)
876+ let bY = if (if (contains(ad, bp))
877+ then (dw > 0)
878+ else false)
879+ then invoke(this, "stakeUnstake", [true, dw, bp], nil)
628880 else 0
629- if ((bB == bB))
881+ if ((bY == bY))
630882 then {
631- let bC = if (contains(V, aU))
632- then invoke(an.caller, "stakeUnstake", [false, cB, aU], nil)
883+ let bZ = if (if (contains(ad, bq))
884+ then (dx > 0)
885+ else false)
886+ then invoke(this, "stakeUnstake", [true, dx, bq], nil)
633887 else 0
634- if ((bC == bC))
635- then $Tuple2(nil, [IntegerEntry(f, (aJ - cA)), IntegerEntry(g, (aK - cB)), IntegerEntry(k, (cb - ax)), Burn(aV, ax), ScriptTransfer(bc, cA, aL), ScriptTransfer(bc, cB, aM)])
888+ if ((bZ == bZ))
889+ then $Tuple2(nil, $Tuple2([IntegerEntry(f, (bd + dw)), IntegerEntry(g, (be + dx))], nil))
636890 else throw("Strict value is not equal to itself.")
637891 }
638892 else throw("Strict value is not equal to itself.")
639893 }
640- })
894+ }))
641895
642896
643-
644-@Callable(an)
645-func takeIntoAccountExtraFunds (aY,aZ,ba,bb) = valueOrElse(aN(), {
646- let cC = aS(an.caller)
647- let aT = cC._1
648- let aU = cC._2
649- let aL = cC._3
650- let aM = cC._4
651- let cD = aO(an.caller, aL, aM)
652- let aJ = cD._1
653- let aK = cD._2
654- let aH = cD._3
655- let aI = cD._4
656- let cE = (aH - aJ)
657- let cF = (aI - aK)
658- if ((R != an.originCaller))
659- then throw("Only the wallet can call this function")
660- else if (if ((0 > cE))
661- then true
662- else (0 > cF))
663- then au("Enroll amount negative")
664- else if (if ((cE == 0))
665- then (cF == 0)
666- else false)
667- then throw("No money to take")
668- else {
669- let bB = if (if (contains(V, aT))
670- then (cE > 0)
671- else false)
672- then invoke(this, "stakeUnstake", [true, cE, aT], nil)
673- else 0
674- if ((bB == bB))
675- then {
676- let bC = if (if (contains(V, aU))
677- then (cF > 0)
678- else false)
679- then invoke(this, "stakeUnstake", [true, cF, aU], nil)
680- else 0
681- if ((bC == bC))
682- then $Tuple2(nil, [IntegerEntry(f, (aJ + cE)), IntegerEntry(g, (aK + cF))])
683- else throw("Strict value is not equal to itself.")
684- }
685- else throw("Strict value is not equal to itself.")
686- }
687- })
688-
689-
690-@Verifier(cG)
691-func cH () = {
692- let cI = {
693- let cJ = if (sigVerify(cG.bodyBytes, cG.proofs[0], N))
897+@Verifier(dy)
898+func dz () = {
899+ let dA = {
900+ let dB = if (sigVerify(dy.bodyBytes, dy.proofs[0], T))
694901 then 1
695902 else 0
696- let cK = if (sigVerify(cG.bodyBytes, cG.proofs[1], O))
903+ let dC = if (sigVerify(dy.bodyBytes, dy.proofs[1], U))
697904 then 1
698905 else 0
699- let cL = if (sigVerify(cG.bodyBytes, cG.proofs[2], P))
906+ let dD = if (sigVerify(dy.bodyBytes, dy.proofs[2], V))
700907 then 1
701908 else 0
702- (((cJ + cK) + cL) >= 2)
909+ (((dB + dC) + dD) >= 2)
703910 }
704- cI
911+ dA
705912 }
706913

github/deemru/w8io/169f3d6 
227.96 ms