tx · 8hoCQUTLyWkkbudVjwmPDjZyHLxz3vVSPGNnJ3yDz1zn

3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz:  -0.02200000 Waves

2023.01.12 12:15 [2401539] smart account 3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz > SELF 0.00000000 Waves

{ "type": 13, "id": "8hoCQUTLyWkkbudVjwmPDjZyHLxz3vVSPGNnJ3yDz1zn", "fee": 2200000, "feeAssetId": null, "timestamp": 1673514931902, "version": 1, "sender": "3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz", "senderPublicKey": "D28XoueZWsMfm8Y5pa6C5ZFuYoWgre2Wm8tzJANJgMnq", "proofs": [ "ewVDS6CL3kxRo9etADVQG11pRBP3qdK7bcY7nXZWJDsUScLmrvZceowM7QZUpWhheg3VGnVq4AZwqSWdVw46dhk" ], "script": "base64:BgLcHwgCEgMKAQgSAwoBCBIDCgEIEgASABIECgIIARIGCgQCAQICEgMKAQgSBAoCCAgSBgoEARgIGBIECgIYCBIECgIICBIECgIICBIDCgEIEgQKAggIIgZTQ0FMRTgiBU1VTFQ4IgdTQ0FMRTE4IgZNVUxUMTgiA1NFUCIOUE9PTFdFSUdIVE1VTFQiCnplcm9CaWdJbnQiCW9uZUJpZ0ludCIHd3JhcEVyciIDbXNnIgh0aHJvd0VyciIJYXNBbnlMaXN0IgN2YWwiByRtYXRjaDAiCnZhbEFueUx5c3QiBWFzSW50IgZ2YWxJbnQiCGFzU3RyaW5nIgZ2YWxTdHIiDGFzQnl0ZVZlY3RvciIGdmFsQmluIg9nZXRTdHJpbmdPckZhaWwiB2FkZHJlc3MiA2tleSIYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsIgxnZXRJbnRPclplcm8iD2dldEludE9yRGVmYXVsdCIKZGVmYXVsdFZhbCIMZ2V0SW50T3JGYWlsIhlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvIhxnZXRCaWdJbnRGcm9tU3RyaW5nT3JEZWZhdWx0IgFzIgV0b1gxOCIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCIHZnJvbVgxOCIPcmVzdWx0U2NhbGVNdWx0IhFrZXlGYWN0b3J5QWRkcmVzcyIZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdCIYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwIhlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwIhRJZHhGYWN0b3J5Q2ZnSWRvRGFwcCIVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwIhlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwIhVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAiGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAiDWtleUZhY3RvcnlDZmciE2tleU1hbmFnZXJQdWJsaWNLZXkiGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhZrZXlTdGFibGVQb29sQWRkb25BZGRyIgxrZXlBZGRvbkFkZHIiGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nIgpscEFzc2V0U3RyIhBrZXlGYWN0b3J5THBMaXN0IiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcyIUa2V5RmFjdG9yeVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIKcmVhZExwTGlzdCIHZmFjdG9yeSIUcmVhZEZhY3RvcnlDZmdPckZhaWwiGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbCIKZmFjdG9yeUNmZyIYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsIhdnZXRTdGFraW5nQWRkcmVzc09yRmFpbCIea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50IiFrZXlFbWlzc2lvblJhdGVQZXJCbG9ja01heEN1cnJlbnQiFWtleUVtaXNzaW9uU3RhcnRCbG9jayIba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzIhNrZXlFbWlzc2lvbkVuZEJsb2NrIg9rZXlTdGFrZWRCeVVzZXIiDnVzZXJBZGRyZXNzU3RyIgxscEFzc2V0SWRTdHIiDmtleVN0YWtlZFRvdGFsIhBrZXlDbGFpbWVkQnlVc2VyIhlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkIhtrZXlDbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmQiD2tleUNsYWltZWRUb3RhbCIKcmVhZFN0YWtlZCIVa2V5TGFzdFRvdGFsTHBCYWxhbmNlIglscEFzc2V0SWQiFGtleUxhc3RVc2VyTHBCYWxhbmNlIgt1c2VyQWRkcmVzcyIZa2V5VG90YWxMcEJhbGFuY2VJbnRlZ3JhbCIYa2V5VXNlckxwQmFsYW5jZUludGVncmFsIiZrZXlUb3RhbExwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodCIla2V5VXNlckxwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodCISa2V5V3hQZXJMcEludGVncmFsIh9rZXlXeFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0IhBrZXlXeFRvQ2xhaW1Vc2VyIiNrZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodCIKa2V5V3hQZXJMcCINa2V5V3hQZXJMcFgxOCIaa2V5V3hQZXJMcEludGVncmFsVXNlckxhc3QiGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQiBHR5cGUiBnR4SWQ1OCITZm9ybWF0SGlzdG9yeVJlY29yZCIGYW1vdW50IhVPcGVyYXRpb25IaXN0b3J5RW50cnkiBHR4SWQiDmZhY3RvcnlBZGRyZXNzIg9mYWN0b3J5Q29udHJhY3QiEGVtaXNzaW9uQ29udHJhY3QiEGJvb3N0aW5nQ29udHJhY3QiFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QiC2tleU5leHRVc2VyIhBnZXRVc2Vyc0xpc3ROYW1lIgtrZXlMaXN0SGVhZCIIbGlzdE5hbWUiC2tleUxpc3RTaXplIgtrZXlMaXN0UHJldiICaWQiC2tleUxpc3ROZXh0Igxjb250YWluc05vZGUiCmhlYWRPclVuaXQiCnByZXZPclVuaXQiCm5leHRPclVuaXQiEWluc2VydE5vZGVBY3Rpb25zIghsaXN0U2l6ZSIJY2hlY2tOb2RlIhFkZWxldGVOb2RlQWN0aW9ucyIbY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0IgxzdGFrZWRCeVVzZXIiJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvIhJ3eFBlckxwSW50ZWdyYWxOZXciGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZIhRyZWZyZXNoUG9vbElOVEVHUkFMUyIOcG9vbEFkZHJlc3NTdHIiDWxwRGVsdGFBbW91bnQiDnN0YWtlZFRvdGFsS0VZIgtzdGFrZWRUb3RhbCISbm9uWmVyb1N0YWtlZFRvdGFsIgpwb29sV2VpZ2h0IhJlbWlzc2lvblN0YXJ0QmxvY2siBU1VTFQzIhR3eEVtaXNzaW9uUGVyQmxvY2tYMyIYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzIhJ3eFBlckxwSW50ZWdyYWxLRVkiH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkiCnd4UGVyTHBLRVkiHHd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQiD3d4UGVyTHBJbnRlZ3JhbCIPd3hQZXJMcE9yWmVyb1gzIgJkaCIJd3hQZXJMcFgzIg5zdGFrZWRUb3RhbE5ldyIVbm9uWmVyb1N0YWtlZFRvdGFsTmV3Igx3eFBlckxwWDNOZXciH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHROZXciBWRlYnVnIhByZWZyZXNoSU5URUdSQUxTIg0kdDAxNDc1MDE0ODcyIhFwb29sSW50ZWdyYWxTVEFURSIJcG9vbERFQlVHIg9zdGFrZWRCeVVzZXJLRVkiEHd4VG9DbGFpbVVzZXJLRVkiI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZIg13eFRvQ2xhaW1Vc2VyIhd3eFBlckxwSW50ZWdyYWxVc2VyTGFzdCIGTVVMVDExIhB3eFRvQ2xhaW1Vc2VyTmV3Ihp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdE5ldyIjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHROZXciFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IhVwZXJtaXNzaW9uRGVuaWVkRXJyb3IiCG11c3RUaGlzIgFpIgttdXN0TWFuYWdlciICcGsiDnVuc3Rha2VBY3Rpb25zIgtwb29sQWRkcmVzcyIXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MiDWludGVncmFsU1RBVEUiC2xpc3RBY3Rpb25zIg1jbGFpbWVkQnlVc2VyIhBhdmFpbGFibGVUb0NsYWltIgFyIhFmYWN0b3J5QWRkcmVzc1N0ciILY2hlY2tDYWxsZXIiFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QiBWNoZWtzIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iA3BtdCIJY2FsbGVyU3RyIg0kdDAyMTA4ODIxMjA1Iglwb29sQWRkb24iBnJlc3VsdCIQY2xhaW1lZEJ5VXNlcktFWSIPY2xhaW1lZFRvdGFsS0VZIhljbGFpbWVkQnlVc2VyTWluUmV3YXJkS0VZIhtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRLRVkiFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQiGGNsYWltZWRCeVVzZXJCb29zdFJld2FyZCIMY2xhaW1lZFRvdGFsIg0kdDAyNDIzNjI0MzQ4IhJ3eEFtb3VudEJvb3N0VG90YWwiDW1pblJld2FyZFBhcnQiD2Jvb3N0UmV3YXJkUGFydCILdG90YWxSZXdhcmQiCXd4QXNzZXRJZCIJZW1pdEJvb3N0IhJjbGFpbWVkQnlVc2VyVmFsdWUiHmNsYWltZWRCeVVzZXJNaW5SZXdhcmRQbHVzUGFydCIrY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkUGx1c0Jvb3N0UmV3YXJkUGFydCIgY2xhaW1lZFRvdGFsUGx1c0F2YWlsYWJsZVRvQ2xhaW0iC2N1cnJlbnRJdGVyIgpscEFzc2V0SWRzIgZyZXNBY2MiBGluZm8iAUAiCXVuY2xhaW1lZCIHY2xhaW1lZCIDcmVzIgNpbnYiEnd4RW1pc3Npb25QZXJCbG9jayIMcGFzc2VkQmxvY2tzIg5wb29sV3hFbWlzc2lvbiIMdXNlcld4UmV3YXJkIg0kdDAyNzkwMTI4MDEzIg5ib29zdEludlJlc3VsdCIKYm9vc3REZWJ1ZyIKdXNlck9yVW5pdCIHJG1hdGNoMSIEaGVhZCIObmV4dFVzZXJPclVuaXQiCG5leHRVc2VyIg0kdDAzMDUyMTMwNjMxIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXliAAFhAAgAAWIAgMLXLwABYwASAAFkCQC2AgEAgICQu7rWrfANAAFlAgJfXwABZgUBYgABZwkAtgIBAAAAAWgJALYCAQABAQFpAQFqCQC5CQIJAMwIAgINc3Rha2luZy5yaWRlOgkAzAgCCQClCAEFBHRoaXMJAMwIAgUBagUDbmlsAgEgAQFrAQFqCQACAQkBAWkBBQFqAQFsAQFtBAFuBQFtAwkAAQIFAW4CCUxpc3RbQW55XQQBbwUBbgUBbwkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEBcAEBbQQBbgUBbQMJAAECBQFuAgNJbnQEAXEFAW4FAXEJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBAXIBAW0EAW4FAW0DCQABAgUBbgIGU3RyaW5nBAFzBQFuBQFzCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQF0AQFtBAFuBQFtAwkAAQIFAW4CCkJ5dGVWZWN0b3IEAXUFAW4FAXUJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBAXYCAXcBeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAXcFAXgJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAXgCDyBpcyBub3QgZGVmaW5lZAEBeQIBdwF4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUBdwUBeAkArAICCQCsAgIJAKwCAgkArAICAgptYW5kYXRvcnkgCQClCAEFAXcCAS4FAXgCDyBpcyBub3QgZGVmaW5lZAEBegIBdwF4CQELdmFsdWVPckVsc2UCCQCaCAIFAXcFAXgAAAEBQQMBdwF4AUIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBdwUBeAUBQgEBQwIBdwF4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBdwUBeAkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBeAIPIGlzIG5vdCBkZWZpbmVkAQFEAgF3AXgJAQV2YWx1ZQEJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQF3BQF4AgEwAQFFAwF3AXgBQgQBbgkAnQgCBQF3BQF4AwkAAQIFAW4CBlN0cmluZwQBRgUBbgkBBXZhbHVlAQkAqAMBBQFGAwkAAQIFAW4CBFVuaXQFAUIJAAIBAgtNYXRjaCBlcnJvcgEBRwIBSAFJCQC8AgMJALYCAQUBSAUBZAkAtgIBBQFJAQFKAgFtAUsJAKADAQkAvAIDBQFtCQC2AgEFAUsFAWQBAUwAAhwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzAQFNAAIaJXNfX3ZvdGluZ0VtaXNzaW9uQ29udHJhY3QAAU4AAQABTwACAAFQAAMAAVEABAABUgAFAAFTAAYAAVQABwEBVQACESVzX19mYWN0b3J5Q29uZmlnAQFWAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAVcAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAVgAAhclc19fc3RhYmxlUG9vbEFkZG9uQWRkcgEBWQACDSVzX19hZGRvbkFkZHIBAVoBAmFhCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFAmFhCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQFlAQJhYgACECVzX19scFRva2Vuc0xpc3QBAmFjAQJhYQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQJhYQkAzAgCAh5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFA25pbAUBZQECYWQBAmFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgpwb29sV2VpZ2h0CQDMCAIFAmFlBQNuaWwFAWUBAmFmAQJhZwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFAmFnCQECYWIAAgAFAWUBAmFoAQJhZwkAtQkCCQEBeQIFAmFnCQEBVQAFAWUBAmFpAQJhagkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhagUBTwECYWsBAmFqCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmFqBQFSAQJhbAECYWoJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYWoFAU4BAmFtAAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQJhbgACHiVzJXNfX3JhdGVQZXJCbG9ja01heF9fY3VycmVudAECYW8AAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawECYXAAAhglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BAmFxAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQJhcgICYXMCYXQJALkJAgkAzAgCAg4lcyVzJXNfX3N0YWtlZAkAzAgCBQJhcwkAzAgCBQJhdAUDbmlsBQFlAQJhdQECYXQJAKwCAgIXJXMlcyVzX19zdGFrZWRfX3RvdGFsX18FAmF0AQJhdgICYXQCYXMJALkJAgkAzAgCAg8lcyVzJXNfX2NsYWltZWQJAMwIAgUCYXMJAMwIAgUCYXQFA25pbAUBZQECYXcCAmF0AmFzCQC5CQIJAMwIAgIYJXMlcyVzX19jbGFpbWVkTWluUmV3YXJkCQDMCAIFAmFzCQDMCAIFAmF0BQNuaWwFAWUBAmF4AgJhdAJhcwkAuQkCCQDMCAICGiVzJXMlc19fY2xhaW1lZEJvb3N0UmV3YXJkCQDMCAIFAmFzCQDMCAIFAmF0BQNuaWwFAWUBAmF5AQJhdAkAuQkCCQDMCAICFiVzJXMlc19fY2xhaW1lZF9fdG90YWwJAMwIAgUCYXQFA25pbAUBZQECYXoBAXgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBeAAAAQJhQQECYUIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUCYUIJAMwIAgIFdG90YWwJAMwIAgIDYmFsBQNuaWwFAWUBAmFDAgJhQgJhRAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQJhQgkAzAgCBQJhRAkAzAgCAgNiYWwFA25pbAUBZQECYUUBAmFCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFAmFCCQDMCAICBXRvdGFsCQDMCAICBmJhbElOVAUDbmlsBQFlAQJhRgICYUICYUQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUCYUIJAMwIAgUCYUQJAMwIAgIGYmFsSU5UBQNuaWwFAWUBAmFHAQJhQgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQJhQgkAzAgCAgV0b3RhbAkAzAgCAgdsYXN0VXBkBQNuaWwFAWUBAmFIAgJhQgJhRAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQJhQgkAzAgCBQJhRAkAzAgCAgdsYXN0VXBkBQNuaWwFAWUBAmFJAQJhQgkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFAmFCCQDMCAICBmNvbW1vbgkAzAgCAgVscEludAUDbmlsBQFlAQJhSgECYUIJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQJhQgkAzAgCAgZjb21tb24JAMwIAgIGbHBJbnRIBQNuaWwFAWUBAmFLAgJhQgJhRAkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFAmFCCQDMCAIFAmFECQDMCAICBWxwSW50BQNuaWwFAWUBAmFMAgJhQgJhRAkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFAmFCCQDMCAIFAmFECQDMCAICBmxwSW50SAUDbmlsBQFlAQJhTQECYUIJALkJAgkAzAgCAgIlcwkAzAgCBQJhQgkAzAgCAgd3eFBlckxwBQNuaWwFAWUBAmFOAQJhQgkAuQkCCQDMCAICAiVzCQDMCAIFAmFCCQDMCAICCnd4UGVyTHBYMTgFA25pbAUBZQECYU8CAmFCAmFECQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUCYUIJAMwIAgUCYUQJAMwIAgIFdUludEwFA25pbAUBZQECYVADAmFRAmFEAmFSCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUCYVEJAMwIAgUCYUQJAMwIAgUCYVIFA25pbAUBZQECYVMEAmFEAmFCAmFRAmFUCQC5CQIJAMwIAgIMJXMlcyVzJWQlZCVkCQDMCAIFAmFECQDMCAIFAmFCCQDMCAIFAmFRCQDMCAIJAKQDAQUGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQJhVAUDbmlsBQFlAQJhVQUCYVECYUQCYUICYVQCYVYJAQtTdHJpbmdFbnRyeQIJAQJhUAMFAmFRBQJhRAkA2AQBBQJhVgkBAmFTBAUCYUQFAmFCBQJhUQUCYVQAAmFXCQEBdgIFBHRoaXMJAQFMAAACYVgJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFXAAJhagkBAmFoAQUCYVgAAmFZCQECYWsBBQJhagACYVoJAQJhaQEFAmFqAAJiYQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQC5CQIJAMwIAgICJXMJAMwIAgIWbHBTdGFraW5nUG9vbHNDb250cmFjdAUDbmlsBQFlCQEBaQECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQFpAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MBAmJiAQJhQgkAuQkCCQDMCAICBCVzJXMJAMwIAgUCYUIJAMwIAgIIbmV4dFVzZXIFA25pbAUBZQECYmMBAmFCCQC5CQIJAMwIAgIFdXNlcnMJAMwIAgUCYUIFA25pbAUBZQECYmQBAmJlCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFAmJlCQDMCAICBGhlYWQFA25pbAUBZQECYmYBAmJlCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFAmJlCQDMCAICBHNpemUFA25pbAUBZQECYmcCAmJlAmJoCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUCYmUJAMwIAgUCYmgJAMwIAgIEcHJldgUDbmlsBQFlAQJiaQICYmUCYmgJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQJiZQkAzAgCBQJiaAkAzAgCAgRuZXh0BQNuaWwFAWUBAmJqAgJiZQJiaAQCYmsJAJ0IAgUEdGhpcwkBAmJkAQUCYmUEAmJsCQCdCAIFBHRoaXMJAQJiZwIFAmJlBQJiaAQCYm0JAJ0IAgUEdGhpcwkBAmJpAgUCYmUFAmJoAwMJAAACBQJiaAkBC3ZhbHVlT3JFbHNlAgUCYmsCAAYJAQIhPQIFAmJsBQR1bml0BgkBAiE9AgUCYm0FBHVuaXQBAmJuAgJiZQJiaAQCYmsJAJ0IAgUEdGhpcwkBAmJkAQUCYmUEAmJvCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJiZgEFAmJlAAAEAmJwAwkBASEBCQECYmoCBQJiZQUCYmgGCQACAQILTm9kZSBleGlzdHMDCQAAAgUCYnAFAmJwCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJmAQUCYmUJAGQCBQJibwABBQNuaWwDCQECIT0CBQJiawUEdW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQECYmkCBQJiZQUCYmgJAQV2YWx1ZQEFAmJrCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiZwIFAmJlCQEFdmFsdWUBBQJiawUCYmgFA25pbAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiZAEFAmJlBQJiaAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJicQICYmUCYmgEAmJrCQCdCAIFBHRoaXMJAQJiZAEFAmJlBAJibwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYmYBBQJiZQAABAJibAkAnQgCBQR0aGlzCQECYmcCBQJiZQUCYmgEAmJtCQCdCAIFBHRoaXMJAQJiaQIFAmJlBQJiaAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYmYBBQJiZQkAZQIFAmJvAAEFA25pbAMDCQECIT0CBQJibAUEdW5pdAkBAiE9AgUCYm0FBHVuaXQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiaQIFAmJlCQEFdmFsdWUBBQJibAkBBXZhbHVlAQUCYm0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmJnAgUCYmUJAQV2YWx1ZQEFAmJtCQEFdmFsdWUBBQJibAkAzAgCCQELRGVsZXRlRW50cnkBCQECYmcCBQJiZQUCYmgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmJpAgUCYmUFAmJoBQNuaWwDCQECIT0CBQJibQUEdW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQECYmQBBQJiZQkBBXZhbHVlAQUCYm0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmJpAgUCYmUFAmJoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJiZwIFAmJlCQEFdmFsdWUBBQJibQUDbmlsAwkBAiE9AgUCYmwFBHVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmJnAgUCYmUFAmJoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJiaQIFAmJlCQEFdmFsdWUBBQJibAUDbmlsAwkAAAIFAmJoCQELdmFsdWVPckVsc2UCBQJiawIACQDMCAIJAQtEZWxldGVFbnRyeQEJAQJiZAEFAmJlBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICAg5pbnZhbGlkIG5vZGU6IAUCYmUCAS4FAmJoAQJicgQCYnMCYnQCYnUCYnYDAwkAAAIFAmJ0BQFnCQC/AgIFAmJzBQFnBwUBZwMJAAACBQJicwUBZwUCYnUDAwkAvwICBQJidAUBZwkAvwICBQJicwUBZwcJAQV2YWx1ZQEJAKgDAQkBAXYCBQR0aGlzBQJidgkAAgECLWNhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdDogdW5leHBlY3RlZCBzdGF0ZQECYncDAmF0AmJ4AmJ5BAJiegkBAmF1AQUCYXQEAmJBCQC2AgEJAQJhegEFAmJ6BAJiQgMJAAACBQJiQQUBZwUBaAUCYkEEAmJDCQERQGV4dHJOYXRpdmUoMTA1MCkCBQJhWAkBAmFkAQUCYngEAmJECQEBQwIFAmFZCQECYW8ABAJiRQDoBwQCYkYJAGgCCQEBQwIFAmFZCQECYW0ABQJiRQQCYkcJAGsDBQJiRgUCYkMJAGgCBQFmAAMEAmJICQECYUkBBQJhdAQCYkkJAQJhSgEFAmF0BAJiSgkBAmFNAQUCYXQEAmJLCQEBQQMFBHRoaXMFAmJJBQJiRAQCYkwJAQFEAgUEdGhpcwUCYkgEAmJNAAAEAmJOCQCWAwEJAMwIAgkAZQIFBmhlaWdodAUCYksJAMwIAgAABQNuaWwEAmJPAwkBAiE9AgUCYk0AAAkAtgIBBQJiTQkAvAIDCQC2AgEFAmJHCQC2AgEFAWIFAmJCBAJiUAkAtwICBQJiQQkAtgIBBQJieQQCYlEDCQAAAgUCYlAFAWcFAWgFAmJQBAJidQkAtwICBQJiTAkAuQICBQJiTwkAtgIBBQJiTgQCYlIJALoCAgkAtgIBBQJiRwUCYlEEAmJTBQZoZWlnaHQEAmJUCQC5CQIJAMwIAgkApgMBBQJidQkAzAgCCQCkAwEFAmJOCQDMCAIJAKYDAQUCYk8JAMwIAgkApgMBBQJiQQkAzAgCCQCkAwEFAmJHCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJiQwUDbmlsAgI6OgkAlQoDBQJidQkAzAgCCQELU3RyaW5nRW50cnkCBQJiSAkApgMBBQJidQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYkkFAmJTCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmJKCQCmAwEFAmJSBQNuaWwFAmJUAQJiVQQCYXQCYXMCYngCYnkEAmJWCQECYncDBQJhdAUCYngFAmJ5BAJidQgFAmJWAl8xBAJiVwgFAmJWAl8yBAJiWAgFAmJWAl8zBAJiRQDoBwQCYlkJAQJhcgIFAmFzBQJhdAQCYnMJAQJhegEFAmJZBAJiWgkBAmFLAgUCYXQFAmFzBAJjYQkBAmFMAgUCYXQFAmFzBAJidgkBAmFPAgUCYXQFAmFzBAJjYgkBAUQCBQR0aGlzBQJiWgQCYnQJAQF6AgUEdGhpcwUCY2EEAmNjCQECYnIECQC2AgEFAmJzCQC2AgEFAmJ0BQJidQUCYnYEAmNkCQBoAgUBYgUCYkUEAmNlCQCYAwEJAMwIAgkAtwICBQJjYgkAvAIDCQC4AgIFAmJ1BQJjYwkAtgIBBQJicwkAtgIBBQJjZAkAzAgCBQFnBQNuaWwEAmNmBQJidQQCY2cFBmhlaWdodAQCYlQJALkJAgkAzAgCCQCmAwEFAmNiCQDMCAIJAKYDAQUCY2MJAMwIAgkApAMBBQJicwkAzAgCBQJiWAkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgI6OgkAlQoDBQJjZQkAzggCBQJiVwkAzAgCCQELU3RyaW5nRW50cnkCBQJiWgkApgMBBQJjZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY2EFAmNnCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmJ2CQCmAwEFAmNmBQNuaWwFAmJUAQJjaAAEAW4JAKIIAQkBAVYAAwkAAQIFAW4CBlN0cmluZwQBRgUBbgkA2QQBBQFGAwkAAQIFAW4CBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECY2kABAFuCQCiCAEJAQFXAAMJAAECBQFuAgZTdHJpbmcEAUYFAW4JANkEAQUBRgMJAAECBQFuAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAAmNqCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBAmNrAQJjbAMJAAACCAUCY2wGY2FsbGVyBQR0aGlzBgUCY2oBAmNtAQJjbAQBbgkBAmNoAAMJAAECBQFuAgpCeXRlVmVjdG9yBAJjbgUBbgMJAAACCAUCY2wPY2FsbGVyUHVibGljS2V5BQJjbgYFAmNqAwkAAQIFAW4CBFVuaXQDCQAAAggFAmNsBmNhbGxlcgUEdGhpcwYFAmNqCQACAQILTWF0Y2ggZXJyb3IBAmNvBgJjbAJhQgJjcAJhRAJjcQJhVAQCYXMJAKUIAQUCYUQEAmF0CQDYBAEFAmFCBAJieAkApQgBBQJjcAQCYlkJAQJhcgIFAmFzBQJhdAQCYnoJAQJhdQEFAmF0BAJicwkBAmF6AQUCYlkEAmJBCQECYXoBBQJiegQCY3IICQECYlUEBQJhdAUCYXMFAmJ4CQEBLQEFAmFUAl8yBAJiZQkBAmJjAQUCYXQEAmNzAwMJAQJiagIFAmJlBQJhcwkAAAIFAmFUBQJicwcJAQJicQIFAmJlBQJhcwUDbmlsBAJjdAkBAUQCBQR0aGlzCQECYXYCBQJhdAUCYXMEAmNlCAkBAmJVBAUCYXQFAmFzBQJieAAAAl8xBAJjdQkAuAICBQJjZQUCY3QEAmN2AwkAvwICBQJjdQUBZwkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUCYXQJAMwIAgUCYXMFA25pbAUDbmlsBQR1bml0AwkAAAIFAmN2BQJjdgMJAGYCBQJhVAUCYnMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnBhc3NlZCBhbW91bnQ9CQCkAwEFAmFUAhsgaXMgZ3JlYXRlciB0aGFuIGF2YWlsYWJsZT0JAKQDAQUCYnMCDC4gbHBBc3NldElkPQUCYXQCEi4gc3Rha2VkQnlVc2VyS0VZPQUCYlkJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiWQkAZQIFAmJzBQJhVAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYnoJAGUCBQJiQQUCYVQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3EFAmFUBQJhQgkAzAgCCQECYVUFAgd1bnN0YWtlBQJhcwUCYXQFAmFUCAUCY2wNdHJhbnNhY3Rpb25JZAUDbmlsBQJjcgUCY3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4PAmNsAQtjb25zdHJ1Y3RvcgECY3cEAmN4CQECY20BBQJjbAMJAAACBQJjeAUCY3gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUwABQJjdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNsAQ1jb25zdHJ1Y3RvclYyAQJjeQQCY3oJAMwIAgkBAmNtAQUCY2wJAMwIAgMJAQIhPQIJAKYIAQUCY3kFBHVuaXQGAihpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzBQNuaWwDCQAAAgUCY3oFAmN6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFNAAUCY3kFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjbAEKc2V0TWFuYWdlcgECY0EEAmN4CQECY20BBQJjbAMJAAACBQJjeAUCY3gEAmNCCQDZBAEFAmNBAwkAAAIFAmNCBQJjQgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwAFAmNBBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY2wBDmNvbmZpcm1NYW5hZ2VyAAQCY0MJAQJjaQAEAmNEAwkBCWlzRGVmaW5lZAEFAmNDBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJjRAUCY0QEAmNFAwkAAAIIBQJjbA9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmNDBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJjRQUCY0UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYACQDYBAEJAQV2YWx1ZQEFAmNDCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFXAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNsAQVzdGFrZQADCQECIT0CCQCQAwEIBQJjbAhwYXltZW50cwABCQACAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQCY0YJAJEDAggFAmNsCHBheW1lbnRzAAAEAmFCCQEFdmFsdWUBCAUCY0YHYXNzZXRJZAQCYXQJANgEAQUCYUIEAmFUCAUCY0YGYW1vdW50BAJieAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFYCQEBWgEFAmF0CQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUCYXQEAmNHCQClCAEIBQJjbAZjYWxsZXIEAmFzAwkAAAIFAmNHBQJieAkApQgBCAUCY2wMb3JpZ2luQ2FsbGVyBQJjRwQCYlkJAQJhcgIFAmFzBQJhdAQCYnoJAQJhdQEFAmF0BAJicwkBAmF6AQUCYlkEAmJBCQECYXoBBQJiegQCY0gJAQJiVQQFAmF0BQJhcwUCYngFAmFUBAJjZQgFAmNIAl8xBAJjcggFAmNIAl8yBAJiVAgFAmNIAl8zBAJiZQkBAmJjAQUCYXQEAmNzAwkBAmJqAgUCYmUFAmFzBQNuaWwJAQJibgIFAmJlBQJhcwkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJZCQBkAgUCYnMFAmFUCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiegkAZAIFAmJBBQJhVAkAzAgCCQECYVUFAgVzdGFrZQUCYXMFAmF0BQJhVAgFAmNsDXRyYW5zYWN0aW9uSWQFA25pbAUCY3IFAmNzAmNsAQd1bnN0YWtlAgJhdAJhVAQCYUIJANkEAQUCYXQEAmJ4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYVgJAQFaAQUCYXQJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQJhdAQCY3AJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJ4BAJjSQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQJjcAkBAVkABQJieAQCY0cJAKUIAQgFAmNsBmNhbGxlcgQCYUQDAwkAAAIFAmNHBQJieAYJAAACBQJjRwUCY0kIBQJjbAxvcmlnaW5DYWxsZXIIBQJjbAZjYWxsZXIEAmNxCAUCY2wGY2FsbGVyCQECY28GBQJjbAUCYUIFAmNwBQJhRAUCY3EFAmFUAmNsAQ91bnN0YWtlSU5URVJOQUwEAmFCAmFUAmFEAmNxBAJhdAkA2AQBBQJhQgQCY3AJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJhWAkBAVoBBQJhdAkArAICAhV1bnN1cHBvcnRlZCBscCBhc3NldCAFAmF0BAJjeAMJAAACCAUCY2wGY2FsbGVyBQJjcAYFAmNqAwkAAAIFAmN4BQJjeAkBAmNvBgUCY2wFAmFCBQJjcAkBB0FkZHJlc3MBBQJhRAkBB0FkZHJlc3MBBQJjcQUCYVQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY2wBB2NsYWltV3gBAmF0BAJhcwkApQgBCAUCY2wGY2FsbGVyBAJjSgkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUCYXQJAMwIAgUCYXMFA25pbAUDbmlsCQCUCgIFA25pbAUCY0oCY2wBD2NsYWltV3hJTlRFUk5BTAICYXQCYXMEAmN4CQECY2sBBQJjbAMJAAACBQJjeAUCY3gEAmFECQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUCYXMCJWNsYWltV3hJTlRFUk5BTDogaW52YWxpZCB1c2VyIGFkZHJlc3MEAmJ4CQEBeQIFAmFYCQECYWMBBQJhdAQCY0sJAQJhdgIFAmF0BQJhcwQCY0wJAQJheQEFAmF0BAJjTQkBAmF3AgUCYXQFAmFzBAJjTgkBAmF4AgUCYXQFAmFzBAJjdAkBAUQCBQR0aGlzBQJjSwQCY08JAQFEAgUEdGhpcwUCY00EAmNQCQEBRAIFBHRoaXMFAmNOBAJjUQkBAUQCBQR0aGlzBQJjTAQCY1IJAQJiVQQFAmF0BQJhcwUCYngAAAQCY2UIBQJjUgJfMQQCY3IIBQJjUgJfMgQCYlQIBQJjUgJfMwQCY3UJAJgDAQkAzAgCCQC4AgIFAmNlBQJjdAkAzAgCBQFnBQNuaWwDCQDAAgIFAWcFAmN1CQACAQIQbm90aGluZyB0byBjbGFpbQQCY1MJAJYDAQkAzAgCCQEBcAEJAJEDAgkBAWwBCQD8BwQFAmFaAgxjbGFpbVd4Qm9vc3QJAMwIAgUCYXQJAMwIAgUCYXMFA25pbAUDbmlsAAAJAMwIAgAABQNuaWwEAmNUBQJjdQQCY1UJAJkDAQkAzAgCCQC5AgIFAmNUCQC2AgEAAgkAzAgCCQC2AgEFAmNTBQNuaWwEAmNWCQC3AgIFAmNUBQJjVQQCY1cJAQF0AQkAkQMCCQEBbAEJAPwHBAUCYVkCBGVtaXQJAMwIAgkAoAMBBQJjVAUDbmlsBQNuaWwAAAQCY1gJAQFsAQkA/AcEBQJhWQIEZW1pdAkAzAgCCQCgAwEFAmNVBQNuaWwFA25pbAMJAAACBQJjWAUCY1gEAmNZCQC3AgIFAmN0BQJjdQQCY1oJALcCAgUCY08FAmNUBAJkYQkAtwICBQJjTwUCY1QEAmRiCQC3AgIFAmNPBQJjVAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmNLCQCmAwEFAmNZCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmNNCQCmAwEFAmNaCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmNOCQCmAwEFAmRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmNMCQCmAwEFAmRiCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFECQCgAwEFAmNUBQJjVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRAkAoAMBBQJjVQUCY1cJAMwIAgkBAmFVBQIFY2xhaW0FAmFzBQJhdAkAoAMBBQJjdQgFAmNsDXRyYW5zYWN0aW9uSWQFA25pbAkAoAMBBQJjVgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjbAEbY2xhaW1XeEJ1bGtJbnRlcm5hbFJFQURPTkxZBAJkYwJkZAJhcwJkZQMJAAACBQJkYwkAkAMBBQJkZAkAlAoCBQNuaWwFAmRlBAJhQgkAkQMCBQJkZAUCZGMEAmRmCQC1CQIKAAJkZwkA/AcEBQR0aGlzAg9jbGFpbVd4UkVBRE9OTFkJAMwIAgUCYUIJAMwIAgUCYXMFA25pbAUDbmlsAwkAAQIFAmRnAgZTdHJpbmcFAmRnCQACAQkArAICCQADAQUCZGcCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwUBZQQCZGgJAJEDAgUCZGYAAwQCZGkJAJEDAgUCZGYABAQCZGoJAM0IAgUCZGUJALkJAgkAzAgCAgQlZCVkCQDMCAIFAmRoCQDMCAIFAmRpBQNuaWwFAWUEAmRrCgACZGcJAPwHBAUEdGhpcwIbY2xhaW1XeEJ1bGtJbnRlcm5hbFJFQURPTkxZCQDMCAIJAGQCBQJkYwABCQDMCAIFAmRkCQDMCAIFAmFzCQDMCAIFAmRqBQNuaWwFA25pbAMJAAECBQJkZwIJTGlzdFtBbnldBQJkZwkAAgEJAKwCAgkAAwEFAmRnAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUCZGsFAmRrCQCUCgIFA25pbAUCZGsJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY2wBE2NsYWltV3hCdWxrUkVBRE9OTFkCAmRkAmFzBAJkagkA/AcEBQR0aGlzAhtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkJAMwIAgAACQDMCAIFAmRkCQDMCAIFAmFzCQDMCAIFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQJkagJjbAEPY2xhaW1XeFJFQURPTkxZAgJhdAJhcwQCYlkJAQJhcgIFAmFzBQJhdAQCYnoJAQJhdQEFAmF0BAJjSwkBAmF2AgUCYXQFAmFzBAJicwkBAmF6AQUCYlkEAmJBCQECYXoBBQJiegQCY3QJAQFEAgUEdGhpcwUCY0sEAmJ4CQEBeQIFAmFYCQECYWMBBQJhdAQCYkMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAmFYCQECYWQBBQJieAQCZGwJAQFDAgUCYVkJAQJhbQAEAmJECQEBQwIFAmFZCQECYW8ABAJkbQMJAGYCBQJiRAUGaGVpZ2h0AAAJAGUCBQZoZWlnaHQFAmJEBAJkbgkAawMJAGgCBQJkbAUCZG0FAmJDBQFmBAJkbwkAawMFAmRuBQJicwUCYkEEAmRwCQECYlUEBQJhdAUCYXMFAmJ4AAAEAmNlCAUCZHACXzEEAmNyCAUCZHACXzIEAmJUCAUCZHACXzMEAmN1CQCYAwEJAMwIAgkAuAICBQJjZQUCY3QJAMwIAgUBZwUDbmlsBAJkcQkBAWwBCQD8BwQFAmFaAhRjbGFpbVd4Qm9vc3RSRUFET05MWQkAzAgCBQJhdAkAzAgCBQJhcwUDbmlsBQNuaWwEAmNTCQCWAwEJAMwIAgkBAXABCQCRAwIFAmRxAAAJAMwIAgAABQNuaWwEAmRyCQEBcgEJAJEDAgUCZHEAAQQCY1QFAmN1BAJjVQkAmQMBCQDMCAIJALkCAgUCY1QJALYCAQACCQDMCAIJALYCAQUCY1MFA25pbAQCY1YJALcCAgUCY1QFAmNVCQCUCgIFA25pbAkAuQkCCQDMCAICDiVzJXMlZCVkJWQlZCVzCQDMCAIFAmF0CQDMCAIFAmFzCQDMCAIJAKYDAQUCY1YJAMwIAgkApgMBBQJjdAkAzAgCCQCmAwEFAmNUCQDMCAIJAKYDAQUCY1UJAMwIAgIEc29vbgUDbmlsBQFlAmNsARRzdGFrZWRCeVVzZXJSRUFET05MWQICYXQCYXMEAmJzCQELdmFsdWVPckVsc2UCCQCfCAEJAQJhcgIFAmFzBQJhdAAACQCUCgIFA25pbAUCYnMCY2wBEnVzZXJzTGlzdFRyYXZlcnNhbAECYUIEAmN4AwkAAAIJANgEAQgIBQJjbAZjYWxsZXIFYnl0ZXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBAU0AAgAGCQECY20BBQJjbAMJAAACBQJjeAUCY3gEAmJlCQECYmMBBQJhQgQCZHMJAKIIAQkBAmJiAQUCYUIEAmJrCQCiCAEJAQJiZAEFAmJlBAFuBQJkcwMJAAECBQFuAgRVbml0BAJkdAUCYmsDCQABAgUCZHQCBFVuaXQJAJQKAgUDbmlsBwMJAAECBQJkdAIGU3RyaW5nBAJkdQUCZHQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYmIBBQJhQgUCZHUFA25pbAYJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQFuAgZTdHJpbmcEAmFEBQFuBAJjdAkBAUQCBQR0aGlzCQECYXYCBQJhQgUCYUQEAmNwCQEBeQIFAmFYCQECYWMBBQJhQgQCY2UICQECYlUEBQJhQgUCYUQFAmNwAAACXzEEAmN1CQC4AgIFAmNlBQJjdAQCY3YDCQC/AgIFAmN1BQFnCQD8BwQFBHRoaXMCD2NsYWltV3hJTlRFUk5BTAkAzAgCBQJhQgkAzAgCBQJhRAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCY3YFAmN2BAJkdgkAoggBCQECYmkCBQJiZQUCYUQEAmR0BQJkdgMJAAECBQJkdAIEVW5pdAkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJiYgEFAmFCBQNuaWwHAwkAAQIFAmR0AgZTdHJpbmcEAmR3BQJkdAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiYgEFAmFCBQJkdwUDbmlsBgkAAgECC01hdGNoIGVycm9yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILTWF0Y2ggZXJyb3IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY2wBDm9uTW9kaWZ5V2VpZ2h0AgJhdAJieAMJAQIhPQIIBQJjbAZjYWxsZXIFAmFYCQACAQIScGVybWlzc2lvbnMgZGVuaWVkBAJkeAkBAmJ3AwUCYXQFAmJ4AAAEAmJ1CAUCZHgCXzEEAmJXCAUCZHgCXzIEAmJYCAUCZHgCXzMFAmJXAQJkeQECZHoABAJkQQQBbgkBAmNoAAMJAAECBQFuAgpCeXRlVmVjdG9yBAJjbgUBbgUCY24DCQABAgUBbgIEVW5pdAgFAmR5D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJkeQlib2R5Qnl0ZXMJAJEDAggFAmR5BnByb29mcwAABQJkQc9gSPk=", "chainId": 84, "height": 2401539, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3s5i5VQ7FQoQWcBz3K5KM7jB35NAPaTcYBK6WnEgSoMY Next: 3ci8vhJ7Ka25hGXxocPCTygMu4fhUtmvUvP9kJH5ixqs Diff:
OldNewDifferences
444444 }
445445
446446
447+func co (cl,aB,cp,aD,cq,aT) = {
448+ let as = toString(aD)
449+ let at = toBase58String(aB)
450+ let bx = toString(cp)
451+ let bY = ar(as, at)
452+ let bz = au(at)
453+ let bs = az(bY)
454+ let bA = az(bz)
455+ let cr = bU(at, as, bx, -(aT))._2
456+ let be = bc(at)
457+ let cs = if (if (bj(be, as))
458+ then (aT == bs)
459+ else false)
460+ then bq(be, as)
461+ else nil
462+ let ct = D(this, av(at, as))
463+ let ce = bU(at, as, bx, 0)._1
464+ let cu = (ce - ct)
465+ let cv = if ((cu > g))
466+ then invoke(this, "claimWxINTERNAL", [at, as], nil)
467+ else unit
468+ if ((cv == cv))
469+ then if ((aT > bs))
470+ then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
471+ else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cq, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
472+ else throw("Strict value is not equal to itself.")
473+ }
474+
475+
447476 @Callable(cl)
448-func constructor (co) = {
449- let cp = cm(cl)
450- if ((cp == cp))
451- then [StringEntry(L(), co)]
477+func constructor (cw) = {
478+ let cx = cm(cl)
479+ if ((cx == cx))
480+ then [StringEntry(L(), cw)]
452481 else throw("Strict value is not equal to itself.")
453482 }
454483
455484
456485
457486 @Callable(cl)
458-func constructorV2 (cq) = {
459- let cr = [cm(cl), if ((addressFromString(cq) != unit))
487+func constructorV2 (cy) = {
488+ let cz = [cm(cl), if ((addressFromString(cy) != unit))
460489 then true
461490 else "invalid voting emission contract address"]
462- if ((cr == cr))
463- then [StringEntry(M(), cq)]
491+ if ((cz == cz))
492+ then [StringEntry(M(), cy)]
464493 else throw("Strict value is not equal to itself.")
465494 }
466495
467496
468497
469498 @Callable(cl)
470-func setManager (cs) = {
471- let cp = cm(cl)
472- if ((cp == cp))
499+func setManager (cA) = {
500+ let cx = cm(cl)
501+ if ((cx == cx))
473502 then {
474- let ct = fromBase58String(cs)
475- if ((ct == ct))
476- then [StringEntry(W(), cs)]
503+ let cB = fromBase58String(cA)
504+ if ((cB == cB))
505+ then [StringEntry(W(), cA)]
477506 else throw("Strict value is not equal to itself.")
478507 }
479508 else throw("Strict value is not equal to itself.")
483512
484513 @Callable(cl)
485514 func confirmManager () = {
486- let cu = ci()
487- let cv = if (isDefined(cu))
515+ let cC = ci()
516+ let cD = if (isDefined(cC))
488517 then true
489518 else throw("No pending manager")
490- if ((cv == cv))
519+ if ((cD == cD))
491520 then {
492- let cw = if ((cl.callerPublicKey == value(cu)))
521+ let cE = if ((cl.callerPublicKey == value(cC)))
493522 then true
494523 else throw("You are not pending manager")
495- if ((cw == cw))
496- then [StringEntry(V(), toBase58String(value(cu))), DeleteEntry(W())]
524+ if ((cE == cE))
525+ then [StringEntry(V(), toBase58String(value(cC))), DeleteEntry(W())]
497526 else throw("Strict value is not equal to itself.")
498527 }
499528 else throw("Strict value is not equal to itself.")
505534 func stake () = if ((size(cl.payments) != 1))
506535 then throw("invalid payment - exact one payment must be attached")
507536 else {
508- let cx = cl.payments[0]
509- let aB = value(cx.assetId)
537+ let cF = cl.payments[0]
538+ let aB = value(cF.assetId)
510539 let at = toBase58String(aB)
511- let aT = cx.amount
540+ let aT = cF.amount
512541 let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
513- let cy = toString(cl.caller)
514- let as = if ((cy == bx))
542+ let cG = toString(cl.caller)
543+ let as = if ((cG == bx))
515544 then toString(cl.originCaller)
516- else cy
545+ else cG
517546 let bY = ar(as, at)
518547 let bz = au(at)
519548 let bs = az(bY)
520549 let bA = az(bz)
521- let cz = bU(at, as, bx, aT)
522- let ce = cz._1
523- let cA = cz._2
524- let bT = cz._3
550+ let cH = bU(at, as, bx, aT)
551+ let ce = cH._1
552+ let cr = cH._2
553+ let bT = cH._3
525554 let be = bc(at)
526- let cB = if (bj(be, as))
555+ let cs = if (bj(be, as))
527556 then nil
528557 else bn(be, as)
529- (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cA) ++ cB)
558+ (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
530559 }
531560
532561
535564 func unstake (at,aT) = {
536565 let aB = fromBase58String(at)
537566 let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
538- let cC = valueOrElse(getString(addressFromStringValue(bx), Y()), bx)
539- let cy = toString(cl.caller)
540- let as = if (if ((cy == bx))
567+ let cp = addressFromStringValue(bx)
568+ let cI = valueOrElse(getString(cp, Y()), bx)
569+ let cG = toString(cl.caller)
570+ let aD = if (if ((cG == bx))
541571 then true
542- else (cy == cC))
543- then toString(cl.originCaller)
544- else cy
545- let bY = ar(as, at)
546- let bz = au(at)
547- let bs = az(bY)
548- let bA = az(bz)
549- let cA = bU(at, as, bx, -(aT))._2
550- let be = bc(at)
551- let cB = if (if (bj(be, as))
552- then (aT == bs)
553- else false)
554- then bq(be, as)
555- else nil
556- let cD = D(this, av(at, as))
557- let cE = y(aX, ac(at))
558- let ce = bU(at, as, cE, 0)._1
559- let cF = (ce - cD)
560- let cG = if ((cF > g))
561- then invoke(this, "claimWxINTERNAL", [at, as], nil)
562- else unit
563- if ((cG == cG))
564- then if ((aT > bs))
565- then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
566- else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cl.caller, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cA) ++ cB)
572+ else (cG == cI))
573+ then cl.originCaller
574+ else cl.caller
575+ let cq = cl.caller
576+ co(cl, aB, cp, aD, cq, aT)
577+ }
578+
579+
580+
581+@Callable(cl)
582+func unstakeINTERNAL (aB,aT,aD,cq) = {
583+ let at = toBase58String(aB)
584+ let cp = addressFromStringValue(valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at)))
585+ let cx = if ((cl.caller == cp))
586+ then true
587+ else cj
588+ if ((cx == cx))
589+ then co(cl, aB, cp, Address(aD), Address(cq), aT)
567590 else throw("Strict value is not equal to itself.")
568591 }
569592
572595 @Callable(cl)
573596 func claimWx (at) = {
574597 let as = toString(cl.caller)
575- let cH = invoke(this, "claimWxINTERNAL", [at, as], nil)
576- $Tuple2(nil, cH)
598+ let cJ = invoke(this, "claimWxINTERNAL", [at, as], nil)
599+ $Tuple2(nil, cJ)
577600 }
578601
579602
580603
581604 @Callable(cl)
582605 func claimWxINTERNAL (at,as) = {
583- let cp = ck(cl)
584- if ((cp == cp))
606+ let cx = ck(cl)
607+ if ((cx == cx))
585608 then {
586609 let aD = valueOrErrorMessage(addressFromString(as), "claimWxINTERNAL: invalid user address")
587610 let bx = y(aX, ac(at))
588- let cI = av(at, as)
589- let cJ = ay(at)
590- let cK = aw(at, as)
591- let cL = ax(at, as)
592- let cD = D(this, cI)
593- let cM = D(this, cK)
594- let cN = D(this, cL)
595- let cO = D(this, cJ)
596- let cP = bU(at, as, bx, 0)
597- let ce = cP._1
598- let cA = cP._2
599- let bT = cP._3
600- let cF = max([(ce - cD), g])
601- if ((g >= cF))
611+ let cK = av(at, as)
612+ let cL = ay(at)
613+ let cM = aw(at, as)
614+ let cN = ax(at, as)
615+ let ct = D(this, cK)
616+ let cO = D(this, cM)
617+ let cP = D(this, cN)
618+ let cQ = D(this, cL)
619+ let cR = bU(at, as, bx, 0)
620+ let ce = cR._1
621+ let cr = cR._2
622+ let bT = cR._3
623+ let cu = max([(ce - ct), g])
624+ if ((g >= cu))
602625 then throw("nothing to claim")
603626 else {
604- let cQ = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
605- let cR = cF
606- let cS = min([(cR * toBigInt(2)), toBigInt(cQ)])
607- let cT = (cR + cS)
608- let cU = t(l(invoke(aY, "emit", [toInt(cR)], nil))[0])
609- let cV = l(invoke(aY, "emit", [toInt(cS)], nil))
610- if ((cV == cV))
627+ let cS = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
628+ let cT = cu
629+ let cU = min([(cT * toBigInt(2)), toBigInt(cS)])
630+ let cV = (cT + cU)
631+ let cW = t(l(invoke(aY, "emit", [toInt(cT)], nil))[0])
632+ let cX = l(invoke(aY, "emit", [toInt(cU)], nil))
633+ if ((cX == cX))
611634 then {
612- let cW = (cD + cF)
613- let cX = (cM + cR)
614- let cY = (cM + cR)
615- let cZ = (cM + cR)
616- $Tuple2([StringEntry(cI, toString(cW)), StringEntry(cK, toString(cX)), StringEntry(cL, toString(cY)), StringEntry(cJ, toString(cZ)), ScriptTransfer(aD, toInt(cR), cU), ScriptTransfer(aD, toInt(cS), cU), aU("claim", as, at, toInt(cF), cl.transactionId)], toInt(cT))
635+ let cY = (ct + cu)
636+ let cZ = (cO + cT)
637+ let da = (cO + cT)
638+ let db = (cO + cT)
639+ $Tuple2([StringEntry(cK, toString(cY)), StringEntry(cM, toString(cZ)), StringEntry(cN, toString(da)), StringEntry(cL, toString(db)), ScriptTransfer(aD, toInt(cT), cW), ScriptTransfer(aD, toInt(cU), cW), aU("claim", as, at, toInt(cu), cl.transactionId)], toInt(cV))
617640 }
618641 else throw("Strict value is not equal to itself.")
619642 }
624647
625648
626649 @Callable(cl)
627-func claimWxBulkInternalREADONLY (da,db,as,dc) = if ((da == size(db)))
628- then $Tuple2(nil, dc)
650+func claimWxBulkInternalREADONLY (dc,dd,as,de) = if ((dc == size(dd)))
651+ then $Tuple2(nil, de)
629652 else {
630- let aB = db[da]
631- let dd = split({
632- let de = invoke(this, "claimWxREADONLY", [aB, as], nil)
633- if ($isInstanceOf(de, "String"))
634- then de
635- else throw(($getType(de) + " couldn't be cast to String"))
653+ let aB = dd[dc]
654+ let df = split({
655+ let dg = invoke(this, "claimWxREADONLY", [aB, as], nil)
656+ if ($isInstanceOf(dg, "String"))
657+ then dg
658+ else throw(($getType(dg) + " couldn't be cast to String"))
636659 }, e)
637- let df = dd[3]
638- let dg = dd[4]
639- let dh = (dc :+ makeString(["%d%d", df, dg], e))
640- let di = {
641- let de = invoke(this, "claimWxBulkInternalREADONLY", [(da + 1), db, as, dh], nil)
642- if ($isInstanceOf(de, "List[Any]"))
643- then de
644- else throw(($getType(de) + " couldn't be cast to List[Any]"))
660+ let dh = df[3]
661+ let di = df[4]
662+ let dj = (de :+ makeString(["%d%d", dh, di], e))
663+ let dk = {
664+ let dg = invoke(this, "claimWxBulkInternalREADONLY", [(dc + 1), dd, as, dj], nil)
665+ if ($isInstanceOf(dg, "List[Any]"))
666+ then dg
667+ else throw(($getType(dg) + " couldn't be cast to List[Any]"))
645668 }
646- if ((di == di))
647- then $Tuple2(nil, di)
669+ if ((dk == dk))
670+ then $Tuple2(nil, dk)
648671 else throw("Strict value is not equal to itself.")
649672 }
650673
651674
652675
653676 @Callable(cl)
654-func claimWxBulkREADONLY (db,as) = {
655- let dh = invoke(this, "claimWxBulkInternalREADONLY", [0, db, as, nil], nil)
656- $Tuple2(nil, dh)
677+func claimWxBulkREADONLY (dd,as) = {
678+ let dj = invoke(this, "claimWxBulkInternalREADONLY", [0, dd, as, nil], nil)
679+ $Tuple2(nil, dj)
657680 }
658681
659682
662685 func claimWxREADONLY (at,as) = {
663686 let bY = ar(as, at)
664687 let bz = au(at)
665- let cI = av(at, as)
688+ let cK = av(at, as)
666689 let bs = az(bY)
667690 let bA = az(bz)
668- let cD = D(this, cI)
691+ let ct = D(this, cK)
669692 let bx = y(aX, ac(at))
670693 let bC = getIntegerValue(aX, ad(bx))
671- let dj = C(aY, am())
694+ let dl = C(aY, am())
672695 let bD = C(aY, ao())
673- let dk = if ((bD > height))
696+ let dm = if ((bD > height))
674697 then 0
675698 else (height - bD)
676- let dl = fraction((dj * dk), bC, f)
677- let dm = fraction(dl, bs, bA)
678- let dn = bU(at, as, bx, 0)
679- let ce = dn._1
680- let cA = dn._2
681- let bT = dn._3
682- let cF = max([(ce - cD), g])
683- let do = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
684- let cQ = max([p(do[0]), 0])
685- let dp = r(do[1])
686- let cR = cF
687- let cS = min([(cR * toBigInt(2)), toBigInt(cQ)])
688- let cT = (cR + cS)
689- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cT), toString(cD), toString(cR), toString(cS), "soon"], e))
699+ let dn = fraction((dl * dm), bC, f)
700+ let do = fraction(dn, bs, bA)
701+ let dp = bU(at, as, bx, 0)
702+ let ce = dp._1
703+ let cr = dp._2
704+ let bT = dp._3
705+ let cu = max([(ce - ct), g])
706+ let dq = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
707+ let cS = max([p(dq[0]), 0])
708+ let dr = r(dq[1])
709+ let cT = cu
710+ let cU = min([(cT * toBigInt(2)), toBigInt(cS)])
711+ let cV = (cT + cU)
712+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cV), toString(ct), toString(cT), toString(cU), "soon"], e))
690713 }
691714
692715
701724
702725 @Callable(cl)
703726 func usersListTraversal (aB) = {
704- let cp = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
727+ let cx = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
705728 then true
706729 else cm(cl)
707- if ((cp == cp))
730+ if ((cx == cx))
708731 then {
709732 let be = bc(aB)
710- let dq = getString(bb(aB))
733+ let ds = getString(bb(aB))
711734 let bk = getString(bd(be))
712- let n = dq
735+ let n = ds
713736 if ($isInstanceOf(n, "Unit"))
714737 then {
715- let dr = bk
716- if ($isInstanceOf(dr, "Unit"))
738+ let dt = bk
739+ if ($isInstanceOf(dt, "Unit"))
717740 then $Tuple2(nil, false)
718- else if ($isInstanceOf(dr, "String"))
741+ else if ($isInstanceOf(dt, "String"))
719742 then {
720- let ds = dr
721- $Tuple2([StringEntry(bb(aB), ds)], true)
743+ let du = dt
744+ $Tuple2([StringEntry(bb(aB), du)], true)
722745 }
723746 else throw("Match error")
724747 }
725748 else if ($isInstanceOf(n, "String"))
726749 then {
727750 let aD = n
728- let cD = D(this, av(aB, aD))
729- let cE = y(aX, ac(aB))
730- let ce = bU(aB, aD, cE, 0)._1
731- let cF = (ce - cD)
732- let cG = if ((cF > g))
751+ let ct = D(this, av(aB, aD))
752+ let cp = y(aX, ac(aB))
753+ let ce = bU(aB, aD, cp, 0)._1
754+ let cu = (ce - ct)
755+ let cv = if ((cu > g))
733756 then invoke(this, "claimWxINTERNAL", [aB, aD], nil)
734757 else unit
735- if ((cG == cG))
758+ if ((cv == cv))
736759 then {
737- let dt = getString(bi(be, aD))
738- let dr = dt
739- if ($isInstanceOf(dr, "Unit"))
760+ let dv = getString(bi(be, aD))
761+ let dt = dv
762+ if ($isInstanceOf(dt, "Unit"))
740763 then $Tuple2([DeleteEntry(bb(aB))], false)
741- else if ($isInstanceOf(dr, "String"))
764+ else if ($isInstanceOf(dt, "String"))
742765 then {
743- let du = dr
744- $Tuple2([StringEntry(bb(aB), du)], true)
766+ let dw = dt
767+ $Tuple2([StringEntry(bb(aB), dw)], true)
745768 }
746769 else throw("Match error")
747770 }
758781 func onModifyWeight (at,bx) = if ((cl.caller != aX))
759782 then throw("permissions denied")
760783 else {
761- let dv = bw(at, bx, 0)
762- let bu = dv._1
763- let bW = dv._2
764- let bX = dv._3
784+ let dx = bw(at, bx, 0)
785+ let bu = dx._1
786+ let bW = dx._2
787+ let bX = dx._3
765788 bW
766789 }
767790
768791
769-@Verifier(dw)
770-func dx () = {
771- let dy = {
792+@Verifier(dy)
793+func dz () = {
794+ let dA = {
772795 let n = ch()
773796 if ($isInstanceOf(n, "ByteVector"))
774797 then {
776799 cn
777800 }
778801 else if ($isInstanceOf(n, "Unit"))
779- then dw.senderPublicKey
802+ then dy.senderPublicKey
780803 else throw("Match error")
781804 }
782- sigVerify(dw.bodyBytes, dw.proofs[0], dy)
805+ sigVerify(dy.bodyBytes, dy.proofs[0], dA)
783806 }
784807
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = 18
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = "__"
1313
1414 let f = b
1515
1616 let g = toBigInt(0)
1717
1818 let h = toBigInt(1)
1919
2020 func i (j) = makeString(["staking.ride:", toString(this), j], " ")
2121
2222
2323 func k (j) = throw(i(j))
2424
2525
2626 func l (m) = {
2727 let n = m
2828 if ($isInstanceOf(n, "List[Any]"))
2929 then {
3030 let o = n
3131 o
3232 }
3333 else throw("fail to cast into List[Any]")
3434 }
3535
3636
3737 func p (m) = {
3838 let n = m
3939 if ($isInstanceOf(n, "Int"))
4040 then {
4141 let q = n
4242 q
4343 }
4444 else throw("fail to cast into Int")
4545 }
4646
4747
4848 func r (m) = {
4949 let n = m
5050 if ($isInstanceOf(n, "String"))
5151 then {
5252 let s = n
5353 s
5454 }
5555 else throw("fail to cast into Int")
5656 }
5757
5858
5959 func t (m) = {
6060 let n = m
6161 if ($isInstanceOf(n, "ByteVector"))
6262 then {
6363 let u = n
6464 u
6565 }
6666 else throw("fail to cast into Int")
6767 }
6868
6969
7070 func v (w,x) = valueOrErrorMessage(getString(w, x), (("mandatory this." + x) + " is not defined"))
7171
7272
7373 func y (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
7474
7575
7676 func z (w,x) = valueOrElse(getInteger(w, x), 0)
7777
7878
7979 func A (w,x,B) = valueOrElse(getInteger(w, x), B)
8080
8181
8282 func C (w,x) = valueOrErrorMessage(getInteger(w, x), (("mandatory this." + x) + " is not defined"))
8383
8484
8585 func D (w,x) = value(parseBigInt(valueOrElse(getString(w, x), "0")))
8686
8787
8888 func E (w,x,B) = {
8989 let n = getString(w, x)
9090 if ($isInstanceOf(n, "String"))
9191 then {
9292 let F = n
9393 value(parseBigInt(F))
9494 }
9595 else if ($isInstanceOf(n, "Unit"))
9696 then B
9797 else throw("Match error")
9898 }
9999
100100
101101 func G (H,I) = fraction(toBigInt(H), d, toBigInt(I))
102102
103103
104104 func J (m,K) = toInt(fraction(m, toBigInt(K), d))
105105
106106
107107 func L () = "%s%s__config__factoryAddress"
108108
109109
110110 func M () = "%s__votingEmissionContract"
111111
112112
113113 let N = 1
114114
115115 let O = 2
116116
117117 let P = 3
118118
119119 let Q = 4
120120
121121 let R = 5
122122
123123 let S = 6
124124
125125 let T = 7
126126
127127 func U () = "%s__factoryConfig"
128128
129129
130130 func V () = "%s__managerPublicKey"
131131
132132
133133 func W () = "%s__pendingManagerPublicKey"
134134
135135
136136 func X () = "%s__stablePoolAddonAddr"
137137
138138
139139 func Y () = "%s__addonAddr"
140140
141141
142142 func Z (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
143143
144144
145145 func ab () = "%s__lpTokensList"
146146
147147
148148 func ac (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
149149
150150
151151 func ad (ae) = makeString(["%s%s", "poolWeight", ae], e)
152152
153153
154154 func af (ag) = split(valueOrElse(getString(ag, ab()), ""), e)
155155
156156
157157 func ah (ag) = split(y(ag, U()), e)
158158
159159
160160 func ai (aj) = addressFromStringValue(aj[O])
161161
162162
163163 func ak (aj) = addressFromStringValue(aj[R])
164164
165165
166166 func al (aj) = addressFromStringValue(aj[N])
167167
168168
169169 func am () = "%s%s__ratePerBlock__current"
170170
171171
172172 func an () = "%s%s__ratePerBlockMax__current"
173173
174174
175175 func ao () = "%s%s__emission__startBlock"
176176
177177
178178 func ap () = "%s%s__emission__duration"
179179
180180
181181 func aq () = "%s%s__emission__endBlock"
182182
183183
184184 func ar (as,at) = makeString(["%s%s%s__staked", as, at], e)
185185
186186
187187 func au (at) = ("%s%s%s__staked__total__" + at)
188188
189189
190190 func av (at,as) = makeString(["%s%s%s__claimed", as, at], e)
191191
192192
193193 func aw (at,as) = makeString(["%s%s%s__claimedMinReward", as, at], e)
194194
195195
196196 func ax (at,as) = makeString(["%s%s%s__claimedBoostReward", as, at], e)
197197
198198
199199 func ay (at) = makeString(["%s%s%s__claimed__total", at], e)
200200
201201
202202 func az (x) = valueOrElse(getInteger(this, x), 0)
203203
204204
205205 func aA (aB) = makeString(["%s%s%s", aB, "total", "bal"], e)
206206
207207
208208 func aC (aB,aD) = makeString(["%s%s%s", aB, aD, "bal"], e)
209209
210210
211211 func aE (aB) = makeString(["%s%s%s", aB, "total", "balINT"], e)
212212
213213
214214 func aF (aB,aD) = makeString(["%s%s%s", aB, aD, "balINT"], e)
215215
216216
217217 func aG (aB) = makeString(["%s%s%s", aB, "total", "lastUpd"], e)
218218
219219
220220 func aH (aB,aD) = makeString(["%s%s%s", aB, aD, "lastUpd"], e)
221221
222222
223223 func aI (aB) = makeString(["%s%s%s%s", aB, "common", "lpInt"], e)
224224
225225
226226 func aJ (aB) = makeString(["%s%s%s%s", aB, "common", "lpIntH"], e)
227227
228228
229229 func aK (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpInt"], e)
230230
231231
232232 func aL (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpIntH"], e)
233233
234234
235235 func aM (aB) = makeString(["%s", aB, "wxPerLp"], e)
236236
237237
238238 func aN (aB) = makeString(["%s", aB, "wxPerLpX18"], e)
239239
240240
241241 func aO (aB,aD) = makeString(["%s%s%s%s", aB, aD, "uIntL"], e)
242242
243243
244244 func aP (aQ,aD,aR) = makeString(["%s%s%s%s__history", aQ, aD, aR], e)
245245
246246
247247 func aS (aD,aB,aQ,aT) = makeString(["%s%s%s%d%d%d", aD, aB, aQ, toString(height), toString(lastBlock.timestamp), toString(aT)], e)
248248
249249
250250 func aU (aQ,aD,aB,aT,aV) = StringEntry(aP(aQ, aD, toBase58String(aV)), aS(aD, aB, aQ, aT))
251251
252252
253253 let aW = v(this, L())
254254
255255 let aX = addressFromStringValue(aW)
256256
257257 let aj = ah(aX)
258258
259259 let aY = ak(aj)
260260
261261 let aZ = ai(aj)
262262
263263 let ba = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], e)), i("lp_staking_pools contract address is undefined"))), i("invalid lp_staking_pools contract address"))
264264
265265 func bb (aB) = makeString(["%s%s", aB, "nextUser"], e)
266266
267267
268268 func bc (aB) = makeString(["users", aB], e)
269269
270270
271271 func bd (be) = makeString(["%s%s%s", be, "head"], e)
272272
273273
274274 func bf (be) = makeString(["%s%s%s", be, "size"], e)
275275
276276
277277 func bg (be,bh) = makeString(["%s%s%s%s", be, bh, "prev"], e)
278278
279279
280280 func bi (be,bh) = makeString(["%s%s%s%s", be, bh, "next"], e)
281281
282282
283283 func bj (be,bh) = {
284284 let bk = getString(this, bd(be))
285285 let bl = getString(this, bg(be, bh))
286286 let bm = getString(this, bi(be, bh))
287287 if (if ((bh == valueOrElse(bk, "")))
288288 then true
289289 else (bl != unit))
290290 then true
291291 else (bm != unit)
292292 }
293293
294294
295295 func bn (be,bh) = {
296296 let bk = getString(this, bd(be))
297297 let bo = valueOrElse(getInteger(this, bf(be)), 0)
298298 let bp = if (!(bj(be, bh)))
299299 then true
300300 else throw("Node exists")
301301 if ((bp == bp))
302302 then (([IntegerEntry(bf(be), (bo + 1))] ++ (if ((bk != unit))
303303 then [StringEntry(bi(be, bh), value(bk)), StringEntry(bg(be, value(bk)), bh)]
304304 else nil)) ++ [StringEntry(bd(be), bh)])
305305 else throw("Strict value is not equal to itself.")
306306 }
307307
308308
309309 func bq (be,bh) = {
310310 let bk = getString(this, bd(be))
311311 let bo = valueOrElse(getInteger(this, bf(be)), 0)
312312 let bl = getString(this, bg(be, bh))
313313 let bm = getString(this, bi(be, bh))
314314 ([IntegerEntry(bf(be), (bo - 1))] ++ (if (if ((bl != unit))
315315 then (bm != unit)
316316 else false)
317317 then [StringEntry(bi(be, value(bl)), value(bm)), StringEntry(bg(be, value(bm)), value(bl)), DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, bh))]
318318 else if ((bm != unit))
319319 then [StringEntry(bd(be), value(bm)), DeleteEntry(bi(be, bh)), DeleteEntry(bg(be, value(bm)))]
320320 else if ((bl != unit))
321321 then [DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, value(bl)))]
322322 else if ((bh == valueOrElse(bk, "")))
323323 then [DeleteEntry(bd(be))]
324324 else throw(((("invalid node: " + be) + ".") + bh))))
325325 }
326326
327327
328328 func br (bs,bt,bu,bv) = if (if ((bt == g))
329329 then (bs > g)
330330 else false)
331331 then g
332332 else if ((bs == g))
333333 then bu
334334 else if (if ((bt > g))
335335 then (bs > g)
336336 else false)
337337 then value(parseBigInt(v(this, bv)))
338338 else throw("calcWxPerLpIntegralUserLast: unexpected state")
339339
340340
341341 func bw (at,bx,by) = {
342342 let bz = au(at)
343343 let bA = toBigInt(az(bz))
344344 let bB = if ((bA == g))
345345 then h
346346 else bA
347347 let bC = getIntegerValue(aX, ad(bx))
348348 let bD = C(aY, ao())
349349 let bE = 1000
350350 let bF = (C(aY, am()) * bE)
351351 let bG = fraction(bF, bC, (f * 3))
352352 let bH = aI(at)
353353 let bI = aJ(at)
354354 let bJ = aM(at)
355355 let bK = A(this, bI, bD)
356356 let bL = D(this, bH)
357357 let bM = 0
358358 let bN = max([(height - bK), 0])
359359 let bO = if ((bM != 0))
360360 then toBigInt(bM)
361361 else fraction(toBigInt(bG), toBigInt(b), bB)
362362 let bP = (bA + toBigInt(by))
363363 let bQ = if ((bP == g))
364364 then h
365365 else bP
366366 let bu = (bL + (bO * toBigInt(bN)))
367367 let bR = (toBigInt(bG) / bQ)
368368 let bS = height
369369 let bT = makeString([toString(bu), toString(bN), toString(bO), toString(bA), toString(bG), toString(bF), toString(bC)], "::")
370370 $Tuple3(bu, [StringEntry(bH, toString(bu)), IntegerEntry(bI, bS), StringEntry(bJ, toString(bR))], bT)
371371 }
372372
373373
374374 func bU (at,as,bx,by) = {
375375 let bV = bw(at, bx, by)
376376 let bu = bV._1
377377 let bW = bV._2
378378 let bX = bV._3
379379 let bE = 1000
380380 let bY = ar(as, at)
381381 let bs = az(bY)
382382 let bZ = aK(at, as)
383383 let ca = aL(at, as)
384384 let bv = aO(at, as)
385385 let cb = D(this, bZ)
386386 let bt = z(this, ca)
387387 let cc = br(toBigInt(bs), toBigInt(bt), bu, bv)
388388 let cd = (b * bE)
389389 let ce = max([(cb + fraction((bu - cc), toBigInt(bs), toBigInt(cd))), g])
390390 let cf = bu
391391 let cg = height
392392 let bT = makeString([toString(cb), toString(cc), toString(bs), bX, toString(height)], "::")
393393 $Tuple3(ce, (bW ++ [StringEntry(bZ, toString(ce)), IntegerEntry(ca, cg), StringEntry(bv, toString(cf))]), bT)
394394 }
395395
396396
397397 func ch () = {
398398 let n = getString(V())
399399 if ($isInstanceOf(n, "String"))
400400 then {
401401 let F = n
402402 fromBase58String(F)
403403 }
404404 else if ($isInstanceOf(n, "Unit"))
405405 then unit
406406 else throw("Match error")
407407 }
408408
409409
410410 func ci () = {
411411 let n = getString(W())
412412 if ($isInstanceOf(n, "String"))
413413 then {
414414 let F = n
415415 fromBase58String(F)
416416 }
417417 else if ($isInstanceOf(n, "Unit"))
418418 then unit
419419 else throw("Match error")
420420 }
421421
422422
423423 let cj = throw("Permission denied")
424424
425425 func ck (cl) = if ((cl.caller == this))
426426 then true
427427 else cj
428428
429429
430430 func cm (cl) = {
431431 let n = ch()
432432 if ($isInstanceOf(n, "ByteVector"))
433433 then {
434434 let cn = n
435435 if ((cl.callerPublicKey == cn))
436436 then true
437437 else cj
438438 }
439439 else if ($isInstanceOf(n, "Unit"))
440440 then if ((cl.caller == this))
441441 then true
442442 else cj
443443 else throw("Match error")
444444 }
445445
446446
447+func co (cl,aB,cp,aD,cq,aT) = {
448+ let as = toString(aD)
449+ let at = toBase58String(aB)
450+ let bx = toString(cp)
451+ let bY = ar(as, at)
452+ let bz = au(at)
453+ let bs = az(bY)
454+ let bA = az(bz)
455+ let cr = bU(at, as, bx, -(aT))._2
456+ let be = bc(at)
457+ let cs = if (if (bj(be, as))
458+ then (aT == bs)
459+ else false)
460+ then bq(be, as)
461+ else nil
462+ let ct = D(this, av(at, as))
463+ let ce = bU(at, as, bx, 0)._1
464+ let cu = (ce - ct)
465+ let cv = if ((cu > g))
466+ then invoke(this, "claimWxINTERNAL", [at, as], nil)
467+ else unit
468+ if ((cv == cv))
469+ then if ((aT > bs))
470+ then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
471+ else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cq, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
472+ else throw("Strict value is not equal to itself.")
473+ }
474+
475+
447476 @Callable(cl)
448-func constructor (co) = {
449- let cp = cm(cl)
450- if ((cp == cp))
451- then [StringEntry(L(), co)]
477+func constructor (cw) = {
478+ let cx = cm(cl)
479+ if ((cx == cx))
480+ then [StringEntry(L(), cw)]
452481 else throw("Strict value is not equal to itself.")
453482 }
454483
455484
456485
457486 @Callable(cl)
458-func constructorV2 (cq) = {
459- let cr = [cm(cl), if ((addressFromString(cq) != unit))
487+func constructorV2 (cy) = {
488+ let cz = [cm(cl), if ((addressFromString(cy) != unit))
460489 then true
461490 else "invalid voting emission contract address"]
462- if ((cr == cr))
463- then [StringEntry(M(), cq)]
491+ if ((cz == cz))
492+ then [StringEntry(M(), cy)]
464493 else throw("Strict value is not equal to itself.")
465494 }
466495
467496
468497
469498 @Callable(cl)
470-func setManager (cs) = {
471- let cp = cm(cl)
472- if ((cp == cp))
499+func setManager (cA) = {
500+ let cx = cm(cl)
501+ if ((cx == cx))
473502 then {
474- let ct = fromBase58String(cs)
475- if ((ct == ct))
476- then [StringEntry(W(), cs)]
503+ let cB = fromBase58String(cA)
504+ if ((cB == cB))
505+ then [StringEntry(W(), cA)]
477506 else throw("Strict value is not equal to itself.")
478507 }
479508 else throw("Strict value is not equal to itself.")
480509 }
481510
482511
483512
484513 @Callable(cl)
485514 func confirmManager () = {
486- let cu = ci()
487- let cv = if (isDefined(cu))
515+ let cC = ci()
516+ let cD = if (isDefined(cC))
488517 then true
489518 else throw("No pending manager")
490- if ((cv == cv))
519+ if ((cD == cD))
491520 then {
492- let cw = if ((cl.callerPublicKey == value(cu)))
521+ let cE = if ((cl.callerPublicKey == value(cC)))
493522 then true
494523 else throw("You are not pending manager")
495- if ((cw == cw))
496- then [StringEntry(V(), toBase58String(value(cu))), DeleteEntry(W())]
524+ if ((cE == cE))
525+ then [StringEntry(V(), toBase58String(value(cC))), DeleteEntry(W())]
497526 else throw("Strict value is not equal to itself.")
498527 }
499528 else throw("Strict value is not equal to itself.")
500529 }
501530
502531
503532
504533 @Callable(cl)
505534 func stake () = if ((size(cl.payments) != 1))
506535 then throw("invalid payment - exact one payment must be attached")
507536 else {
508- let cx = cl.payments[0]
509- let aB = value(cx.assetId)
537+ let cF = cl.payments[0]
538+ let aB = value(cF.assetId)
510539 let at = toBase58String(aB)
511- let aT = cx.amount
540+ let aT = cF.amount
512541 let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
513- let cy = toString(cl.caller)
514- let as = if ((cy == bx))
542+ let cG = toString(cl.caller)
543+ let as = if ((cG == bx))
515544 then toString(cl.originCaller)
516- else cy
545+ else cG
517546 let bY = ar(as, at)
518547 let bz = au(at)
519548 let bs = az(bY)
520549 let bA = az(bz)
521- let cz = bU(at, as, bx, aT)
522- let ce = cz._1
523- let cA = cz._2
524- let bT = cz._3
550+ let cH = bU(at, as, bx, aT)
551+ let ce = cH._1
552+ let cr = cH._2
553+ let bT = cH._3
525554 let be = bc(at)
526- let cB = if (bj(be, as))
555+ let cs = if (bj(be, as))
527556 then nil
528557 else bn(be, as)
529- (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cA) ++ cB)
558+ (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
530559 }
531560
532561
533562
534563 @Callable(cl)
535564 func unstake (at,aT) = {
536565 let aB = fromBase58String(at)
537566 let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
538- let cC = valueOrElse(getString(addressFromStringValue(bx), Y()), bx)
539- let cy = toString(cl.caller)
540- let as = if (if ((cy == bx))
567+ let cp = addressFromStringValue(bx)
568+ let cI = valueOrElse(getString(cp, Y()), bx)
569+ let cG = toString(cl.caller)
570+ let aD = if (if ((cG == bx))
541571 then true
542- else (cy == cC))
543- then toString(cl.originCaller)
544- else cy
545- let bY = ar(as, at)
546- let bz = au(at)
547- let bs = az(bY)
548- let bA = az(bz)
549- let cA = bU(at, as, bx, -(aT))._2
550- let be = bc(at)
551- let cB = if (if (bj(be, as))
552- then (aT == bs)
553- else false)
554- then bq(be, as)
555- else nil
556- let cD = D(this, av(at, as))
557- let cE = y(aX, ac(at))
558- let ce = bU(at, as, cE, 0)._1
559- let cF = (ce - cD)
560- let cG = if ((cF > g))
561- then invoke(this, "claimWxINTERNAL", [at, as], nil)
562- else unit
563- if ((cG == cG))
564- then if ((aT > bs))
565- then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
566- else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cl.caller, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cA) ++ cB)
572+ else (cG == cI))
573+ then cl.originCaller
574+ else cl.caller
575+ let cq = cl.caller
576+ co(cl, aB, cp, aD, cq, aT)
577+ }
578+
579+
580+
581+@Callable(cl)
582+func unstakeINTERNAL (aB,aT,aD,cq) = {
583+ let at = toBase58String(aB)
584+ let cp = addressFromStringValue(valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at)))
585+ let cx = if ((cl.caller == cp))
586+ then true
587+ else cj
588+ if ((cx == cx))
589+ then co(cl, aB, cp, Address(aD), Address(cq), aT)
567590 else throw("Strict value is not equal to itself.")
568591 }
569592
570593
571594
572595 @Callable(cl)
573596 func claimWx (at) = {
574597 let as = toString(cl.caller)
575- let cH = invoke(this, "claimWxINTERNAL", [at, as], nil)
576- $Tuple2(nil, cH)
598+ let cJ = invoke(this, "claimWxINTERNAL", [at, as], nil)
599+ $Tuple2(nil, cJ)
577600 }
578601
579602
580603
581604 @Callable(cl)
582605 func claimWxINTERNAL (at,as) = {
583- let cp = ck(cl)
584- if ((cp == cp))
606+ let cx = ck(cl)
607+ if ((cx == cx))
585608 then {
586609 let aD = valueOrErrorMessage(addressFromString(as), "claimWxINTERNAL: invalid user address")
587610 let bx = y(aX, ac(at))
588- let cI = av(at, as)
589- let cJ = ay(at)
590- let cK = aw(at, as)
591- let cL = ax(at, as)
592- let cD = D(this, cI)
593- let cM = D(this, cK)
594- let cN = D(this, cL)
595- let cO = D(this, cJ)
596- let cP = bU(at, as, bx, 0)
597- let ce = cP._1
598- let cA = cP._2
599- let bT = cP._3
600- let cF = max([(ce - cD), g])
601- if ((g >= cF))
611+ let cK = av(at, as)
612+ let cL = ay(at)
613+ let cM = aw(at, as)
614+ let cN = ax(at, as)
615+ let ct = D(this, cK)
616+ let cO = D(this, cM)
617+ let cP = D(this, cN)
618+ let cQ = D(this, cL)
619+ let cR = bU(at, as, bx, 0)
620+ let ce = cR._1
621+ let cr = cR._2
622+ let bT = cR._3
623+ let cu = max([(ce - ct), g])
624+ if ((g >= cu))
602625 then throw("nothing to claim")
603626 else {
604- let cQ = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
605- let cR = cF
606- let cS = min([(cR * toBigInt(2)), toBigInt(cQ)])
607- let cT = (cR + cS)
608- let cU = t(l(invoke(aY, "emit", [toInt(cR)], nil))[0])
609- let cV = l(invoke(aY, "emit", [toInt(cS)], nil))
610- if ((cV == cV))
627+ let cS = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
628+ let cT = cu
629+ let cU = min([(cT * toBigInt(2)), toBigInt(cS)])
630+ let cV = (cT + cU)
631+ let cW = t(l(invoke(aY, "emit", [toInt(cT)], nil))[0])
632+ let cX = l(invoke(aY, "emit", [toInt(cU)], nil))
633+ if ((cX == cX))
611634 then {
612- let cW = (cD + cF)
613- let cX = (cM + cR)
614- let cY = (cM + cR)
615- let cZ = (cM + cR)
616- $Tuple2([StringEntry(cI, toString(cW)), StringEntry(cK, toString(cX)), StringEntry(cL, toString(cY)), StringEntry(cJ, toString(cZ)), ScriptTransfer(aD, toInt(cR), cU), ScriptTransfer(aD, toInt(cS), cU), aU("claim", as, at, toInt(cF), cl.transactionId)], toInt(cT))
635+ let cY = (ct + cu)
636+ let cZ = (cO + cT)
637+ let da = (cO + cT)
638+ let db = (cO + cT)
639+ $Tuple2([StringEntry(cK, toString(cY)), StringEntry(cM, toString(cZ)), StringEntry(cN, toString(da)), StringEntry(cL, toString(db)), ScriptTransfer(aD, toInt(cT), cW), ScriptTransfer(aD, toInt(cU), cW), aU("claim", as, at, toInt(cu), cl.transactionId)], toInt(cV))
617640 }
618641 else throw("Strict value is not equal to itself.")
619642 }
620643 }
621644 else throw("Strict value is not equal to itself.")
622645 }
623646
624647
625648
626649 @Callable(cl)
627-func claimWxBulkInternalREADONLY (da,db,as,dc) = if ((da == size(db)))
628- then $Tuple2(nil, dc)
650+func claimWxBulkInternalREADONLY (dc,dd,as,de) = if ((dc == size(dd)))
651+ then $Tuple2(nil, de)
629652 else {
630- let aB = db[da]
631- let dd = split({
632- let de = invoke(this, "claimWxREADONLY", [aB, as], nil)
633- if ($isInstanceOf(de, "String"))
634- then de
635- else throw(($getType(de) + " couldn't be cast to String"))
653+ let aB = dd[dc]
654+ let df = split({
655+ let dg = invoke(this, "claimWxREADONLY", [aB, as], nil)
656+ if ($isInstanceOf(dg, "String"))
657+ then dg
658+ else throw(($getType(dg) + " couldn't be cast to String"))
636659 }, e)
637- let df = dd[3]
638- let dg = dd[4]
639- let dh = (dc :+ makeString(["%d%d", df, dg], e))
640- let di = {
641- let de = invoke(this, "claimWxBulkInternalREADONLY", [(da + 1), db, as, dh], nil)
642- if ($isInstanceOf(de, "List[Any]"))
643- then de
644- else throw(($getType(de) + " couldn't be cast to List[Any]"))
660+ let dh = df[3]
661+ let di = df[4]
662+ let dj = (de :+ makeString(["%d%d", dh, di], e))
663+ let dk = {
664+ let dg = invoke(this, "claimWxBulkInternalREADONLY", [(dc + 1), dd, as, dj], nil)
665+ if ($isInstanceOf(dg, "List[Any]"))
666+ then dg
667+ else throw(($getType(dg) + " couldn't be cast to List[Any]"))
645668 }
646- if ((di == di))
647- then $Tuple2(nil, di)
669+ if ((dk == dk))
670+ then $Tuple2(nil, dk)
648671 else throw("Strict value is not equal to itself.")
649672 }
650673
651674
652675
653676 @Callable(cl)
654-func claimWxBulkREADONLY (db,as) = {
655- let dh = invoke(this, "claimWxBulkInternalREADONLY", [0, db, as, nil], nil)
656- $Tuple2(nil, dh)
677+func claimWxBulkREADONLY (dd,as) = {
678+ let dj = invoke(this, "claimWxBulkInternalREADONLY", [0, dd, as, nil], nil)
679+ $Tuple2(nil, dj)
657680 }
658681
659682
660683
661684 @Callable(cl)
662685 func claimWxREADONLY (at,as) = {
663686 let bY = ar(as, at)
664687 let bz = au(at)
665- let cI = av(at, as)
688+ let cK = av(at, as)
666689 let bs = az(bY)
667690 let bA = az(bz)
668- let cD = D(this, cI)
691+ let ct = D(this, cK)
669692 let bx = y(aX, ac(at))
670693 let bC = getIntegerValue(aX, ad(bx))
671- let dj = C(aY, am())
694+ let dl = C(aY, am())
672695 let bD = C(aY, ao())
673- let dk = if ((bD > height))
696+ let dm = if ((bD > height))
674697 then 0
675698 else (height - bD)
676- let dl = fraction((dj * dk), bC, f)
677- let dm = fraction(dl, bs, bA)
678- let dn = bU(at, as, bx, 0)
679- let ce = dn._1
680- let cA = dn._2
681- let bT = dn._3
682- let cF = max([(ce - cD), g])
683- let do = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
684- let cQ = max([p(do[0]), 0])
685- let dp = r(do[1])
686- let cR = cF
687- let cS = min([(cR * toBigInt(2)), toBigInt(cQ)])
688- let cT = (cR + cS)
689- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cT), toString(cD), toString(cR), toString(cS), "soon"], e))
699+ let dn = fraction((dl * dm), bC, f)
700+ let do = fraction(dn, bs, bA)
701+ let dp = bU(at, as, bx, 0)
702+ let ce = dp._1
703+ let cr = dp._2
704+ let bT = dp._3
705+ let cu = max([(ce - ct), g])
706+ let dq = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
707+ let cS = max([p(dq[0]), 0])
708+ let dr = r(dq[1])
709+ let cT = cu
710+ let cU = min([(cT * toBigInt(2)), toBigInt(cS)])
711+ let cV = (cT + cU)
712+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cV), toString(ct), toString(cT), toString(cU), "soon"], e))
690713 }
691714
692715
693716
694717 @Callable(cl)
695718 func stakedByUserREADONLY (at,as) = {
696719 let bs = valueOrElse(getInteger(ar(as, at)), 0)
697720 $Tuple2(nil, bs)
698721 }
699722
700723
701724
702725 @Callable(cl)
703726 func usersListTraversal (aB) = {
704- let cp = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
727+ let cx = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
705728 then true
706729 else cm(cl)
707- if ((cp == cp))
730+ if ((cx == cx))
708731 then {
709732 let be = bc(aB)
710- let dq = getString(bb(aB))
733+ let ds = getString(bb(aB))
711734 let bk = getString(bd(be))
712- let n = dq
735+ let n = ds
713736 if ($isInstanceOf(n, "Unit"))
714737 then {
715- let dr = bk
716- if ($isInstanceOf(dr, "Unit"))
738+ let dt = bk
739+ if ($isInstanceOf(dt, "Unit"))
717740 then $Tuple2(nil, false)
718- else if ($isInstanceOf(dr, "String"))
741+ else if ($isInstanceOf(dt, "String"))
719742 then {
720- let ds = dr
721- $Tuple2([StringEntry(bb(aB), ds)], true)
743+ let du = dt
744+ $Tuple2([StringEntry(bb(aB), du)], true)
722745 }
723746 else throw("Match error")
724747 }
725748 else if ($isInstanceOf(n, "String"))
726749 then {
727750 let aD = n
728- let cD = D(this, av(aB, aD))
729- let cE = y(aX, ac(aB))
730- let ce = bU(aB, aD, cE, 0)._1
731- let cF = (ce - cD)
732- let cG = if ((cF > g))
751+ let ct = D(this, av(aB, aD))
752+ let cp = y(aX, ac(aB))
753+ let ce = bU(aB, aD, cp, 0)._1
754+ let cu = (ce - ct)
755+ let cv = if ((cu > g))
733756 then invoke(this, "claimWxINTERNAL", [aB, aD], nil)
734757 else unit
735- if ((cG == cG))
758+ if ((cv == cv))
736759 then {
737- let dt = getString(bi(be, aD))
738- let dr = dt
739- if ($isInstanceOf(dr, "Unit"))
760+ let dv = getString(bi(be, aD))
761+ let dt = dv
762+ if ($isInstanceOf(dt, "Unit"))
740763 then $Tuple2([DeleteEntry(bb(aB))], false)
741- else if ($isInstanceOf(dr, "String"))
764+ else if ($isInstanceOf(dt, "String"))
742765 then {
743- let du = dr
744- $Tuple2([StringEntry(bb(aB), du)], true)
766+ let dw = dt
767+ $Tuple2([StringEntry(bb(aB), dw)], true)
745768 }
746769 else throw("Match error")
747770 }
748771 else throw("Strict value is not equal to itself.")
749772 }
750773 else throw("Match error")
751774 }
752775 else throw("Strict value is not equal to itself.")
753776 }
754777
755778
756779
757780 @Callable(cl)
758781 func onModifyWeight (at,bx) = if ((cl.caller != aX))
759782 then throw("permissions denied")
760783 else {
761- let dv = bw(at, bx, 0)
762- let bu = dv._1
763- let bW = dv._2
764- let bX = dv._3
784+ let dx = bw(at, bx, 0)
785+ let bu = dx._1
786+ let bW = dx._2
787+ let bX = dx._3
765788 bW
766789 }
767790
768791
769-@Verifier(dw)
770-func dx () = {
771- let dy = {
792+@Verifier(dy)
793+func dz () = {
794+ let dA = {
772795 let n = ch()
773796 if ($isInstanceOf(n, "ByteVector"))
774797 then {
775798 let cn = n
776799 cn
777800 }
778801 else if ($isInstanceOf(n, "Unit"))
779- then dw.senderPublicKey
802+ then dy.senderPublicKey
780803 else throw("Match error")
781804 }
782- sigVerify(dw.bodyBytes, dw.proofs[0], dy)
805+ sigVerify(dy.bodyBytes, dy.proofs[0], dA)
783806 }
784807

github/deemru/w8io/873ac7e 
138.58 ms