tx · FH5qLZBcg2o841kKDdkAAxR5mfB2hPzjsJDgKfM8Jynk 3N1xHtFLmVxy153ELFALTEt3HuVXvv4rnqb: -0.02800000 Waves 2022.10.13 18:28 [2270765] smart account 3N1xHtFLmVxy153ELFALTEt3HuVXvv4rnqb > SELF 0.00000000 Waves
{ "type": 13, "id": "FH5qLZBcg2o841kKDdkAAxR5mfB2hPzjsJDgKfM8Jynk", "fee": 2800000, "feeAssetId": null, "timestamp": 1665674963989, "version": 1, "sender": "3N1xHtFLmVxy153ELFALTEt3HuVXvv4rnqb", "senderPublicKey": "FbottDhjAqYmSxiGz2jbuu6xQEvdqZoV43vksDrkTTgb", "proofs": [ "4h1TER4oVDLApKzi4999Lz4sNPyQfscH4ETw2JQxgkHYrzkQene5svBFuaLUdCspJQua42osrihjTi6TxWvPphfv" ], "script": "base64:BgLkJQgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgUKAwgBARIAEgQKAgEBEgMKAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIgphbXRBc3NldElkIgxwcmljZUFzc2V0SWQiEmFjY0FtdEFzc2V0QmFsYW5jZSIUYWNjUHJpY2VBc3NldEJhbGFuY2UiDW9yZGVyQW10QXNzZXQiEG9yZGVyQW10QXNzZXRTdHIiD29yZGVyUHJpY2VBc3NldCISb3JkZXJQcmljZUFzc2V0U3RyIgpvcmRlclByaWNlIghwcmljZURjbSIQY2FzdGVkT3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgZhbW91bnQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiByRtYXRjaDAiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIJZmVlQW1vdW50Ig9jYWxjUHV0T25lVG9rZW4iEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIgZpc0V2YWwiDSR0MDIxOTQyMjIxMjAiC3Bvb2xBZGRyZXNzIg1hbW91bnRBc3NldElkIhNhbW91bnRBc3NldERlY2ltYWxzIhJwcmljZUFzc2V0RGVjaW1hbHMiEGFtb3VudEJhbGFuY2VSYXciD3ByaWNlQmFsYW5jZVJhdyIUcGF5bWVudEluQW1vdW50QXNzZXQiDSR0MDIyNDUwMjI3NDMiEGFtb3VudEJhbGFuY2VPbGQiD3ByaWNlQmFsYW5jZU9sZCINJHQwMjI3NDcyMjg5NiIUYW1vdW50QXNzZXRBbW91bnRSYXciE3ByaWNlQXNzZXRBbW91bnRSYXciEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig0kdDAyMzAxODIzMDc3Ig1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciDnBheW1lbnRCYWxhbmNlIhRwYXltZW50QmFsYW5jZUJpZ0ludCIMc3VwcGx5QmlnSW50IgtjaGVjaFN1cHBseSINZGVwb3NpdEJpZ0ludCILaXNzdWVBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIg9jYWxjR2V0T25lVG9rZW4iCm91dEFzc2V0SWQiDSR0MDI1MDI3MjUxODgiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiBmNoZWNrcyIQb3V0SW5BbW91bnRBc3NldCINYmFsYW5jZUJpZ0ludCIMYW1CYWxhbmNlT2xkIgxwckJhbGFuY2VPbGQiCm91dEJhbGFuY2UiEG91dEJhbGFuY2VCaWdJbnQiDnJlZGVlbWVkQmlnSW50IglhbW91bnRSYXciDSR0MDI2MjU1MjYzMDUiC3RvdGFsQW1vdW50Ig0kdDAyNjMwOTI2NTM1IgtvdXRBbUFtb3VudCILb3V0UHJBbW91bnQiDGFtQmFsYW5jZU5ldyIMcHJCYWxhbmNlTmV3IghjdXJQclgxOCIBciIOc3VtT2ZHZXRBc3NldHMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IgttdXN0TWFuYWdlciICcGQiAnBrIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIg9zaG91bGRBdXRvU3Rha2UiBGFtSWQiBHBySWQiDHNsaXBwYWdlQUludiIMc2xpcHBhZ2VQSW52IgpscFRyYW5zZmVyIgtzbHBTdGFrZUludiILbWF4U2xpcHBhZ2UiDG1pbk91dEFtb3VudCIJYXV0b1N0YWtlIg0kdDAzMDQyNjMwNjA0Ig1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzMTA5MTMxMjE4IhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINdW5zdGFrZUFtb3VudCINJHQwMzE5NDIzMjEyMCINaXNHZXREaXNhYmxlZCINJHQwMzI1MzEzMjY3OCIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig1jaGVja1BheW1lbnRzIgp1bnN0YWtlSW52Ig9jaGVja1Bvb2xTdGF0dXMiC2FtdEFzc2V0U3RyIg1wcmljZUFzc2V0U3RyIg1wb29sTFBCYWxhbmNlIgpwcmljZXNMaXN0Ig9scEFtdEFzc2V0U2hhcmUiEWxwUHJpY2VBc3NldFNoYXJlIgpwb29sV2VpZ2h0IgxjdXJQcmljZUNhbGMiDGFtQmFsYW5jZVJhdyIMcHJCYWxhbmNlUmF3Ig9hbUJhbGFuY2VSYXdYMTgiD3ByQmFsYW5jZVJhd1gxOCIQcGF5bWVudExwQXNzZXRJZCIMcGF5bWVudExwQW10IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaFgAAWEACAABYgCAwtcvAAFjCQC2AgEAgMLXLwABZAkAtgIBAICAkLu61q3wDQABZQkAtgIBAAAAAWYJALYCAQAAAAFnCQC2AgEAAQABaAkAtgIBAAIAAWkCBVdBVkVTAAFqAgJfXwABawABAAFsAAIAAW0AAwABbgAEAAFvAAEAAXAAAgABcQADAAFyAAQAAXMABQABdAAGAAF1AAcAAXYACAABdwAJAAF4AAoAAXkAAQABegACAAFBAAMAAUIAAQABQwAHAQFEAgFFAUYJALwCAwkAtgIBBQFFBQFkCQC2AgEFAUYBAUcCAUgBSQkAoAMBCQC8AgMFAUgJALYCAQUBSQUBZAEBSgMBSwFMAU0JAGsDBQFLBQFMBQFNAQFOAQFIAwkAvwICBQFlBQFICQC+AgEFAUgFAUgBAU8AAhMlc19fZmFjdG9yeUNvbnRyYWN0AQFQAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAVEAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAVIAAhElcyVzX19wcmljZV9fbGFzdAEBUwIBVAFVCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUBVAkAzAgCCQCkAwEFAVUFA25pbAUBagEBVgIBVwFYCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX1BfXwUBVwICX18FAVgBAVkCAVcBWAkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAVcCAl9fBQFYAQFaAAIPJXNfX2Ftb3VudEFzc2V0AQJhYQACDiVzX19wcmljZUFzc2V0AAJhYgIHJXNfX2ZlZQACYWMJAGsDAAUFAWIAkE4AAmFkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFiBQJhYwECYWUAAhElc19fZmFjdG9yeUNvbmZpZwECYWYAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmFnAQJhaAkArAICCQCsAgICCCVzJXMlc19fBQJhaAIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmFpAgJhagJhawkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYWoCAl9fBQJhawIIX19jb25maWcBAmFsAQJhbQkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhbQECYW4AAgwlc19fc2h1dGRvd24BAmFvAQJhcAkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFwAQJhcQACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhcgIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmFzAwJhdAJhdQJhdgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYXQCDSBzZW5kZXJWYWxpZD0JAKUDAQUCYXUCDiBtYXRjaGVyVmFsaWQ9CQClAwEFAmF2AQJhdwICYXgCYXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJheAUCYXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXgJAMwIAgIBLgkAzAgCBQJheQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhegICYXgCYXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQJheAUCYXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXgJAMwIAgIBLgkAzAgCBQJheQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhQQECYUIJAAIBCQC5CQIJAMwIAgIIbHAucmlkZToJAMwIAgUCYUIFA25pbAIBIAACYUMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhdwIFBHRoaXMJAQFPAAACYUQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhdwIFAmFDBQJhcgECYUUACQELdmFsdWVPckVsc2UCCQCbCAIFAmFDCQECYW4ABwECYUYACQDZBAEJAQJhdwIFAmFDCQECYWYAAQJhRwAEAmFICQECYXcCBQR0aGlzCQEBWgAEAmFJCQECYXcCBQR0aGlzCQECYWEABAJhawkBAmF6AgUCYUMJAQJhbAEFAmFJBAJhagkBAmF6AgUCYUMJAQJhbAEFAmFICQC1CQIJAQJhdwIFAmFDCQECYWkCCQCkAwEFAmFqCQCkAwEFAmFrBQFqAQJhSgECYUsDCQAAAgUCYUsFAWkFBHVuaXQJANkEAQUCYUsBAmFMAQJhSwMJAAACBQJhSwUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhSwECYU0BAmFOCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYU4FAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTgUBcAkA2QQBCQCRAwIFAmFOBQFxCQECYUoBCQCRAwIFAmFOBQFyCQECYUoBCQCRAwIFAmFOBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYU4FAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTgUBdQECYU8ACQC1CQIJAQJhdwIFAmFDCQECYWUABQFqAAJhUAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFPAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYVEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJhTwAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmFSCgJhUwJhVAJhVQJhVgJhVwJhWAJhWQJhWgJiYQJiYgkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYVMJAMwIAgkApAMBBQJhVAkAzAgCCQCkAwEFAmFVCQDMCAIJAKQDAQUCYVYJAMwIAgkApAMBBQJhVwkAzAgCCQCkAwEFAmFYCQDMCAIJAKQDAQUCYVkJAMwIAgkApAMBBQJhWgkAzAgCCQCkAwEFAmJhCQDMCAIJAKQDAQUCYmIFA25pbAUBagECYmMGAmJkAmJlAmJmAmFWAmFZAmFaCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJmCQDMCAIJAKQDAQUCYVYJAMwIAgkApAMBBQJhWQkAzAgCCQCkAwEFAmFaBQNuaWwFAWoBAmJnAQJiaAMJAAACBQJiaAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYmgBAmJpAgJiagJiawkAvAIDBQJiagUBZAUCYmsBAmJsBAJibQJibgJibwJicAQCYnEJAQFEAgUCYm8FAmJtBAJicgkBAUQCBQJicAUCYm4JAQJiaQIFAmJyBQJicQECYnMDAmJvAmJwAmJ0BAJidQkBAmFHAAQCYnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidQUBdAQCYncJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidQUBdQQCYngJAQJibAQFAmJ2BQJidwUCYm8FAmJwBAJiawkBAUQCBQJibwUCYnYEAmJqCQEBRAIFAmJwBQJidwQCYnkJAQFEAgUCYnQFAWIEAmJ6CQECYmkCBQJiawUCYnkEAmJBCQECYmkCBQJiagUCYnkJAMwIAgUCYngJAMwIAgUCYnoJAMwIAgUCYkEFA25pbAECYkIDAmJvAmJwAmJ0BAJiQwkBAmJzAwUCYm8FAmJwBQJidAkAzAgCCQEBRwIJAJEDAgUCYkMAAAUBYgkAzAgCCQEBRwIJAJEDAgUCYkMAAQUBYgkAzAgCCQEBRwIJAJEDAgUCYkMAAgUBYgUDbmlsAQJiRAQCYkUCYkYCYkcBVwQCYnUJAQJhRwAEAmJICQCRAwIFAmJ1BQFxBAJiSQkAkQMCBQJidQUBcgQCYkoJAJEDAgUCYnUFAXMEAmJtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXQEAmJuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXUEAmJLCQCRAwIFAmJ1BQFwBAJiTAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJICQCsAgIJAKwCAgIGQXNzZXQgBQJiSAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiSAUCYkYJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmJNCQECYmcBBQJiSQQCYk4JAQFEAgUCYk0FAmJtBAJiTwkBAmJnAQUCYkoEAmJQCQEBRAIFAmJPBQJibgQCYlEJAQJiaQIFAmJQBQJiTgQCYlIJAQFHAgUCYlEFAWIEAmJTCQEBRAIFAmJHBQFiBAJiVAkBAUQCBQJiTAUBYgQCYlUJALwCAwUCYk4FAmJTBQJiVAQCYlYJALwCAwUCYlAFAmJTBQJiVAQCYlcJAQFHAgUCYlUFAmJtBAJiWAkBAUcCBQJiVgUCYm4EAmJZAwkAAAIFAmJFAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFXBQJiVwMJAAACBQJiSQIFV0FWRVMFBHVuaXQJANkEAQUCYkkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBVwUCYlgDCQAAAgUCYkoCBVdBVkVTBQR1bml0CQDZBAEFAmJKCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFZAgkApQgBBQFXBQJiRQkBAmJjBgUCYlcFAmJYBQJiRwUCYlIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFSAAUCYlIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCYlIFA25pbAkAnAoKBQJiVwUCYlgFAmJJBQJiSgUCYk0FAmJPBQJiTAUCYlEFAmJLBQJiWQECYloJAmJFAmNhAmNiAmNjAmNkAmNlAVcCY2YCY2cEAmJ1CQECYUcABAJiSAkA2QQBCQCRAwIFAmJ1BQFxBAJjaAkAkQMCBQJidQUBcgQCY2kJAJEDAgUCYnUFAXMEAmNqCQCRAwIFAmJ1BQF2BAJjawkAkQMCBQJidQUBdwQCYnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidQUBdAQCYncJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidQUBdQQCYksJAJEDAgUCYnUFAXAEAmJMCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJICQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJIAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY2wJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY2MJANkEAQIFV0FWRVMEAmNtCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmNlCQDZBAECBVdBVkVTAwMJAQIhPQIFAmNoBQJjbAYJAQIhPQIFAmNpBQJjbQkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmJNAwUCY2YJAQJiZwEFAmNoCQBlAgkBAmJnAQUCY2gFAmNiBAJiTwMFAmNmCQECYmcBBQJjaQkAZQIJAQJiZwEFAmNpBQJjZAQCY24JAQFEAgUCY2IFAmJ2BAJjbwkBAUQCBQJjZAUCYncEAmNwCQECYmkCBQJjbwUCY24EAmJOCQEBRAIFAmJNBQJidgQCYlAJAQFEAgUCYk8FAmJ3BAJjcQMJAAACBQJiTAAABAJiUQUBZQQCY3IFAWUEAmJ5CQB2BgkAuQICBQJjbgUCY28AAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFHAgUCYnkFAWIJAQFHAgUCY24FAmJ2CQEBRwIFAmNvBQJidwkBAmJpAgkAtwICBQJiUAUCY28JALcCAgUCYk4FAmNuBQJjcgQCYlEJAQJiaQIFAmJQBQJiTgQCY3IJALwCAwkBAU4BCQC4AgIFAmJRBQJjcAUBZAUCYlEEAmNzCQEBRAIFAmNhBQFiAwMJAQIhPQIFAmJRBQFlCQC/AgIFAmNyBQJjcwcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY3ICHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjcwQCYlQJAQFEAgUCYkwFAWIEAmN0CQC8AgMFAmNuBQJiUQUBZAQCY3UJALwCAwUCY28FAWQFAmJRBAJjdgMJAL8CAgUCY3QFAmNvCQCUCgIFAmN1BQJjbwkAlAoCBQJjbgUCY3QEAmN3CAUCY3YCXzEEAmN4CAUCY3YCXzIEAmJ5CQC8AgMFAmJUBQJjeAUCYlAJAJcKBQkBAUcCBQJieQUBYgkBAUcCBQJjdwUCYnYJAQFHAgUCY3gFAmJ3BQJiUQUCY3IEAmN5CAUCY3ECXzEEAmN6CAUCY3ECXzIEAmNBCAUCY3ECXzMEAmJSCQEBRwIIBQJjcQJfNAUBYgQCY0IJAQFHAggFAmNxAl81BQFiAwkAZwIAAAUCY3kJAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmNDAwkBASEBBQJjZwAABQJjeQQCY0QJAGUCBQJjYgUCY3oEAmNFCQBlAgUCY2QFAmNBBAJjRgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJiUgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJiUgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgIFAVcFAmJFCQECYVIKBQJjegUCY0EFAmNDBQJiUgUCY2EFAmNCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjRAUCY0UFA25pbAkAnwoNBQJjeQUCY0MFAmJSBQJiTQUCYk8FAmJMBQJiSAUCYksFAmNGBQJjRAUCY0UFAmNjBQJjZQECY0cBAmNIBAJidQkBAmFHAAQCY0kJAJEDAgUCYnUFAXIEAmNKCQCRAwIFAmJ1BQFzBAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ1BQFwBAJidgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ1BQF0BAJidwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ1BQF1BAJjSwkBAmJnAQUCY0kEAmNMCQECYmcBBQJjSgQCYlEDCQAAAggFAmNICW9yZGVyVHlwZQUDQnV5CQECYmwEBQJidgUCYncJAGQCBQJjSwgFAmNIBmFtb3VudAUCY0wJAQJibAQFAmJ2BQJidwkAZQIFAmNLCAUCY0gGYW1vdW50BQJjTAQCYlIJAQFHAgUCYlEFAWIDAwMJAQJhRQAGCQAAAgUCYksFAW0GCQAAAgUCYksFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkBAJjTQgIBQJjSAlhc3NldFBhaXILYW1vdW50QXNzZXQEAmNOAwkAAAIFAmNNBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjTQQCY08ICAUCY0gJYXNzZXRQYWlyCnByaWNlQXNzZXQEAmNQAwkAAAIFAmNPBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjTwMDCQECIT0CBQJjTgUCY0kGCQECIT0CBQJjUAUCY0oJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJjUQgFAmNIBXByaWNlBAJjUgkAawMFAWIFAmJ3BQJidgQCY1MJAQFKAwUCY1EFAWIFAmNSBAJjVAMJAAACCAUCY0gJb3JkZXJUeXBlBQNCdXkJAGcCBQJiUgUCY1MJAGcCBQJjUwUCYlIGAQJjVQECY1YDCQECIT0CCQCQAwEIBQJjVghwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmNXCQEFdmFsdWUBCQCRAwIIBQJjVghwYXltZW50cwAABAJiRgkBBXZhbHVlAQgFAmNXB2Fzc2V0SWQEAmNYCAUCY1cGYW1vdW50BAJjcQkBAmJEBAkA2AQBCAUCY1YNdHJhbnNhY3Rpb25JZAkA2AQBBQJiRgUCY1gIBQJjVgZjYWxsZXIEAmJXCAUCY3ECXzEEAmJYCAUCY3ECXzIEAmJLCQENcGFyc2VJbnRWYWx1ZQEIBQJjcQJfOQQCYlkIBQJjcQNfMTADAwkBAmFFAAYJAAACBQJiSwUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYksJAJcKBQUCYlcFAmJYBQJjWAUCYkYFAmJZAQJjWQMCY1YCY2ECY2cDCQECIT0CCQCQAwEIBQJjVghwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCY1oJAQV2YWx1ZQEJAJEDAggFAmNWCHBheW1lbnRzAAAEAmRhCQEFdmFsdWUBCQCRAwIIBQJjVghwYXltZW50cwABBAJkYgkBAmJaCQkA2AQBCAUCY1YNdHJhbnNhY3Rpb25JZAUCY2EIBQJjWgZhbW91bnQIBQJjWgdhc3NldElkCAUCZGEGYW1vdW50CAUCZGEHYXNzZXRJZAkApQgBCAUCY1YGY2FsbGVyBwUCY2cEAmJLCQENcGFyc2VJbnRWYWx1ZQEIBQJkYgJfOAMDAwkBAmFFAAYJAAACBQJiSwUBbAYJAAACBQJiSwUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYksFAmRiAQJkYwECZGQEAmRlCQD8BwQFAmFDAgRlbWl0CQDMCAIFAmRkBQNuaWwFA25pbAMJAAACBQJkZQUCZGUEAmRmBAJkZwUCZGUDCQABAgUCZGcCB0FkZHJlc3MEAmRoBQJkZwkA/AcEBQJkaAIEZW1pdAkAzAgCBQJkZAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZGYFAmRmBQJkZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZGkBAmRkBAJkagkAawMFAmRkBQJhZAUBYgkAlAoCCQBlAgUCZGQFAmRqBQJkagECZGsEAmRsAmRtAVcBWAQCZG4JAAACBQFYBQR1bml0BAJkbwkBAmFNAQkBAmFHAAQCZHAIBQJkbwJfMQQCYksIBQJkbwJfMgQCYkgIBQJkbwJfMwQCZHEIBQJkbwJfNAQCY0oIBQJkbwJfNQQCZHIIBQJkbwJfNgQCZHMIBQJkbwJfNwQCZHQJAQJiZwEJAQJhTAEFAmRxBAJkdQkBAmJnAQkBAmFMAQUCY0oEAmR2AwkAAAIFAmRtBQJkcQYDCQAAAgUCZG0FAmNKBwkBAmFBAQINaW52YWxpZCBhc3NldAQCZHcDBQJkbgkAlAoCBQJkdAUCZHUDBQJkdgkAlAoCCQBlAgUCZHQFAmRsBQJkdQkAlAoCBQJkdAkAZQIFAmR1BQJkbAQCZHgIBQJkdwJfMQQCZHkIBQJkdwJfMgQCZHoDBQJkdgkAlAoCBQJkbAAACQCUCgIAAAUCZGwEAmRBCAUCZHoCXzEEAmRCCAUCZHoCXzIEAmRDCAkBAmRpAQUCZEECXzEEAmRECAkBAmRpAQUCZEICXzEEAmRFCQECZGkBBQJkbAQCZEYIBQJkRQJfMQQCZGoIBQJkRQJfMgQCZEcJAGQCBQJkeAUCZEMEAmRICQBkAgUCZHkFAmREBAJiUgkBAUcCCQECYmkCCQEBRAIFAmRIBQJkcwkBAUQCBQJkRwUCZHIFAWIEAmRJAwUCZHYFAmR4BQJkeQQCZEoJALYCAQUCZEkEAmRLCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYkgJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYkgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkTAMJAL8CAgUCZEsFAWYGCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJkTAUCZEwEAmRNCQC2AgEFAmRGBAJkTgkAoAMBCQC6AgIJALkCAgUCZEsJALgCAgkBCnNxcnRCaWdJbnQECQC3AgIFAWMJALoCAgkAuQICBQJkTQUBYwUCZEoACAAIBQRET1dOBQFjBQFjBAJjRgMFAmRuBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFSAAUCYlIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCYlIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYCCQClCAEJAQV2YWx1ZQEFAVcJANgEAQkBBXZhbHVlAQUBWAkBAmFSCgUCZEEFAmRCBQJkTgUCYlIAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJkTwkAawMFAmR5BQFiBQJkeAQCZFAJAGsDBQJkbAUBYgkAZAIFAmRPBQFiBAJkUQkAZQIFAmRsBQJkUAQCZFIJALwCAwUCZEsJALYCAQUCZFEJALYCAQUCZHkEAmRTCQCgAwEJALwCAwkAuAICCQC2AgEFAmROBQJkUgUBYwUCZFIJAJYKBAUCZE4FAmNGBQJkagUCZFMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmRUBQJkVQJkRgJkbQFXAVgEAmRuCQAAAgUBWAUEdW5pdAQCZFYJAQJhTQEJAQJhRwAEAmRwCAUCZFYCXzEEAmJLCAUCZFYCXzIEAmJICAUCZFYCXzMEAmRxCAUCZFYCXzQEAmNKCAUCZFYCXzUEAmRXCAUCZFYCXzYEAmRYCAUCZFYCXzcEAmRZCQDMCAIDCQAAAgUCZG0FAmJIBgkAAgECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJkWQUCZFkEAmRaAwkAAAIFAmRVBQJkcQYDCQAAAgUCZFUFAmNKBwkBAmFBAQINaW52YWxpZCBhc3NldAQCZWEDBQJkWgkAtgIBCQECYmcBCQECYUwBBQJkcQkAtgIBCQECYmcBCQECYUwBBQJjSgQCZWIJAQJiZwEJAQJhTAEFAmRxBAJlYwkBAmJnAQkBAmFMAQUCY0oEAmVkAwUCZFoFAmViBQJlYwQCZWUJALYCAQUCZWQEAmRLCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYkgJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYkgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJlZgkAtgIBBQJkRgQCZWcJAKADAQkAugICCQC5AgIFAmVhCQC4AgIFAWMJAHYGCQC4AgIFAWMJALoCAgkAuQICBQJlZgUBYwUCZEsACAUBaAAAAAgFBERPV04FAWMEAmVoCQECZGkBBQJlZwQCZWkIBQJlaAJfMQQCZGoIBQJlaAJfMgQCZWoDBQJkWgkAlgoEBQJlaQAACQBlAgUCZWIFAmVnBQJlYwkAlgoEAAAFAmVpBQJlYgkAZQIFAmVjBQJlZwQCZWsIBQJlagJfMQQCZWwIBQJlagJfMgQCZW0IBQJlagJfMwQCZW4IBQJlagJfNAQCZW8JAQJiaQIJAQFEAgUCZW4FAmRYCQEBRAIFAmVtBQJkVwQCYlIJAQFHAgUCZW8FAWIEAmNGAwUCZG4FA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQEBWQIJAKUIAQkBBXZhbHVlAQUBVwkA2AQBCQEFdmFsdWUBBQFYCQECYmMGBQJlawUCZWwFAmRGBQJiUgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJiUgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJiUgUDbmlsBAJlcAkBAmJEBAIACQECYUwBBQJiSAUCZEYFBHRoaXMEAmVxCQBkAggFAmVwAl8xCAUCZXACXzIEAmRTCQBrAwkAZQIFAmVpBQJlcQUBYgUCZXEJAJYKBAUCZWkFAmNGBQJkagUCZFMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVyAAQCZGcJAKIIAQkBAVAAAwkAAQIFAmRnAgZTdHJpbmcEAmVzBQJkZwkA2QQBBQJlcwMJAAECBQJkZwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJldAAEAmRnCQCiCAEJAQFRAAMJAAECBQJkZwIGU3RyaW5nBAJlcwUCZGcJANkEAQUCZXMDCQABAgUCZGcCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZXUBAmNWBAJldgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkZwkBAmVyAAMJAAECBQJkZwIKQnl0ZVZlY3RvcgQCZXcFAmRnAwkAAAIIBQJjVg9jYWxsZXJQdWJsaWNLZXkFAmV3BgUCZXYDCQABAgUCZGcCBFVuaXQDCQAAAggFAmNWBmNhbGxlcgUEdGhpcwYFAmV2CQACAQILTWF0Y2ggZXJyb3IWAmNWAQpzZXRNYW5hZ2VyAQJleAQCZXkJAQJldQEFAmNWAwkAAAIFAmV5BQJleQQCZXoJANkEAQUCZXgDCQAAAgUCZXoFAmV6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAAUCZXgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVgEOY29uZmlybU1hbmFnZXIABAJlQQkBAmV0AAQCZUIDCQEJaXNEZWZpbmVkAQUCZUEGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVCBQJlQgQCZUMDCQAAAggFAmNWD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZUEGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVDBQJlQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUAAJANgEAQkBBXZhbHVlAQUCZUEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVEABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1YBA3B1dAICY2ECZUQDCQBmAgAABQJjYQkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJkYgkBAmNZAwUCY1YFAmNhBgQCY0MIBQJkYgJfMgQCYkgIBQJkYgJfNwQCYlkIBQJkYgJfOQQCY0QIBQJkYgNfMTAEAmNFCAUCZGIDXzExBAJlRQgFAmRiA18xMgQCZUYIBQJkYgNfMTMEAmRlCQD8BwQFAmFDAgRlbWl0CQDMCAIFAmNDBQNuaWwFA25pbAMJAAACBQJkZQUCZGUEAmRmBAJkZwUCZGUDCQABAgUCZGcCB0FkZHJlc3MEAmRoBQJkZwkA/AcEBQJkaAIEZW1pdAkAzAgCBQJjQwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZGYFAmRmBAJlRwMJAGYCBQJjRAAACQD8BwQFAmFRAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZUUFAmNEBQNuaWwFA25pbAMJAAACBQJlRwUCZUcEAmVIAwkAZgIFAmNFAAAJAPwHBAUCYVECA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlRgUCY0UFA25pbAUDbmlsAwkAAAIFAmVIBQJlSAQCZUkDBQJlRAQCZUoJAPwHBAUCYVACBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJIBQJjQwUDbmlsAwkAAAIFAmVKBQJlSgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJjVgZjYWxsZXIFAmNDBQJiSAUDbmlsCQDOCAIFAmJZBQJlSQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVgEKcHV0Rm9yRnJlZQECZUsDCQBmAgAABQJlSwkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAJkYgkBAmNZAwUCY1YFAmVLBwgFAmRiAl85AmNWAQlwdXRPbmVUa24CAmVMAmVNBAJlTgkBAmFNAQkBAmFHAAQCZHAIBQJlTgJfMQQCYksIBQJlTgJfMgQCYkgIBQJlTgJfMwQCZHEIBQJlTgJfNAQCY0oIBQJlTgJfNQQCZHIIBQJlTgJfNgQCZHMIBQJlTgJfNwQCZU8DAwkBAmFFAAYJAAACBQJiSwUBbAYJAAACBQJiSwUBbgQCZFkJAMwIAgMJAQEhAQUCZU8GCQECYUEBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJjVghwYXltZW50cwABBgkBAmFBAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZFkFAmRZBAJlUAkAkQMCCAUCY1YIcGF5bWVudHMAAAQCZG0IBQJlUAdhc3NldElkBAJkbAgFAmVQBmFtb3VudAQCZEYFAmRsBAFXCAUCY1YGY2FsbGVyBAFYCAUCY1YNdHJhbnNhY3Rpb25JZAQCZVEJAQJkawQFAmRsBQJkbQUBVwUBWAQCZVIIBQJlUQJfMQQCY0YIBQJlUQJfMgQCZGoIBQJlUQJfMwQCZFMIBQJlUQJfNAQCZVMDAwkAZgIFAmVMAAAJAGYCBQJlTAUCZVIHCQACAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJlTAUDbmlsAgAFAmVSBAJkZQkBAmRjAQUCZVMDCQAAAgUCZGUFAmRlBAJlSQMFAmVNBAJlVAkA/AcEBQJhUAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYkgFAmVTBQNuaWwDCQAAAgUCZVQFAmVUBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmNWBmNhbGxlcgUCZVMFAmJIBQNuaWwEAmVVAwkAZgIFAmRqAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUQFAmRqBQJkbQUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNGBQJlSQUCZVUFAmVTCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNWAQlnZXRPbmVUa24DAmRVAmVMAmVWBAJlVwkBAmFNAQkBAmFHAAQCZHAIBQJlVwJfMQQCYksIBQJlVwJfMgQCYkgIBQJlVwJfMwQCZHEIBQJlVwJfNAQCY0oIBQJlVwJfNQQCZHIIBQJlVwJfNgQCZHMIBQJlVwJfNwQCZVgDCQECYUUABgkAAAIFAmJLBQFuBAJkWQkAzAgCAwkBASEBBQJlWAYJAQJhQQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmNWCHBheW1lbnRzAAEGCQECYUEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJkWQUCZFkEAmVQCQCRAwIIBQJjVghwYXltZW50cwAABAJkbQgFAmVQB2Fzc2V0SWQEAmRGCAUCZVAGYW1vdW50BAFXCAUCY1YGY2FsbGVyBAFYCAUCY1YNdHJhbnNhY3Rpb25JZAQCZVkJAQJkVAUJAQJhSgEFAmRVBQJkRgUCZG0FAVcFAVgEAmVaCAUCZVkCXzEEAmNGCAUCZVkCXzIEAmRqCAUCZVkCXzMEAmRTCAUCZVkCXzQEAmRkAwMJAGYCBQJlTAAACQBmAgUCZUwFAmVaBwkAAgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZUwFA25pbAIABQJlWgQCZmEJAPwHBAUCYUMCBGJ1cm4JAMwIAgUCZEYFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZG0FAmRGBQNuaWwDCQAAAgUCZmEFAmZhBAJmYgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFXBQJkZAkBAmFKAQUCZFUFA25pbAkAlAoCBQJmYgUCZGQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1YBA2dldAAEAmNxCQECY1UBBQJjVgQCZmMIBQJjcQJfMQQCYlgIBQJjcQJfMgQCY1gIBQJjcQJfMwQCYkYIBQJjcQJfNAQCYlkIBQJjcQJfNQQCZmQJAPwHBAUCYUMCBGJ1cm4JAMwIAgUCY1gFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYkYFAmNYBQNuaWwDCQAAAgUCZmQFAmZkBQJiWQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVgEJZ2V0Tm9MZXNzAgJmZQJmZgQCY3EJAQJjVQEFAmNWBAJiVwgFAmNxAl8xBAJiWAgFAmNxAl8yBAJjWAgFAmNxAl8zBAJiRggFAmNxAl80BAJiWQgFAmNxAl81AwkAZgIFAmZlBQJiVwkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUCYlcCAyA8IAkApAMBBQJmZQMJAGYCBQJmZgUCYlgJAAIBCQCsAgIJAKwCAgkArAICAh1ub0xlc3NUaGVuUHJpY2VBc3NldCBmYWlsZWQ6IAkApAMBBQJiWAIDIDwgCQCkAwEFAmZmBAJmZAkA/AcEBQJhQwIEYnVybgkAzAgCBQJjWAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiRgUCY1gFA25pbAMJAAACBQJmZAUCZmQFAmJZCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNWAQ11bnN0YWtlQW5kR2V0AQJkZAQCZmcDCQECIT0CCQCQAwEIBQJjVghwYXltZW50cwAACQACAQIYTm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBgMJAAACBQJmZwUCZmcEAmJ1CQECYUcABAJiSAkA2QQBCQCRAwIFAmJ1BQFxBAJmaAkA/AcEBQJhUAIHdW5zdGFrZQkAzAgCCQDYBAEFAmJICQDMCAIFAmRkBQNuaWwFA25pbAMJAAACBQJmaAUCZmgEAmNxCQECYkQECQDYBAEIBQJjVg10cmFuc2FjdGlvbklkCQDYBAEFAmJIBQJkZAgFAmNWBmNhbGxlcgQCYksJAQ1wYXJzZUludFZhbHVlAQgFAmNxAl85BAJiWQgFAmNxA18xMAQCZmkDAwkBAmFFAAYJAAACBQJiSwUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYksGAwkAAAIFAmZpBQJmaQQCZmQJAPwHBAUCYUMCBGJ1cm4JAMwIAgUCZGQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYkgFAmRkBQNuaWwDCQAAAgUCZmQFAmZkBQJiWQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVgEIYWN0aXZhdGUCAmZqAmZrAwkBAiE9AgkApQgBCAUCY1YGY2FsbGVyCQClCAEFAmFDCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoABQJmagkAzAgCCQELU3RyaW5nRW50cnkCCQECYWEABQJmawUDbmlsAgdzdWNjZXNzAmNWARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQJhRwACY1YBHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkBAmJoCQCUCgIFA25pbAkBAmJnAQUCYmgCY1YBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDAmJvAmJwAmJ0BAJiQwkBAmJzAwUCYm8FAmJwBQJidAkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFAmJDAAAJAMwIAgkApgMBCQCRAwIFAmJDAAEJAMwIAgkApgMBCQCRAwIFAmJDAAIFA25pbAJjVgEUdG9YMThXcmFwcGVyUkVBRE9OTFkCAUUBRgkAlAoCBQNuaWwJAKYDAQkBAUQCBQFFBQFGAmNWARZmcm9tWDE4V3JhcHBlclJFQURPTkxZAgFIAUkJAJQKAgUDbmlsCQEBRwIJAKcDAQUBSAUBSQJjVgEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiagJiawkAlAoCBQNuaWwJAKYDAQkBAmJpAgkApwMBBQJiagkApwMBBQJiawJjVgEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmJFAmNhAmNiAmNjAmNkAmNlAVcCY2YCY2cJAJQKAgUDbmlsCQECYloJBQJiRQUCY2EFAmNiBQJjYwUCY2QFAmNlBQFXBQJjZgUCY2cCY1YBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJiRQJiRgJiRwFXBAJjcQkBAmJEBAUCYkUFAmJGBQJiRwkBEUBleHRyTmF0aXZlKDEwNjIpAQUBVwkAlAoCBQNuaWwJAJwKCggFAmNxAl8xCAUCY3ECXzIIBQJjcQJfMwgFAmNxAl80CAUCY3ECXzUIBQJjcQJfNggFAmNxAl83CQCmAwEIBQJjcQJfOAgFAmNxAl85CAUCY3EDXzEwAmNWAQ1zdGF0c1JFQURPTkxZAAQCYnUJAQJhRwAEAmJICQDZBAEJAJEDAgUCYnUFAXEEAmNJCQCRAwIFAmJ1BQFyBAJjSgkAkQMCBQJidQUBcwQCY2oJAJEDAgUCYnUFAXYEAmNrCQCRAwIFAmJ1BQF3BAJidgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ1BQF0BAJidwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ1BQF1BAJmbAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiSAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiSAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmNLCQECYmcBBQJjSQQCY0wJAQJiZwEFAmNKBAJmbQMJAAACBQJmbAAACQDMCAIFAWUJAMwIAgUBZQkAzAgCBQFlBQNuaWwJAQJicwMFAmNLBQJjTAUCZmwEAmJSAAAEAmZuCQEBRwIJAJEDAgUCZm0AAQUBYgQCZm8JAQFHAgkAkQMCBQJmbQACBQFiBAJmcAkBBXZhbHVlAQkAmggCBQJhQwkBAmFvAQkApQgBBQR0aGlzCQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0sJAMwIAgkApAMBBQJjTAkAzAgCCQCkAwEFAmZsCQDMCAIJAKQDAQUCYlIJAMwIAgkApAMBBQJmbgkAzAgCCQCkAwEFAmZvCQDMCAIJAKQDAQUCZnAFA25pbAUBagJjVgEgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkBAmNiBAJidQkBAmFHAAQCYkgJANkEAQkAkQMCBQJidQUBcQQCY2gJAJEDAgUCYnUFAXIEAmJJCQDZBAEFAmNoBAJjaQkAkQMCBQJidQUBcwQCYkoJANkEAQUCY2kEAmJ2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXQEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXUEAmJLCQCRAwIFAmJ1BQFwBAJmbAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiSAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiSAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmNLCQECYmcBBQJjaAQCY0wJAQJiZwEFAmNpBAJicQkBAUQCBQJjSwUCYnYEAmJyCQEBRAIFAmNMBQJidwQCYlEDCQAAAgUCZmwAAAUBZQkBAmJpAgUCYnIFAmJxBAJjbgkBAUQCBQJjYgUCYnYEAmNvCQC8AgMFAmNuBQJiUQUBZAQCY2QJAQFHAgUCY28FAmJ3BAJkYgkBAmJaCQIAAKDCHgUCY2IFAmJJBQJjZAUCYkoCAAYHBAJjeQgFAmRiAl8xBAJmcQgFAmRiAl8zBAJiTQgFAmRiAl80BAJiTwgFAmRiAl81BAJiTAgFAmRiAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjeQkAzAgCCQCkAwEJAQFHAgUCYlEFAWIJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJPCQDMCAIJAKQDAQUCYkwJAMwIAgUCYksJAMwIAgkApAMBBQJjYgkAzAgCCQCkAwEFAmNkBQNuaWwFAWoCY1YBH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkBAmNkBAJidQkBAmFHAAQCYkgJANkEAQkAkQMCBQJidQUBcQQCY2gJAJEDAgUCYnUFAXIEAmJJCQDZBAEFAmNoBAJjaQkAkQMCBQJidQUBcwQCYkoJANkEAQUCY2kEAmJ2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXQEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnUFAXUEAmJLCQCRAwIFAmJ1BQFwBAJmbAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiSAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiSAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmZyCQECYmcBBQJjaAQCZnMJAQJiZwEFAmNpBAJmdAkBAUQCBQJmcgUCYnYEAmZ1CQEBRAIFAmZzBQJidwQCYlEDCQAAAgUCZmwAAAUBZQkBAmJpAgUCZnUFAmZ0BAJjbwkBAUQCBQJjZAUCYncEAmNuCQC8AgMFAmNvBQFkBQJiUQQCY2IJAQFHAgUCY24FAmJ2BAJkYgkBAmJaCQIAAKDCHgUCY2IFAmJJBQJjZAUCYkoCAAYHBAJjeQgFAmRiAl8xBAJmcQgFAmRiAl8zBAJiTQgFAmRiAl80BAJiTwgFAmRiAl81BAJiTAgFAmRiAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjeQkAzAgCCQCkAwEJAQFHAgUCYlEFAWIJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJPCQDMCAIJAKQDAQUCYkwJAMwIAgUCYksJAMwIAgkApAMBBQJjYgkAzAgCCQCkAwEFAmNkBQNuaWwFAWoCY1YBE2V2YWx1YXRlR2V0UkVBRE9OTFkCAmZ2AmZ3BAJjcQkBAmJEBAIABQJmdgUCZncFBHRoaXMEAmJXCAUCY3ECXzEEAmJYCAUCY3ECXzIEAmJNCAUCY3ECXzUEAmJPCAUCY3ECXzYEAmJMCAUCY3ECXzcEAmJSCAUCY3ECXzgEAmJLCQENcGFyc2VJbnRWYWx1ZQEIBQJjcQJfOQkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJXCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJPCQDMCAIJAKQDAQUCYkwJAMwIAgkApgMBBQJiUgkAzAgCCQCkAwEFAmJLBQNuaWwFAWoBAmZ4AQJmeQAEAmZ6BAJkZwkBAmVyAAMJAAECBQJkZwIKQnl0ZVZlY3RvcgQCZXcFAmRnBQJldwMJAAECBQJkZwIEVW5pdAgFAmZ4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJkZwUCZngDCQABAgUCZGcCBU9yZGVyBAJjSAUCZGcEAmZBCQECYUYABAJhdAkBAmNHAQUCY0gEAmF1CQD0AwMIBQJjSAlib2R5Qnl0ZXMJAJEDAggFAmNIBnByb29mcwAACAUCY0gPc2VuZGVyUHVibGljS2V5BAJhdgkA9AMDCAUCY0gJYm9keUJ5dGVzCQCRAwIIBQJjSAZwcm9vZnMAAQUCZkEDAwMFAmF0BQJhdQcFAmF2BwYJAQJhcwMFAmF0BQJhdQUCYXYDCQABAgUCZGcCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJlcwUCZGcEAmZCCQD2AwEJAQV2YWx1ZQEIBQJlcwZzY3JpcHQEAmZDCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYUMJAQJhcQAEAmZECQDxBwEFBHRoaXMDAwkAAAIFAmZDBQJmQgkBAiE9AgUCZkQFAmZCBwYJAPQDAwgFAmZ4CWJvZHlCeXRlcwkAkQMCCAUCZngGcHJvb2ZzAAAFAmZ6CQD0AwMIBQJmeAlib2R5Qnl0ZXMJAJEDAggFAmZ4BnByb29mcwAABQJmeg3+3sM=", "chainId": 84, "height": 2270765, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EbECQCJWH9dHyoqJQwijzhDFudbkVog2A8Ni6GzBYPbY Next: AQeREG61ALmmVLzfbwwqGvrBYTAgX2chYzCXU526eGVe Diff:
Old | New | Differences | |
---|---|---|---|
15 | 15 | ||
16 | 16 | let g = toBigInt(1) | |
17 | 17 | ||
18 | - | let h = toBigInt( | |
18 | + | let h = toBigInt(2) | |
19 | 19 | ||
20 | 20 | let i = "WAVES" | |
21 | 21 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 8 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = toBigInt(100000000) | |
9 | 9 | ||
10 | 10 | let d = toBigInt(1000000000000000000) | |
11 | 11 | ||
12 | 12 | let e = toBigInt(0) | |
13 | 13 | ||
14 | 14 | let f = toBigInt(0) | |
15 | 15 | ||
16 | 16 | let g = toBigInt(1) | |
17 | 17 | ||
18 | - | let h = toBigInt( | |
18 | + | let h = toBigInt(2) | |
19 | 19 | ||
20 | 20 | let i = "WAVES" | |
21 | 21 | ||
22 | 22 | let j = "__" | |
23 | 23 | ||
24 | 24 | let k = 1 | |
25 | 25 | ||
26 | 26 | let l = 2 | |
27 | 27 | ||
28 | 28 | let m = 3 | |
29 | 29 | ||
30 | 30 | let n = 4 | |
31 | 31 | ||
32 | 32 | let o = 1 | |
33 | 33 | ||
34 | 34 | let p = 2 | |
35 | 35 | ||
36 | 36 | let q = 3 | |
37 | 37 | ||
38 | 38 | let r = 4 | |
39 | 39 | ||
40 | 40 | let s = 5 | |
41 | 41 | ||
42 | 42 | let t = 6 | |
43 | 43 | ||
44 | 44 | let u = 7 | |
45 | 45 | ||
46 | 46 | let v = 8 | |
47 | 47 | ||
48 | 48 | let w = 9 | |
49 | 49 | ||
50 | 50 | let x = 10 | |
51 | 51 | ||
52 | 52 | let y = 1 | |
53 | 53 | ||
54 | 54 | let z = 2 | |
55 | 55 | ||
56 | 56 | let A = 3 | |
57 | 57 | ||
58 | 58 | let B = 1 | |
59 | 59 | ||
60 | 60 | let C = 7 | |
61 | 61 | ||
62 | 62 | func D (E,F) = fraction(toBigInt(E), d, toBigInt(F)) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func G (H,I) = toInt(fraction(H, toBigInt(I), d)) | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | func J (K,L,M) = fraction(K, L, M) | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func N (H) = if ((e > H)) | |
72 | 72 | then -(H) | |
73 | 73 | else H | |
74 | 74 | ||
75 | 75 | ||
76 | 76 | func O () = "%s__factoryContract" | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func P () = "%s__managerPublicKey" | |
80 | 80 | ||
81 | 81 | ||
82 | 82 | func Q () = "%s__pendingManagerPublicKey" | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func R () = "%s%s__price__last" | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j) | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X) | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X) | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func Z () = "%s__amountAsset" | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | func aa () = "%s__priceAsset" | |
101 | 101 | ||
102 | 102 | ||
103 | 103 | let ab = "%s__fee" | |
104 | 104 | ||
105 | 105 | let ac = fraction(5, b, 10000) | |
106 | 106 | ||
107 | 107 | let ad = valueOrElse(getInteger(this, ab), ac) | |
108 | 108 | ||
109 | 109 | func ae () = "%s__factoryConfig" | |
110 | 110 | ||
111 | 111 | ||
112 | 112 | func af () = "%s%s__matcher__publicKey" | |
113 | 113 | ||
114 | 114 | ||
115 | 115 | func ag (ah) = (("%s%s%s__" + ah) + "__mappings__poolContract2LpAsset") | |
116 | 116 | ||
117 | 117 | ||
118 | 118 | func ai (aj,ak) = (((("%d%d%s__" + aj) + "__") + ak) + "__config") | |
119 | 119 | ||
120 | 120 | ||
121 | 121 | func al (am) = ("%s%s%s__mappings__baseAsset2internalId__" + am) | |
122 | 122 | ||
123 | 123 | ||
124 | 124 | func an () = "%s__shutdown" | |
125 | 125 | ||
126 | 126 | ||
127 | 127 | func ao (ap) = ("%s%s__poolWeight__" + ap) | |
128 | 128 | ||
129 | 129 | ||
130 | 130 | func aq () = "%s__allowedLpScriptHash" | |
131 | 131 | ||
132 | 132 | ||
133 | 133 | let ar = "%s__feeCollectorAddress" | |
134 | 134 | ||
135 | 135 | func as (at,au,av) = throw(((((("order validation failed: orderValid=" + toString(at)) + " senderValid=") + toString(au)) + " matcherValid=") + toString(av))) | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | func aw (ax,ay) = valueOrErrorMessage(getString(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], "")) | |
139 | 139 | ||
140 | 140 | ||
141 | 141 | func az (ax,ay) = valueOrErrorMessage(getInteger(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], "")) | |
142 | 142 | ||
143 | 143 | ||
144 | 144 | func aA (aB) = throw(makeString(["lp.ride:", aB], " ")) | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | let aC = addressFromStringValue(aw(this, O())) | |
148 | 148 | ||
149 | 149 | let aD = addressFromStringValue(aw(aC, ar)) | |
150 | 150 | ||
151 | 151 | func aE () = valueOrElse(getBoolean(aC, an()), false) | |
152 | 152 | ||
153 | 153 | ||
154 | 154 | func aF () = fromBase58String(aw(aC, af())) | |
155 | 155 | ||
156 | 156 | ||
157 | 157 | func aG () = { | |
158 | 158 | let aH = aw(this, Z()) | |
159 | 159 | let aI = aw(this, aa()) | |
160 | 160 | let ak = az(aC, al(aI)) | |
161 | 161 | let aj = az(aC, al(aH)) | |
162 | 162 | split(aw(aC, ai(toString(aj), toString(ak))), j) | |
163 | 163 | } | |
164 | 164 | ||
165 | 165 | ||
166 | 166 | func aJ (aK) = if ((aK == i)) | |
167 | 167 | then unit | |
168 | 168 | else fromBase58String(aK) | |
169 | 169 | ||
170 | 170 | ||
171 | 171 | func aL (aK) = if ((aK == unit)) | |
172 | 172 | then i | |
173 | 173 | else toBase58String(value(aK)) | |
174 | 174 | ||
175 | 175 | ||
176 | 176 | func aM (aN) = $Tuple7(addressFromStringValue(aN[o]), parseIntValue(aN[p]), fromBase58String(aN[q]), aJ(aN[r]), aJ(aN[s]), parseIntValue(aN[t]), parseIntValue(aN[u])) | |
177 | 177 | ||
178 | 178 | ||
179 | 179 | func aO () = split(aw(aC, ae()), j) | |
180 | 180 | ||
181 | 181 | ||
182 | 182 | let aP = valueOrErrorMessage(addressFromString(aO()[B]), "incorrect staking address") | |
183 | 183 | ||
184 | 184 | let aQ = valueOrErrorMessage(addressFromString(aO()[C]), "incorrect staking address") | |
185 | 185 | ||
186 | 186 | func aR (aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aS), toString(aT), toString(aU), toString(aV), toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(bb)], j) | |
187 | 187 | ||
188 | 188 | ||
189 | 189 | func bc (bd,be,bf,aV,aY,aZ) = makeString(["%d%d%d%d%d%d", toString(bd), toString(be), toString(bf), toString(aV), toString(aY), toString(aZ)], j) | |
190 | 190 | ||
191 | 191 | ||
192 | 192 | func bg (bh) = if ((bh == "WAVES")) | |
193 | 193 | then wavesBalance(this).available | |
194 | 194 | else assetBalance(this, fromBase58String(bh)) | |
195 | 195 | ||
196 | 196 | ||
197 | 197 | func bi (bj,bk) = fraction(bj, d, bk) | |
198 | 198 | ||
199 | 199 | ||
200 | 200 | func bl (bm,bn,bo,bp) = { | |
201 | 201 | let bq = D(bo, bm) | |
202 | 202 | let br = D(bp, bn) | |
203 | 203 | bi(br, bq) | |
204 | 204 | } | |
205 | 205 | ||
206 | 206 | ||
207 | 207 | func bs (bo,bp,bt) = { | |
208 | 208 | let bu = aG() | |
209 | 209 | let bv = parseIntValue(bu[t]) | |
210 | 210 | let bw = parseIntValue(bu[u]) | |
211 | 211 | let bx = bl(bv, bw, bo, bp) | |
212 | 212 | let bk = D(bo, bv) | |
213 | 213 | let bj = D(bp, bw) | |
214 | 214 | let by = D(bt, b) | |
215 | 215 | let bz = bi(bk, by) | |
216 | 216 | let bA = bi(bj, by) | |
217 | 217 | [bx, bz, bA] | |
218 | 218 | } | |
219 | 219 | ||
220 | 220 | ||
221 | 221 | func bB (bo,bp,bt) = { | |
222 | 222 | let bC = bs(bo, bp, bt) | |
223 | 223 | [G(bC[0], b), G(bC[1], b), G(bC[2], b)] | |
224 | 224 | } | |
225 | 225 | ||
226 | 226 | ||
227 | 227 | func bD (bE,bF,bG,W) = { | |
228 | 228 | let bu = aG() | |
229 | 229 | let bH = bu[q] | |
230 | 230 | let bI = bu[r] | |
231 | 231 | let bJ = bu[s] | |
232 | 232 | let bm = parseIntValue(bu[t]) | |
233 | 233 | let bn = parseIntValue(bu[u]) | |
234 | 234 | let bK = bu[p] | |
235 | 235 | let bL = valueOrErrorMessage(assetInfo(fromBase58String(bH)), (("Asset " + bH) + " doesn't exist")).quantity | |
236 | 236 | if ((bH != bF)) | |
237 | 237 | then throw("Invalid asset passed.") | |
238 | 238 | else { | |
239 | 239 | let bM = bg(bI) | |
240 | 240 | let bN = D(bM, bm) | |
241 | 241 | let bO = bg(bJ) | |
242 | 242 | let bP = D(bO, bn) | |
243 | 243 | let bQ = bi(bP, bN) | |
244 | 244 | let bR = G(bQ, b) | |
245 | 245 | let bS = D(bG, b) | |
246 | 246 | let bT = D(bL, b) | |
247 | 247 | let bU = fraction(bN, bS, bT) | |
248 | 248 | let bV = fraction(bP, bS, bT) | |
249 | 249 | let bW = G(bU, bm) | |
250 | 250 | let bX = G(bV, bn) | |
251 | 251 | let bY = if ((bE == "")) | |
252 | 252 | then nil | |
253 | 253 | else [ScriptTransfer(W, bW, if ((bI == "WAVES")) | |
254 | 254 | then unit | |
255 | 255 | else fromBase58String(bI)), ScriptTransfer(W, bX, if ((bJ == "WAVES")) | |
256 | 256 | then unit | |
257 | 257 | else fromBase58String(bJ)), StringEntry(Y(toString(W), bE), bc(bW, bX, bG, bR, height, lastBlock.timestamp)), IntegerEntry(R(), bR), IntegerEntry(S(height, lastBlock.timestamp), bR)] | |
258 | 258 | $Tuple10(bW, bX, bI, bJ, bM, bO, bL, bQ, bK, bY) | |
259 | 259 | } | |
260 | 260 | } | |
261 | 261 | ||
262 | 262 | ||
263 | 263 | func bZ (bE,ca,cb,cc,cd,ce,W,cf,cg) = { | |
264 | 264 | let bu = aG() | |
265 | 265 | let bH = fromBase58String(bu[q]) | |
266 | 266 | let ch = bu[r] | |
267 | 267 | let ci = bu[s] | |
268 | 268 | let cj = bu[v] | |
269 | 269 | let ck = bu[w] | |
270 | 270 | let bv = parseIntValue(bu[t]) | |
271 | 271 | let bw = parseIntValue(bu[u]) | |
272 | 272 | let bK = bu[p] | |
273 | 273 | let bL = valueOrErrorMessage(assetInfo(bH), (("Asset " + toBase58String(bH)) + " doesn't exist")).quantity | |
274 | 274 | let cl = toBase58String(valueOrElse(cc, fromBase58String("WAVES"))) | |
275 | 275 | let cm = toBase58String(valueOrElse(ce, fromBase58String("WAVES"))) | |
276 | 276 | if (if ((ch != cl)) | |
277 | 277 | then true | |
278 | 278 | else (ci != cm)) | |
279 | 279 | then throw("Invalid amt or price asset passed.") | |
280 | 280 | else { | |
281 | 281 | let bM = if (cf) | |
282 | 282 | then bg(ch) | |
283 | 283 | else (bg(ch) - cb) | |
284 | 284 | let bO = if (cf) | |
285 | 285 | then bg(ci) | |
286 | 286 | else (bg(ci) - cd) | |
287 | 287 | let cn = D(cb, bv) | |
288 | 288 | let co = D(cd, bw) | |
289 | 289 | let cp = bi(co, cn) | |
290 | 290 | let bN = D(bM, bv) | |
291 | 291 | let bP = D(bO, bw) | |
292 | 292 | let cq = if ((bL == 0)) | |
293 | 293 | then { | |
294 | 294 | let bQ = e | |
295 | 295 | let cr = e | |
296 | 296 | let by = pow((cn * co), 0, toBigInt(5), 1, 0, DOWN) | |
297 | 297 | $Tuple5(G(by, b), G(cn, bv), G(co, bw), bi((bP + co), (bN + cn)), cr) | |
298 | 298 | } | |
299 | 299 | else { | |
300 | 300 | let bQ = bi(bP, bN) | |
301 | 301 | let cr = fraction(N((bQ - cp)), d, bQ) | |
302 | 302 | let cs = D(ca, b) | |
303 | 303 | if (if ((bQ != e)) | |
304 | 304 | then (cr > cs) | |
305 | 305 | else false) | |
306 | 306 | then throw(((("Price slippage " + toString(cr)) + " exceeded the passed limit of ") + toString(cs))) | |
307 | 307 | else { | |
308 | 308 | let bT = D(bL, b) | |
309 | 309 | let ct = fraction(cn, bQ, d) | |
310 | 310 | let cu = fraction(co, d, bQ) | |
311 | 311 | let cv = if ((ct > co)) | |
312 | 312 | then $Tuple2(cu, co) | |
313 | 313 | else $Tuple2(cn, ct) | |
314 | 314 | let cw = cv._1 | |
315 | 315 | let cx = cv._2 | |
316 | 316 | let by = fraction(bT, cx, bP) | |
317 | 317 | $Tuple5(G(by, b), G(cw, bv), G(cx, bw), bQ, cr) | |
318 | 318 | } | |
319 | 319 | } | |
320 | 320 | let cy = cq._1 | |
321 | 321 | let cz = cq._2 | |
322 | 322 | let cA = cq._3 | |
323 | 323 | let bR = G(cq._4, b) | |
324 | 324 | let cB = G(cq._5, b) | |
325 | 325 | if ((0 >= cy)) | |
326 | 326 | then throw("Invalid calculations. LP calculated is less than zero.") | |
327 | 327 | else { | |
328 | 328 | let cC = if (!(cg)) | |
329 | 329 | then 0 | |
330 | 330 | else cy | |
331 | 331 | let cD = (cb - cz) | |
332 | 332 | let cE = (cd - cA) | |
333 | 333 | let cF = [IntegerEntry(R(), bR), IntegerEntry(S(height, lastBlock.timestamp), bR), StringEntry(V(W, bE), aR(cz, cA, cC, bR, ca, cB, height, lastBlock.timestamp, cD, cE))] | |
334 | 334 | $Tuple13(cy, cC, bR, bM, bO, bL, bH, bK, cF, cD, cE, cc, ce) | |
335 | 335 | } | |
336 | 336 | } | |
337 | 337 | } | |
338 | 338 | ||
339 | 339 | ||
340 | 340 | func cG (cH) = { | |
341 | 341 | let bu = aG() | |
342 | 342 | let cI = bu[r] | |
343 | 343 | let cJ = bu[s] | |
344 | 344 | let bK = parseIntValue(bu[p]) | |
345 | 345 | let bv = parseIntValue(bu[t]) | |
346 | 346 | let bw = parseIntValue(bu[u]) | |
347 | 347 | let cK = bg(cI) | |
348 | 348 | let cL = bg(cJ) | |
349 | 349 | let bQ = if ((cH.orderType == Buy)) | |
350 | 350 | then bl(bv, bw, (cK + cH.amount), cL) | |
351 | 351 | else bl(bv, bw, (cK - cH.amount), cL) | |
352 | 352 | let bR = G(bQ, b) | |
353 | 353 | if (if (if (aE()) | |
354 | 354 | then true | |
355 | 355 | else (bK == m)) | |
356 | 356 | then true | |
357 | 357 | else (bK == n)) | |
358 | 358 | then throw("Exchange operations disabled") | |
359 | 359 | else { | |
360 | 360 | let cM = cH.assetPair.amountAsset | |
361 | 361 | let cN = if ((cM == unit)) | |
362 | 362 | then "WAVES" | |
363 | 363 | else toBase58String(value(cM)) | |
364 | 364 | let cO = cH.assetPair.priceAsset | |
365 | 365 | let cP = if ((cO == unit)) | |
366 | 366 | then "WAVES" | |
367 | 367 | else toBase58String(value(cO)) | |
368 | 368 | if (if ((cN != cI)) | |
369 | 369 | then true | |
370 | 370 | else (cP != cJ)) | |
371 | 371 | then throw("Wrong order assets.") | |
372 | 372 | else { | |
373 | 373 | let cQ = cH.price | |
374 | 374 | let cR = fraction(b, bw, bv) | |
375 | 375 | let cS = J(cQ, b, cR) | |
376 | 376 | let cT = if ((cH.orderType == Buy)) | |
377 | 377 | then (bR >= cS) | |
378 | 378 | else (cS >= bR) | |
379 | 379 | true | |
380 | 380 | } | |
381 | 381 | } | |
382 | 382 | } | |
383 | 383 | ||
384 | 384 | ||
385 | 385 | func cU (cV) = if ((size(cV.payments) != 1)) | |
386 | 386 | then throw("exactly 1 payment is expected") | |
387 | 387 | else { | |
388 | 388 | let cW = value(cV.payments[0]) | |
389 | 389 | let bF = value(cW.assetId) | |
390 | 390 | let cX = cW.amount | |
391 | 391 | let cq = bD(toBase58String(cV.transactionId), toBase58String(bF), cX, cV.caller) | |
392 | 392 | let bW = cq._1 | |
393 | 393 | let bX = cq._2 | |
394 | 394 | let bK = parseIntValue(cq._9) | |
395 | 395 | let bY = cq._10 | |
396 | 396 | if (if (aE()) | |
397 | 397 | then true | |
398 | 398 | else (bK == n)) | |
399 | 399 | then throw(("Get operation is blocked by admin. Status = " + toString(bK))) | |
400 | 400 | else $Tuple5(bW, bX, cX, bF, bY) | |
401 | 401 | } | |
402 | 402 | ||
403 | 403 | ||
404 | 404 | func cY (cV,ca,cg) = if ((size(cV.payments) != 2)) | |
405 | 405 | then throw("exactly 2 payments are expected") | |
406 | 406 | else { | |
407 | 407 | let cZ = value(cV.payments[0]) | |
408 | 408 | let da = value(cV.payments[1]) | |
409 | 409 | let db = bZ(toBase58String(cV.transactionId), ca, cZ.amount, cZ.assetId, da.amount, da.assetId, toString(cV.caller), false, cg) | |
410 | 410 | let bK = parseIntValue(db._8) | |
411 | 411 | if (if (if (aE()) | |
412 | 412 | then true | |
413 | 413 | else (bK == l)) | |
414 | 414 | then true | |
415 | 415 | else (bK == n)) | |
416 | 416 | then throw(("Put operation is blocked by admin. Status = " + toString(bK))) | |
417 | 417 | else db | |
418 | 418 | } | |
419 | 419 | ||
420 | 420 | ||
421 | 421 | func dc (dd) = { | |
422 | 422 | let de = invoke(aC, "emit", [dd], nil) | |
423 | 423 | if ((de == de)) | |
424 | 424 | then { | |
425 | 425 | let df = { | |
426 | 426 | let dg = de | |
427 | 427 | if ($isInstanceOf(dg, "Address")) | |
428 | 428 | then { | |
429 | 429 | let dh = dg | |
430 | 430 | invoke(dh, "emit", [dd], nil) | |
431 | 431 | } | |
432 | 432 | else unit | |
433 | 433 | } | |
434 | 434 | if ((df == df)) | |
435 | 435 | then dd | |
436 | 436 | else throw("Strict value is not equal to itself.") | |
437 | 437 | } | |
438 | 438 | else throw("Strict value is not equal to itself.") | |
439 | 439 | } | |
440 | 440 | ||
441 | 441 | ||
442 | 442 | func di (dd) = { | |
443 | 443 | let dj = fraction(dd, ad, b) | |
444 | 444 | $Tuple2((dd - dj), dj) | |
445 | 445 | } | |
446 | 446 | ||
447 | 447 | ||
448 | 448 | func dk (dl,dm,W,X) = { | |
449 | 449 | let dn = (X == unit) | |
450 | 450 | let do = aM(aG()) | |
451 | 451 | let dp = do._1 | |
452 | 452 | let bK = do._2 | |
453 | 453 | let bH = do._3 | |
454 | 454 | let dq = do._4 | |
455 | 455 | let cJ = do._5 | |
456 | 456 | let dr = do._6 | |
457 | 457 | let ds = do._7 | |
458 | 458 | let dt = bg(aL(dq)) | |
459 | 459 | let du = bg(aL(cJ)) | |
460 | 460 | let dv = if ((dm == dq)) | |
461 | 461 | then true | |
462 | 462 | else if ((dm == cJ)) | |
463 | 463 | then false | |
464 | 464 | else aA("invalid asset") | |
465 | 465 | let dw = if (dn) | |
466 | 466 | then $Tuple2(dt, du) | |
467 | 467 | else if (dv) | |
468 | 468 | then $Tuple2((dt - dl), du) | |
469 | 469 | else $Tuple2(dt, (du - dl)) | |
470 | 470 | let dx = dw._1 | |
471 | 471 | let dy = dw._2 | |
472 | 472 | let dz = if (dv) | |
473 | 473 | then $Tuple2(dl, 0) | |
474 | 474 | else $Tuple2(0, dl) | |
475 | 475 | let dA = dz._1 | |
476 | 476 | let dB = dz._2 | |
477 | 477 | let dC = di(dA)._1 | |
478 | 478 | let dD = di(dB)._1 | |
479 | 479 | let dE = di(dl) | |
480 | 480 | let dF = dE._1 | |
481 | 481 | let dj = dE._2 | |
482 | 482 | let dG = (dx + dC) | |
483 | 483 | let dH = (dy + dD) | |
484 | 484 | let bR = G(bi(D(dH, ds), D(dG, dr)), b) | |
485 | 485 | let dI = if (dv) | |
486 | 486 | then dx | |
487 | 487 | else dy | |
488 | 488 | let dJ = toBigInt(dI) | |
489 | 489 | let dK = toBigInt(valueOrErrorMessage(assetInfo(bH), (("asset " + toBase58String(bH)) + " doesn't exist")).quantity) | |
490 | 490 | let dL = if ((dK > f)) | |
491 | 491 | then true | |
492 | 492 | else throw("initial deposit requires all coins") | |
493 | 493 | if ((dL == dL)) | |
494 | 494 | then { | |
495 | 495 | let dM = toBigInt(dF) | |
496 | 496 | let dN = toInt(((dK * (sqrtBigInt((c + ((dM * c) / dJ)), 8, 8, DOWN) - c)) / c)) | |
497 | 497 | let cF = if (dn) | |
498 | 498 | then nil | |
499 | 499 | else [IntegerEntry(R(), bR), IntegerEntry(S(height, lastBlock.timestamp), bR), StringEntry(V(toString(value(W)), toBase58String(value(X))), aR(dA, dB, dN, bR, 0, 0, height, lastBlock.timestamp, 0, 0))] | |
500 | 500 | let dO = fraction(dy, b, dx) | |
501 | 501 | let dP = fraction(dl, b, (dO + b)) | |
502 | 502 | let dQ = (dl - dP) | |
503 | 503 | let dR = fraction(dK, toBigInt(dQ), toBigInt(dy)) | |
504 | 504 | let dS = toInt(fraction((toBigInt(dN) - dR), c, dR)) | |
505 | 505 | $Tuple4(dN, cF, dj, dS) | |
506 | 506 | } | |
507 | 507 | else throw("Strict value is not equal to itself.") | |
508 | 508 | } | |
509 | 509 | ||
510 | 510 | ||
511 | 511 | func dT (dU,dF,dm,W,X) = { | |
512 | 512 | let dn = (X == unit) | |
513 | 513 | let dV = aM(aG()) | |
514 | 514 | let dp = dV._1 | |
515 | 515 | let bK = dV._2 | |
516 | 516 | let bH = dV._3 | |
517 | 517 | let dq = dV._4 | |
518 | 518 | let cJ = dV._5 | |
519 | 519 | let dW = dV._6 | |
520 | 520 | let dX = dV._7 | |
521 | 521 | let dY = [if ((dm == bH)) | |
522 | 522 | then true | |
523 | 523 | else throw("invalid lp asset")] | |
524 | 524 | if ((dY == dY)) | |
525 | 525 | then { | |
526 | 526 | let dZ = if ((dU == dq)) | |
527 | 527 | then true | |
528 | 528 | else if ((dU == cJ)) | |
529 | 529 | then false | |
530 | 530 | else aA("invalid asset") | |
531 | 531 | let ea = if (dZ) | |
532 | 532 | then toBigInt(bg(aL(dq))) | |
533 | 533 | else toBigInt(bg(aL(cJ))) | |
534 | 534 | let eb = bg(aL(dq)) | |
535 | 535 | let ec = bg(aL(cJ)) | |
536 | 536 | let ed = if (dZ) | |
537 | 537 | then eb | |
538 | 538 | else ec | |
539 | 539 | let ee = toBigInt(ed) | |
540 | 540 | let dK = toBigInt(valueOrErrorMessage(assetInfo(bH), (("asset " + toBase58String(bH)) + " doesn't exist")).quantity) | |
541 | 541 | let ef = toBigInt(dF) | |
542 | 542 | let eg = toInt(((ea * (c - pow((c - ((ef * c) / dK)), 8, h, 0, 8, DOWN))) / c)) | |
543 | 543 | let eh = di(eg) | |
544 | 544 | let ei = eh._1 | |
545 | 545 | let dj = eh._2 | |
546 | 546 | let ej = if (dZ) | |
547 | 547 | then $Tuple4(ei, 0, (eb - eg), ec) | |
548 | 548 | else $Tuple4(0, ei, eb, (ec - eg)) | |
549 | 549 | let ek = ej._1 | |
550 | 550 | let el = ej._2 | |
551 | 551 | let em = ej._3 | |
552 | 552 | let en = ej._4 | |
553 | 553 | let eo = bi(D(en, dX), D(em, dW)) | |
554 | 554 | let bR = G(eo, b) | |
555 | 555 | let cF = if (dn) | |
556 | 556 | then nil | |
557 | 557 | else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bc(ek, el, dF, bR, height, lastBlock.timestamp)), IntegerEntry(R(), bR), IntegerEntry(S(height, lastBlock.timestamp), bR)] | |
558 | 558 | let ep = bD("", aL(bH), dF, this) | |
559 | 559 | let eq = (ep._1 + ep._2) | |
560 | 560 | let dS = fraction((ei - eq), b, eq) | |
561 | 561 | $Tuple4(ei, cF, dj, dS) | |
562 | 562 | } | |
563 | 563 | else throw("Strict value is not equal to itself.") | |
564 | 564 | } | |
565 | 565 | ||
566 | 566 | ||
567 | 567 | func er () = { | |
568 | 568 | let dg = getString(P()) | |
569 | 569 | if ($isInstanceOf(dg, "String")) | |
570 | 570 | then { | |
571 | 571 | let es = dg | |
572 | 572 | fromBase58String(es) | |
573 | 573 | } | |
574 | 574 | else if ($isInstanceOf(dg, "Unit")) | |
575 | 575 | then unit | |
576 | 576 | else throw("Match error") | |
577 | 577 | } | |
578 | 578 | ||
579 | 579 | ||
580 | 580 | func et () = { | |
581 | 581 | let dg = getString(Q()) | |
582 | 582 | if ($isInstanceOf(dg, "String")) | |
583 | 583 | then { | |
584 | 584 | let es = dg | |
585 | 585 | fromBase58String(es) | |
586 | 586 | } | |
587 | 587 | else if ($isInstanceOf(dg, "Unit")) | |
588 | 588 | then unit | |
589 | 589 | else throw("Match error") | |
590 | 590 | } | |
591 | 591 | ||
592 | 592 | ||
593 | 593 | func eu (cV) = { | |
594 | 594 | let ev = throw("Permission denied") | |
595 | 595 | let dg = er() | |
596 | 596 | if ($isInstanceOf(dg, "ByteVector")) | |
597 | 597 | then { | |
598 | 598 | let ew = dg | |
599 | 599 | if ((cV.callerPublicKey == ew)) | |
600 | 600 | then true | |
601 | 601 | else ev | |
602 | 602 | } | |
603 | 603 | else if ($isInstanceOf(dg, "Unit")) | |
604 | 604 | then if ((cV.caller == this)) | |
605 | 605 | then true | |
606 | 606 | else ev | |
607 | 607 | else throw("Match error") | |
608 | 608 | } | |
609 | 609 | ||
610 | 610 | ||
611 | 611 | @Callable(cV) | |
612 | 612 | func setManager (ex) = { | |
613 | 613 | let ey = eu(cV) | |
614 | 614 | if ((ey == ey)) | |
615 | 615 | then { | |
616 | 616 | let ez = fromBase58String(ex) | |
617 | 617 | if ((ez == ez)) | |
618 | 618 | then [StringEntry(Q(), ex)] | |
619 | 619 | else throw("Strict value is not equal to itself.") | |
620 | 620 | } | |
621 | 621 | else throw("Strict value is not equal to itself.") | |
622 | 622 | } | |
623 | 623 | ||
624 | 624 | ||
625 | 625 | ||
626 | 626 | @Callable(cV) | |
627 | 627 | func confirmManager () = { | |
628 | 628 | let eA = et() | |
629 | 629 | let eB = if (isDefined(eA)) | |
630 | 630 | then true | |
631 | 631 | else throw("No pending manager") | |
632 | 632 | if ((eB == eB)) | |
633 | 633 | then { | |
634 | 634 | let eC = if ((cV.callerPublicKey == value(eA))) | |
635 | 635 | then true | |
636 | 636 | else throw("You are not pending manager") | |
637 | 637 | if ((eC == eC)) | |
638 | 638 | then [StringEntry(P(), toBase58String(value(eA))), DeleteEntry(Q())] | |
639 | 639 | else throw("Strict value is not equal to itself.") | |
640 | 640 | } | |
641 | 641 | else throw("Strict value is not equal to itself.") | |
642 | 642 | } | |
643 | 643 | ||
644 | 644 | ||
645 | 645 | ||
646 | 646 | @Callable(cV) | |
647 | 647 | func put (ca,eD) = if ((0 > ca)) | |
648 | 648 | then throw("Invalid slippageTolerance passed") | |
649 | 649 | else { | |
650 | 650 | let db = cY(cV, ca, true) | |
651 | 651 | let cC = db._2 | |
652 | 652 | let bH = db._7 | |
653 | 653 | let bY = db._9 | |
654 | 654 | let cD = db._10 | |
655 | 655 | let cE = db._11 | |
656 | 656 | let eE = db._12 | |
657 | 657 | let eF = db._13 | |
658 | 658 | let de = invoke(aC, "emit", [cC], nil) | |
659 | 659 | if ((de == de)) | |
660 | 660 | then { | |
661 | 661 | let df = { | |
662 | 662 | let dg = de | |
663 | 663 | if ($isInstanceOf(dg, "Address")) | |
664 | 664 | then { | |
665 | 665 | let dh = dg | |
666 | 666 | invoke(dh, "emit", [cC], nil) | |
667 | 667 | } | |
668 | 668 | else unit | |
669 | 669 | } | |
670 | 670 | if ((df == df)) | |
671 | 671 | then { | |
672 | 672 | let eG = if ((cD > 0)) | |
673 | 673 | then invoke(aQ, "put", nil, [AttachedPayment(eE, cD)]) | |
674 | 674 | else nil | |
675 | 675 | if ((eG == eG)) | |
676 | 676 | then { | |
677 | 677 | let eH = if ((cE > 0)) | |
678 | 678 | then invoke(aQ, "put", nil, [AttachedPayment(eF, cE)]) | |
679 | 679 | else nil | |
680 | 680 | if ((eH == eH)) | |
681 | 681 | then { | |
682 | 682 | let eI = if (eD) | |
683 | 683 | then { | |
684 | 684 | let eJ = invoke(aP, "stake", nil, [AttachedPayment(bH, cC)]) | |
685 | 685 | if ((eJ == eJ)) | |
686 | 686 | then nil | |
687 | 687 | else throw("Strict value is not equal to itself.") | |
688 | 688 | } | |
689 | 689 | else [ScriptTransfer(cV.caller, cC, bH)] | |
690 | 690 | (bY ++ eI) | |
691 | 691 | } | |
692 | 692 | else throw("Strict value is not equal to itself.") | |
693 | 693 | } | |
694 | 694 | else throw("Strict value is not equal to itself.") | |
695 | 695 | } | |
696 | 696 | else throw("Strict value is not equal to itself.") | |
697 | 697 | } | |
698 | 698 | else throw("Strict value is not equal to itself.") | |
699 | 699 | } | |
700 | 700 | ||
701 | 701 | ||
702 | 702 | ||
703 | 703 | @Callable(cV) | |
704 | 704 | func putForFree (eK) = if ((0 > eK)) | |
705 | 705 | then throw("Invalid value passed") | |
706 | 706 | else { | |
707 | 707 | let db = cY(cV, eK, false) | |
708 | 708 | db._9 | |
709 | 709 | } | |
710 | 710 | ||
711 | 711 | ||
712 | 712 | ||
713 | 713 | @Callable(cV) | |
714 | 714 | func putOneTkn (eL,eM) = { | |
715 | 715 | let eN = aM(aG()) | |
716 | 716 | let dp = eN._1 | |
717 | 717 | let bK = eN._2 | |
718 | 718 | let bH = eN._3 | |
719 | 719 | let dq = eN._4 | |
720 | 720 | let cJ = eN._5 | |
721 | 721 | let dr = eN._6 | |
722 | 722 | let ds = eN._7 | |
723 | 723 | let eO = if (if (aE()) | |
724 | 724 | then true | |
725 | 725 | else (bK == l)) | |
726 | 726 | then true | |
727 | 727 | else (bK == n) | |
728 | 728 | let dY = [if (!(eO)) | |
729 | 729 | then true | |
730 | 730 | else aA("put operation is blocked by admin"), if ((size(cV.payments) == 1)) | |
731 | 731 | then true | |
732 | 732 | else aA("exactly 1 payment are expected")] | |
733 | 733 | if ((dY == dY)) | |
734 | 734 | then { | |
735 | 735 | let eP = cV.payments[0] | |
736 | 736 | let dm = eP.assetId | |
737 | 737 | let dl = eP.amount | |
738 | 738 | let dF = dl | |
739 | 739 | let W = cV.caller | |
740 | 740 | let X = cV.transactionId | |
741 | 741 | let eQ = dk(dl, dm, W, X) | |
742 | 742 | let eR = eQ._1 | |
743 | 743 | let cF = eQ._2 | |
744 | 744 | let dj = eQ._3 | |
745 | 745 | let dS = eQ._4 | |
746 | 746 | let eS = if (if ((eL > 0)) | |
747 | 747 | then (eL > eR) | |
748 | 748 | else false) | |
749 | 749 | then throw(makeString(["amount to receive is less than ", toString(eL)], "")) | |
750 | 750 | else eR | |
751 | 751 | let de = dc(eS) | |
752 | 752 | if ((de == de)) | |
753 | 753 | then { | |
754 | 754 | let eI = if (eM) | |
755 | 755 | then { | |
756 | 756 | let eT = invoke(aP, "stake", nil, [AttachedPayment(bH, eS)]) | |
757 | 757 | if ((eT == eT)) | |
758 | 758 | then nil | |
759 | 759 | else throw("Strict value is not equal to itself.") | |
760 | 760 | } | |
761 | 761 | else [ScriptTransfer(cV.caller, eS, bH)] | |
762 | 762 | let eU = if ((dj > 0)) | |
763 | 763 | then [ScriptTransfer(aD, dj, dm)] | |
764 | 764 | else nil | |
765 | 765 | $Tuple2(((cF ++ eI) ++ eU), eS) | |
766 | 766 | } | |
767 | 767 | else throw("Strict value is not equal to itself.") | |
768 | 768 | } | |
769 | 769 | else throw("Strict value is not equal to itself.") | |
770 | 770 | } | |
771 | 771 | ||
772 | 772 | ||
773 | 773 | ||
774 | 774 | @Callable(cV) | |
775 | 775 | func getOneTkn (dU,eL,eV) = { | |
776 | 776 | let eW = aM(aG()) | |
777 | 777 | let dp = eW._1 | |
778 | 778 | let bK = eW._2 | |
779 | 779 | let bH = eW._3 | |
780 | 780 | let dq = eW._4 | |
781 | 781 | let cJ = eW._5 | |
782 | 782 | let dr = eW._6 | |
783 | 783 | let ds = eW._7 | |
784 | 784 | let eX = if (aE()) | |
785 | 785 | then true | |
786 | 786 | else (bK == n) | |
787 | 787 | let dY = [if (!(eX)) | |
788 | 788 | then true | |
789 | 789 | else aA("get operation is blocked by admin"), if ((size(cV.payments) == 1)) | |
790 | 790 | then true | |
791 | 791 | else aA("exactly 1 payment are expected")] | |
792 | 792 | if ((dY == dY)) | |
793 | 793 | then { | |
794 | 794 | let eP = cV.payments[0] | |
795 | 795 | let dm = eP.assetId | |
796 | 796 | let dF = eP.amount | |
797 | 797 | let W = cV.caller | |
798 | 798 | let X = cV.transactionId | |
799 | 799 | let eY = dT(aJ(dU), dF, dm, W, X) | |
800 | 800 | let eZ = eY._1 | |
801 | 801 | let cF = eY._2 | |
802 | 802 | let dj = eY._3 | |
803 | 803 | let dS = eY._4 | |
804 | 804 | let dd = if (if ((eL > 0)) | |
805 | 805 | then (eL > eZ) | |
806 | 806 | else false) | |
807 | 807 | then throw(makeString(["amount to receive is less than ", toString(eL)], "")) | |
808 | 808 | else eZ | |
809 | 809 | let fa = invoke(aC, "burn", [dF], [AttachedPayment(dm, dF)]) | |
810 | 810 | if ((fa == fa)) | |
811 | 811 | then { | |
812 | 812 | let fb = [ScriptTransfer(W, dd, aJ(dU))] | |
813 | 813 | $Tuple2(fb, dd) | |
814 | 814 | } | |
815 | 815 | else throw("Strict value is not equal to itself.") | |
816 | 816 | } | |
817 | 817 | else throw("Strict value is not equal to itself.") | |
818 | 818 | } | |
819 | 819 | ||
820 | 820 | ||
821 | 821 | ||
822 | 822 | @Callable(cV) | |
823 | 823 | func get () = { | |
824 | 824 | let cq = cU(cV) | |
825 | 825 | let fc = cq._1 | |
826 | 826 | let bX = cq._2 | |
827 | 827 | let cX = cq._3 | |
828 | 828 | let bF = cq._4 | |
829 | 829 | let bY = cq._5 | |
830 | 830 | let fd = invoke(aC, "burn", [cX], [AttachedPayment(bF, cX)]) | |
831 | 831 | if ((fd == fd)) | |
832 | 832 | then bY | |
833 | 833 | else throw("Strict value is not equal to itself.") | |
834 | 834 | } | |
835 | 835 | ||
836 | 836 | ||
837 | 837 | ||
838 | 838 | @Callable(cV) | |
839 | 839 | func getNoLess (fe,ff) = { | |
840 | 840 | let cq = cU(cV) | |
841 | 841 | let bW = cq._1 | |
842 | 842 | let bX = cq._2 | |
843 | 843 | let cX = cq._3 | |
844 | 844 | let bF = cq._4 | |
845 | 845 | let bY = cq._5 | |
846 | 846 | if ((fe > bW)) | |
847 | 847 | then throw(((("noLessThenAmtAsset failed: " + toString(bW)) + " < ") + toString(fe))) | |
848 | 848 | else if ((ff > bX)) | |
849 | 849 | then throw(((("noLessThenPriceAsset failed: " + toString(bX)) + " < ") + toString(ff))) | |
850 | 850 | else { | |
851 | 851 | let fd = invoke(aC, "burn", [cX], [AttachedPayment(bF, cX)]) | |
852 | 852 | if ((fd == fd)) | |
853 | 853 | then bY | |
854 | 854 | else throw("Strict value is not equal to itself.") | |
855 | 855 | } | |
856 | 856 | } | |
857 | 857 | ||
858 | 858 | ||
859 | 859 | ||
860 | 860 | @Callable(cV) | |
861 | 861 | func unstakeAndGet (dd) = { | |
862 | 862 | let fg = if ((size(cV.payments) != 0)) | |
863 | 863 | then throw("No payments are expected") | |
864 | 864 | else true | |
865 | 865 | if ((fg == fg)) | |
866 | 866 | then { | |
867 | 867 | let bu = aG() | |
868 | 868 | let bH = fromBase58String(bu[q]) | |
869 | 869 | let fh = invoke(aP, "unstake", [toBase58String(bH), dd], nil) | |
870 | 870 | if ((fh == fh)) | |
871 | 871 | then { | |
872 | 872 | let cq = bD(toBase58String(cV.transactionId), toBase58String(bH), dd, cV.caller) | |
873 | 873 | let bK = parseIntValue(cq._9) | |
874 | 874 | let bY = cq._10 | |
875 | 875 | let fi = if (if (aE()) | |
876 | 876 | then true | |
877 | 877 | else (bK == n)) | |
878 | 878 | then throw(("Get operation is blocked by admin. Status = " + toString(bK))) | |
879 | 879 | else true | |
880 | 880 | if ((fi == fi)) | |
881 | 881 | then { | |
882 | 882 | let fd = invoke(aC, "burn", [dd], [AttachedPayment(bH, dd)]) | |
883 | 883 | if ((fd == fd)) | |
884 | 884 | then bY | |
885 | 885 | else throw("Strict value is not equal to itself.") | |
886 | 886 | } | |
887 | 887 | else throw("Strict value is not equal to itself.") | |
888 | 888 | } | |
889 | 889 | else throw("Strict value is not equal to itself.") | |
890 | 890 | } | |
891 | 891 | else throw("Strict value is not equal to itself.") | |
892 | 892 | } | |
893 | 893 | ||
894 | 894 | ||
895 | 895 | ||
896 | 896 | @Callable(cV) | |
897 | 897 | func activate (fj,fk) = if ((toString(cV.caller) != toString(aC))) | |
898 | 898 | then throw("permissions denied") | |
899 | 899 | else $Tuple2([StringEntry(Z(), fj), StringEntry(aa(), fk)], "success") | |
900 | 900 | ||
901 | 901 | ||
902 | 902 | ||
903 | 903 | @Callable(cV) | |
904 | 904 | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG()) | |
905 | 905 | ||
906 | 906 | ||
907 | 907 | ||
908 | 908 | @Callable(cV) | |
909 | 909 | func getAccBalanceWrapperREADONLY (bh) = $Tuple2(nil, bg(bh)) | |
910 | 910 | ||
911 | 911 | ||
912 | 912 | ||
913 | 913 | @Callable(cV) | |
914 | 914 | func calcPricesWrapperREADONLY (bo,bp,bt) = { | |
915 | 915 | let bC = bs(bo, bp, bt) | |
916 | 916 | $Tuple2(nil, [toString(bC[0]), toString(bC[1]), toString(bC[2])]) | |
917 | 917 | } | |
918 | 918 | ||
919 | 919 | ||
920 | 920 | ||
921 | 921 | @Callable(cV) | |
922 | 922 | func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F))) | |
923 | 923 | ||
924 | 924 | ||
925 | 925 | ||
926 | 926 | @Callable(cV) | |
927 | 927 | func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I)) | |
928 | 928 | ||
929 | 929 | ||
930 | 930 | ||
931 | 931 | @Callable(cV) | |
932 | 932 | func calcPriceBigIntWrapperREADONLY (bj,bk) = $Tuple2(nil, toString(bi(parseBigIntValue(bj), parseBigIntValue(bk)))) | |
933 | 933 | ||
934 | 934 | ||
935 | 935 | ||
936 | 936 | @Callable(cV) | |
937 | 937 | func estimatePutOperationWrapperREADONLY (bE,ca,cb,cc,cd,ce,W,cf,cg) = $Tuple2(nil, bZ(bE, ca, cb, cc, cd, ce, W, cf, cg)) | |
938 | 938 | ||
939 | 939 | ||
940 | 940 | ||
941 | 941 | @Callable(cV) | |
942 | 942 | func estimateGetOperationWrapperREADONLY (bE,bF,bG,W) = { | |
943 | 943 | let cq = bD(bE, bF, bG, addressFromStringValue(W)) | |
944 | 944 | $Tuple2(nil, $Tuple10(cq._1, cq._2, cq._3, cq._4, cq._5, cq._6, cq._7, toString(cq._8), cq._9, cq._10)) | |
945 | 945 | } | |
946 | 946 | ||
947 | 947 | ||
948 | 948 | ||
949 | 949 | @Callable(cV) | |
950 | 950 | func statsREADONLY () = { | |
951 | 951 | let bu = aG() | |
952 | 952 | let bH = fromBase58String(bu[q]) | |
953 | 953 | let cI = bu[r] | |
954 | 954 | let cJ = bu[s] | |
955 | 955 | let cj = bu[v] | |
956 | 956 | let ck = bu[w] | |
957 | 957 | let bv = parseIntValue(bu[t]) | |
958 | 958 | let bw = parseIntValue(bu[u]) | |
959 | 959 | let fl = valueOrErrorMessage(assetInfo(bH), (("Asset " + toBase58String(bH)) + " doesn't exist")).quantity | |
960 | 960 | let cK = bg(cI) | |
961 | 961 | let cL = bg(cJ) | |
962 | 962 | let fm = if ((fl == 0)) | |
963 | 963 | then [e, e, e] | |
964 | 964 | else bs(cK, cL, fl) | |
965 | 965 | let bR = 0 | |
966 | 966 | let fn = G(fm[1], b) | |
967 | 967 | let fo = G(fm[2], b) | |
968 | 968 | let fp = value(getInteger(aC, ao(toString(this)))) | |
969 | 969 | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cK), toString(cL), toString(fl), toString(bR), toString(fn), toString(fo), toString(fp)], j)) | |
970 | 970 | } | |
971 | 971 | ||
972 | 972 | ||
973 | 973 | ||
974 | 974 | @Callable(cV) | |
975 | 975 | func evaluatePutByAmountAssetREADONLY (cb) = { | |
976 | 976 | let bu = aG() | |
977 | 977 | let bH = fromBase58String(bu[q]) | |
978 | 978 | let ch = bu[r] | |
979 | 979 | let bI = fromBase58String(ch) | |
980 | 980 | let ci = bu[s] | |
981 | 981 | let bJ = fromBase58String(ci) | |
982 | 982 | let bv = parseIntValue(bu[t]) | |
983 | 983 | let bw = parseIntValue(bu[u]) | |
984 | 984 | let bK = bu[p] | |
985 | 985 | let fl = valueOrErrorMessage(assetInfo(bH), (("Asset " + toBase58String(bH)) + " doesn't exist")).quantity | |
986 | 986 | let cK = bg(ch) | |
987 | 987 | let cL = bg(ci) | |
988 | 988 | let bq = D(cK, bv) | |
989 | 989 | let br = D(cL, bw) | |
990 | 990 | let bQ = if ((fl == 0)) | |
991 | 991 | then e | |
992 | 992 | else bi(br, bq) | |
993 | 993 | let cn = D(cb, bv) | |
994 | 994 | let co = fraction(cn, bQ, d) | |
995 | 995 | let cd = G(co, bw) | |
996 | 996 | let db = bZ("", 500000, cb, bI, cd, bJ, "", true, false) | |
997 | 997 | let cy = db._1 | |
998 | 998 | let fq = db._3 | |
999 | 999 | let bM = db._4 | |
1000 | 1000 | let bO = db._5 | |
1001 | 1001 | let bL = db._6 | |
1002 | 1002 | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cy), toString(G(bQ, b)), toString(bM), toString(bO), toString(bL), bK, toString(cb), toString(cd)], j)) | |
1003 | 1003 | } | |
1004 | 1004 | ||
1005 | 1005 | ||
1006 | 1006 | ||
1007 | 1007 | @Callable(cV) | |
1008 | 1008 | func evaluatePutByPriceAssetREADONLY (cd) = { | |
1009 | 1009 | let bu = aG() | |
1010 | 1010 | let bH = fromBase58String(bu[q]) | |
1011 | 1011 | let ch = bu[r] | |
1012 | 1012 | let bI = fromBase58String(ch) | |
1013 | 1013 | let ci = bu[s] | |
1014 | 1014 | let bJ = fromBase58String(ci) | |
1015 | 1015 | let bv = parseIntValue(bu[t]) | |
1016 | 1016 | let bw = parseIntValue(bu[u]) | |
1017 | 1017 | let bK = bu[p] | |
1018 | 1018 | let fl = valueOrErrorMessage(assetInfo(bH), (("Asset " + toBase58String(bH)) + " doesn't exist")).quantity | |
1019 | 1019 | let fr = bg(ch) | |
1020 | 1020 | let fs = bg(ci) | |
1021 | 1021 | let ft = D(fr, bv) | |
1022 | 1022 | let fu = D(fs, bw) | |
1023 | 1023 | let bQ = if ((fl == 0)) | |
1024 | 1024 | then e | |
1025 | 1025 | else bi(fu, ft) | |
1026 | 1026 | let co = D(cd, bw) | |
1027 | 1027 | let cn = fraction(co, d, bQ) | |
1028 | 1028 | let cb = G(cn, bv) | |
1029 | 1029 | let db = bZ("", 500000, cb, bI, cd, bJ, "", true, false) | |
1030 | 1030 | let cy = db._1 | |
1031 | 1031 | let fq = db._3 | |
1032 | 1032 | let bM = db._4 | |
1033 | 1033 | let bO = db._5 | |
1034 | 1034 | let bL = db._6 | |
1035 | 1035 | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cy), toString(G(bQ, b)), toString(bM), toString(bO), toString(bL), bK, toString(cb), toString(cd)], j)) | |
1036 | 1036 | } | |
1037 | 1037 | ||
1038 | 1038 | ||
1039 | 1039 | ||
1040 | 1040 | @Callable(cV) | |
1041 | 1041 | func evaluateGetREADONLY (fv,fw) = { | |
1042 | 1042 | let cq = bD("", fv, fw, this) | |
1043 | 1043 | let bW = cq._1 | |
1044 | 1044 | let bX = cq._2 | |
1045 | 1045 | let bM = cq._5 | |
1046 | 1046 | let bO = cq._6 | |
1047 | 1047 | let bL = cq._7 | |
1048 | 1048 | let bR = cq._8 | |
1049 | 1049 | let bK = parseIntValue(cq._9) | |
1050 | 1050 | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bW), toString(bX), toString(bM), toString(bO), toString(bL), toString(bR), toString(bK)], j)) | |
1051 | 1051 | } | |
1052 | 1052 | ||
1053 | 1053 | ||
1054 | 1054 | @Verifier(fx) | |
1055 | 1055 | func fy () = { | |
1056 | 1056 | let fz = { | |
1057 | 1057 | let dg = er() | |
1058 | 1058 | if ($isInstanceOf(dg, "ByteVector")) | |
1059 | 1059 | then { | |
1060 | 1060 | let ew = dg | |
1061 | 1061 | ew | |
1062 | 1062 | } | |
1063 | 1063 | else if ($isInstanceOf(dg, "Unit")) | |
1064 | 1064 | then fx.senderPublicKey | |
1065 | 1065 | else throw("Match error") | |
1066 | 1066 | } | |
1067 | 1067 | let dg = fx | |
1068 | 1068 | if ($isInstanceOf(dg, "Order")) | |
1069 | 1069 | then { | |
1070 | 1070 | let cH = dg | |
1071 | 1071 | let fA = aF() | |
1072 | 1072 | let at = cG(cH) | |
1073 | 1073 | let au = sigVerify(cH.bodyBytes, cH.proofs[0], cH.senderPublicKey) | |
1074 | 1074 | let av = sigVerify(cH.bodyBytes, cH.proofs[1], fA) | |
1075 | 1075 | if (if (if (at) | |
1076 | 1076 | then au | |
1077 | 1077 | else false) | |
1078 | 1078 | then av | |
1079 | 1079 | else false) | |
1080 | 1080 | then true | |
1081 | 1081 | else as(at, au, av) | |
1082 | 1082 | } | |
1083 | 1083 | else if ($isInstanceOf(dg, "SetScriptTransaction")) | |
1084 | 1084 | then { | |
1085 | 1085 | let es = dg | |
1086 | 1086 | let fB = blake2b256(value(es.script)) | |
1087 | 1087 | let fC = fromBase64String(value(getString(aC, aq()))) | |
1088 | 1088 | let fD = scriptHash(this) | |
1089 | 1089 | if (if ((fC == fB)) | |
1090 | 1090 | then (fD != fB) | |
1091 | 1091 | else false) | |
1092 | 1092 | then true | |
1093 | 1093 | else sigVerify(fx.bodyBytes, fx.proofs[0], fz) | |
1094 | 1094 | } | |
1095 | 1095 | else sigVerify(fx.bodyBytes, fx.proofs[0], fz) | |
1096 | 1096 | } | |
1097 | 1097 |
github/deemru/w8io/169f3d6 93.14 ms ◑