tx · 3fxAE1V8ZcKjxvj8KcJ98NozrcCVL72USbdwGzKNm1L2

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03600000 Waves

2022.12.07 12:08 [2349724] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "3fxAE1V8ZcKjxvj8KcJ98NozrcCVL72USbdwGzKNm1L2", "fee": 3600000, "feeAssetId": null, "timestamp": 1670404013431, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "57pvFkur3ZQMnXj2hiyEr8zhdSJoLsoHgm5bULzp3MM42BjniB3XBwWhVjGL4tM9vSnbTDb6FG9nCrGPZNKsvDia" ], "script": "base64:BgLNKAgCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgAiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgZrZXlETHAiFWtleURMcFJlZnJlc2hlZEhlaWdodCISa2V5RExwUmVmcmVzaERlbGF5IhZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9kTHBSZWZyZXNoRGVsYXkiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIDc3RyIgckbWF0Y2gwIgZ2YWxTdHIiBHN0cmYiBGFkZHIiA2tleSIEaW50ZiIIdGhyb3dFcnIiA21zZyIGZm10RXJyIgNmY2EiAUEiA2lncyICbXAiE2ZlZUNvbGxlY3RvckFkZHJlc3MiA2dwYyIFYW10QXMiB3ByaWNlQXMiCGlQcmljZUFzIgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwNzI1NTc0NDEiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIgNnZmMiDWZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIPc2xpcGFnZUNvbnRyYWN0Igtnd3hDb250cmFjdCIMcmVzdENvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiCnNsaXBCeVVzZXIiDHNsaXBwYWdlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIgxzbGlwYWdlQW1BbXQiDHNsaXBhZ2VQckFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIgRjcGJpIghwckFtdFgxOCIIYW1BbXRYMTgiA3ZhZCICQTEiAkEyIghzbGlwcGFnZSIEZGlmZiIEcGFzcyICdmQiAkQxIgJEMCIEc2xwZyIEZmFpbCIDcGNwIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiC2FtdEFzQW10WDE4IgpwckFzQW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIDY2ZnIghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4Ig9jYWxjdWxhdGVQcmljZXMiAXAiB3Rha2VGZWUiBmFtb3VudCIJZmVlQW1vdW50IgNlZ28iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiC3VzZXJBZGRyZXNzIgRscElkIgRhbUlkIgRwcklkIgVhbURjbSIFcHJEY20iA3N0cyIHbHBFbWlzcyIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4IgpscEVtaXNzWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiA2VwbyIHaW5BbUFtdCIGaW5BbUlkIgdpblByQW10IgZpblBySWQiBmlzRXZhbCIGZW1pdExwIgppc09uZUFzc2V0IhB2YWxpZGF0ZVNsaXBwYWdlIgZwbXRBbXQiBXBtdElkIgdhbUlkU3RyIgdwcklkU3RyIglpbkFtSWRTdHIiCWluUHJJZFN0ciIGYW10RGNtIghwcmljZURjbSIEbHBFbSIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIBciILc2xpcHBhZ2VYMTgiD3NsaXBwYWdlUmVhbFgxOCINbHBFbWlzc2lvblgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiINJHQwMTc4NzIxODIxNyIKd3JpdGVBbUFtdCIKd3JpdGVQckFtdCILY29tbW9uU3RhdGUiBGdldEQiAnhwIgN4cDAiA3hwMSIBcyIBYSIDYW5uIgt4cDBfeHAxX25fbiIFYW5uX3MiBWFubl8xIgljYWxjRE5leHQiAWQiAmRkIgNkZGQiAmRwIgRjYWxjIgNhY2MiAWkiBWROZXh0IghkRGlmZlJhdyIFZERpZmYiA2FyciINJHQwMjAxMjgyMDE3NiICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiBWZvdW5kIgdnZXRET2xkIgFuIgphUHJlY2lzaW9uIhBhbm5fc19hUHJlY2lzaW9uIg5hbm5fYVByZWNpc2lvbiICbjEiA2N1ciINJHQwMjA4MDUyMDgyNSINJHQwMjEyNDYyMTI5MyIFZ2V0WUQiAUQiAXgiAWMiAWIiDSR0MDIxNzkzMjE4MTMiAXkiBXlOZXh0IgV5RGlmZiINJHQwMjIxMjAyMjE2NyIHY2FsY0RMcCINYW1vdW50QmFsYW5jZSIMcHJpY2VCYWxhbmNlIgpscEVtaXNzaW9uIgp1cGRhdGVkRExwIg5jYWxjQ3VycmVudERMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50RExwIhJyZWZyZXNoRExwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRETHAiBm9sZERMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI0MTA2MjQzMTgiA2RMcCINJHQwMjQ2NDgyNDc0OCINdW51c2VkQWN0aW9ucyIGZExwTmV3Igxpc09yZGVyVmFsaWQiAmNnIgNwbXQiAmNwIgZjYWxsZXIiB2FtQXNQbXQiB3ByQXNQbXQiDWNhbGNQdXRPbmVUa24iCXBtdEFtdFJhdyILd2l0aFRha2VGZWUiDWNoZWNoRW1pc3Npb24iDSR0MDI3MDY1Mjc1MjciDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIg0kdDAyNzUzMzI3NzA5IgthbUFtb3VudFJhdyILcHJBbW91bnRSYXciDSR0MDI3NzEzMjc5NTIiCGFtQW1vdW50IghwckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciBmNoZWNrRCIIbHBBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIhNnZXRPbmVUa25WMkludGVybmFsIgpvdXRBc3NldElkIgxtaW5PdXRBbW91bnQiCHBheW1lbnRzIgxvcmlnaW5DYWxsZXIiDXRyYW5zYWN0aW9uSWQiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiCnBvb2xTdGF0dXMiDSR0MDMwMDEwMzAxMjEiAUAiCHRvdGFsR2V0Igt0b3RhbEFtb3VudCINJHQwMzAzMTEzMDYxOCIFb3V0QW0iBW91dFByIghjdXJQclgxOCIFY3VyUHIiEW91dEFzc2V0SWRPcldhdmVzIhBzZW5kRmVlVG9NYXRjaGVyIgRidXJuIg0kdDAzMTQwMzMxNzUzIhBmZWVBbW91bnRGb3JDYWxjIhBvdXRJbkFtb3VudEFzc2V0Ig0kdDAzMTc1NjMxODY0IhFyZWZyZXNoRExwQWN0aW9ucyIRaXNVcGRhdGVkRExwVmFsaWQiAW0iAnBtIgJwZCIJaXNNYW5hZ2VyIgJwayICbW0iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgJjbSIDaHBtIgNjcG0iBHNsaXAiCWF1dG9TdGFrZSIHZmFjdENmZyILc3Rha2luZ0NudHIiCHNsaXBDbnRyIgphbUFzc2V0UG10IgpwckFzc2V0UG10IgFlIglscEFzc2V0SWQiAmVsIgZsZWdhY3kiAnNhIgJzcCIIbHBUcm5zZnIiAnNzIg0kdDAzNTcyMDM1Nzg1IiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCIGY2hlY2tzIg0kdDAzNjkyMjM3MDgwIgdlc3RpbUxQIg0kdDAzNzg5NTM4MjQ0IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMzgyNDczODM1NSIHbWF4U2xwZyIGZXN0UHV0Ig0kdDAzOTMxNDM5Mzc5IglvdXRBbXRBbXQiDSR0MDQwMTY4NDAyNTAiDWlzR2V0RGlzYWJsZWQiDSR0MDQwODY4NDEwMjMiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDQxNTQ3NDE2MTEiEGRMcFVwZGF0ZUFjdGlvbnMiDWxwQXNzZXRBbW91bnQiBWluZGV4IgRuZXdZIgJkeSILdG90YWxHZXRSYXciDSR0MDQyNTExNDI1NjAiDSR0MDQyOTA1NDMwMjAiDnN1bU9mR2V0QXNzZXRzIhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNDQxODg0NDI2OSINY2hlY2tQYXltZW50cyIKZmFjdG9yeUNmZyIHc3Rha2luZyIKdW5zdGFrZUludiIBdiIFYnVybkEiDSR0MDQ1MzMyNDU0MTMiDXVuc3Rha2VBbW91bnQiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIDcmVzIgxjaGVja0Ftb3VudHMiDSR0MDQ2NjYxNDY3NDIiDSR0MDQ3Njc2NDc4NjQiEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIg0kdDA0ODEyMzQ4MjI2Ig0kdDA0ODUwNTQ4NjA5IghhbXRBc1N0ciIHcHJBc1N0ciIBayICcHIiDHJlc1NjYWxlTXVsdCIHdXNyQWRkciIHcG10QXNJZCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgpvcmRlclZhbGlkIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2h6AAFhAIDC1y8AAWIJALYCAQCAwtcvAAFjCQC2AgEAgICQu7rWrfANAAFkCQC2AgEAAAABZQkAtgIBAAAAAWYJALYCAQABAAFnCQC2AgEAAgABaAkAtgIBAAMAAWkJALYCAQAEAAFqCQC2AgEJAGUCBQFhCQBpAgkAaAIFAWEAAQUBYQABawIFV0FWRVMAAWwCAzEwMAABbQIBMQABbgICX18AAW8CAAABcAABAAFxAAIAAXIAAwABcwAEAAF0AAEAAXUAAgABdgADAAF3AAQAAXgABQABeQAGAAF6AAcAAUEACAABQgAJAAFDAAEAAUQABgABRQAHAAFGAAoAAUcJAGsDAAoFAWEAkE4BAUgCAUkBSgkAvAIDCQC2AgEFAUkFAWMJALYCAQUBSgEBSwIBTAFNCQCgAwEJALwCAwUBTAkAtgIBBQFNBQFjAQFOAwFPAVABUQkAawMFAU8FAVAFAVEBAVIBAUwDCQC/AgIFAWQFAUwJAL4CAQUBTAUBTAEBUwEBTAMJAL8CAgUBZAUBTAkAvgIBBQFMBQFMAQFUAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBVQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFWAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFXAAIRJXMlc19fcHJpY2VfX2xhc3QBAVgCAVkBWgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVkJAMwIAgkApAMBBQFaBQNuaWwFAW4BAmFhAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFiAgJfXwUCYWMBAmFkAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFiAgJfXwUCYWMBAmFlAAIPJXNfX2Ftb3VudEFzc2V0AQJhZgACDiVzX19wcmljZUFzc2V0AQJhZwACByVzX19hbXABAmFoAAINJXNfX2FkZG9uQWRkcgACYWkCByVzX19mZWUAAmFqCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFpBQFHAAJhawkAuQkCCQDMCAICAiVzCQDMCAICA2RMcAUDbmlsBQFuAAJhbAkAuQkCCQDMCAICAiVzCQDMCAICEmRMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQFuAAJhbQkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hETHBEZWxheQUDbmlsBQFuAAJhbgABAAJhbwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhbQUCYW4BAmFwAAIRJXNfX2ZhY3RvcnlDb25maWcBAmFxAAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhcgICYXMCYXQJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmFzAgJfXwUCYXQCCF9fY29uZmlnAQJhdQECYXYJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYXYBAmF3AAIMJXNfX3NodXRkb3duAQJheAACHSVzX19hbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAQJheQACFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJhegMCYUECYUICYUMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRRmFpbGVkOiBvcmRWYWxpZD0JAKUDAQUCYUECCyBzbmRyVmFsaWQ9CQClAwEFAmFCAgwgbXRjaHJWYWxpZD0JAKUDAQUCYUMBAmFEAQFMBAJhRQUBTAMJAAECBQJhRQIGU3RyaW5nBAJhRgUCYUUFAmFGCQACAQITZmFpbCBjYXN0IHRvIFN0cmluZwECYUcCAmFIAmFJCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYUgFAmFJCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFICQDMCAICAS4JAMwIAgUCYUkJAMwIAgIMIG5vdCBkZWZpbmVkBQNuaWwCAAECYUoCAmFIAmFJCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYUgFAmFJCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFICQDMCAICAS4JAMwIAgUCYUkJAMwIAgIMIG5vdCBkZWZpbmVkBQNuaWwCAAECYUsBAmFMCQACAQkAuQkCCQDMCAICD2xwX3N0YWJsZS5yaWRlOgkAzAgCBQJhTAUDbmlsAgEgAQJhTQECYUwJALkJAgkAzAgCAg9scF9zdGFibGUucmlkZToJAMwIAgUCYUwFA25pbAIBIAACYU4JARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhRwIFBHRoaXMJAQFUAAACYU8JAQJhRwIFBHRoaXMJAQJhZwABAmFQAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJhTgkBAmF3AAcBAmFRAAkA2QQBCQECYUcCBQJhTgkBAmFxAAACYVIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhRwIFAmFOCQECYXkAAQJhUwAEAmFUCQECYUcCBQR0aGlzCQECYWUABAJhVQkBAmFHAgUEdGhpcwkBAmFmAAQCYVYJAQJhSgIFAmFOCQECYXUBBQJhVQQCYXMJAQJhSgIFAmFOCQECYXUBBQJhVAkAtQkCCQECYUcCBQJhTgkBAmFyAgkApAMBBQJhcwkApAMBBQJhVgUBbgECYVcBAmFYAwkAAAIFAmFYBQFrBQR1bml0CQDZBAEFAmFYAQJhWQECYVgDCQAAAgUCYVgFBHVuaXQFAWsJANgEAQkBBXZhbHVlAQUCYVgBAmFaAQJiYQkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmJhBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmEFAXUJANkEAQkAkQMCBQJiYQUBdgkBAmFXAQkAkQMCBQJiYQUBdwkBAmFXAQkAkQMCBQJiYQUBeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJhBQF5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmEFAXoAAmJiCQECYVoBCQECYVMAAAJiYwUCYmIAAmJkCAUCYmMCXzEAAmJlCAUCYmMCXzIAAmJmCAUCYmMCXzMAAmJnCAUCYmMCXzQAAmJoCAUCYmMCXzUAAmJpCAUCYmMCXzYAAmJqCAUCYmMCXzcBAmJrAAkAtQkCCQECYUcCBQJhTgkBAmFwAAUBbgACYmwJAQJiawAAAmJtCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJibAUBQwIgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MAAmJuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJibAUBRQIgSW52YWxpZCBzbGlwYWdlIGNvbnRyYWN0IGFkZHJlc3MAAmJvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJibAUBRgIcSW52YWxpZCBnd3ggY29udHJhY3QgYWRkcmVzcwACYnAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJsBQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJicQoCYnICYnMCYnQCYnUCYnYCYncCYngCYnkCYnoCYkEJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJyCQDMCAIJAKQDAQUCYnMJAMwIAgkApAMBBQJidAkAzAgCCQCkAwEFAmJ1CQDMCAIJAKQDAQUCYnYJAMwIAgkApAMBBQJidwkAzAgCCQCkAwEFAmJ4CQDMCAIJAKQDAQUCYnkJAMwIAgkApAMBBQJiegkAzAgCCQCkAwEFAmJBBQNuaWwFAW4BAmJCBgJiQwJiRAJiRQJidQJieAJieQkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJDCQDMCAIJAKQDAQUCYkQJAMwIAgkApAMBBQJiRQkAzAgCCQCkAwEFAmJ1CQDMCAIJAKQDAQUCYngJAMwIAgkApAMBBQJieQUDbmlsBQFuAQJiRgECYkcDCQAAAgUCYkcCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJHAQJiSAICYkkCYkoJALwCAwUCYkkFAWMFAmJKAQJiSwMCYkwCYk0CYk4EAmJPCQC8AgMJALgCAgUCYkwFAmJNBQFiBQJiTQQCYlAJAL8CAgkAuAICBQJiTgkBAVIBBQJiTwUBZAMJAQEhAQUCYlAJAAIBCQCsAgICCkJpZyBzbHBnOiAJAKYDAQUCYk8JAJQKAgUCYlAJAJkDAQkAzAgCBQJiTAkAzAgCBQJiTQUDbmlsAQJiUQMCYlICYlMCYlQEAmJPCQC8AgMFAmJTBQFiBQJiUgQCYlUJAL8CAgUCYlQFAmJPAwMFAmJVBgkAvwICBQJiUwUCYlIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCmAwEFAmJTAgEgCQCmAwEFAmJSAgEgCQCmAwEFAmJPAgEgCQCmAwEFAmJUBQJiVQECYlYEAmJXAmJYAmJZAmJaBAJjYQkBAUgCBQJiWQUCYlcEAmNiCQEBSAIFAmJaBQJiWAkBAmJIAgUCY2IFAmNhAQJjYwMCYlkCYloCY2QEAmNlCQECYVMABAJjZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNlBQF5BAJjZwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNlBQF6BAJjaAkBAmJWBAUCY2YFAmNnBQJiWQUCYloEAmJKCQEBSAIFAmJZBQJjZgQCYkkJAQFIAgUCYloFAmNnBAJjaQkBAUgCBQJjZAUBYQQCY2oJAQJiSAIFAmJKBQJjaQQCY2sJAQJiSAIFAmJJBQJjaQkAzAgCBQJjaAkAzAgCBQJjagkAzAgCBQJjawUDbmlsAQJjbAMCYlkCYloCY2QEAmNtCQECY2MDBQJiWQUCYloFAmNkCQDMCAIJAQFLAgkAkQMCBQJjbQAABQFhCQDMCAIJAQFLAgkAkQMCBQJjbQABBQFhCQDMCAIJAQFLAgkAkQMCBQJjbQACBQFhBQNuaWwBAmNuAQJjbwQCY3AJAGsDBQJjbwUCYWoFAWEJAJQKAgkAZQIFAmNvBQJjcAUCY3ABAmNxBAJjcgJjcwJjdAJjdQQCY2UJAQJhUwAEAmN2CQCRAwIFAmNlBQF2BAJjdwkAkQMCBQJjZQUBdwQCY3gJAJEDAgUCY2UFAXgEAmN5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY2UFAXkEAmN6CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY2UFAXoEAmNBCQCRAwIFAmNlBQF1BAJjQggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmN2AgtXcm9uZyBMUCBpZAhxdWFudGl0eQMJAQIhPQIFAmN2BQJjcwkAAgECD1dyb25nIHBtdCBhc3NldAQCY0MJAQJiRgEFAmN3BAJjRAkBAUgCBQJjQwUCY3kEAmNFCQECYkYBBQJjeAQCY0YJAQFIAgUCY0UFAmN6BAJjRwkBAmJIAgUCY0YFAmNEBAJjSAkBAUsCBQJjRwUBYQQCY0kJAQFIAgUCY3QFAWEEAmNKCQEBSAIFAmNCBQFhBAJjSwkAvAIDBQJjRAUCY0kFAmNKBAJjTAkAvAIDBQJjRgUCY0kFAmNKBAJjTQkBAUsCBQJjSwUCY3kEAmNOCQEBSwIFAmNMBQJjegQCY08DCQAAAgUCY3ICAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJjTQMJAAACBQJjdwIFV0FWRVMFBHVuaXQJANkEAQUCY3cJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3UFAmNOAwkAAAIFAmN4AgVXQVZFUwUEdW5pdAkA2QQBBQJjeAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEFAmN1BQJjcgkBAmJCBgUCY00FAmNOBQJjdAUCY0gFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gFA25pbAkAnAoKBQJjTQUCY04FAmN3BQJjeAUCY0MFAmNFBQJjQgUCY0cFAmNBBQJjTwECY1ANAmNyAmJOAmNRAmNSAmNTAmNUAmN1AmNVAmNWAmNXAmNYAmNZAmNaBAJjZQkBAmFTAAQCY3YJANkEAQkAkQMCBQJjZQUBdgQCZGEJAJEDAgUCY2UFAXcEAmRiCQCRAwIFAmNlBQF4BAJkYwkAkQMCBQJjZQUBQQQCZGQJAJEDAgUCY2UFAUIEAmRlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY2UFAXkEAmRmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY2UFAXoEAmNBCQCRAwIFAmNlBQF1BAJkZwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJjdgIIV3IgbHAgYXMIcXVhbnRpdHkEAmNDAwUCY1UJAQJiRgEFAmRhAwMFAmNXCQAAAgUCY1oFAmRhBwkAZQIJAQJiRgEFAmRhBQJjWQMFAmNXCQECYkYBBQJkYQkAZQIJAQJiRgEFAmRhBQJjUQQCY0UDBQJjVQkBAmJGAQUCZGIDAwUCY1cJAAACBQJjWgUCZGIHCQBlAgkBAmJGAQUCZGIFAmNZAwUCY1cJAQJiRgEFAmRiCQBlAgkBAmJGAQUCZGIFAmNTBAJkaAkBAUgCBQJjUQUCZGUEAmRpCQEBSAIFAmNTBQJkZgQCZGoJAQJiSAIFAmRpBQJkaAQCY0QJAQFIAgUCY0MFAmRlBAJjRgkBAUgCBQJjRQUCZGYEAmRrAwkAAAIFAmRnAAAEAmNHBQFkBAJkbAUBZAQCY2kJAHYGCQC5AgIFAmRoBQJkaQAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUsCBQJjaQUBYQkBAUsCBQJkaAUCZGUJAQFLAgUCZGkFAmRmCQECYkgCCQC3AgIFAmNGBQJkaQkAtwICBQJjRAUCZGgFAmRsBAJjRwkBAmJIAgUCY0YFAmNEBAJkbQkAvAIDCQEBUgEJALgCAgUCY0cFAmRqBQFjBQJjRwQCZGwJAQFIAgUCYk4FAWEDAwMFAmNYCQECIT0CBQJjRwUBZAcJAL8CAgUCZG0FAmRsBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJkbQIDID4gCQCmAwEFAmRsBAJkbgkBAUgCBQJkZwUBYQQCZG8JALwCAwUCZGgFAmNHBQFjBAJkcAkAvAIDBQJkaQUBYwUCY0cEAmRxAwkAvwICBQJkbwUCZGkJAJQKAgUCZHAFAmRpCQCUCgIFAmRoBQJkbwQCZHIIBQJkcQJfMQQCZHMIBQJkcQJfMgQCY2kJALwCAwUCZG4FAmRzBQJjRgkAlwoFCQEBSwIFAmNpBQFhCQEBSwIFAmRyBQJkZQkBAUsCBQJkcwUCZGYFAmNHBQJkbAQCZHQIBQJkawJfMQQCZHUIBQJkawJfMgQCZHYIBQJkawJfMwQCY0gJAQFLAggFAmRrAl80BQFhBAJkdwkBAUsCCAUCZGsCXzUFAWEDCQBnAgAABQJkdAkAAgECB0xQIDw9IDAEAmR4AwkBASEBBQJjVgAABQJkdAQCZHkJAGUCBQJjUQUCZHUEAmR6CQBlAgUCY1MFAmR2BAJkQQMDBQJjVwkAAAIFAmNaBQJkYQcJAJQKAgUCY1kAAAMDBQJjVwkAAAIFAmNaBQJkYgcJAJQKAgAABQJjWQkAlAoCBQJkdQUCZHYEAmRCCAUCZEECXzEEAmRDCAUCZEECXzIEAmRECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNICQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNICQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAmN1BQJjcgkBAmJxCgUCZEIFAmRDBQJkeAUCY0gFAmJOBQJkdwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHkFAmR6BQNuaWwJAJ8KDQUCZHQFAmR4BQJjSAUCY0MFAmNFBQJkZwUCY3YFAmNBBQJkRAUCZHkFAmR6BQJjUgUCY1QBAmRFAQJkRgQCZEcJAJEDAgUCZEYAAAQCZEgJAJEDAgUCZEYAAQQCZEkJALcCAgUCZEcFAmRIAwkAAAIFAmRJBQFlBQFlBAJkSgkBDXBhcnNlSW50VmFsdWUBBQJhTwQCZEsJAGgCBQJkSgACBAJjbQkAvAIDBQJkRwUCZEgFAWYEAmRMCQC8AgMFAmNtBQFpBQFmBAJkTQkAvAIDCQC2AgEFAmRLBQJkSQUBZgQCZE4JALYCAQkAZQIFAmRLAAEKAQJkTwECZFAEAmRRCQC8AgMFAmRQBQJkUAUBZgQCZFIJALwCAwUCZFEFAmRQBQFmBAJkUwkAvAIDBQJkUgUBZgUCZEwJALwCAwkAtwICBQJkTQkAvAIDBQJkUwUBZwUBZgUCZFAJALcCAgkAvAIDBQJkTgUCZFAFAWYJALwCAwUBaAUCZFMFAWYKAQJkVAICZFUCZFYDCAUCZFUCXzIFAmRVBAJkUAgFAmRVAl8xBAJkVwkBAmRPAQUCZFAEAmRYCQCgAwEJALgCAgUCZFcJAQV2YWx1ZQEFAmRQBAJkWQMJAGYCAAAFAmRYCQEBLQEFAmRYBQJkWAMJAGcCAAEFAmRZCQCUCgIFAmRXBgkAlAoCBQJkVwcEAmRaCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmVhCgACZWIFAmRaCgACZWMJAJADAQUCZWIKAAJlZAkAlAoCBQJkSQcKAQJlZQICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkBAmRUAgUCZWYJAJEDAgUCZWIFAmVnCgECZWgCAmVmAmVnAwkAZwIFAmVnBQJlYwUCZWYJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVoAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgUCZWQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZFAIBQJlYQJfMQQCZWkIBQJlYQJfMgMFAmVpBQJkUAkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQJkUAECZWoBAmRGBAJlawUBZwQCZEcJAJEDAgUCZEYAAAQCZEgJAJEDAgUCZEYAAQQCZWwJAKcDAQUBbAQCZEoJALkCAgkApwMBBQJhTwUCZWwEAmRJCQC3AgIFAmRHBQJkSAMJAAACBQJkSQUBZQUBZQQCZEsJALkCAgUCZEoFAmVrBAJkTAkAuQICCQC5AgIJALkCAgUCZEcFAmRIBQJlawUCZWsEAmVtCQC6AgIJALkCAgUCZEsFAmRJBQJlbAQCZW4JALgCAgUCZEsFAmVsBAJlbwkAtwICBQJlawUBZgoBAmRUAgJkVQJlcAQCZXEFAmRVBAJkUAgFAmVxAl8xBAJlaQgFAmVxAl8yAwkBAiE9AgUCZWkFBHVuaXQFAmRVBAJkUwkAugICCQC5AgIJALkCAgUCZFAFAmRQBQJkUAUCZEwEAmRXCQC6AgIJALkCAgkAtwICBQJlbQkAuQICBQJkUwUCZWsFAmRQCQC3AgIJALoCAgkAuQICBQJlbgUCZFAFAmVsCQC5AgIFAmVvBQJkUwQCZFkJAQFTAQkAuAICBQJkVwkBBXZhbHVlAQUCZFADCQDAAgIFAWYFAmRZCQCUCgIFAmRXBQJlcAkAlAoCBQJkVwUEdW5pdAQCZFoJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZXIKAAJlYgUCZFoKAAJlYwkAkAMBBQJlYgoAAmVkCQCUCgIFAmRJBQR1bml0CgECZWUCAmVmAmVnAwkAZwIFAmVnBQJlYwUCZWYJAQJkVAIFAmVmCQCRAwIFAmViBQJlZwoBAmVoAgJlZgJlZwMJAGcCBQJlZwUCZWMFAmVmCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJlaAIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIJAQJlZQIFAmVkAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmRQCAUCZXICXzEEAmVpCAUCZXICXzIDCQECIT0CBQJlaQUEdW5pdAUCZFAJAAIBCQCsAgICGUQgY2FsY3VsYXRpb24gZXJyb3IsIEQgPSAJAKYDAQUCZFABAmVzAwJkRgJkVgJldAQCZWsFAWcEAmV1CQCRAwIFAmRGAwkAAAIFAmRWAAAAAQAABAJlbAkApwMBBQFsBAJkSgkAuQICCQCnAwEFAmFPBQJlbAQCZEkFAmV1BAJkSwkAuQICBQJkSgUCZWsEAmV2CQC6AgIJALkCAgkAuQICCQC6AgIJALkCAgUCZXQFAmV0CQC5AgIFAmV1BQJlawUCZXQFAmVsCQC5AgIFAmRLBQJlawQCZXcJALgCAgkAtwICBQJkSQkAugICCQC5AgIFAmV0BQJlbAUCZEsFAmV0CgECZFQCAmRVAmVwBAJleAUCZFUEAmV5CAUCZXgCXzEEAmVpCAUCZXgCXzIDCQECIT0CBQJlaQUEdW5pdAUCZFUEAmV6CQC6AgIJALcCAgkAuQICBQJleQUCZXkFAmV2CQC3AgIJALkCAgUBZwUCZXkFAmV3BAJlQQkBAVMBCQC4AgIFAmV6CQEFdmFsdWUBBQJleQMJAMACAgUBZgUCZUEJAJQKAgUCZXoFAmVwCQCUCgIFAmV6BQR1bml0BAJkWgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlQgoAAmViBQJkWgoAAmVjCQCQAwEFAmViCgACZWQJAJQKAgUCZXQFBHVuaXQKAQJlZQICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkBAmRUAgUCZWYJAJEDAgUCZWIFAmVnCgECZWgCAmVmAmVnAwkAZwIFAmVnBQJlYwUCZWYJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVoAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgUCZWQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZXkIBQJlQgJfMQQCZWkIBQJlQgJfMgMJAQIhPQIFAmVpBQR1bml0BQJleQkAAgEJAKwCAgIZWSBjYWxjdWxhdGlvbiBlcnJvciwgWSA9IAkApgMBBQJleQECZUMDAmVEAmVFAmVGBAJlRwkAvAIDCQECZEUBCQDMCAIFAmVECQDMCAIFAmVFBQNuaWwFAWMFAmVGAwkAAAIFAmVGBQFlBQFlBQJlRwECZUgDAmVJAmVKAmVLBAJlTAkAuAICCQC2AgEJAQJiRgEJAQJhWQEFAmJnBQJlSQQCZU0JALgCAgkAtgIBCQECYkYBCQECYVkBBQJiaAUCZUoEAmVOCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYmYIcXVhbnRpdHkFAmVLBAJlTwkBAmVDAwUCZUwFAmVNBQJlTgUCZU8BAmVQAwJlUQJlUgJlSwQCZUwJAGQCCQECYkYBCQECYVkBBQJiZwUCZVEEAmVNCQBkAgkBAmJGAQkBAmFZAQUCYmgFAmVSBAJlTgkAZAIICQEFdmFsdWUBCQDsBwEFAmJmCHF1YW50aXR5BQJlSwQCZUcJAQJlQwMJALYCAQUCZUwJALYCAQUCZU0JALYCAQUCZU4EAmVTCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhbAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFrCQCmAwEFAmVHBQNuaWwJAJQKAgUCZVMFAmVHAQJlVAICZVUCZUcDCQDAAgIFAmVHBQJlVQYJAQJhSwECInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHABAmVWAQJlVwQCZVgIBQJlVwZhbW91bnQEAmVZCQBuBAgFAmVXBmFtb3VudAgFAmVXBXByaWNlBQFhBQVGTE9PUgQCZVoDCQAAAggFAmVXCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmVYCQEBLQEFAmVZCQCUCgIJAQEtAQUCZVgFAmVZBAJlUQgFAmVaAl8xBAJlUggFAmVaAl8yAwMDCQECYVAABgkAAAIFAmJlBQFyBgkAAAIFAmJlBQFzCQACAQINQWRtaW4gYmxvY2tlZAMDCQECIT0CCAgFAmVXCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYmcGCQECIT0CCAgFAmVXCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiaAkAAgECCVdyIGFzc2V0cwQCZmEJAKcDAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUCYWsEAmZiCQECZVADBQJlUQUCZVIAAAQCZmMIBQJmYgJfMQQCZmQIBQJmYgJfMgQCZmUJAMACAgUCZmQFAmZhBQJmZQECZmYBAmRWAwkBAiE9AgkAkAMBCAUCZFYIcGF5bWVudHMAAQkAAgECCjEgcG1udCBleHAEAmZnCQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwAABAJjcwkBBXZhbHVlAQgFAmZnB2Fzc2V0SWQEAmNZCAUCZmcGYW1vdW50BAJkawkBAmNxBAkA2AQBCAUCZFYNdHJhbnNhY3Rpb25JZAkA2AQBBQJjcwUCY1kIBQJkVgZjYWxsZXIEAmNNCAUCZGsCXzEEAmNOCAUCZGsCXzIEAmNBCQENcGFyc2VJbnRWYWx1ZQEIBQJkawJfOQQCY08IBQJkawNfMTADAwkBAmFQAAYJAAACBQJjQQUBcwkAAgEJAKwCAgIPQWRtaW4gYmxvY2tlZDogCQCkAwEFAmNBCQCXCgUFAmNNBQJjTgUCY1kFAmNzBQJjTwECZmgKAmZpAmFjAmZqAmZrAmJOAmNWAmNXAmNYAmNZAmNaBAJkawkBAmNQDQUCYWMFAmJOCAkBBXZhbHVlAQUCZmoGYW1vdW50CAkBBXZhbHVlAQUCZmoHYXNzZXRJZAgJAQV2YWx1ZQEFAmZrBmFtb3VudAgJAQV2YWx1ZQEFAmZrB2Fzc2V0SWQFAmZpCQAAAgUCYWMCAAUCY1YFAmNXBQJjWAUCY1kFAmNaBAJjQQkBDXBhcnNlSW50VmFsdWUBCAUCZGsCXzgDAwMJAQJhUAAGCQAAAgUCY0EFAXEGCQAAAgUCY0EFAXMJAAIBCQCsAgICCEJsb2NrZWQ6CQCkAwEFAmNBBQJkawECZmwFAmZtAmNzAmN1AmFjAmZuBAJiYQkBAmFTAAQCY3cJAJEDAgUCYmEFAXcEAmN4CQCRAwIFAmJhBQF4BAJjdgkAkQMCBQJiYQUBdgQCZGUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYQUBeQQCZGYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYQUBegQCZU4JALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmN2AhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BAJmbwMJAL8CAgUCZU4FAWUGCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmbwUCZm8EAmNDCQECYkYBBQJjdwQCY0UJAQJiRgEFAmN4BAJmcAMJAAACBQJhYwIACQCUCgIFAmNDBQJjRQMJAAACBQJjcwUCY3cDCQBmAgUCZm0FAmNDCQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCCQBlAgUCY0MFAmZtBQJjRQMJAAACBQJjcwUCY3gDCQBmAgUCZm0FAmNFCQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCBQJjQwkAZQIFAmNFBQJmbQkAAgECEHdyb25nIHBtdEFzc2V0SWQEAmZxCAUCZnACXzEEAmZyCAUCZnACXzIEAmZzAwkAAAIFAmNzBQJjdwkAlAoCBQJmbQAAAwkAAAIFAmNzBQJjeAkAlAoCAAAFAmZtCQACAQIPaW52YWxpZCBwYXltZW50BAJmdAgFAmZzAl8xBAJmdQgFAmZzAl8yBAJmdgMFAmZuCQCVCgMICQECY24BBQJmdAJfMQgJAQJjbgEFAmZ1Al8xCAkBAmNuAQUCZm0CXzIJAJUKAwUCZnQFAmZ1AAAEAmZ3CAUCZnYCXzEEAmZ4CAUCZnYCXzIEAmNwCAUCZnYCXzMEAmZ5CQBkAgUCZnEFAmZ3BAJmegkAZAIFAmZyBQJmeAQCYlMJAQJkRQEJAMwIAgkAtgIBBQJmcQkAzAgCCQC2AgEFAmZyBQNuaWwEAmJSCQECZEUBCQDMCAIJALYCAQUCZnkJAMwIAgkAtgIBBQJmegUDbmlsBAJmQQMJAL8CAgUCYlIFAmJTBgkBBXRocm93AAMJAAACBQJmQQUCZkEEAmZCCQC8AgMFAmVOCQC4AgIFAmJSBQJiUwUCYlMEAmNICQEBSwIJAQJiSAIJAQFIAgUCZnoFAmRmCQEBSAIFAmZ5BQJkZQUBYQQCZEQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUCY3UFAmFjCQECYnEKBQJmdAUCZnUJAKADAQUCZkIFAmNIAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZkMJAGsDBQJmcgUBYQUCZnEEAmZECQBrAwUCZm0FAWEJAGQCBQJmQwUBYQQCZkUJAGUCBQJmbQUCZkQEAmZGCQC8AgMFAmVOCQC2AgEFAmZFCQC2AgEFAmZyBAJmRwkAoAMBCQC8AgMJALgCAgUCZkIFAmZGBQFiBQJmRgkAlgoECQCgAwEFAmZCBQJkRAUCY3AFAmZHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmSAYCZkkCZkoCZksCZmkCZkwCZk0EAmJhCQECYVMABAJjdgkAkQMCBQJiYQUBdgQCY3cJAJEDAgUCYmEFAXcEAmN4CQCRAwIFAmJhBQF4BAJmTgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJhBQF5BAJmTwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJhBQF6BAJmUAkAkQMCBQJiYQUBdQQCY3UDCQAAAgUCZmkFAmJwBQJmTAUCZmkEAmZnCQEFdmFsdWUBCQCRAwIFAmZLAAAEAmNzCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmVPCQECZUgDBQFlBQFlBQFlAwkAAAIFAmVPBQJlTwQCY3IJANgEAQUCZk0DCQECIT0CBQJjdgkA2AQBBQJjcwkAAgECCFdyb25nIExQBAJjQwkBAmJGAQUCY3cEAmNFCQECYkYBBQJjeAQCZlEKAAJmUgkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZJCQDMCAIFAmNZBQNuaWwFA25pbAMJAAECBQJmUgIKKEludCwgSW50KQUCZlIJAAIBCQCsAgIJAAMBBQJmUgIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQJmUQUCZlEEAmNwCAUCZlECXzIEAmZTCAUCZlECXzEEAmZUAwMJAGYCBQJmSgAACQBmAgUCZkoFAmZTBwkBAmFLAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSgUDbmlsAgAFAmZTBAJmVQMJAAACBQJmSQUCY3cJAJYKBAUCZlQAAAkAZQIJAGUCBQJjQwUCZlQFAmNwBQJjRQMJAAACBQJmSQUCY3gJAJYKBAAABQJmVAUCY0MJAGUCCQBlAgUCY0UFAmZUBQJjcAkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJmVggFAmZVAl8xBAJmVwgFAmZVAl8yBAJmeQgFAmZVAl8zBAJmeggFAmZVAl80BAJmWAkBAmJIAgkBAUgCBQJmegUCZk8JAQFIAgUCZnkFAmZOBAJmWQkBAUsCBQJmWAUBYQQCZloDCQAAAgUCZkkCBVdBVkVTBQR1bml0CQDZBAEFAmZJBAJnYQMJAGYCBQJjcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFSBQJjcAUCZloFA25pbAUDbmlsBAJjTwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJmVAUCZloJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJjdQUCY3IJAQJiQgYFAmZWBQJmVwUCY1kFAmZZBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZZCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZZBQNuaWwFAmdhAwkAAAIFAmNPBQJjTwQCZ2IJAPwHBAUCYU4CBGJ1cm4JAMwIAgUCY1kFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3MFAmNZBQNuaWwDCQAAAgUCZ2IFAmdiBAJnYwQCZ2QDCQAAAgUEdGhpcwUCYVIAAAUCY3AEAmdlAwkAAAIJAQJhVwEFAmZJBQJiZwYHAwUCZ2UJAJQKAgkBAS0BCQBkAgUCZlMFAmdkAAAJAJQKAgAACQEBLQEJAGQCBQJmUwUCZ2QEAmVRCAUCZ2MCXzEEAmVSCAUCZ2MCXzIEAmdmCQECZVADBQJlUQUCZVIAAAQCZ2cIBQJnZgJfMQQCZUcIBQJnZgJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAJQKAgkAzggCBQJjTwUCZ2cFAmZUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnaQAEAmFFCQCiCAEJAQFVAAMJAAECBQJhRQIGU3RyaW5nBAJkSQUCYUUJANkEAQUCZEkDCQABAgUCYUUCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ2oABAJhRQkAoggBCQEBVgADCQABAgUCYUUCBlN0cmluZwQCZEkFAmFFCQDZBAEFAmRJAwkAAQIFAmFFAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAAmdrCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBAmdsAQJkVgQCYUUJAQJnaQADCQABAgUCYUUCCkJ5dGVWZWN0b3IEAmdtBQJhRQkAAAIIBQJkVg9jYWxsZXJQdWJsaWNLZXkFAmdtAwkAAQIFAmFFAgRVbml0CQAAAggFAmRWBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJnbgECZFYEAmFFCQECZ2kAAwkAAQIFAmFFAgpCeXRlVmVjdG9yBAJnbQUCYUUDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQUCZ20GBQJnawMJAAECBQJhRQIEVW5pdAMJAAACCAUCZFYGY2FsbGVyBQR0aGlzBgUCZ2sJAAIBAgtNYXRjaCBlcnJvch0CZFYBC2NvbnN0cnVjdG9yAQFUBAJldgkBAmduAQUCZFYDCQAAAgUCZXYFAmV2CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAAUBVAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpzZXRNYW5hZ2VyAQJnbwQCZXYJAQJnbgEFAmRWAwkAAAIFAmV2BQJldgQCZ3AJANkEAQUCZ28DCQAAAgUCZ3AFAmdwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUCZ28FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEOY29uZmlybU1hbmFnZXIABAJjbQkBAmdqAAQCZ3EDCQEJaXNEZWZpbmVkAQUCY20GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdxBQJncQQCZ3IDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCY20GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdyBQJncgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQAJANgEAQkBBXZhbHVlAQUCY20JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVYABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBA3B1dAICZ3MCZ3QEAmd1CQECYmsABAJndgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ3UFAUMCCldyIHN0IGFkZHIEAmd3CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJndQUBRQIKV3Igc2wgYWRkcgMJAGYCAAAFAmdzCQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJneAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQEAmd5CQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwABBmFtb3VudAQCZU8JAQJlSAMFAmd4BQJneQkAtgIBAAADCQAAAgUCZU8FAmVPBAJnegkBAmZoCgkApQgBCAUCZFYGY2FsbGVyCQDYBAEIBQJkVg10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJkVghwYXltZW50cwABBQJncwYHBgAAAgAEAmR4CAUCZ3oCXzIEAmdBCAUCZ3oCXzcEAmNPCAUCZ3oCXzkEAmR5CAUCZ3oDXzEwBAJkeggFAmd6A18xMQQCY3cIBQJnegNfMTIEAmN4CAUCZ3oDXzEzBAJkawkA/AcEBQJhTgIEZW1pdAkAzAgCBQJkeAUDbmlsBQNuaWwDCQAAAgUCZGsFAmRrBAJnQgQCYUUFAmRrAwkAAQIFAmFFAgdBZGRyZXNzBAJnQwUCYUUJAPwHBAUCZ0MCBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsBQR1bml0AwkAAAIFAmdCBQJnQgQCZ0QDCQBmAgUCZHkAAAkA/AcEBQJndwIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN3BQJkeQUDbmlsBQNuaWwDCQAAAgUCZ0QFAmdEBAJnRQMJAGYCBQJkegAACQD8BwQFAmd3AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3gFAmR6BQNuaWwFA25pbAMJAAACBQJnRQUCZ0UEAmdGAwUCZ3QEAmdHCQD8BwQFAmd2AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnQQUCZHgFA25pbAMJAAACBQJnRwUCZ0cFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZFYGY2FsbGVyBQJkeAUCZ0EFA25pbAQCZ0gJAQJlUAMAAAAAAAAEAmdnCAUCZ0gCXzEEAmVHCAUCZ0gCXzIEAmdoCQECZVQCBQJlTwUCZUcDCQAAAgUCZ2gFAmdoCQDOCAIJAM4IAgUCY08FAmdGBQJnZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgELcHV0T25lVGtuVjICAmZKAmd0BAJnSQoAAmZSCQD8BwQFAmFOAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZlICB0Jvb2xlYW4FAmZSCQACAQkArAICCQADAQUCZlICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmdKAwMDCQECYVAABgkAAAIFAmJlBQFxBgkAAAIFAmJlBQFzBgUCZ0kEAmdLCQDMCAIDAwkBASEBBQJnSgYJAQJnbAEFAmRWBgkBAmFLAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZFYIcGF5bWVudHMAAQYJAQJhSwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdLBQJnSwQCYmEJAQJhUwAEAmN3CQCRAwIFAmJhBQF3BAJjeAkAkQMCBQJiYQUBeAQCY3YJANkEAQkAkQMCBQJiYQUBdgQCZk4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYQUBeQQCZk8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYQUBegQCY3UDCQAAAggFAmRWBmNhbGxlcgUEdGhpcwgFAmRWDG9yaWdpbkNhbGxlcggFAmRWBmNhbGxlcgQCZmcJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAEAmNzCQDYBAEJAQV2YWx1ZQEIBQJmZwdhc3NldElkBAJjWQgFAmZnBmFtb3VudAQCZ0wJAQJmbAUFAmNZBQJjcwkApQgBBQJjdQkA2AQBCAUCZFYNdHJhbnNhY3Rpb25JZAYDCQAAAgUCZ0wFAmdMBAJjcAgFAmdMAl8zBAJjTwgFAmdMAl8yBAJnTQgFAmdMAl8xBAJkeAMDCQBmAgUCZkoAAAkAZgIFAmZKBQJnTQcJAQJhSwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZkoFA25pbAIABQJnTQQCZ3oJAPwHBAUCYU4CBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsAwkAAAIFAmd6BQJnegQCZ0IEAmFFBQJnegMJAAECBQJhRQIHQWRkcmVzcwQCZ0MFAmFFCQD8BwQFAmdDAgRlbWl0CQDMCAIFAmR4BQNuaWwFA25pbAUEdW5pdAMJAAACBQJnQgUCZ0IEAmdGAwUCZ3QEAmdHCQD8BwQFAmJtAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjdgUCZHgFA25pbAMJAAACBQJnRwUCZ0cFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZFYGY2FsbGVyBQJkeAUCY3YFA25pbAQCZ2EDCQBmAgUCY3AAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhUgUCY3AJANkEAQUCY3MFA25pbAUDbmlsBAJnTgMJAAACBQR0aGlzBQJhUgkAlAoCAAAAAAQCZ08DCQAAAggFAmZnB2Fzc2V0SWQFAmJnBgcDBQJnTwkAlAoCCQEBLQEFAmNwAAAJAJQKAgAACQEBLQEFAmNwBAJlUQgFAmdOAl8xBAJlUggFAmdOAl8yBAJnUAkBAmVQAwUCZVEFAmVSAAAEAmdnCAUCZ1ACXzEEAmVHCAUCZ1ACXzIJAJQKAgkAzggCCQDOCAIJAM4IAgUCY08FAmdGBQJnYQUCZ2cFAmR4CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpwdXRGb3JGcmVlAQJnUQMJAGYCAAAFAmdRCQACAQIKV3Jvbmcgc2xwZwMJAQIhPQIJAJADAQgFAmRWCHBheW1lbnRzAAIJAAIBAgwyIHBtbnRzIGV4cGQEAmdSCQECZmgKCQClCAEIBQJkVgZjYWxsZXIJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJAQ9BdHRhY2hlZFBheW1lbnQCCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAdhc3NldElkCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQJAJEDAggFAmRWCHBheW1lbnRzAAEFAmdRBwcGAAACAAQCY08IBQJnUgJfOQQCZ3gJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50BAJneQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAQZhbW91bnQEAmVPCQECZUgDBQJneAUCZ3kJALYCAQAAAwkAAAIFAmVPBQJlTwQCZ1MJAQJlUAMAAAAAAAAEAmdnCAUCZ1MCXzEEAmVHCAUCZ1MCXzIEAmdoCQECZVQCBQJlTwUCZUcDCQAAAgUCZ2gFAmdoCQDOCAIFAmNPBQJnZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEDZ2V0AAQCZGsJAQJmZgEFAmRWBAJnVAgFAmRrAl8xBAJjTggFAmRrAl8yBAJjWQgFAmRrAl8zBAJjcwgFAmRrAl80BAJjTwgFAmRrAl81BAJldwkA/AcEBQJhTgIEYnVybgkAzAgCBQJjWQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjcwUCY1kFA25pbAMJAAACBQJldwUCZXcEAmVPCQECZUgDCQC2AgEAAAkAtgIBAAAJALYCAQUCY1kEAmdVCQECZVADCQEBLQEFAmdUCQEBLQEFAmNOAAAEAmdnCAUCZ1UCXzEEAmVHCAUCZ1UCXzIEAmdoCQECZVQCBQJlTwUCZUcDCQAAAgUCZ2gFAmdoCQDOCAIFAmNPBQJnZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgELZ2V0T25lVGtuVjICAmZJAmZKBAJnSQoAAmZSCQD8BwQFAmFOAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZlICB0Jvb2xlYW4FAmZSCQACAQkArAICCQADAQUCZlICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmdWAwMJAQJhUAAGCQAAAgUCYmUFAXMGBQJnSQQCZ0sJAMwIAgMDCQEBIQEFAmdWBgkBAmdsAQUCZFYGCQECYUsBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkVghwYXltZW50cwABBgkBAmFLAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ0sFAmdLBAJnVwkBAmZIBgUCZkkFAmZKCAUCZFYIcGF5bWVudHMIBQJkVgZjYWxsZXIIBQJkVgxvcmlnaW5DYWxsZXIIBQJkVg10cmFuc2FjdGlvbklkBAJjTwgFAmdXAl8xBAJmVAgFAmdXAl8yCQCUCgIFAmNPBQJmVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEKcmVmcmVzaERMcAAEAmdYCQELdmFsdWVPckVsc2UCCQCfCAEFAmFsAAAEAmdZAwkAZwIJAGUCBQZoZWlnaHQFAmdYBQJhbwUEdW5pdAkBAmFLAQkAuQkCCQDMCAIJAKQDAQUCYW8JAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmdZBQJnWQQCZmEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFrAgEwCQECYU0BAgtpbnZhbGlkIGRMcAQCZ1oJAQJlUAMAAAAAAAAEAmhhCAUCZ1oCXzEEAmVHCAUCZ1oCXzIEAmVTAwkBAiE9AgUCZmEFAmVHBQJoYQkBAmFLAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmVTCQCmAwEFAmVHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWARNnZXRPbmVUa25WMlJFQURPTkxZAgJmSQJoYgQCYmEJAQJhUwAEAmN3CQCRAwIFAmJhBQF3BAJjeAkAkQMCBQJiYQUBeAQCY3YJAJEDAgUCYmEFAXYEAmRGCQDMCAIJALYCAQkBAmJGAQUCY3cJAMwIAgkAtgIBCQECYkYBBQJjeAUDbmlsBAJlRgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY3YCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmJTCQECZEUBBQJkRgQCYlIJALgCAgUCYlMJALwCAwkAtgIBBQJoYgUCYlMFAmVGBAJoYwMJAAACBQJmSQUCY3cAAAMJAAACBQJmSQUCY3gAAQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJoZAkBAmVzAwUCZEYFAmhjBQJiUgQCaGUJALgCAgkAkQMCBQJkRgUCaGMFAmhkBAJoZgkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCaGUFAWYFA25pbAQCaGcJAQJjbgEFAmhmBAJmUwgFAmhnAl8xBAJjcAgFAmhnAl8yCQCUCgIFA25pbAkAlAoCBQJmUwUCY3ACZFYBHGdldE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmZJAmhiBAJiYQkBAmFTAAQCY3cJAJEDAgUCYmEFAXcEAmN4CQCRAwIFAmJhBQF4BAJjdgkAkQMCBQJiYQUBdgQCY0MJAQJiRgEFAmN3BAJjRQkBAmJGAQUCY3gEAmhoCgACZlIJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmSQkAzAgCBQJoYgUDbmlsBQNuaWwDCQABAgUCZlICCihJbnQsIEludCkFAmZSCQACAQkArAICCQADAQUCZlICHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZTCAUCaGgCXzEEAmNwCAUCaGgCXzIEAmRrCQECY3EEAgAFAmN2BQJoYgUEdGhpcwQCY00IBQJkawJfMQQCY04IBQJkawJfMgQCaGkJAGQCBQJjTQUCY04EAmZHAwkAAAIFAmhpAAADCQAAAgUCZlMAAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZlMFAmhpBQFhBQJoaQkAlAoCBQNuaWwJAJUKAwUCZlMFAmNwBQJmRwJkVgEJZ2V0Tm9MZXNzAgJoagJoawQCZGsJAQJmZgEFAmRWBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjWQgFAmRrAl8zBAJjcwgFAmRrAl80BAJjTwgFAmRrAl81AwkAZgIFAmhqBQJjTQkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJjTQIDIDwgCQCkAwEFAmhqAwkAZgIFAmhrBQJjTgkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmNOAgMgPCAJAKQDAQUCaGsEAmVPCQECZUgDCQC2AgEAAAkAtgIBAAAJALYCAQUCY1kEAmhsCQD8BwQFAmFOAgRidXJuCQDMCAIFAmNZBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNzBQJjWQUDbmlsAwkAAAIFAmhsBQJobAQCaG0JAQJlUAMJAQEtAQUCY00JAQEtAQUCY04AAAQCZ2cIBQJobQJfMQQCZUcIBQJobQJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQ11bnN0YWtlQW5kR2V0AQJjbwQCaG4DCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwAACQACAQINTm8gcG1udHMgZXhwZAYDCQAAAgUCaG4FAmhuBAJjZQkBAmFTAAQCaG8JAQJiawAEAmdBCQDZBAEJAJEDAgUCY2UFAXYEAmhwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJobwUBQwIKV3Igc3QgYWRkcgQCZU8JAQJlSAMJALYCAQAACQC2AgEAAAkAtgIBAAAEAmhxCQD8BwQFAmhwAgd1bnN0YWtlCQDMCAIJANgEAQUCZ0EJAMwIAgUCY28FA25pbAUDbmlsAwkAAAIFAmhxBQJocQQCZGsJAQJjcQQJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJANgEAQUCZ0EFAmNvCAUCZFYGY2FsbGVyBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjQQkBDXBhcnNlSW50VmFsdWUBCAUCZGsCXzkEAmNPCAUCZGsDXzEwBAJocgMDCQECYVAABgkAAAIFAmNBBQFzCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCY0EGAwkAAAIFAmhyBQJocgQCaHMJAPwHBAUCYU4CBGJ1cm4JAMwIAgUCY28FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0EFAmNvBQNuaWwDCQAAAgUCaHMFAmhzBAJodAkBAmVQAwkBAS0BBQJjTQkBAS0BBQJjTgAABAJnZwgFAmh0Al8xBAJlRwgFAmh0Al8yBAJnaAkBAmVUAgUCZU8FAmVHAwkAAAIFAmdoBQJnaAkAzggCBQJjTwUCZ2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmh1Amh2AmhrBAJnVgMJAQJhUAAGCQAAAgUCYmUFAXMEAmdLCQDMCAIDCQEBIQEFAmdWBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRWCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ0sFAmdLBAJlTwkBAmVIAwkAtgIBAAAJALYCAQAACQC2AgEAAAQCaHEJAPwHBAUCYm0CB3Vuc3Rha2UJAMwIAgkA2AQBBQJiZgkAzAgCBQJodQUDbmlsBQNuaWwDCQAAAgUCaHEFAmhxBAJodwkBAmNxBAkA2AQBCAUCZFYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiZgUCaHUIBQJkVgZjYWxsZXIEAmNNCAUCaHcCXzEEAmNOCAUCaHcCXzIEAmNPCAUCaHcDXzEwBAJoeAkAzAgCAwkAZwIFAmNNBQJodgYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJodgUDbmlsAgAJAMwIAgMJAGcCBQJjTgUCaGsGCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoawUDbmlsAgAFA25pbAMJAAACBQJoeAUCaHgEAmhsCQD8BwQFAmFOAgRidXJuCQDMCAIFAmh1BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJmBQJodQUDbmlsAwkAAAIFAmhsBQJobAQCaHkJAQJlUAMJAQEtAQUCY00JAQEtAQUCY04AAAQCZ2cIBQJoeQJfMQQCZUcIBQJoeQJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWARV1bnN0YWtlQW5kR2V0T25lVGtuVjIDAmh1AmZJAmZKBAJnSQoAAmZSCQD8BwQFAmFOAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZlICB0Jvb2xlYW4FAmZSCQACAQkArAICCQADAQUCZlICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmdWAwMJAQJhUAAGCQAAAgUCYmUFAXMGBQJnSQQCZ0sJAMwIAgMDCQEB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AmNRBQJjUgUCY1MFAmNUBQJoSgUCY1UFAmNWBgcAAAIAAmRWASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCY3ICaEsCY3QCaEoEAmRrCQECY3EEBQJjcgUCaEsFAmN0CQERQGV4dHJOYXRpdmUoMTA2MikBBQJoSgkAlAoCBQNuaWwJAJwKCggFAmRrAl8xCAUCZGsCXzIIBQJkawJfMwgFAmRrAl80CAUCZGsCXzUIBQJkawJfNggFAmRrAl83CQCmAwEIBQJkawJfOAgFAmRrAl85CAUCZGsDXzEwAmRWAQ5nZXRGZWVSRUFET05MWQAJAJQKAgUDbmlsBQJhagECaEwBAmhNAAQCaE4EAmFFCQECZ2kAAwkAAQIFAmFFAgpCeXRlVmVjdG9yBAJnbQUCYUUFAmdtAwkAAQIFAmFFAgRVbml0CAUCaEwPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmFFBQJoTAMJAAECBQJhRQIFT3JkZXIEAmVXBQJhRQQCaE8JAQJhUQAEAmhQCQECZVYBBQJlVwQCaFEJAPQDAwgFAmVXCWJvZHlCeXRlcwkAkQMCCAUCZVcGcHJvb2ZzAAAIBQJlVw9zZW5kZXJQdWJsaWNLZXkEAmhSCQD0AwMIBQJlVwlib2R5Qnl0ZXMJAJEDAggFAmVXBnByb29mcwABBQJoTwMDAwUCaFAFAmhRBwUCaFIHBgkBAmF6AwUCaFAFAmhRBQJoUgMJAAECBQJhRQIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmRJBQJhRQQCaFMJAPYDAQkBBXZhbHVlAQgFAmRJBnNjcmlwdAQCaFQJANsEAQkBBXZhbHVlAQkAnQgCBQJhTgkBAmF4AAQCaFUJAPEHAQUEdGhpcwMDCQAAAgUCaFQFAmhTCQECIT0CBQJoVQUCaFMHBgkA9AMDCAUCaEwJYm9keUJ5dGVzCQCRAwIIBQJoTAZwcm9vZnMAAAUCaE4JAPQDAwgFAmhMCWJvZHlCeXRlcwkAkQMCCAUCaEwGcHJvb2ZzAAAFAmhOkemtLA==", "chainId": 84, "height": 2349724, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CEfjh6jK6sJ5UT4v2FFrtmXHhYjjU3T8MW2UVMTmL7wG Next: 2298qTJyRiuEaCgi2LcZH5g4TgvX65H1H3eP2cjm4QeM Diff:
OldNewDifferences
606606
607607 func eC (eD,eE,eF) = {
608608 let eG = fraction(dE([eD, eE]), c, eF)
609- eG
609+ if ((eF == e))
610+ then e
611+ else eG
610612 }
611613
612614
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
1818 let h = toBigInt(3)
1919
2020 let i = toBigInt(4)
2121
2222 let j = toBigInt((a - ((a * 1) / a)))
2323
2424 let k = "WAVES"
2525
2626 let l = "100"
2727
2828 let m = "1"
2929
3030 let n = "__"
3131
3232 let o = ""
3333
3434 let p = 1
3535
3636 let q = 2
3737
3838 let r = 3
3939
4040 let s = 4
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 3
4747
4848 let w = 4
4949
5050 let x = 5
5151
5252 let y = 6
5353
5454 let z = 7
5555
5656 let A = 8
5757
5858 let B = 9
5959
6060 let C = 1
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 let F = 10
6767
6868 let G = fraction(10, a, 10000)
6969
7070 func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
7171
7272
7373 func K (L,M) = toInt(fraction(L, toBigInt(M), c))
7474
7575
7676 func N (O,P,Q) = fraction(O, P, Q)
7777
7878
7979 func R (L) = if ((d > L))
8080 then -(L)
8181 else L
8282
8383
8484 func S (L) = if ((d > L))
8585 then -(L)
8686 else L
8787
8888
8989 func T () = "%s__factoryContract"
9090
9191
9292 func U () = "%s__managerPublicKey"
9393
9494
9595 func V () = "%s__pendingManagerPublicKey"
9696
9797
9898 func W () = "%s%s__price__last"
9999
100100
101101 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], n)
102102
103103
104104 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
105105
106106
107107 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
108108
109109
110110 func ae () = "%s__amountAsset"
111111
112112
113113 func af () = "%s__priceAsset"
114114
115115
116116 func ag () = "%s__amp"
117117
118118
119119 func ah () = "%s__addonAddr"
120120
121121
122122 let ai = "%s__fee"
123123
124124 let aj = valueOrElse(getInteger(this, ai), G)
125125
126126 let ak = makeString(["%s", "dLp"], n)
127127
128128 let al = makeString(["%s", "dLpRefreshedHeight"], n)
129129
130130 let am = makeString(["%s", "refreshDLpDelay"], n)
131131
132132 let an = 1
133133
134134 let ao = valueOrElse(getInteger(this, am), an)
135135
136136 func ap () = "%s__factoryConfig"
137137
138138
139139 func aq () = "%s%s__matcher__publicKey"
140140
141141
142142 func ar (as,at) = (((("%d%d%s__" + as) + "__") + at) + "__config")
143143
144144
145145 func au (av) = ("%s%s%s__mappings__baseAsset2internalId__" + av)
146146
147147
148148 func aw () = "%s__shutdown"
149149
150150
151151 func ax () = "%s__allowedLpStableScriptHash"
152152
153153
154154 func ay () = "%s__feeCollectorAddress"
155155
156156
157157 func az (aA,aB,aC) = throw(((((("Failed: ordValid=" + toString(aA)) + " sndrValid=") + toString(aB)) + " mtchrValid=") + toString(aC)))
158158
159159
160160 func aD (L) = {
161161 let aE = L
162162 if ($isInstanceOf(aE, "String"))
163163 then {
164164 let aF = aE
165165 aF
166166 }
167167 else throw("fail cast to String")
168168 }
169169
170170
171171 func aG (aH,aI) = valueOrErrorMessage(getString(aH, aI), makeString(["mandatory ", toString(aH), ".", aI, " not defined"], ""))
172172
173173
174174 func aJ (aH,aI) = valueOrErrorMessage(getInteger(aH, aI), makeString(["mandatory ", toString(aH), ".", aI, " not defined"], ""))
175175
176176
177177 func aK (aL) = throw(makeString(["lp_stable.ride:", aL], " "))
178178
179179
180180 func aM (aL) = makeString(["lp_stable.ride:", aL], " ")
181181
182182
183183 let aN = addressFromStringValue(aG(this, T()))
184184
185185 let aO = aG(this, ag())
186186
187187 func aP () = valueOrElse(getBoolean(aN, aw()), false)
188188
189189
190190 func aQ () = fromBase58String(aG(aN, aq()))
191191
192192
193193 let aR = addressFromStringValue(aG(aN, ay()))
194194
195195 func aS () = {
196196 let aT = aG(this, ae())
197197 let aU = aG(this, af())
198198 let aV = aJ(aN, au(aU))
199199 let as = aJ(aN, au(aT))
200200 split(aG(aN, ar(toString(as), toString(aV))), n)
201201 }
202202
203203
204204 func aW (aX) = if ((aX == k))
205205 then unit
206206 else fromBase58String(aX)
207207
208208
209209 func aY (aX) = if ((aX == unit))
210210 then k
211211 else toBase58String(value(aX))
212212
213213
214214 func aZ (ba) = $Tuple7(addressFromStringValue(ba[t]), parseIntValue(ba[u]), fromBase58String(ba[v]), aW(ba[w]), aW(ba[x]), parseIntValue(ba[y]), parseIntValue(ba[z]))
215215
216216
217217 let bb = aZ(aS())
218218
219219 let bc = bb
220220
221221 let bd = bc._1
222222
223223 let be = bc._2
224224
225225 let bf = bc._3
226226
227227 let bg = bc._4
228228
229229 let bh = bc._5
230230
231231 let bi = bc._6
232232
233233 let bj = bc._7
234234
235235 func bk () = split(aG(aN, ap()), n)
236236
237237
238238 let bl = bk()
239239
240240 let bm = valueOrErrorMessage(addressFromString(bl[C]), "Invalid staking contract address")
241241
242242 let bn = valueOrErrorMessage(addressFromString(bl[E]), "Invalid slipage contract address")
243243
244244 let bo = valueOrErrorMessage(addressFromString(bl[F]), "Invalid gwx contract address")
245245
246246 let bp = valueOrErrorMessage(addressFromString(bl[D]), "Invalid gwx contract address")
247247
248248 func bq (br,bs,bt,bu,bv,bw,bx,by,bz,bA) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA)], n)
249249
250250
251251 func bB (bC,bD,bE,bu,bx,by) = makeString(["%d%d%d%d%d%d", toString(bC), toString(bD), toString(bE), toString(bu), toString(bx), toString(by)], n)
252252
253253
254254 func bF (bG) = if ((bG == "WAVES"))
255255 then wavesBalance(this).available
256256 else assetBalance(this, fromBase58String(bG))
257257
258258
259259 func bH (bI,bJ) = fraction(bI, c, bJ)
260260
261261
262262 func bK (bL,bM,bN) = {
263263 let bO = fraction((bL - bM), b, bM)
264264 let bP = ((bN - R(bO)) > d)
265265 if (!(bP))
266266 then throw(("Big slpg: " + toString(bO)))
267267 else $Tuple2(bP, min([bL, bM]))
268268 }
269269
270270
271271 func bQ (bR,bS,bT) = {
272272 let bO = fraction(bS, b, bR)
273273 let bU = (bT > bO)
274274 if (if (bU)
275275 then true
276276 else (bS > bR))
277277 then throw(((((((toString(bS) + " ") + toString(bR)) + " ") + toString(bO)) + " ") + toString(bT)))
278278 else bU
279279 }
280280
281281
282282 func bV (bW,bX,bY,bZ) = {
283283 let ca = H(bY, bW)
284284 let cb = H(bZ, bX)
285285 bH(cb, ca)
286286 }
287287
288288
289289 func cc (bY,bZ,cd) = {
290290 let ce = aS()
291291 let cf = parseIntValue(ce[y])
292292 let cg = parseIntValue(ce[z])
293293 let ch = bV(cf, cg, bY, bZ)
294294 let bJ = H(bY, cf)
295295 let bI = H(bZ, cg)
296296 let ci = H(cd, a)
297297 let cj = bH(bJ, ci)
298298 let ck = bH(bI, ci)
299299 [ch, cj, ck]
300300 }
301301
302302
303303 func cl (bY,bZ,cd) = {
304304 let cm = cc(bY, bZ, cd)
305305 [K(cm[0], a), K(cm[1], a), K(cm[2], a)]
306306 }
307307
308308
309309 func cn (co) = {
310310 let cp = fraction(co, aj, a)
311311 $Tuple2((co - cp), cp)
312312 }
313313
314314
315315 func cq (cr,cs,ct,cu) = {
316316 let ce = aS()
317317 let cv = ce[v]
318318 let cw = ce[w]
319319 let cx = ce[x]
320320 let cy = parseIntValue(ce[y])
321321 let cz = parseIntValue(ce[z])
322322 let cA = ce[u]
323323 let cB = valueOrErrorMessage(assetInfo(fromBase58String(cv)), "Wrong LP id").quantity
324324 if ((cv != cs))
325325 then throw("Wrong pmt asset")
326326 else {
327327 let cC = bF(cw)
328328 let cD = H(cC, cy)
329329 let cE = bF(cx)
330330 let cF = H(cE, cz)
331331 let cG = bH(cF, cD)
332332 let cH = K(cG, a)
333333 let cI = H(ct, a)
334334 let cJ = H(cB, a)
335335 let cK = fraction(cD, cI, cJ)
336336 let cL = fraction(cF, cI, cJ)
337337 let cM = K(cK, cy)
338338 let cN = K(cL, cz)
339339 let cO = if ((cr == ""))
340340 then nil
341341 else [ScriptTransfer(cu, cM, if ((cw == "WAVES"))
342342 then unit
343343 else fromBase58String(cw)), ScriptTransfer(cu, cN, if ((cx == "WAVES"))
344344 then unit
345345 else fromBase58String(cx)), StringEntry(ad(toString(cu), cr), bB(cM, cN, ct, cH, height, lastBlock.timestamp)), IntegerEntry(W(), cH), IntegerEntry(X(height, lastBlock.timestamp), cH)]
346346 $Tuple10(cM, cN, cw, cx, cC, cE, cB, cG, cA, cO)
347347 }
348348 }
349349
350350
351351 func cP (cr,bN,cQ,cR,cS,cT,cu,cU,cV,cW,cX,cY,cZ) = {
352352 let ce = aS()
353353 let cv = fromBase58String(ce[v])
354354 let da = ce[w]
355355 let db = ce[x]
356356 let dc = ce[A]
357357 let dd = ce[B]
358358 let de = parseIntValue(ce[y])
359359 let df = parseIntValue(ce[z])
360360 let cA = ce[u]
361361 let dg = valueOrErrorMessage(assetInfo(cv), "Wr lp as").quantity
362362 let cC = if (cU)
363363 then bF(da)
364364 else if (if (cW)
365365 then (cZ == da)
366366 else false)
367367 then (bF(da) - cY)
368368 else if (cW)
369369 then bF(da)
370370 else (bF(da) - cQ)
371371 let cE = if (cU)
372372 then bF(db)
373373 else if (if (cW)
374374 then (cZ == db)
375375 else false)
376376 then (bF(db) - cY)
377377 else if (cW)
378378 then bF(db)
379379 else (bF(db) - cS)
380380 let dh = H(cQ, de)
381381 let di = H(cS, df)
382382 let dj = bH(di, dh)
383383 let cD = H(cC, de)
384384 let cF = H(cE, df)
385385 let dk = if ((dg == 0))
386386 then {
387387 let cG = d
388388 let dl = d
389389 let ci = pow((dh * di), 0, toBigInt(5), 1, 0, DOWN)
390390 $Tuple5(K(ci, a), K(dh, de), K(di, df), bH((cF + di), (cD + dh)), dl)
391391 }
392392 else {
393393 let cG = bH(cF, cD)
394394 let dm = fraction(R((cG - dj)), c, cG)
395395 let dl = H(bN, a)
396396 if (if (if (cX)
397397 then (cG != d)
398398 else false)
399399 then (dm > dl)
400400 else false)
401401 then throw(((("Price slippage " + toString(dm)) + " > ") + toString(dl)))
402402 else {
403403 let dn = H(dg, a)
404404 let do = fraction(dh, cG, c)
405405 let dp = fraction(di, c, cG)
406406 let dq = if ((do > di))
407407 then $Tuple2(dp, di)
408408 else $Tuple2(dh, do)
409409 let dr = dq._1
410410 let ds = dq._2
411411 let ci = fraction(dn, ds, cF)
412412 $Tuple5(K(ci, a), K(dr, de), K(ds, df), cG, dl)
413413 }
414414 }
415415 let dt = dk._1
416416 let du = dk._2
417417 let dv = dk._3
418418 let cH = K(dk._4, a)
419419 let dw = K(dk._5, a)
420420 if ((0 >= dt))
421421 then throw("LP <= 0")
422422 else {
423423 let dx = if (!(cV))
424424 then 0
425425 else dt
426426 let dy = (cQ - du)
427427 let dz = (cS - dv)
428428 let dA = if (if (cW)
429429 then (cZ == da)
430430 else false)
431431 then $Tuple2(cY, 0)
432432 else if (if (cW)
433433 then (cZ == db)
434434 else false)
435435 then $Tuple2(0, cY)
436436 else $Tuple2(du, dv)
437437 let dB = dA._1
438438 let dC = dA._2
439439 let dD = [IntegerEntry(W(), cH), IntegerEntry(X(height, lastBlock.timestamp), cH), StringEntry(aa(cu, cr), bq(dB, dC, dx, cH, bN, dw, height, lastBlock.timestamp, dy, dz))]
440440 $Tuple13(dt, dx, cH, cC, cE, dg, cv, cA, dD, dy, dz, cR, cT)
441441 }
442442 }
443443
444444
445445 func dE (dF) = {
446446 let dG = dF[0]
447447 let dH = dF[1]
448448 let dI = (dG + dH)
449449 if ((dI == e))
450450 then e
451451 else {
452452 let dJ = parseIntValue(aO)
453453 let dK = (dJ * 2)
454454 let cm = fraction(dG, dH, f)
455455 let dL = fraction(cm, i, f)
456456 let dM = fraction(toBigInt(dK), dI, f)
457457 let dN = toBigInt((dK - 1))
458458 func dO (dP) = {
459459 let dQ = fraction(dP, dP, f)
460460 let dR = fraction(dQ, dP, f)
461461 let dS = fraction(dR, f, dL)
462462 fraction((dM + fraction(dS, g, f)), dP, (fraction(dN, dP, f) + fraction(h, dS, f)))
463463 }
464464
465465 func dT (dU,dV) = if (dU._2)
466466 then dU
467467 else {
468468 let dP = dU._1
469469 let dW = dO(dP)
470470 let dX = toInt((dW - value(dP)))
471471 let dY = if ((0 > dX))
472472 then -(dX)
473473 else dX
474474 if ((1 >= dY))
475475 then $Tuple2(dW, true)
476476 else $Tuple2(dW, false)
477477 }
478478
479479 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
480480 let ea = {
481481 let eb = dZ
482482 let ec = size(eb)
483483 let ed = $Tuple2(dI, false)
484484 func ee (ef,eg) = if ((eg >= ec))
485485 then ef
486486 else dT(ef, eb[eg])
487487
488488 func eh (ef,eg) = if ((eg >= ec))
489489 then ef
490490 else throw("List size exceeds 15")
491491
492492 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
493493 }
494494 let dP = ea._1
495495 let ei = ea._2
496496 if (ei)
497497 then dP
498498 else throw(("D calculation error, D = " + toString(dP)))
499499 }
500500 }
501501
502502
503503 func ej (dF) = {
504504 let ek = g
505505 let dG = dF[0]
506506 let dH = dF[1]
507507 let el = parseBigIntValue(l)
508508 let dJ = (parseBigIntValue(aO) * el)
509509 let dI = (dG + dH)
510510 if ((dI == e))
511511 then e
512512 else {
513513 let dK = (dJ * ek)
514514 let dL = (((dG * dH) * ek) * ek)
515515 let em = ((dK * dI) / el)
516516 let en = (dK - el)
517517 let eo = (ek + f)
518518 func dT (dU,ep) = {
519519 let eq = dU
520520 let dP = eq._1
521521 let ei = eq._2
522522 if ((ei != unit))
523523 then dU
524524 else {
525525 let dS = (((dP * dP) * dP) / dL)
526526 let dW = (((em + (dS * ek)) * dP) / (((en * dP) / el) + (eo * dS)))
527527 let dY = S((dW - value(dP)))
528528 if ((f >= dY))
529529 then $Tuple2(dW, ep)
530530 else $Tuple2(dW, unit)
531531 }
532532 }
533533
534534 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
535535 let er = {
536536 let eb = dZ
537537 let ec = size(eb)
538538 let ed = $Tuple2(dI, unit)
539539 func ee (ef,eg) = if ((eg >= ec))
540540 then ef
541541 else dT(ef, eb[eg])
542542
543543 func eh (ef,eg) = if ((eg >= ec))
544544 then ef
545545 else throw("List size exceeds 15")
546546
547547 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
548548 }
549549 let dP = er._1
550550 let ei = er._2
551551 if ((ei != unit))
552552 then dP
553553 else throw(("D calculation error, D = " + toString(dP)))
554554 }
555555 }
556556
557557
558558 func es (dF,dV,et) = {
559559 let ek = g
560560 let eu = dF[if ((dV == 0))
561561 then 1
562562 else 0]
563563 let el = parseBigIntValue(l)
564564 let dJ = (parseBigIntValue(aO) * el)
565565 let dI = eu
566566 let dK = (dJ * ek)
567567 let ev = (((((et * et) / (eu * ek)) * et) * el) / (dK * ek))
568568 let ew = ((dI + ((et * el) / dK)) - et)
569569 func dT (dU,ep) = {
570570 let ex = dU
571571 let ey = ex._1
572572 let ei = ex._2
573573 if ((ei != unit))
574574 then dU
575575 else {
576576 let ez = (((ey * ey) + ev) / ((g * ey) + ew))
577577 let eA = S((ez - value(ey)))
578578 if ((f >= eA))
579579 then $Tuple2(ez, ep)
580580 else $Tuple2(ez, unit)
581581 }
582582 }
583583
584584 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
585585 let eB = {
586586 let eb = dZ
587587 let ec = size(eb)
588588 let ed = $Tuple2(et, unit)
589589 func ee (ef,eg) = if ((eg >= ec))
590590 then ef
591591 else dT(ef, eb[eg])
592592
593593 func eh (ef,eg) = if ((eg >= ec))
594594 then ef
595595 else throw("List size exceeds 15")
596596
597597 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
598598 }
599599 let ey = eB._1
600600 let ei = eB._2
601601 if ((ei != unit))
602602 then ey
603603 else throw(("Y calculation error, Y = " + toString(ey)))
604604 }
605605
606606
607607 func eC (eD,eE,eF) = {
608608 let eG = fraction(dE([eD, eE]), c, eF)
609- eG
609+ if ((eF == e))
610+ then e
611+ else eG
610612 }
611613
612614
613615 func eH (eI,eJ,eK) = {
614616 let eL = (toBigInt(bF(aY(bg))) - eI)
615617 let eM = (toBigInt(bF(aY(bh))) - eJ)
616618 let eN = (toBigInt(value(assetInfo(bf)).quantity) - eK)
617619 let eO = eC(eL, eM, eN)
618620 eO
619621 }
620622
621623
622624 func eP (eQ,eR,eK) = {
623625 let eL = (bF(aY(bg)) + eQ)
624626 let eM = (bF(aY(bh)) + eR)
625627 let eN = (value(assetInfo(bf)).quantity + eK)
626628 let eG = eC(toBigInt(eL), toBigInt(eM), toBigInt(eN))
627629 let eS = [IntegerEntry(al, height), StringEntry(ak, toString(eG))]
628630 $Tuple2(eS, eG)
629631 }
630632
631633
632634 func eT (eU,eG) = if ((eG >= eU))
633635 then true
634636 else aK("updated DLp lower than current DLp")
635637
636638
637639 func eV (eW) = {
638640 let eX = eW.amount
639641 let eY = fraction(eW.amount, eW.price, a, FLOOR)
640642 let eZ = if ((eW.orderType == Buy))
641643 then $Tuple2(eX, -(eY))
642644 else $Tuple2(-(eX), eY)
643645 let eQ = eZ._1
644646 let eR = eZ._2
645647 if (if (if (aP())
646648 then true
647649 else (be == r))
648650 then true
649651 else (be == s))
650652 then throw("Admin blocked")
651653 else if (if ((eW.assetPair.amountAsset != bg))
652654 then true
653655 else (eW.assetPair.priceAsset != bh))
654656 then throw("Wr assets")
655657 else {
656658 let fa = parseBigIntValue(getStringValue(this, ak))
657659 let fb = eP(eQ, eR, 0)
658660 let fc = fb._1
659661 let fd = fb._2
660662 let fe = (fd >= fa)
661663 fe
662664 }
663665 }
664666
665667
666668 func ff (dV) = if ((size(dV.payments) != 1))
667669 then throw("1 pmnt exp")
668670 else {
669671 let fg = value(dV.payments[0])
670672 let cs = value(fg.assetId)
671673 let cY = fg.amount
672674 let dk = cq(toBase58String(dV.transactionId), toBase58String(cs), cY, dV.caller)
673675 let cM = dk._1
674676 let cN = dk._2
675677 let cA = parseIntValue(dk._9)
676678 let cO = dk._10
677679 if (if (aP())
678680 then true
679681 else (cA == s))
680682 then throw(("Admin blocked: " + toString(cA)))
681683 else $Tuple5(cM, cN, cY, cs, cO)
682684 }
683685
684686
685687 func fh (fi,ac,fj,fk,bN,cV,cW,cX,cY,cZ) = {
686688 let dk = cP(ac, bN, value(fj).amount, value(fj).assetId, value(fk).amount, value(fk).assetId, fi, (ac == ""), cV, cW, cX, cY, cZ)
687689 let cA = parseIntValue(dk._8)
688690 if (if (if (aP())
689691 then true
690692 else (cA == q))
691693 then true
692694 else (cA == s))
693695 then throw(("Blocked:" + toString(cA)))
694696 else dk
695697 }
696698
697699
698700 func fl (fm,cs,cu,ac,fn) = {
699701 let ba = aS()
700702 let cw = ba[w]
701703 let cx = ba[x]
702704 let cv = ba[v]
703705 let de = parseIntValue(ba[y])
704706 let df = parseIntValue(ba[z])
705707 let eN = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cv)), "invalid lp asset").quantity)
706708 let fo = if ((eN > e))
707709 then true
708710 else throw("initial deposit requires all coins")
709711 if ((fo == fo))
710712 then {
711713 let cC = bF(cw)
712714 let cE = bF(cx)
713715 let fp = if ((ac == ""))
714716 then $Tuple2(cC, cE)
715717 else if ((cs == cw))
716718 then if ((fm > cC))
717719 then throw("invalid payment amount")
718720 else $Tuple2((cC - fm), cE)
719721 else if ((cs == cx))
720722 then if ((fm > cE))
721723 then throw("invalid payment amount")
722724 else $Tuple2(cC, (cE - fm))
723725 else throw("wrong pmtAssetId")
724726 let fq = fp._1
725727 let fr = fp._2
726728 let fs = if ((cs == cw))
727729 then $Tuple2(fm, 0)
728730 else if ((cs == cx))
729731 then $Tuple2(0, fm)
730732 else throw("invalid payment")
731733 let ft = fs._1
732734 let fu = fs._2
733735 let fv = if (fn)
734736 then $Tuple3(cn(ft)._1, cn(fu)._1, cn(fm)._2)
735737 else $Tuple3(ft, fu, 0)
736738 let fw = fv._1
737739 let fx = fv._2
738740 let cp = fv._3
739741 let fy = (fq + fw)
740742 let fz = (fr + fx)
741743 let bS = dE([toBigInt(fq), toBigInt(fr)])
742744 let bR = dE([toBigInt(fy), toBigInt(fz)])
743745 let fA = if ((bR > bS))
744746 then true
745747 else throw()
746748 if ((fA == fA))
747749 then {
748750 let fB = fraction(eN, (bR - bS), bS)
749751 let cH = K(bH(H(fz, df), H(fy, de)), a)
750752 let dD = [IntegerEntry(W(), cH), IntegerEntry(X(height, lastBlock.timestamp), cH), StringEntry(aa(cu, ac), bq(ft, fu, toInt(fB), cH, 0, 0, height, lastBlock.timestamp, 0, 0))]
751753 let fC = fraction(fr, a, fq)
752754 let fD = fraction(fm, a, (fC + a))
753755 let fE = (fm - fD)
754756 let fF = fraction(eN, toBigInt(fE), toBigInt(fr))
755757 let fG = toInt(fraction((fB - fF), b, fF))
756758 $Tuple4(toInt(fB), dD, cp, fG)
757759 }
758760 else throw("Strict value is not equal to itself.")
759761 }
760762 else throw("Strict value is not equal to itself.")
761763 }
762764
763765
764766 func fH (fI,fJ,fK,fi,fL,fM) = {
765767 let ba = aS()
766768 let cv = ba[v]
767769 let cw = ba[w]
768770 let cx = ba[x]
769771 let fN = parseIntValue(ba[y])
770772 let fO = parseIntValue(ba[z])
771773 let fP = ba[u]
772774 let cu = if ((fi == bp))
773775 then fL
774776 else fi
775777 let fg = value(fK[0])
776778 let cs = value(fg.assetId)
777779 let cY = fg.amount
778780 let eO = eH(e, e, e)
779781 if ((eO == eO))
780782 then {
781783 let cr = toBase58String(fM)
782784 if ((cv != toBase58String(cs)))
783785 then throw("Wrong LP")
784786 else {
785787 let cC = bF(cw)
786788 let cE = bF(cx)
787789 let fQ = {
788790 let fR = invoke(this, "getOneTknV2READONLY", [fI, cY], nil)
789791 if ($isInstanceOf(fR, "(Int, Int)"))
790792 then fR
791793 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
792794 }
793795 if ((fQ == fQ))
794796 then {
795797 let cp = fQ._2
796798 let fS = fQ._1
797799 let fT = if (if ((fJ > 0))
798800 then (fJ > fS)
799801 else false)
800802 then aK(makeString(["amount to receive is less than ", toString(fJ)], ""))
801803 else fS
802804 let fU = if ((fI == cw))
803805 then $Tuple4(fT, 0, ((cC - fT) - cp), cE)
804806 else if ((fI == cx))
805807 then $Tuple4(0, fT, cC, ((cE - fT) - cp))
806808 else throw("invalid out asset id")
807809 let fV = fU._1
808810 let fW = fU._2
809811 let fy = fU._3
810812 let fz = fU._4
811813 let fX = bH(H(fz, fO), H(fy, fN))
812814 let fY = K(fX, a)
813815 let fZ = if ((fI == "WAVES"))
814816 then unit
815817 else fromBase58String(fI)
816818 let ga = if ((cp > 0))
817819 then [ScriptTransfer(aR, cp, fZ)]
818820 else nil
819821 let cO = ([ScriptTransfer(cu, fT, fZ), StringEntry(ad(toString(cu), cr), bB(fV, fW, cY, fY, height, lastBlock.timestamp)), IntegerEntry(W(), fY), IntegerEntry(X(height, lastBlock.timestamp), fY)] ++ ga)
820822 if ((cO == cO))
821823 then {
822824 let gb = invoke(aN, "burn", [cY], [AttachedPayment(cs, cY)])
823825 if ((gb == gb))
824826 then {
825827 let gc = {
826828 let gd = if ((this == aR))
827829 then 0
828830 else cp
829831 let ge = if ((aW(fI) == bg))
830832 then true
831833 else false
832834 if (ge)
833835 then $Tuple2(-((fS + gd)), 0)
834836 else $Tuple2(0, -((fS + gd)))
835837 }
836838 let eQ = gc._1
837839 let eR = gc._2
838840 let gf = eP(eQ, eR, 0)
839841 let gg = gf._1
840842 let eG = gf._2
841843 let gh = eT(eO, eG)
842844 if ((gh == gh))
843845 then $Tuple2((cO ++ gg), fT)
844846 else throw("Strict value is not equal to itself.")
845847 }
846848 else throw("Strict value is not equal to itself.")
847849 }
848850 else throw("Strict value is not equal to itself.")
849851 }
850852 else throw("Strict value is not equal to itself.")
851853 }
852854 }
853855 else throw("Strict value is not equal to itself.")
854856 }
855857
856858
857859 func gi () = {
858860 let aE = getString(U())
859861 if ($isInstanceOf(aE, "String"))
860862 then {
861863 let dI = aE
862864 fromBase58String(dI)
863865 }
864866 else if ($isInstanceOf(aE, "Unit"))
865867 then unit
866868 else throw("Match error")
867869 }
868870
869871
870872 func gj () = {
871873 let aE = getString(V())
872874 if ($isInstanceOf(aE, "String"))
873875 then {
874876 let dI = aE
875877 fromBase58String(dI)
876878 }
877879 else if ($isInstanceOf(aE, "Unit"))
878880 then unit
879881 else throw("Match error")
880882 }
881883
882884
883885 let gk = throw("Permission denied")
884886
885887 func gl (dV) = {
886888 let aE = gi()
887889 if ($isInstanceOf(aE, "ByteVector"))
888890 then {
889891 let gm = aE
890892 (dV.callerPublicKey == gm)
891893 }
892894 else if ($isInstanceOf(aE, "Unit"))
893895 then (dV.caller == this)
894896 else throw("Match error")
895897 }
896898
897899
898900 func gn (dV) = {
899901 let aE = gi()
900902 if ($isInstanceOf(aE, "ByteVector"))
901903 then {
902904 let gm = aE
903905 if ((dV.callerPublicKey == gm))
904906 then true
905907 else gk
906908 }
907909 else if ($isInstanceOf(aE, "Unit"))
908910 then if ((dV.caller == this))
909911 then true
910912 else gk
911913 else throw("Match error")
912914 }
913915
914916
915917 @Callable(dV)
916918 func constructor (T) = {
917919 let ev = gn(dV)
918920 if ((ev == ev))
919921 then [StringEntry(T(), T)]
920922 else throw("Strict value is not equal to itself.")
921923 }
922924
923925
924926
925927 @Callable(dV)
926928 func setManager (go) = {
927929 let ev = gn(dV)
928930 if ((ev == ev))
929931 then {
930932 let gp = fromBase58String(go)
931933 if ((gp == gp))
932934 then [StringEntry(V(), go)]
933935 else throw("Strict value is not equal to itself.")
934936 }
935937 else throw("Strict value is not equal to itself.")
936938 }
937939
938940
939941
940942 @Callable(dV)
941943 func confirmManager () = {
942944 let cm = gj()
943945 let gq = if (isDefined(cm))
944946 then true
945947 else throw("No pending manager")
946948 if ((gq == gq))
947949 then {
948950 let gr = if ((dV.callerPublicKey == value(cm)))
949951 then true
950952 else throw("You are not pending manager")
951953 if ((gr == gr))
952954 then [StringEntry(U(), toBase58String(value(cm))), DeleteEntry(V())]
953955 else throw("Strict value is not equal to itself.")
954956 }
955957 else throw("Strict value is not equal to itself.")
956958 }
957959
958960
959961
960962 @Callable(dV)
961963 func put (gs,gt) = {
962964 let gu = bk()
963965 let gv = valueOrErrorMessage(addressFromString(gu[C]), "Wr st addr")
964966 let gw = valueOrErrorMessage(addressFromString(gu[E]), "Wr sl addr")
965967 if ((0 > gs))
966968 then throw("Wrong slippage")
967969 else if ((size(dV.payments) != 2))
968970 then throw("2 pmnts expd")
969971 else {
970972 let gx = toBigInt(value(dV.payments[0]).amount)
971973 let gy = toBigInt(value(dV.payments[1]).amount)
972974 let eO = eH(gx, gy, toBigInt(0))
973975 if ((eO == eO))
974976 then {
975977 let gz = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gs, true, false, true, 0, "")
976978 let dx = gz._2
977979 let gA = gz._7
978980 let cO = gz._9
979981 let dy = gz._10
980982 let dz = gz._11
981983 let cw = gz._12
982984 let cx = gz._13
983985 let dk = invoke(aN, "emit", [dx], nil)
984986 if ((dk == dk))
985987 then {
986988 let gB = {
987989 let aE = dk
988990 if ($isInstanceOf(aE, "Address"))
989991 then {
990992 let gC = aE
991993 invoke(gC, "emit", [dx], nil)
992994 }
993995 else unit
994996 }
995997 if ((gB == gB))
996998 then {
997999 let gD = if ((dy > 0))
9981000 then invoke(gw, "put", nil, [AttachedPayment(cw, dy)])
9991001 else nil
10001002 if ((gD == gD))
10011003 then {
10021004 let gE = if ((dz > 0))
10031005 then invoke(gw, "put", nil, [AttachedPayment(cx, dz)])
10041006 else nil
10051007 if ((gE == gE))
10061008 then {
10071009 let gF = if (gt)
10081010 then {
10091011 let gG = invoke(gv, "stake", nil, [AttachedPayment(gA, dx)])
10101012 if ((gG == gG))
10111013 then nil
10121014 else throw("Strict value is not equal to itself.")
10131015 }
10141016 else [ScriptTransfer(dV.caller, dx, gA)]
10151017 let gH = eP(0, 0, 0)
10161018 let gg = gH._1
10171019 let eG = gH._2
10181020 let gh = eT(eO, eG)
10191021 if ((gh == gh))
10201022 then ((cO ++ gF) ++ gg)
10211023 else throw("Strict value is not equal to itself.")
10221024 }
10231025 else throw("Strict value is not equal to itself.")
10241026 }
10251027 else throw("Strict value is not equal to itself.")
10261028 }
10271029 else throw("Strict value is not equal to itself.")
10281030 }
10291031 else throw("Strict value is not equal to itself.")
10301032 }
10311033 else throw("Strict value is not equal to itself.")
10321034 }
10331035 }
10341036
10351037
10361038
10371039 @Callable(dV)
10381040 func putOneTknV2 (fJ,gt) = {
10391041 let gI = {
10401042 let fR = invoke(aN, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
10411043 if ($isInstanceOf(fR, "Boolean"))
10421044 then fR
10431045 else throw(($getType(fR) + " couldn't be cast to Boolean"))
10441046 }
10451047 let gJ = if (if (if (aP())
10461048 then true
10471049 else (be == q))
10481050 then true
10491051 else (be == s))
10501052 then true
10511053 else gI
10521054 let gK = [if (if (!(gJ))
10531055 then true
10541056 else gl(dV))
10551057 then true
10561058 else aK("put operation is blocked by admin"), if ((size(dV.payments) == 1))
10571059 then true
10581060 else aK("exactly 1 payment are expected")]
10591061 if ((gK == gK))
10601062 then {
10611063 let ba = aS()
10621064 let cw = ba[w]
10631065 let cx = ba[x]
10641066 let cv = fromBase58String(ba[v])
10651067 let fN = parseIntValue(ba[y])
10661068 let fO = parseIntValue(ba[z])
10671069 let cu = if ((dV.caller == this))
10681070 then dV.originCaller
10691071 else dV.caller
10701072 let fg = value(dV.payments[0])
10711073 let cs = toBase58String(value(fg.assetId))
10721074 let cY = fg.amount
10731075 let gL = fl(cY, cs, toString(cu), toBase58String(dV.transactionId), true)
10741076 if ((gL == gL))
10751077 then {
10761078 let cp = gL._3
10771079 let cO = gL._2
10781080 let gM = gL._1
10791081 let dx = if (if ((fJ > 0))
10801082 then (fJ > gM)
10811083 else false)
10821084 then aK(makeString(["amount to receive is less than ", toString(fJ)], ""))
10831085 else gM
10841086 let gz = invoke(aN, "emit", [dx], nil)
10851087 if ((gz == gz))
10861088 then {
10871089 let gB = {
10881090 let aE = gz
10891091 if ($isInstanceOf(aE, "Address"))
10901092 then {
10911093 let gC = aE
10921094 invoke(gC, "emit", [dx], nil)
10931095 }
10941096 else unit
10951097 }
10961098 if ((gB == gB))
10971099 then {
10981100 let gF = if (gt)
10991101 then {
11001102 let gG = invoke(bm, "stake", nil, [AttachedPayment(cv, dx)])
11011103 if ((gG == gG))
11021104 then nil
11031105 else throw("Strict value is not equal to itself.")
11041106 }
11051107 else [ScriptTransfer(dV.caller, dx, cv)]
11061108 let ga = if ((cp > 0))
11071109 then [ScriptTransfer(aR, cp, fromBase58String(cs))]
11081110 else nil
11091111 let gN = if ((this == aR))
11101112 then $Tuple2(0, 0)
11111113 else {
11121114 let gO = if ((fg.assetId == bg))
11131115 then true
11141116 else false
11151117 if (gO)
11161118 then $Tuple2(-(cp), 0)
11171119 else $Tuple2(0, -(cp))
11181120 }
11191121 let eQ = gN._1
11201122 let eR = gN._2
11211123 let gP = eP(eQ, eR, 0)
11221124 let gg = gP._1
11231125 let eG = gP._2
11241126 $Tuple2((((cO ++ gF) ++ ga) ++ gg), dx)
11251127 }
11261128 else throw("Strict value is not equal to itself.")
11271129 }
11281130 else throw("Strict value is not equal to itself.")
11291131 }
11301132 else throw("Strict value is not equal to itself.")
11311133 }
11321134 else throw("Strict value is not equal to itself.")
11331135 }
11341136
11351137
11361138
11371139 @Callable(dV)
11381140 func putForFree (gQ) = if ((0 > gQ))
11391141 then throw("Wrong slpg")
11401142 else if ((size(dV.payments) != 2))
11411143 then throw("2 pmnts expd")
11421144 else {
11431145 let gR = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gQ, false, false, true, 0, "")
11441146 let cO = gR._9
11451147 let gx = toBigInt(value(dV.payments[0]).amount)
11461148 let gy = toBigInt(value(dV.payments[1]).amount)
11471149 let eO = eH(gx, gy, toBigInt(0))
11481150 if ((eO == eO))
11491151 then {
11501152 let gS = eP(0, 0, 0)
11511153 let gg = gS._1
11521154 let eG = gS._2
11531155 let gh = eT(eO, eG)
11541156 if ((gh == gh))
11551157 then (cO ++ gg)
11561158 else throw("Strict value is not equal to itself.")
11571159 }
11581160 else throw("Strict value is not equal to itself.")
11591161 }
11601162
11611163
11621164
11631165 @Callable(dV)
11641166 func get () = {
11651167 let dk = ff(dV)
11661168 let gT = dk._1
11671169 let cN = dk._2
11681170 let cY = dk._3
11691171 let cs = dk._4
11701172 let cO = dk._5
11711173 let ew = invoke(aN, "burn", [cY], [AttachedPayment(cs, cY)])
11721174 if ((ew == ew))
11731175 then {
11741176 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(cY))
11751177 let gU = eP(-(gT), -(cN), 0)
11761178 let gg = gU._1
11771179 let eG = gU._2
11781180 let gh = eT(eO, eG)
11791181 if ((gh == gh))
11801182 then (cO ++ gg)
11811183 else throw("Strict value is not equal to itself.")
11821184 }
11831185 else throw("Strict value is not equal to itself.")
11841186 }
11851187
11861188
11871189
11881190 @Callable(dV)
11891191 func getOneTknV2 (fI,fJ) = {
11901192 let gI = {
11911193 let fR = invoke(aN, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11921194 if ($isInstanceOf(fR, "Boolean"))
11931195 then fR
11941196 else throw(($getType(fR) + " couldn't be cast to Boolean"))
11951197 }
11961198 let gV = if (if (aP())
11971199 then true
11981200 else (be == s))
11991201 then true
12001202 else gI
12011203 let gK = [if (if (!(gV))
12021204 then true
12031205 else gl(dV))
12041206 then true
12051207 else aK("get operation is blocked by admin"), if ((size(dV.payments) == 1))
12061208 then true
12071209 else aK("exactly 1 payment are expected")]
12081210 if ((gK == gK))
12091211 then {
12101212 let gW = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
12111213 let cO = gW._1
12121214 let fT = gW._2
12131215 $Tuple2(cO, fT)
12141216 }
12151217 else throw("Strict value is not equal to itself.")
12161218 }
12171219
12181220
12191221
12201222 @Callable(dV)
12211223 func refreshDLp () = {
12221224 let gX = valueOrElse(getInteger(al), 0)
12231225 let gY = if (((height - gX) >= ao))
12241226 then unit
12251227 else aK(makeString([toString(ao), " blocks have not passed since the previous call"], ""))
12261228 if ((gY == gY))
12271229 then {
12281230 let fa = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, ak), "0")), aM("invalid dLp"))
12291231 let gZ = eP(0, 0, 0)
12301232 let ha = gZ._1
12311233 let eG = gZ._2
12321234 let eS = if ((fa != eG))
12331235 then ha
12341236 else aK("nothing to refresh")
12351237 $Tuple2(eS, toString(eG))
12361238 }
12371239 else throw("Strict value is not equal to itself.")
12381240 }
12391241
12401242
12411243
12421244 @Callable(dV)
12431245 func getOneTknV2READONLY (fI,hb) = {
12441246 let ba = aS()
12451247 let cw = ba[w]
12461248 let cx = ba[x]
12471249 let cv = ba[v]
12481250 let dF = [toBigInt(bF(cw)), toBigInt(bF(cx))]
12491251 let eF = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cv)), "invalid lp asset").quantity)
12501252 let bS = dE(dF)
12511253 let bR = (bS - fraction(toBigInt(hb), bS, eF))
12521254 let hc = if ((fI == cw))
12531255 then 0
12541256 else if ((fI == cx))
12551257 then 1
12561258 else throw("invalid out asset id")
12571259 let hd = es(dF, hc, bR)
12581260 let he = (dF[hc] - hd)
12591261 let hf = max([0, toInt((he - f))])
12601262 let hg = cn(hf)
12611263 let fS = hg._1
12621264 let cp = hg._2
12631265 $Tuple2(nil, $Tuple2(fS, cp))
12641266 }
12651267
12661268
12671269
12681270 @Callable(dV)
12691271 func getOneTknV2WithBonusREADONLY (fI,hb) = {
12701272 let ba = aS()
12711273 let cw = ba[w]
12721274 let cx = ba[x]
12731275 let cv = ba[v]
12741276 let cC = bF(cw)
12751277 let cE = bF(cx)
12761278 let hh = {
12771279 let fR = invoke(this, "getOneTknV2READONLY", [fI, hb], nil)
12781280 if ($isInstanceOf(fR, "(Int, Int)"))
12791281 then fR
12801282 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
12811283 }
12821284 let fS = hh._1
12831285 let cp = hh._2
12841286 let dk = cq("", cv, hb, this)
12851287 let cM = dk._1
12861288 let cN = dk._2
12871289 let hi = (cM + cN)
12881290 let fG = if ((hi == 0))
12891291 then if ((fS == 0))
12901292 then 0
12911293 else throw("bonus calculation error")
12921294 else fraction((fS - hi), a, hi)
12931295 $Tuple2(nil, $Tuple3(fS, cp, fG))
12941296 }
12951297
12961298
12971299
12981300 @Callable(dV)
12991301 func getNoLess (hj,hk) = {
13001302 let dk = ff(dV)
13011303 let cM = dk._1
13021304 let cN = dk._2
13031305 let cY = dk._3
13041306 let cs = dk._4
13051307 let cO = dk._5
13061308 if ((hj > cM))
13071309 then throw(((("Failed: " + toString(cM)) + " < ") + toString(hj)))
13081310 else if ((hk > cN))
13091311 then throw(((("Failed: " + toString(cN)) + " < ") + toString(hk)))
13101312 else {
13111313 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(cY))
13121314 let hl = invoke(aN, "burn", [cY], [AttachedPayment(cs, cY)])
13131315 if ((hl == hl))
13141316 then {
13151317 let hm = eP(-(cM), -(cN), 0)
13161318 let gg = hm._1
13171319 let eG = hm._2
13181320 let gh = eT(eO, eG)
13191321 if ((gh == gh))
13201322 then (cO ++ gg)
13211323 else throw("Strict value is not equal to itself.")
13221324 }
13231325 else throw("Strict value is not equal to itself.")
13241326 }
13251327 }
13261328
13271329
13281330
13291331 @Callable(dV)
13301332 func unstakeAndGet (co) = {
13311333 let hn = if ((size(dV.payments) != 0))
13321334 then throw("No pmnts expd")
13331335 else true
13341336 if ((hn == hn))
13351337 then {
13361338 let ce = aS()
13371339 let ho = bk()
13381340 let gA = fromBase58String(ce[v])
13391341 let hp = valueOrErrorMessage(addressFromString(ho[C]), "Wr st addr")
13401342 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13411343 let hq = invoke(hp, "unstake", [toBase58String(gA), co], nil)
13421344 if ((hq == hq))
13431345 then {
13441346 let dk = cq(toBase58String(dV.transactionId), toBase58String(gA), co, dV.caller)
13451347 let cM = dk._1
13461348 let cN = dk._2
13471349 let cA = parseIntValue(dk._9)
13481350 let cO = dk._10
13491351 let hr = if (if (aP())
13501352 then true
13511353 else (cA == s))
13521354 then throw(("Blocked: " + toString(cA)))
13531355 else true
13541356 if ((hr == hr))
13551357 then {
13561358 let hs = invoke(aN, "burn", [co], [AttachedPayment(gA, co)])
13571359 if ((hs == hs))
13581360 then {
13591361 let ht = eP(-(cM), -(cN), 0)
13601362 let gg = ht._1
13611363 let eG = ht._2
13621364 let gh = eT(eO, eG)
13631365 if ((gh == gh))
13641366 then (cO ++ gg)
13651367 else throw("Strict value is not equal to itself.")
13661368 }
13671369 else throw("Strict value is not equal to itself.")
13681370 }
13691371 else throw("Strict value is not equal to itself.")
13701372 }
13711373 else throw("Strict value is not equal to itself.")
13721374 }
13731375 else throw("Strict value is not equal to itself.")
13741376 }
13751377
13761378
13771379
13781380 @Callable(dV)
13791381 func unstakeAndGetNoLess (hu,hv,hk) = {
13801382 let gV = if (aP())
13811383 then true
13821384 else (be == s)
13831385 let gK = [if (!(gV))
13841386 then true
13851387 else throw("get operation is blocked by admin"), if ((size(dV.payments) == 0))
13861388 then true
13871389 else throw("no payments are expected")]
13881390 if ((gK == gK))
13891391 then {
13901392 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13911393 let hq = invoke(bm, "unstake", [toBase58String(bf), hu], nil)
13921394 if ((hq == hq))
13931395 then {
13941396 let hw = cq(toBase58String(dV.transactionId), toBase58String(bf), hu, dV.caller)
13951397 let cM = hw._1
13961398 let cN = hw._2
13971399 let cO = hw._10
13981400 let hx = [if ((cM >= hv))
13991401 then true
14001402 else throw(makeString(["amount asset amount to receive is less than ", toString(hv)], "")), if ((cN >= hk))
14011403 then true
14021404 else throw(makeString(["price asset amount to receive is less than ", toString(hk)], ""))]
14031405 if ((hx == hx))
14041406 then {
14051407 let hl = invoke(aN, "burn", [hu], [AttachedPayment(bf, hu)])
14061408 if ((hl == hl))
14071409 then {
14081410 let hy = eP(-(cM), -(cN), 0)
14091411 let gg = hy._1
14101412 let eG = hy._2
14111413 let gh = eT(eO, eG)
14121414 if ((gh == gh))
14131415 then (cO ++ gg)
14141416 else throw("Strict value is not equal to itself.")
14151417 }
14161418 else throw("Strict value is not equal to itself.")
14171419 }
14181420 else throw("Strict value is not equal to itself.")
14191421 }
14201422 else throw("Strict value is not equal to itself.")
14211423 }
14221424 else throw("Strict value is not equal to itself.")
14231425 }
14241426
14251427
14261428
14271429 @Callable(dV)
14281430 func unstakeAndGetOneTknV2 (hu,fI,fJ) = {
14291431 let gI = {
14301432 let fR = invoke(aN, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14311433 if ($isInstanceOf(fR, "Boolean"))
14321434 then fR
14331435 else throw(($getType(fR) + " couldn't be cast to Boolean"))
14341436 }
14351437 let gV = if (if (aP())
14361438 then true
14371439 else (be == s))
14381440 then true
14391441 else gI
14401442 let gK = [if (if (!(gV))
14411443 then true
14421444 else gl(dV))
14431445 then true
14441446 else aK("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14451447 then true
14461448 else aK("no payments are expected")]
14471449 if ((gK == gK))
14481450 then {
14491451 let ce = aS()
14501452 let ho = bk()
14511453 let gA = fromBase58String(ce[v])
14521454 let hp = valueOrErrorMessage(addressFromString(ho[C]), "Wr st addr")
14531455 let hq = invoke(hp, "unstake", [toBase58String(gA), hu], nil)
14541456 if ((hq == hq))
14551457 then {
14561458 let hz = fH(fI, fJ, [AttachedPayment(gA, hu)], dV.caller, dV.originCaller, dV.transactionId)
14571459 let cO = hz._1
14581460 let fT = hz._2
14591461 $Tuple2(cO, fT)
14601462 }
14611463 else throw("Strict value is not equal to itself.")
14621464 }
14631465 else throw("Strict value is not equal to itself.")
14641466 }
14651467
14661468
14671469
14681470 @Callable(dV)
14691471 func putOneTknV2WithBonusREADONLY (hA,hB) = {
14701472 let ba = aS()
14711473 let cw = ba[w]
14721474 let cx = ba[x]
14731475 let cv = ba[v]
14741476 let hC = fl(hA, hB, "", "", true)
14751477 let fB = hC._1
14761478 let cO = hC._2
14771479 let cp = hC._3
14781480 let fG = hC._4
14791481 $Tuple2(nil, $Tuple3(fB, cp, fG))
14801482 }
14811483
14821484
14831485
14841486 @Callable(dV)
14851487 func putOneTknV2WithoutTakeFeeREADONLY (hA,hB) = {
14861488 let ba = aS()
14871489 let cw = ba[w]
14881490 let cx = ba[x]
14891491 let cv = ba[v]
14901492 let hD = fl(hA, hB, "", "", false)
14911493 let fB = hD._1
14921494 let cO = hD._2
14931495 let cp = hD._3
14941496 let fG = hD._4
14951497 $Tuple2(nil, $Tuple3(fB, cp, fG))
14961498 }
14971499
14981500
14991501
15001502 @Callable(dV)
15011503 func activate (hE,hF) = if ((toString(dV.caller) != toString(aN)))
15021504 then throw("denied")
15031505 else $Tuple2([StringEntry(ae(), hE), StringEntry(af(), hF)], "success")
15041506
15051507
15061508
15071509 @Callable(dV)
15081510 func setS (hG,hr) = if ((toString(dV.caller) != aG(this, ah())))
15091511 then gk
15101512 else [StringEntry(hG, hr)]
15111513
15121514
15131515
15141516 @Callable(dV)
15151517 func setI (hG,hr) = if ((toString(dV.caller) != aG(this, ah())))
15161518 then gk
15171519 else [IntegerEntry(hG, hr)]
15181520
15191521
15201522
15211523 @Callable(dV)
15221524 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aS())
15231525
15241526
15251527
15261528 @Callable(dV)
15271529 func getAccBalanceWrapperREADONLY (bG) = $Tuple2(nil, bF(bG))
15281530
15291531
15301532
15311533 @Callable(dV)
15321534 func calcPricesWrapperREADONLY (bY,bZ,cd) = {
15331535 let hH = cc(bY, bZ, cd)
15341536 $Tuple2(nil, [toString(hH[0]), toString(hH[1]), toString(hH[2])])
15351537 }
15361538
15371539
15381540
15391541 @Callable(dV)
15401542 func fromX18WrapperREADONLY (L,hI) = $Tuple2(nil, K(parseBigIntValue(L), hI))
15411543
15421544
15431545
15441546 @Callable(dV)
15451547 func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
15461548
15471549
15481550
15491551 @Callable(dV)
15501552 func calcPriceBigIntWrapperREADONLY (bI,bJ) = $Tuple2(nil, toString(bH(parseBigIntValue(bI), parseBigIntValue(bJ))))
15511553
15521554
15531555
15541556 @Callable(dV)
15551557 func estimatePutOperationWrapperREADONLY (cr,bN,cQ,cR,cS,cT,hJ,cU,cV) = $Tuple2(nil, cP(cr, bN, cQ, cR, cS, cT, hJ, cU, cV, true, false, 0, ""))
15561558
15571559
15581560
15591561 @Callable(dV)
15601562 func estimateGetOperationWrapperREADONLY (cr,hK,ct,hJ) = {
15611563 let dk = cq(cr, hK, ct, addressFromStringValue(hJ))
15621564 $Tuple2(nil, $Tuple10(dk._1, dk._2, dk._3, dk._4, dk._5, dk._6, dk._7, toString(dk._8), dk._9, dk._10))
15631565 }
15641566
15651567
15661568
15671569 @Callable(dV)
15681570 func getFeeREADONLY () = $Tuple2(nil, aj)
15691571
15701572
15711573 @Verifier(hL)
15721574 func hM () = {
15731575 let hN = {
15741576 let aE = gi()
15751577 if ($isInstanceOf(aE, "ByteVector"))
15761578 then {
15771579 let gm = aE
15781580 gm
15791581 }
15801582 else if ($isInstanceOf(aE, "Unit"))
15811583 then hL.senderPublicKey
15821584 else throw("Match error")
15831585 }
15841586 let aE = hL
15851587 if ($isInstanceOf(aE, "Order"))
15861588 then {
15871589 let eW = aE
15881590 let hO = aQ()
15891591 let hP = eV(eW)
15901592 let hQ = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
15911593 let hR = sigVerify(eW.bodyBytes, eW.proofs[1], hO)
15921594 if (if (if (hP)
15931595 then hQ
15941596 else false)
15951597 then hR
15961598 else false)
15971599 then true
15981600 else az(hP, hQ, hR)
15991601 }
16001602 else if ($isInstanceOf(aE, "SetScriptTransaction"))
16011603 then {
16021604 let dI = aE
16031605 let hS = blake2b256(value(dI.script))
16041606 let hT = fromBase64String(value(getString(aN, ax())))
16051607 let hU = scriptHash(this)
16061608 if (if ((hT == hS))
16071609 then (hU != hS)
16081610 else false)
16091611 then true
16101612 else sigVerify(hL.bodyBytes, hL.proofs[0], hN)
16111613 }
16121614 else sigVerify(hL.bodyBytes, hL.proofs[0], hN)
16131615 }
16141616

github/deemru/w8io/169f3d6 
169.71 ms