tx · uuAsZaGnFLpm3yhk5J8wGdViPKEJT4VnsdGvrd9FCoJ

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03700000 Waves

2022.12.26 16:34 [2377309] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "uuAsZaGnFLpm3yhk5J8wGdViPKEJT4VnsdGvrd9FCoJ", "fee": 3700000, "feeAssetId": null, "timestamp": 1672061735051, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "H3iYqnZWoSrGtCHgenGx5CcuokAtaV4diibqqYcAyzeG6ih77G9N6DERj71Km5Tj2s3DWDUadQHWq332YZd4Qyg" ], "script": "base64:BgKpKQgCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgAiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgZrZXlETHAiFWtleURMcFJlZnJlc2hlZEhlaWdodCISa2V5RExwUmVmcmVzaERlbGF5IhZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9kTHBSZWZyZXNoRGVsYXkiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIEc3RyZiIEYWRkciIDa2V5IgRpbnRmIgh0aHJvd0VyciIDbXNnIgZmbXRFcnIiA2ZjYSIBQSIDaWdzIgJtcCITZmVlQ29sbGVjdG9yQWRkcmVzcyIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3MzgzNzYxMiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEmNmZ0luQW1vdW50QXNzZWRJZCIRY2ZnSW5QcmljZUFzc2V0SWQiA2dmYyINZmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0Ig9zbGlwYWdlQ29udHJhY3QiC2d3eENvbnRyYWN0IgxyZXN0Q29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIDdmFkIgJBMSICQTIiCHNsaXBwYWdlIgRkaWZmIgRwYXNzIgJ2ZCICRDEiAkQwIgRzbHBnIgRmYWlsIgNwY3AiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCILYW10QXNBbXRYMTgiCnByQXNBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4Ig9jYWxjdWxhdGVQcmljZXMiAXAiB3Rha2VGZWUiBmFtb3VudCIJZmVlQW1vdW50IgNlZ28iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiC3VzZXJBZGRyZXNzIgRscElkIgRhbUlkIgRwcklkIgVhbURjbSIFcHJEY20iA3N0cyIHbHBFbWlzcyIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4IgpscEVtaXNzWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiA2VwbyIHaW5BbUFtdCIGaW5BbUlkIgdpblByQW10IgZpblBySWQiBmlzRXZhbCIGZW1pdExwIgppc09uZUFzc2V0IhB2YWxpZGF0ZVNsaXBwYWdlIgZwbXRBbXQiBXBtdElkIgdhbUlkU3RyIgdwcklkU3RyIglpbkFtSWRTdHIiCWluUHJJZFN0ciIGYW10RGNtIghwcmljZURjbSIEbHBFbSIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIBciILc2xpcHBhZ2VYMTgiD3NsaXBwYWdlUmVhbFgxOCINbHBFbWlzc2lvblgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiINJHQwMTgxOTQxODUzOSIKd3JpdGVBbUFtdCIKd3JpdGVQckFtdCILY29tbW9uU3RhdGUiBGdldEQiAnhwIgN4cDAiA3hwMSIBcyIBYSIDYW5uIgt4cDBfeHAxX25fbiIFYW5uX3MiBWFubl8xIgljYWxjRE5leHQiAWQiAmRkIgNkZGQiAmRwIgRjYWxjIgNhY2MiAWkiBWROZXh0IghkRGlmZlJhdyIFZERpZmYiA2FyciINJHQwMjA0NjcyMDUxNSICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiBWZvdW5kIgdnZXRET2xkIgFuIgphUHJlY2lzaW9uIhBhbm5fc19hUHJlY2lzaW9uIg5hbm5fYVByZWNpc2lvbiICbjEiA2N1ciINJHQwMjExNDQyMTE2NCINJHQwMjE1ODUyMTYzMiIFZ2V0WUQiAUQiAXgiAWMiAWIiDSR0MDIyMTMyMjIxNTIiAXkiBXlOZXh0IgV5RGlmZiINJHQwMjI0NTkyMjUwNiIHY2FsY0RMcCINYW1vdW50QmFsYW5jZSIMcHJpY2VCYWxhbmNlIgpscEVtaXNzaW9uIgp1cGRhdGVkRExwIg5jYWxjQ3VycmVudERMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50RExwIhJyZWZyZXNoRExwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRETHAiBm9sZERMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI0NDQ1MjQ2NTciA2RMcCINJHQwMjQ5ODcyNTA4NyINdW51c2VkQWN0aW9ucyIGZExwTmV3Igxpc09yZGVyVmFsaWQiAmNnIgNwbXQiAmNwIgZjYWxsZXIiB2FtQXNQbXQiB3ByQXNQbXQiDWNhbGNQdXRPbmVUa24iCXBtdEFtdFJhdyILd2l0aFRha2VGZWUiDWNoZWNoRW1pc3Npb24iDSR0MDI3MzUzMjc4MTUiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIg0kdDAyNzgyMTI3OTk3IgthbUFtb3VudFJhdyILcHJBbW91bnRSYXciDSR0MDI4MDAxMjgyNDAiCGFtQW1vdW50IghwckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciBmNoZWNrRCIIbHBBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIhNnZXRPbmVUa25WMkludGVybmFsIgpvdXRBc3NldElkIgxtaW5PdXRBbW91bnQiCHBheW1lbnRzIgxvcmlnaW5DYWxsZXIiDXRyYW5zYWN0aW9uSWQiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiCnBvb2xTdGF0dXMiDSR0MDMwMjkwMzA0MDEiAUAiCHRvdGFsR2V0Igt0b3RhbEFtb3VudCINJHQwMzA1OTEzMDg5OCIFb3V0QW0iBW91dFByIghjdXJQclgxOCIFY3VyUHIiEW91dEFzc2V0SWRPcldhdmVzIhBzZW5kRmVlVG9NYXRjaGVyIgRidXJuIg0kdDAzMTY4MzMyMDMzIhBmZWVBbW91bnRGb3JDYWxjIhBvdXRJbkFtb3VudEFzc2V0Ig0kdDAzMjAzNjMyMTQ0IhFyZWZyZXNoRExwQWN0aW9ucyIRaXNVcGRhdGVkRExwVmFsaWQiAW0iByRtYXRjaDAiAnBtIgJwZCIJaXNNYW5hZ2VyIgJwayICbW0iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgJjbSIDaHBtIgNjcG0iBHNsaXAiCWF1dG9TdGFrZSIHZmFjdENmZyILc3Rha2luZ0NudHIiCHNsaXBDbnRyIgphbUFzc2V0UG10IgpwckFzc2V0UG10IgFlIglscEFzc2V0SWQiAmVsIgZsZWdhY3kiAnNhIgJzcCIIbHBUcm5zZnIiAnNzIg0kdDAzNjI5MzM2NDM1IgVjaGVjayIUbHBBc3NldEVtaXNzaW9uQWZ0ZXIiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIgZjaGVja3MiDSR0MDM4MTMxMzgyODkiB2VzdGltTFAiDSR0MDM5MTA0Mzk0NTMiFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzOTQ1NjM5NTY0IgdtYXhTbHBnIgZlc3RQdXQiDSR0MDQwNTk0NDA2NTkiCW91dEFtdEFtdCINJHQwNDE4MzI0MTkxNCINaXNHZXREaXNhYmxlZCINJHQwNDI1MzI0MjY4NyIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNDMyMTE0MzI3NSIQZExwVXBkYXRlQWN0aW9ucyINbHBBc3NldEFtb3VudCIFaW5kZXgiBG5ld1kiAmR5Igt0b3RhbEdldFJhdyINJHQwNDQyMDU0NDI1NCINJHQwNDQ2Mjk0NDc0NCIOc3VtT2ZHZXRBc3NldHMiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiA2FhYiIDcGFiIgNsYWUiBGxhZWEiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA0NjI4MzQ2MzY0Ig1jaGVja1BheW1lbnRzIgpmYWN0b3J5Q2ZnIgdzdGFraW5nIgp1bnN0YWtlSW52IgF2IgVidXJuQSINJHQwNDczODg0NzQ2OSINdW5zdGFrZUFtb3VudCIVbm9MZXNzVGhlbkFtb3VudEFzc2V0IgNyZXMiDGNoZWNrQW1vdW50cyINJHQwNDg3MTc0ODc5OCINJHQwNDk2OTM0OTg4MSIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiDSR0MDUwMDA5NTAxMTIiDSR0MDUwMjYwNTAzNjQiCGFtdEFzU3RyIgdwckFzU3RyIgFrIgJwciIMcmVzU2NhbGVNdWx0Igd1c3JBZGRyIgdwbXRBc0lkIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaHwAAWEAgMLXLwABYgkAtgIBAIDC1y8AAWMJALYCAQCAgJC7utat8A0AAWQJALYCAQAAAAFlCQC2AgEAAAABZgkAtgIBAAEAAWcJALYCAQACAAFoCQC2AgEAAwABaQkAtgIBAAQAAWoJALYC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b3JNZXNzYWdlAgkApggBCQCRAwIFAmJtBQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJicgoCYnMCYnQCYnUCYnYCYncCYngCYnkCYnoCYkECYkIJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJzCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJidQkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYncJAMwIAgkApAMBBQJieAkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCBQNuaWwFAW4BAmJDBgJiRAJiRQJiRgJidgJieQJiegkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJECQDMCAIJAKQDAQUCYkUJAMwIAgkApAMBBQJiRgkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYnkJAMwIAgkApAMBBQJiegUDbmlsBQFuAQJiRwECYkgDCQAAAgUCYkgCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJIAQJiSQICYkoCYksJALwCAwUCYkoFAWMFAmJLAQJiTAMCYk0CYk4CYk8EAmJQCQC8AgMJALgCAgUCYk0FAmJOBQFiBQJiTgQCYlEJAL8CAgkAuAICBQJiTwkBAVQBBQJiUAUBZAMJAQEhAQUCYlEJAAIBCQCsAgICCkJpZyBzbHBnOiAJAKYDAQUCYlAJAJQKAgUCYlEJAJkDAQkAzAgCBQJiTQkAzAgCBQJiTgUDbmlsAQJiUgMCYlMCYlQCYlUEAmJQCQC8AgMFAmJUBQFiBQJiUwQCYlYJAL8CAgUCYlUFAmJQAwMFAmJWBgkAvwICBQJiVAUCYlMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCmAwEFAmJUAgEgCQCmAwEFAmJTAgEgCQCmAwEFAmJQAgEgCQCmAwEFAmJVBQJiVgECYlcEAmJYAmJZAmJaAmNhBAJjYgkBAUgCBQJiWgUCYlgEAmNjCQEBSAIFAmNhBQJiWQkBAmJJAgUCY2MFAmNiAQJjZAMCYloCY2ECY2UEAmNmBQJiaAQCY2cFAmJpBAJjaAkBAmJXBAUCY2YFAmNnBQJiWgUCY2EEAmJLCQEBSAIFAmJaBQJjZgQCYkoJAQFIAgUCY2EFAmNnBAJjaQkBAUgCBQJjZQUBYQQCY2oJAQJiSQIFAmJLBQJjaQQCY2sJAQJiSQIFAmJKBQJjaQkAzAgCBQJjaAkAzAgCBQJjagkAzAgCBQJjawUDbmlsAQJjbAMCYloCY2ECY2UEAmNtCQECY2QDBQJiWgUCY2EFAmNlCQDMCAIJAQFLAgkAkQMCBQJjbQAABQFhCQDMCAIJAQFLAgkAkQMCBQJjbQABBQFhCQDMCAIJAQFLAgkAkQMCBQJjbQACBQFhBQNuaWwBAmNuAQJjbwQCY3AJAGsDBQJjbwUCYWwFAWEJAJQKAgkAZQIFAmNvBQJjcAUCY3ABAmNxBAJjcgJjcwJjdAJjdQQCY3YFAmJlBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN5BQJiaAQCY3oFAmJpBAJjQQkApAMBBQJiZAQCY0IICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3YCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgkA2AQBBQJjdgUCY3MJAAIBAg9Xcm9uZyBwbXQgYXNzZXQEAmNDCQECYkcBBQJjdwQCY0QJAQFIAgUCY0MFAmN5BAJjRQkBAmJHAQUCY3gEAmNGCQEBSAIFAmNFBQJjegQCY0cJAQJiSQIFAmNGBQJjRAQCY0gJAQFLAgUCY0cFAWEEAmNJCQEBSAIFAmN0BQFhBAJjSgkBAUgCBQJjQgUBYQQCY0sJALwCAwUCY0QFAmNJBQJjSgQCY0wJALwCAwUCY0YFAmNJBQJjSgQCY00JAQFOAwUCY0sFAmN5BQVGTE9PUgQCY04JAQFOAwUCY0wFAmN6BQVGTE9PUgQCY08DCQAAAgUCY3ICAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJjTQMJAAACBQJjdwIFV0FWRVMFBHVuaXQJANkEAQUCY3cJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3UFAmNOAwkAAAIFAmN4AgVXQVZFUwUEdW5pdAkA2QQBBQJjeAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYCCQClCAEFAmN1BQJjcgkBAmJDBgUCY00FAmNOBQJjdAUCY0gFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gFA25pbAkAnAoKBQJjTQUCY04FAmN3BQJjeAUCY0MFAmNFBQJjQgUCY0cFAmNBBQJjTwECY1ANAmNyAmJPAmNRAmNSAmNTAmNUAmN1AmNVAmNWAmNXAmNYAmNZAmNaBAJjdgUCYmUEAmRhCQDYBAEJAQV2YWx1ZQEFAmJmBAJkYgkA2AQBCQEFdmFsdWUBBQJiZwQCZGMFAmJqBAJkZAUCYmsEAmRlBQJiaAQCZGYFAmJpBAJjQQkApAMBBQJiZAQCZGcICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3YCCFdyIGxwIGFzCHF1YW50aXR5BAJjQwMFAmNVCQECYkcBBQJkYQMDBQJjVwkAAAIFAmNaBQJkYQcJAGUCCQECYkcBBQJkYQUCY1kDBQJjVwkBAmJHAQUCZGEJAGUCCQECYkcBBQJkYQUCY1EEAmNFAwUCY1UJAQJiRwEFAmRiAwMFAmNXCQAAAgUCY1oFAmRiBwkAZQIJAQJiRwEFAmRiBQJjWQMFAmNXCQECYkcBBQJkYgkAZQIJAQJiRwEFAmRiBQJjUwQCZGgJAQFIAgUCY1EFAmRlBAJkaQkBAUgCBQJjUwUCZGYEAmRqCQECYkkCBQJkaQUCZGgEAmNECQEBSAIFAmNDBQJkZQQCY0YJAQFIAgUCY0UFAmRmBAJkawMJAAACBQJkZwAABAJjRwUBZAQCZGwFAWQEAmNpCQB2BgkAuQICBQJkaAUCZGkAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFLAgUCY2kFAWEJAQFLAgUCZGgFAmRlCQEBSwIFAmRpBQJkZgkBAmJJAgkAtwICBQJjRgUCZGkJALcCAgUCY0QFAmRoBQJkbAQCY0cJAQJiSQIFAmNGBQJjRAQCZG0JALwCAwkBAVQBCQC4AgIFAmNHBQJkagUBYwUCY0cEAmRsCQEBSAIFAmJPBQFhAwMDBQJjWAkBAiE9AgUCY0cFAWQHCQC/AgIFAmRtBQJkbAcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCZG0CAyA+IAkApgMBBQJkbAQCZG4JAQFIAgUCZGcFAWEEAmRvCQC9AgQFAmRoBQJjRwUBYwUHQ0VJTElORwQCZHAJAL0CBAUCZGkFAWMFAmNHBQdDRUlMSU5HBAJkcQMJAL8CAgUCZG8FAmRpCQCUCgIFAmRwBQJkaQkAlAoCBQJkaAUCZG8EAmRyCAUCZHECXzEEAmRzCAUCZHECXzIEAmNpCQC8AgMFAmRuBQJkcwUCY0YJAJcKBQkBAU4DBQJjaQUBYQUFRkxPT1IJAQFOAwUCZHIFAmRlBQdDRUlMSU5HCQEBTgMFAmRzBQJkZgUHQ0VJTElORwUCY0cFAmRsBAJkdAgFAmRrAl8xBAJkdQgFAmRrAl8yBAJkdggFAmRrAl8zBAJjSAkBAUsCCAUCZGsCXzQFAWEEAmR3CQEBSwIIBQJkawJfNQUBYQMJAGcCAAAFAmR0CQACAQIHTFAgPD0gMAQCZHgDCQEBIQEFAmNWAAAFAmR0BAJkeQkAZQIFAmNRBQJkdQQCZHoJAGUCBQJjUwUCZHYEAmRBAwMFAmNXCQAAAgUCY1oFAmRhBwkAlAoCBQJjWQAAAwMFAmNXCQAAAgUCY1oFAmRiBwkAlAoCAAAFAmNZCQCUCgIFAmR1BQJkdgQCZEIIBQJkQQJfMQQCZEMIBQJkQQJfMgQCZEQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUCY3UFAmNyCQECYnIKBQJkQgUCZEMFAmR4BQJjSAUCYk8FAmR3BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkeQUCZHoFA25pbAkAnwoNBQJkdAUCZHgFAmNIBQJjQwUCY0UFAmRnBQJjdgUCY0EFAmREBQJkeQUCZHoFAmNSBQJjVAECZEUBAmRGBAJkRwkAkQMCBQJkRgAABAJkSAkAkQMCBQJkRgABBAJkSQkAtwICBQJkRwUCZEgDCQAAAgUCZEkFAWUFAWUEAmRKCQENcGFyc2VJbnRWYWx1ZQEFAmFOBAJkSwkAaAIFAmRKAAIEAmNtCQC8AgMFAmRHBQJkSAUBZgQCZEwJALwCAwUCY20FAWkFAWYEAmRNCQC8AgMJALYCAQUCZEsFAmRJBQFmBAJkTgkAtgIBCQBlAgUCZEsAAQoBAmRPAQJkUAQCZFEJALwCAwUCZFAFAmRQBQFmBAJkUgkAvAIDBQJkUQUCZFAFAWYEAmRTCQC8AgMFAmRSBQFmBQJkTAkAvQIECQC3AgIFAmRNCQC8AgMFAmRTBQFnBQFmBQJkUAkAtwICCQC8AgMFAmROBQJkUAUBZgkAvAIDBQFoBQJkUwUBZgUHQ0VJTElORwoBAmRUAgJkVQJkVgMIBQJkVQJfMgUCZFUEAmRQCAUCZFUCXzEEAmRXCQECZE8BBQJkUAQCZFgJAKADAQkAuAICBQJkVwkBBXZhbHVlAQUCZFAEAmRZAwkAZgIAAAUCZFgJAQEtAQUCZFgFAmRYAwkAZwIAAQUCZFkJAJQKAgUCZFcGCQCUCgIFAmRXBwQCZFoJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZWEKAAJlYgUCZFoKAAJlYwkAkAMBBQJlYgoAAmVkCQCUCgIFAmRJBwoBAmVlAgJlZgJlZwMJAGcCBQJlZwUCZWMFAmVmCQECZFQCBQJlZgkAkQMCBQJlYgUCZWcKAQJlaAICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZWgCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCBQJlZAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJkUAgFAmVhAl8xBAJlaQgFAmVhAl8yAwUCZWkFAmRQCQACAQkArAICAhlEIGNhbGN1bGF0aW9uIGVycm9yLCBEID0gCQCmAwEFAmRQAQJlagECZEYEAmVrBQFnBAJkRwkAkQMCBQJkRgAABAJkSAkAkQMCBQJkRgABBAJlbAkApwMBBQFsBAJkSgkAuQICCQCnAwEFAmFOBQJlbAQCZEkJALcCAgUCZEcFAmRIAwkAAAIFAmRJBQFlBQFlBAJkSwkAuQICBQJkSgUCZWsEAmRMCQC5AgIJALkCAgkAuQICBQJkRwUCZEgFAmVrBQJlawQCZW0JALoCAgkAuQICBQJkSwUCZEkFAmVsBAJlbgkAuAICBQJkSwUCZWwEAmVvCQC3AgIFAmVrBQFmCgECZFQCAmRVAmVwBAJlcQUCZFUEAmRQCAUCZXECXzEEAmVpCAUCZXECXzIDCQECIT0CBQJlaQUEdW5pdAUCZFUEAmRTCQC6AgIJALkCAgkAuQICBQJkUAUCZFAFAmRQBQJkTAQCZFcJALoCAgkAuQICCQC3AgIFAmVtCQC5AgIFAmRTBQJlawUCZFAJALcCAgkAugICCQC5AgIFAmVuBQJkUAUCZWwJALkCAgUCZW8FAmRTBAJkWQkBAVUBCQC4AgIFAmRXCQEFdmFsdWUBBQJkUAMJAMACAgUBZgUCZFkJAJQKAgUCZFcFAmVwCQCUCgIFAmRXBQR1bml0BAJkWgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlcgoAAmViBQJkWgoAAmVjCQCQAwEFAmViCgACZWQJAJQKAgUCZEkFBHVuaXQKAQJlZQICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkBAmRUAgUCZWYJAJEDAgUCZWIFAmVnCgECZWgCAmVmAmVnAwkAZwIFAmVnBQJlYwUCZWYJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVoAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgUCZWQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZFAIBQJlcgJfMQQCZWkIBQJlcgJfMgMJAQIhPQIFAmVpBQR1bml0BQJkUAkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQJkUAECZXMDAmRGAmRWAmV0BAJlawUBZwQCZXUJAJEDAgUCZEYDCQAAAgUCZFYAAAABAAAEAmVsCQCnAwEFAWwEAmRKCQC5AgIJAKcDAQUCYU4FAmVsBAJkSQUCZXUEAmRLCQC5AgIFAmRKBQJlawQCZXYJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQJldAUCZXQJALkCAgUCZXUFAmVrBQJldAUCZWwJALkCAgUCZEsFAmVrBAJldwkAuAICCQC3AgIFAmRJCQC6AgIJALkCAgUCZXQFAmVsBQJkSwUCZXQKAQJkVAICZFUCZXAEAmV4BQJkVQQCZXkIBQJleAJfMQQCZWkIBQJleAJfMgMJAQIhPQIFAmVpBQR1bml0BQJkVQQCZXoJALoCAgkAtwICCQC5AgIFAmV5BQJleQUCZXYJALcCAgkAuQICBQFnBQJleQUCZXcEAmVBCQEBVQEJALgCAgUCZXoJAQV2YWx1ZQEFAmV5AwkAwAICBQFmBQJlQQkAlAoCBQJlegUCZXAJAJQKAgUCZXoFBHVuaXQEAmRaCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmVCCgACZWIFAmRaCgACZWMJAJADAQUCZWIKAAJlZAkAlAoCBQJldAUEdW5pdAoBAmVlAgJlZgJlZwMJAGcCBQJlZwUCZWMFAmVmCQECZFQCBQJlZgkAkQMCBQJlYgUCZWcKAQJlaAICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZWgCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCBQJlZAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJleQgFAmVCAl8xBAJlaQgFAmVCAl8yAwkBAiE9AgUCZWkFBHVuaXQFAmV5CQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAmV5AQJlQwMCZUQCZUUCZUYEAmVHCQC8AgMJAQJkRQEJAMwIAgUCZUQJAMwIAgUCZUUFA25pbAUBYwUCZUYDCQAAAgUCZUYFAWUFAWUFAmVHAQJlSAMCZUkCZUoCZUsEAmVMCQC4AgIJALYCAQkBAmJHAQkBAmFYAQUCYmYFAmVJBAJlTQkAuAICCQC2AgEJAQJiRwEJAQJhWAEFAmJnBQJlSgQCZU4JALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJiZQhxdWFudGl0eQUCZUsEAmVPCQECZUMDBQJlTAUCZU0FAmVOBQJlTwECZVADAmVRAmVSAmVLBAJlTAkAZAIJAQJiRwEJAQJhWAEFAmJmBQJlUQQCZU0JAGQCCQECYkcBCQECYVgBBQJiZwUCZVIEAmVOCQBkAggJAQV2YWx1ZQEJAOwHAQUCYmUIcXVhbnRpdHkFAmVLBAJlRwkBAmVDAwkAtgIBBQJlTAkAtgIBBQJlTQkAtgIBBQJlTgQCZVMJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFuBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYW0JAKYDAQUCZUcFA25pbAkAlAoCBQJlUwUCZUcBAmVUAgJlVQJlRwMJAMACAgUCZUcFAmVVBgkBAmFKAQIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAECZVYBAmVXBAJlWAgFAmVXBmFtb3VudAQCZVkJAG4ECAUCZVcGYW1vdW50CAUCZVcFcHJpY2UFAWEFBUZMT09SBAJlWgMJAAACCAUCZVcJb3JkZXJUeXBlBQNCdXkJAJQKAgUCZVgJAQEtAQUCZVkJAJQKAgkBAS0BBQJlWAUCZVkEAmVRCAUCZVoCXzEEAmVSCAUCZVoCXzIDAwMJAQJhTwAGCQAAAgUCYmQFAXIGCQAAAgUCYmQFAXMJAAIBAg1BZG1pbiBibG9ja2VkAwMJAQIhPQIICAUCZVcJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BQJiZgYJAQIhPQIICAUCZVcJYXNzZXRQYWlyCnByaWNlQXNzZXQFAmJnCQACAQIJV3IgYXNzZXRzBAJmYQkApwMBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQJhbQQCZmIJAQJlUAMFAmVRBQJlUgAABAJmYwgFAmZiAl8xBAJmZAgFAmZiAl8yBAJmZQkAwAICBQJmZAUCZmEFAmZlAQJmZgECZFYDCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwABCQACAQIKMSBwbW50IGV4cAQCZmcJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAEAmNzCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmRrCQECY3EECQDYBAEIBQJkVg10cmFuc2FjdGlvbklkCQDYBAEFAmNzBQJjWQgFAmRWBmNhbGxlcgQCY00IBQJkawJfMQQCY04IBQJkawJfMgQCY0EJAQ1wYXJzZUludFZhbHVlAQgFAmRrAl85BAJjTwgFAmRrA18xMAMDCQECYU8ABgkAAAIFAmNBBQFzCQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUCY0EJAJcKBQUCY00FAmNOBQJjWQUCY3MFAmNPAQJmaAoCZmkCYWUCZmoCZmsCYk8CY1YCY1cCY1gCY1kCY1oEAmRrCQECY1ANBQJhZQUCYk8ICQEFdmFsdWUBBQJmagZhbW91bnQICQEFdmFsdWUBBQJmagdhc3NldElkCAkBBXZhbHVlAQUCZmsGYW1vdW50CAkBBXZhbHVlAQUCZmsHYXNzZXRJZAUCZmkJAAACBQJhZQIABQJjVgUCY1cFAmNYBQJjWQUCY1oEAmNBCQENcGFyc2VJbnRWYWx1ZQEIBQJkawJfOAMDAwkBAmFPAAYJAAACBQJjQQUBcQYJAAACBQJjQQUBcwkAAgEJAKwCAgIIQmxvY2tlZDoJAKQDAQUCY0EFAmRrAQJmbAUCZm0CY3MCY3UCYWUCZm4EAmN3CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeAkA2AQBCQEFdmFsdWUBBQJiZwQCY3YFAmJlBAJkZQUCYmgEAmRmBQJiaQQCZU4JALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJjdgIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCZm8DCQC/AgIFAmVOBQFlBgkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZm8FAmZvBAJjQwkBAmJHAQUCY3cEAmNFCQECYkcBBQJjeAQCZnADCQAAAgUCYWUCAAkAlAoCBQJjQwUCY0UDCQAAAgUCY3MFAmN3AwkAZgIFAmZtBQJjQwkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgkAZQIFAmNDBQJmbQUCY0UDCQAAAgUCY3MFAmN4AwkAZgIFAmZtBQJjRQkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgUCY0MJAGUCBQJjRQUCZm0JAAIBAhB3cm9uZyBwbXRBc3NldElkBAJmcQgFAmZwAl8xBAJmcggFAmZwAl8yBAJmcwMJAAACBQJjcwUCY3cJAJQKAgUCZm0AAAMJAAACBQJjcwUCY3gJAJQKAgAABQJmbQkAAgECD2ludmFsaWQgcGF5bWVudAQCZnQIBQJmcwJfMQQCZnUIBQJmcwJfMgQCZnYDBQJmbgkAlQoDCAkBAmNuAQUCZnQCXzEICQECY24BBQJmdQJfMQgJAQJjbgEFAmZtAl8yCQCVCgMFAmZ0BQJmdQAABAJmdwgFAmZ2Al8xBAJmeAgFAmZ2Al8yBAJjcAgFAmZ2Al8zBAJmeQkAZAIFAmZxBQJmdwQCZnoJAGQCBQJmcgUCZngEAmJUCQECZEUBCQDMCAIJALYCAQUCZnEJAMwIAgkAtgIBBQJmcgUDbmlsBAJiUwkBAmRFAQkAzAgCCQC2AgEFAmZ5CQDMCAIJALYCAQUCZnoFA25pbAQCZkEDCQC/AgIFAmJTBQJiVAYJAQV0aHJvdwADCQAAAgUCZkEFAmZBBAJmQgkAvQIEBQJlTgkAuAICBQJiUwUCYlQFAmJUBQVGTE9PUgQCY0gJAQFLAgkBAmJJAgkBAUgCBQJmegUCZGYJAQFIAgUCZnkFAmRlBQFhBAJkRAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVkABQJjSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVoCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjSAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQJjdQUCYWUJAQJicgoFAmZ0BQJmdQkAoAMBBQJmQgUCY0gAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmQwkAawMFAmZyBQFhBQJmcQQCZkQJAGsDBQJmbQUBYQkAZAIFAmZDBQFhBAJmRQkAZQIFAmZtBQJmRAQCZkYJALwCAwUCZU4JALYCAQUCZkUJALYCAQUCZnIEAmZHCQCgAwEJALwCAwkAuAICBQJmQgUCZkYFAWIFAmZGCQCWCgQJAKADAQUCZkIFAmREBQJjcAUCZkcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZIBgJmSQJmSgJmSwJmaQJmTAJmTQQCY3YJANgEAQkBBXZhbHVlAQUCYmUEAmN3CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeAkA2AQBCQEFdmFsdWUBBQJiZwQCZk4FAmJoBAJmTwUCYmkEAmZQBQJiZAQCY3UDCQAAAgUCZmkFAmJxBQJmTAUCZmkEAmZnCQEFdmFsdWUBCQCRAwIFAmZLAAAEAmNzCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmVPCQECZUgDBQFlBQFlBQFlAwkAAAIFAmVPBQJlTwQCY3IJANgEAQUCZk0DCQECIT0CBQJjdgkA2AQBBQJjcwkAAgECCFdyb25nIExQBAJjQwkBAmJHAQUCY3cEAmNFCQECYkcBBQJjeAQCZlEKAAJmUgkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZJCQDMCAIFAmNZBQNuaWwFA25pbAMJAAECBQJmUgIKKEludCwgSW50KQUCZlIJAAIBCQCsAgIJAAMBBQJmUgIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQJmUQUCZlEEAmNwCAUCZlECXzIEAmZTCAUCZlECXzEEAmZUAwMJAGYCBQJmSgAACQBmAgUCZkoFAmZTBwkBAmFKAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSgUDbmlsAgAFAmZTBAJmVQMJAAACBQJmSQUCY3cJAJYKBAUCZlQAAAkAZQIJAGUCBQJjQwUCZlQFAmNwBQJjRQMJAAACBQJmSQUCY3gJAJYKBAAABQJmVAUCY0MJAGUCCQBlAgUCY0UFAmZUBQJjcAkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJmVggFAmZVAl8xBAJmVwgFAmZVAl8yBAJmeQgFAmZVAl8zBAJmeggFAmZVAl80BAJmWAkBAmJJAgkBAUgCBQJmegUCZk8JAQFIAgUCZnkFAmZOBAJmWQkBAUsCBQJmWAUBYQQCZloDCQAAAgUCZkkCBVdBVkVTBQR1bml0CQDZBAEFAmZJBAJnYQMJAGYCBQJjcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFRBQJjcAUCZloFA25pbAUDbmlsBAJjTwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJmVAUCZloJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAgkApQgBBQJjdQUCY3IJAQJiQwYFAmZWBQJmVwUCY1kFAmZZBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWQAFAmZZCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWgIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZZBQNuaWwFAmdhAwkAAAIFAmNPBQJjTwQCZ2IJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY1kFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3MFAmNZBQNuaWwDCQAAAgUCZ2IFAmdiBAJnYwQCZ2QDCQAAAgUEdGhpcwUCYVEAAAUCY3AEAmdlAwkAAAIJAQJhVgEFAmZJBQJiZgYHAwUCZ2UJAJQKAgkBAS0BCQBkAgUCZlMFAmdkAAAJAJQKAgAACQEBLQEJAGQCBQJmUwUCZ2QEAmVRCAUCZ2MCXzEEAmVSCAUCZ2MCXzIEAmdmCQECZVADBQJlUQUCZVIAAAQCZ2cIBQJnZgJfMQQCZUcIBQJnZgJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAJQKAgkAzggCBQJjTwUCZ2cFAmZUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnaQAEAmdqCQCiCAEJAQFXAAMJAAECBQJnagIGU3RyaW5nBAJkSQUCZ2oJANkEAQUCZEkDCQABAgUCZ2oCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ2sABAJnagkAoggBCQEBWAADCQABAgUCZ2oCBlN0cmluZwQCZEkFAmdqCQDZBAEFAmRJAwkAAQIFAmdqAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAAmdsCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBAmdtAQJkVgQCZ2oJAQJnaQADCQABAgUCZ2oCCkJ5dGVWZWN0b3IEAmduBQJnagkAAAIIBQJkVg9jYWxsZXJQdWJsaWNLZXkFAmduAwkAAQIFAmdqAgRVbml0CQAAAggFAmRWBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJnbwECZFYEAmdqCQECZ2kAAwkAAQIFAmdqAgpCeXRlVmVjdG9yBAJnbgUCZ2oDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQUCZ24GBQJnbAMJAAECBQJnagIEVW5pdAMJAAACCAUCZFYGY2FsbGVyBQR0aGlzBgUCZ2wJAAIBAgtNYXRjaCBlcnJvch0CZFYBC2NvbnN0cnVjdG9yAQFWBAJldgkBAmdvAQUCZFYDCQAAAgUCZXYFAmV2CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUBVgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpzZXRNYW5hZ2VyAQJncAQCZXYJAQJnbwEFAmRWAwkAAAIFAmV2BQJldgQCZ3EJANkEAQUCZ3ADCQAAAgUCZ3EFAmdxCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFYAAUCZ3AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEOY29uZmlybU1hbmFnZXIABAJjbQkBAmdrAAQCZ3IDCQEJaXNEZWZpbmVkAQUCY20GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdyBQJncgQCZ3MDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCY20GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdzBQJncwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwAJANgEAQkBBXZhbHVlAQUCY20JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVgABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBA3B1dAICZ3QCZ3UEAmd2CQECYmwABAJndwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ3YFAUMCCldyIHN0IGFkZHIEAmd4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJndgUBRQIKV3Igc2wgYWRkcgMJAGYCAAAFAmd0CQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJneQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQEAmd6CQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwABBmFtb3VudAQCZUwJALgCAgkAtgIBCQECYkcBCQECYVgBBQJiZgUCZ3kDCQAAAgUCZUwFAmVMBAJlTQkAuAICCQC2AgEJAQJiRwEJAQJhWAEFAmJnBQJnegMJAAACBQJlTQUCZU0EAmVOCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5AwkAAAIFAmVOBQJlTgQCZU8JAQJlSAMFAmd5BQJnegkAtgIBAAADCQAAAgUCZU8FAmVPBAJnQQkBAmZoCgkApQgBCAUCZFYGY2FsbGVyCQDYBAEIBQJkVg10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJkVghwYXltZW50cwABBQJndAYHBgAAAgAEAmR4CAUCZ0ECXzIEAmdCCAUCZ0ECXzcEAmNPCAUCZ0ECXzkEAmR5CAUCZ0EDXzEwBAJkeggFAmdBA18xMQQCY3cIBQJnQQNfMTIEAmN4CAUCZ0EDXzEzBAJkawkA/AcEBQJhTQIEZW1pdAkAzAgCBQJkeAUDbmlsBQNuaWwDCQAAAgUCZGsFAmRrBAJnQwQCZ2oFAmRrAwkAAQIFAmdqAgdBZGRyZXNzBAJnRAUCZ2oJAPwHBAUCZ0QCBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsBQR1bml0AwkAAAIFAmdDBQJnQwQCZ0UDCQBmAgUCZHkAAAkA/AcEBQJneAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN3BQJkeQUDbmlsBQNuaWwDCQAAAgUCZ0UFAmdFBAJnRgMJAGYCBQJkegAACQD8BwQFAmd4AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3gFAmR6BQNuaWwFA25pbAMJAAACBQJnRgUCZ0YEAmdHAwUCZ3UEAmdICQD8BwQFAmd3AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnQgUCZHgFA25pbAMJAAACBQJnSAUCZ0gFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZFYGY2FsbGVyBQJkeAUCZ0IFA25pbAQCZ0kJAQJlUAMAAAAAAAAEAmdnCAUCZ0kCXzEEAmVHCAUCZ0kCXzIEAmdKAwkAwAICBQJlRwUCZU8GCQECYUoBCQC5CQIJAMwIAgIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAkAzAgCCQCmAwEFAmVMCQDMCAIJAKYDAQUCZU0JAMwIAgkApgMBBQJlTgkAzAgCCQCmAwEFAmVPCQDMCAIJAKYDAQUCZUcFA25pbAIBIAMJAAACBQJnSgUCZ0oEAmdLCAkBBXZhbHVlAQkA7AcBBQJiZQhxdWFudGl0eQMJAAACBQJnSwUCZ0sJAM4IAgkAzggCBQJjTwUCZ0cFAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQtwdXRPbmVUa25WMgICZkoCZ3UEAmdMCgACZlIJAPwHBAUCYU0CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmUgIHQm9vbGVhbgUCZlIJAAIBCQCsAgIJAAMBBQJmUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ00DAwMJAQJhTwAGCQAAAgUCYmQFAXEGCQAAAgUCYmQFAXMGBQJnTAQCZ04JAMwIAgMDCQEBIQEFAmdNBgkBAmdtAQUCZFYGCQECYUoBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkVghwYXltZW50cwABBgkBAmFKAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ04FAmdOBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN2BQJiZQQCZk4FAmJoBAJmTwUCYmkEAmN1AwkAAAIIBQJkVgZjYWxsZXIFBHRoaXMIBQJkVgxvcmlnaW5DYWxsZXIIBQJkVgZjYWxsZXIEAmZnCQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwAABAJjcwkA2AQBCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmVPAwkAAAIIBQJmZwdhc3NldElkBQJiZgkBAmVIAwkAtgIBBQJjWQkAtgIBAAAJALYCAQAACQECZUgDCQC2AgEAAAkAtgIBBQJjWQkAtgIBAAADCQAAAgUCZU8FAmVPBAJnTwkBAmZsBQUCY1kFAmNzCQClCAEFAmN1CQDYBAEIBQJkVg10cmFuc2FjdGlvbklkBgMJAAACBQJnTwUCZ08EAmNwCAUCZ08CXzMEAmNPCAUCZ08CXzIEAmdQCAUCZ08CXzEEAmR4AwMJAGYCBQJmSgAACQBmAgUCZkoFAmdQBwkBAmFKAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSgUDbmlsAgAFAmdQBAJnQQkA/AcEBQJhTQIEZW1pdAkAzAgCBQJkeAUDbmlsBQNuaWwDCQAAAgUCZ0EFAmdBBAJnQwQCZ2oFAmdBAwkAAQIFAmdqAgdBZGRyZXNzBAJnRAUCZ2oJAPwHBAUCZ0QCBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsBQR1bml0AwkAAAIFAmdDBQJnQwQCZ0cDBQJndQQCZ0gJAPwHBAUCYm4CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN2BQJkeAUDbmlsAwkAAAIFAmdIBQJnSAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkVgZjYWxsZXIFAmR4BQJjdgUDbmlsBAJnYQMJAGYCBQJjcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFRBQJjcAkA2QQBBQJjcwUDbmlsBQNuaWwEAmdRAwkAAAIFBHRoaXMFAmFRCQCUCgIAAAAABAJnUgMJAAACCAUCZmcHYXNzZXRJZAUCYmYGBwMFAmdSCQCUCgIJAQEtAQUCY3AAAAkAlAoCAAAJAQEtAQUCY3AEAmVRCAUCZ1ECXzEEAmVSCAUCZ1ECXzIEAmdTCQECZVADBQJlUQUCZVIAAAQCZ2cIBQJnUwJfMQQCZUcIBQJnUwJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAJQKAgkAzggCCQDOCAIJAM4IAgUCY08FAmdHBQJnYQUCZ2cFAmR4CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpwdXRGb3JGcmVlAQJnVAMJAGYCAAAFAmdUCQACAQIKV3Jvbmcgc2xwZwMJAQIhPQIJAJADAQgFAmRWCHBheW1lbnRzAAIJAAIBAgwyIHBtbnRzIGV4cGQEAmdVCQECZmgKCQClCAEIBQJkVgZjYWxsZXIJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJAQ9BdHRhY2hlZFBheW1lbnQCCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAdhc3NldElkCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQJAJEDAggFAmRWCHBheW1lbnRzAAEFAmdUBwcGAAACAAQCY08IBQJnVQJfOQQCZ3kJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50BAJnegkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAQZhbW91bnQEAmVPCQECZUgDBQJneQUCZ3oJALYCAQAAAwkAAAIFAmVPBQJlTwQCZ1YJAQJlUAMAAAAAAAAEAmdnCAUCZ1YCXzEEAmVHCAUCZ1YCXzIEAmdoCQECZVQCBQJlTwUCZUcDCQAAAgUCZ2gFAmdoCQDOCAIFAmNPBQJnZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEDZ2V0AAQCZU8JAQJlSAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZU8FAmVPBAJkawkBAmZmAQUCZFYEAmdXCAUCZGsCXzEEAmNOCAUCZGsCXzIEAmNZCAUCZGsCXzMEAmNzCAUCZGsCXzQEAmNPCAUCZGsCXzUEAmV3CQD8BwQFAmFNAgRidXJuCQDMCAIFAmNZBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNzBQJjWQUDbmlsAwkAAAIFAmV3BQJldwQCZ1gJAQJlUAMJAQEtAQUCZ1cJAQEtAQUCY04AAAQCZ2cIBQJnWAJfMQQCZUcIBQJnWAJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQtnZXRPbmVUa25WMgICZkkCZkoEAmdMCgACZlIJAPwHBAUCYU0CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmUgIHQm9vbGVhbgUCZlIJAAIBCQCsAgIJAAMBBQJmUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ1kDAwkBAmFPAAYJAAACBQJiZAUBcwYFAmdMBAJnTgkAzAgCAwMJAQEhAQUCZ1kGCQECZ20BBQJkVgYJAQJhSgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRWCHBheW1lbnRzAAEGCQECYUoBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnTgUCZ04EAmdaCQECZkgGBQJmSQUCZkoIBQJkVghwYXltZW50cwgFAmRWBmNhbGxlcggFAmRWDG9yaWdpbkNhbGxlcggFAmRWDXRyYW5zYWN0aW9uSWQEAmNPCAUCZ1oCXzEEAmZUCAUCZ1oCXzIJAJQKAgUCY08FAmZUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpyZWZyZXNoRExwAAQCaGEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUCYW4AAAQCaGIDCQBnAgkAZQIFBmhlaWdodAUCaGEFAmFxBQR1bml0CQECYUoBCQC5CQIJAMwIAgkApAMBBQJhcQkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUCaGIFAmhiBAJmYQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYW0CATAJAQJhTAECC2ludmFsaWQgZExwBAJoYwkBAmVQAwAAAAAAAAQCaGQIBQJoYwJfMQQCZUcIBQJoYwJfMgQCZVMDCQECIT0CBQJmYQUCZUcFAmhkCQECYUoBAhJub3RoaW5nIHRvIHJlZnJlc2gJAJQKAgUCZVMJAKYDAQUCZUcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBE2dldE9uZVRrblYyUkVBRE9OTFkCAmZJAmhlBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN2CQDYBAEJAQV2YWx1ZQEFAmJlBAJkRgkAzAgCCQC2AgEJAQJiRwEFAmN3CQDMCAIJALYCAQkBAmJHAQUCY3gFA25pbAQCZUYJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmN2AhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BAJiVAkBAmRFAQUCZEYEAmJTCQC4AgIFAmJUCQC8AgMJALYCAQUCaGUFAmJUBQJlRgQCaGYDCQAAAgUCZkkFAmN3AAADCQAAAgUCZkkFAmN4AAEJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQCaGcJAQJlcwMFAmRGBQJoZgUCYlMEAmhoCQC4AgIJAJEDAgUCZEYFAmhmBQJoZwQCaGkJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC4AgIFAmhoBQFmBQNuaWwEAmhqCQECY24BBQJoaQQCZlMIBQJoagJfMQQCY3AIBQJoagJfMgkAlAoCBQNuaWwJAJQKAgUCZlMFAmNwAmRWARxnZXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJmSQJoZQQCY3cJANgEAQkBBXZhbHVlAQUCYmYEAmN4CQDYBAEJAQV2YWx1ZQEFAmJnBAJjdgkA2AQBCQEFdmFsdWUBBQJiZQQCY0MJAQJiRwEFAmN3BAJjRQkBAmJHAQUCY3gEAmhrCgACZlIJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmSQkAzAgCBQJoZQUDbmlsBQNuaWwDCQABAgUCZlICCihJbnQsIEludCkFAmZSCQACAQkArAICCQADAQUCZlICHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZTCAUCaGsCXzEEAmNwCAUCaGsCXzIEAmRrCQECY3EEAgAFAmN2BQJoZQUEdGhpcwQCY00IBQJkawJfMQQCY04IBQJkawJfMgQCaGwJAGQCBQJjTQUCY04EAmZHAwkAAAIFAmhsAAADCQAAAgUCZlMAAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZlMFAmhsBQFhBQJobAkAlAoCBQNuaWwJAJUKAwUCZlMFAmNwBQJmRwJkVgEJZ2V0Tm9MZXNzAgJobQJobgQCaG8JALYCAQkBAmJHAQkBAmFYAQUCYmYDCQAAAgUCaG8FAmhvBAJocAkAtgIBCQECYkcBCQECYVgBBQJiZwMJAAACBQJocAUCaHAEAmhxCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5AwkAAAIFAmhxBQJocQQCaHIJALgCAgUCaHEJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50AwkAAAIFAmhyBQJocgQCZGsJAQJmZgEFAmRWBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjWQgFAmRrAl8zBAJjcwgFAmRrAl80BAJjTwgFAmRrAl81AwkAZgIFAmhtBQJjTQkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJjTQIDIDwgCQCkAwEFAmhtAwkAZgIFAmhuBQJjTgkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmNOAgMgPCAJAKQDAQUCaG4EAmVPCQECZUgDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVPBQJlTwQCaHMJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY1kFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3MFAmNZBQNuaWwDCQAAAgUCaHMFAmhzBAJodAkBAmVQAwkBAS0BBQJjTQkBAS0BBQJjTgAABAJnZwgFAmh0Al8xBAJlRwgFAmh0Al8yBAJnaAkBAmVUAgUCZU8FAmVHAwkAAAIFAmdoBQJnaAkAzggCBQJjTwUCZ2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBDXVuc3Rha2VBbmRHZXQBAmNvBAJodQMJAQIhPQIJAJADAQgFAmRWCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQJodQUCaHUEAmh2CQECYmwABAJnQgUCYmUEAmh3CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJodgUBQwIKV3Igc3QgYWRkcgQCZU8JAQJlSAMJALYCAQAACQC2AgEAAAkAtgIBAAAEAmh4CQD8BwQFAmh3Agd1bnN0YWtlCQDMCAIJANgEAQUCZ0IJAMwIAgUCY28FA25pbAUDbmlsAwkAAAIFAmh4BQJoeAQCZGsJAQJjcQQJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJANgEAQUCZ0IFAmNvCAUCZFYGY2FsbGVyBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjQQkBDXBhcnNlSW50VmFsdWUBCAUCZGsCXzkEAmNPCAUCZGsDXzEwBAJoeQMDCQECYU8ABgkAAAIFAmNBBQFzCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCY0EGAwkAAAIFAmh5BQJoeQQCaHoJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY28FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0IFAmNvBQNuaWwDCQAAAgUCaHoFAmh6BAJoQQkBAmVQAwkBAS0BBQJjTQkBAS0BBQJjTgAABAJnZwgFAmhBAl8xBAJlRwgFAmhBAl8yBAJnaAkBAmVUAgUCZU8FAmVHAwkAAAIFAmdoBQJnaAkAzggCBQJjTwUCZ2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhCAmhDAmhuBAJnWQMJAQJhTwAGCQAAAgUCYmQFAXMEAmdOCQDMCAIDCQEBIQEFAmdZBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRWCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ04FAmdOBAJlTwkBAmVIAwkAtgIBAAAJALYCAQAACQC2AgEAAAQCaHgJAPwHBAUCYm4CB3Vuc3Rha2UJAMwIAgkA2AQBBQJiZQkAzAgCBQJoQgUDbmlsBQNuaWwDCQAAAgUCaHgFAmh4BAJoRAkBAmNxBAkA2AQBCAUCZFYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiZQUCaEIIBQJkVgZjYWxsZXIEAmNNCAUCaEQCXzEEAmNOCAUCaEQCXzIEAmNPCAUCaEQDXzEwBAJoRQkAzAgCAwkAZwIFAmNNBQJoQwYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoQwUDbmlsAgAJAMwIAgMJAGcCBQJjTgUCaG4GCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJobgUDbmlsAgAFA25pbAMJAAACBQJoRQUCaEUEAmhzCQD8BwQFAmFNAgRidXJuCQDMCAIFAmhCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJlBQJoQgUDbmlsAwkAAAIFAmhzBQJocwQCaEYJAQJlUAMJAQEtAQUCY00JAQEtAQUCY04AAAQCZ2cIBQJoRgJfMQQCZUcIBQJoRgJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWARV1bnN0YWtlQW5kR2V0T25lVGtuVjIDAmhCAmZJAmZKBAJnTAoAAmZSCQD8BwQFAmFNAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZlICB0Jvb2xlYW4FAmZSCQAC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cmF0aW9uV3JhcHBlclJFQURPTkxZBAJjcgJoUgJjdAJoUQQCZGsJAQJjcQQFAmNyBQJoUgUCY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmhRCQCUCgIFA25pbAkAnAoKCAUCZGsCXzEIBQJkawJfMggFAmRrAl8zCAUCZGsCXzQIBQJkawJfNQgFAmRrAl82CAUCZGsCXzcJAKYDAQgFAmRrAl84CAUCZGsCXzkIBQJkawNfMTACZFYBDmdldEZlZVJFQURPTkxZAAkAlAoCBQNuaWwFAmFsAQJoUwECaFQABAJoVQQCZ2oJAQJnaQADCQABAgUCZ2oCCkJ5dGVWZWN0b3IEAmduBQJnagUCZ24DCQABAgUCZ2oCBFVuaXQIBQJoUw9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZ2oFAmhTAwkAAQIFAmdqAgVPcmRlcgQCZVcFAmdqBAJoVgkBAmFQAAQCaFcJAQJlVgEFAmVXBAJoWAkA9AMDCAUCZVcJYm9keUJ5dGVzCQCRAwIIBQJlVwZwcm9vZnMAAAgFAmVXD3NlbmRlclB1YmxpY0tleQQCaFkJAPQDAwgFAmVXCWJvZHlCeXRlcwkAkQMCCAUCZVcGcHJvb2ZzAAEFAmhWAwMDBQJoVwUCaFgHBQJoWQcGCQECYUIDBQJoVwUCaFgFAmhZAwkAAQIFAmdqAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZEkFAmdqBAJoWgkA9gMBCQEFdmFsdWUBCAUCZEkGc2NyaXB0BAJpYQkA2wQBCQEFdmFsdWUBCQCdCAIFAmFNCQECYXoABAJpYgkA8QcBBQR0aGlzAwMJAAACBQJpYQUCaFoJAQIhPQIFAmliBQJoWgcGCQD0AwMIBQJoUwlib2R5Qnl0ZXMJAJEDAggFAmhTBnByb29mcwAABQJoVQkA9AMDCAUCaFMJYm9keUJ5dGVzCQCRAwIIBQJoUwZwcm9vZnMAAAUCaFVILNSN", "chainId": 84, "height": 2377309, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2SNEaESZkeXRWWjM6WaniXuYjv9aJBVdqudEdiP1crg9 Next: DSgqLqm5gyjG4nCW4Yp2o63V5YWufPD2WQuWovGFDYXx Diff:
OldNewDifferences
394394 then throw(((("Price slippage " + toString(dm)) + " > ") + toString(dl)))
395395 else {
396396 let dn = H(dg, a)
397- let do = fraction(dh, cG, c)
398- let dp = fraction(di, c, cG)
397+ let do = fraction(dh, cG, c, CEILING)
398+ let dp = fraction(di, c, cG, CEILING)
399399 let dq = if ((do > di))
400400 then $Tuple2(dp, di)
401401 else $Tuple2(dh, do)
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 (L,M,O) = toInt(fraction(L, toBigInt(M), c, O))
7777
7878
7979 func P (Q,R,S) = fraction(Q, R, S)
8080
8181
8282 func T (L) = if ((d > L))
8383 then -(L)
8484 else L
8585
8686
8787 func U (L) = if ((d > L))
8888 then -(L)
8989 else L
9090
9191
9292 func V () = "%s__factoryContract"
9393
9494
9595 func W () = "%s__managerPublicKey"
9696
9797
9898 func X () = "%s__pendingManagerPublicKey"
9999
100100
101101 func Y () = "%s%s__price__last"
102102
103103
104104 func Z (aa,ab) = makeString(["%s%s%d%d__price__history", toString(aa), toString(ab)], n)
105105
106106
107107 func ac (ad,ae) = ((("%s%s%s__P__" + ad) + "__") + ae)
108108
109109
110110 func af (ad,ae) = ((("%s%s%s__G__" + ad) + "__") + ae)
111111
112112
113113 func ag () = "%s__amountAsset"
114114
115115
116116 func ah () = "%s__priceAsset"
117117
118118
119119 func ai () = "%s__amp"
120120
121121
122122 func aj () = "%s__addonAddr"
123123
124124
125125 let ak = "%s__fee"
126126
127127 let al = valueOrElse(getInteger(this, ak), G)
128128
129129 let am = makeString(["%s", "dLp"], n)
130130
131131 let an = makeString(["%s", "dLpRefreshedHeight"], n)
132132
133133 let ao = makeString(["%s", "refreshDLpDelay"], n)
134134
135135 let ap = 1
136136
137137 let aq = valueOrElse(getInteger(this, ao), ap)
138138
139139 func ar () = "%s__factoryConfig"
140140
141141
142142 func as () = "%s%s__matcher__publicKey"
143143
144144
145145 func at (au,av) = (((("%d%d%s__" + au) + "__") + av) + "__config")
146146
147147
148148 func aw (ax) = ("%s%s%s__mappings__baseAsset2internalId__" + ax)
149149
150150
151151 func ay () = "%s__shutdown"
152152
153153
154154 func az () = "%s__allowedLpStableScriptHash"
155155
156156
157157 func aA () = "%s__feeCollectorAddress"
158158
159159
160160 func aB (aC,aD,aE) = throw(((((("Failed: ordValid=" + toString(aC)) + " sndrValid=") + toString(aD)) + " mtchrValid=") + toString(aE)))
161161
162162
163163 func aF (aG,aH) = valueOrErrorMessage(getString(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
164164
165165
166166 func aI (aG,aH) = valueOrErrorMessage(getInteger(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
167167
168168
169169 func aJ (aK) = throw(makeString(["lp_stable.ride:", aK], " "))
170170
171171
172172 func aL (aK) = makeString(["lp_stable.ride:", aK], " ")
173173
174174
175175 let aM = addressFromStringValue(aF(this, V()))
176176
177177 let aN = aF(this, ai())
178178
179179 func aO () = valueOrElse(getBoolean(aM, ay()), false)
180180
181181
182182 func aP () = fromBase58String(aF(aM, as()))
183183
184184
185185 let aQ = addressFromStringValue(aF(aM, aA()))
186186
187187 func aR () = {
188188 let aS = aF(this, ag())
189189 let aT = aF(this, ah())
190190 let aU = aI(aM, aw(aT))
191191 let au = aI(aM, aw(aS))
192192 split(aF(aM, at(toString(au), toString(aU))), n)
193193 }
194194
195195
196196 func aV (aW) = if ((aW == k))
197197 then unit
198198 else fromBase58String(aW)
199199
200200
201201 func aX (aW) = if ((aW == unit))
202202 then k
203203 else toBase58String(value(aW))
204204
205205
206206 func aY (aZ) = $Tuple9(addressFromStringValue(aZ[t]), parseIntValue(aZ[u]), fromBase58String(aZ[v]), aV(aZ[w]), aV(aZ[x]), parseIntValue(aZ[y]), parseIntValue(aZ[z]), fromBase58String(aZ[A]), fromBase58String(aZ[B]))
207207
208208
209209 let ba = aY(aR())
210210
211211 let bb = ba
212212
213213 let bc = bb._1
214214
215215 let bd = bb._2
216216
217217 let be = bb._3
218218
219219 let bf = bb._4
220220
221221 let bg = bb._5
222222
223223 let bh = bb._6
224224
225225 let bi = bb._7
226226
227227 let bj = bb._8
228228
229229 let bk = bb._9
230230
231231 func bl () = split(aF(aM, ar()), n)
232232
233233
234234 let bm = bl()
235235
236236 let bn = valueOrErrorMessage(addressFromString(bm[C]), "Invalid staking contract address")
237237
238238 let bo = valueOrErrorMessage(addressFromString(bm[E]), "Invalid slipage contract address")
239239
240240 let bp = valueOrErrorMessage(addressFromString(bm[F]), "Invalid gwx contract address")
241241
242242 let bq = valueOrErrorMessage(addressFromString(bm[D]), "Invalid gwx contract address")
243243
244244 func br (bs,bt,bu,bv,bw,bx,by,bz,bA,bB) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB)], n)
245245
246246
247247 func bC (bD,bE,bF,bv,by,bz) = makeString(["%d%d%d%d%d%d", toString(bD), toString(bE), toString(bF), toString(bv), toString(by), toString(bz)], n)
248248
249249
250250 func bG (bH) = if ((bH == "WAVES"))
251251 then wavesBalance(this).available
252252 else assetBalance(this, fromBase58String(bH))
253253
254254
255255 func bI (bJ,bK) = fraction(bJ, c, bK)
256256
257257
258258 func bL (bM,bN,bO) = {
259259 let bP = fraction((bM - bN), b, bN)
260260 let bQ = ((bO - T(bP)) > d)
261261 if (!(bQ))
262262 then throw(("Big slpg: " + toString(bP)))
263263 else $Tuple2(bQ, min([bM, bN]))
264264 }
265265
266266
267267 func bR (bS,bT,bU) = {
268268 let bP = fraction(bT, b, bS)
269269 let bV = (bU > bP)
270270 if (if (bV)
271271 then true
272272 else (bT > bS))
273273 then throw(((((((toString(bT) + " ") + toString(bS)) + " ") + toString(bP)) + " ") + toString(bU)))
274274 else bV
275275 }
276276
277277
278278 func bW (bX,bY,bZ,ca) = {
279279 let cb = H(bZ, bX)
280280 let cc = H(ca, bY)
281281 bI(cc, cb)
282282 }
283283
284284
285285 func cd (bZ,ca,ce) = {
286286 let cf = bh
287287 let cg = bi
288288 let ch = bW(cf, cg, bZ, ca)
289289 let bK = H(bZ, cf)
290290 let bJ = H(ca, cg)
291291 let ci = H(ce, a)
292292 let cj = bI(bK, ci)
293293 let ck = bI(bJ, ci)
294294 [ch, cj, ck]
295295 }
296296
297297
298298 func cl (bZ,ca,ce) = {
299299 let cm = cd(bZ, ca, ce)
300300 [K(cm[0], a), K(cm[1], a), K(cm[2], a)]
301301 }
302302
303303
304304 func cn (co) = {
305305 let cp = fraction(co, al, a)
306306 $Tuple2((co - cp), cp)
307307 }
308308
309309
310310 func cq (cr,cs,ct,cu) = {
311311 let cv = be
312312 let cw = toBase58String(value(bf))
313313 let cx = toBase58String(value(bg))
314314 let cy = bh
315315 let cz = bi
316316 let cA = toString(bd)
317317 let cB = valueOrErrorMessage(assetInfo(cv), "Wrong LP id").quantity
318318 if ((toBase58String(cv) != cs))
319319 then throw("Wrong pmt asset")
320320 else {
321321 let cC = bG(cw)
322322 let cD = H(cC, cy)
323323 let cE = bG(cx)
324324 let cF = H(cE, cz)
325325 let cG = bI(cF, cD)
326326 let cH = K(cG, a)
327327 let cI = H(ct, a)
328328 let cJ = H(cB, a)
329329 let cK = fraction(cD, cI, cJ)
330330 let cL = fraction(cF, cI, cJ)
331331 let cM = N(cK, cy, FLOOR)
332332 let cN = N(cL, cz, FLOOR)
333333 let cO = if ((cr == ""))
334334 then nil
335335 else [ScriptTransfer(cu, cM, if ((cw == "WAVES"))
336336 then unit
337337 else fromBase58String(cw)), ScriptTransfer(cu, cN, if ((cx == "WAVES"))
338338 then unit
339339 else fromBase58String(cx)), StringEntry(af(toString(cu), cr), bC(cM, cN, ct, cH, height, lastBlock.timestamp)), IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH)]
340340 $Tuple10(cM, cN, cw, cx, cC, cE, cB, cG, cA, cO)
341341 }
342342 }
343343
344344
345345 func cP (cr,bO,cQ,cR,cS,cT,cu,cU,cV,cW,cX,cY,cZ) = {
346346 let cv = be
347347 let da = toBase58String(value(bf))
348348 let db = toBase58String(value(bg))
349349 let dc = bj
350350 let dd = bk
351351 let de = bh
352352 let df = bi
353353 let cA = toString(bd)
354354 let dg = valueOrErrorMessage(assetInfo(cv), "Wr lp as").quantity
355355 let cC = if (cU)
356356 then bG(da)
357357 else if (if (cW)
358358 then (cZ == da)
359359 else false)
360360 then (bG(da) - cY)
361361 else if (cW)
362362 then bG(da)
363363 else (bG(da) - cQ)
364364 let cE = if (cU)
365365 then bG(db)
366366 else if (if (cW)
367367 then (cZ == db)
368368 else false)
369369 then (bG(db) - cY)
370370 else if (cW)
371371 then bG(db)
372372 else (bG(db) - cS)
373373 let dh = H(cQ, de)
374374 let di = H(cS, df)
375375 let dj = bI(di, dh)
376376 let cD = H(cC, de)
377377 let cF = H(cE, df)
378378 let dk = if ((dg == 0))
379379 then {
380380 let cG = d
381381 let dl = d
382382 let ci = pow((dh * di), 0, toBigInt(5), 1, 0, DOWN)
383383 $Tuple5(K(ci, a), K(dh, de), K(di, df), bI((cF + di), (cD + dh)), dl)
384384 }
385385 else {
386386 let cG = bI(cF, cD)
387387 let dm = fraction(T((cG - dj)), c, cG)
388388 let dl = H(bO, a)
389389 if (if (if (cX)
390390 then (cG != d)
391391 else false)
392392 then (dm > dl)
393393 else false)
394394 then throw(((("Price slippage " + toString(dm)) + " > ") + toString(dl)))
395395 else {
396396 let dn = H(dg, a)
397- let do = fraction(dh, cG, c)
398- let dp = fraction(di, c, cG)
397+ let do = fraction(dh, cG, c, CEILING)
398+ let dp = fraction(di, c, cG, CEILING)
399399 let dq = if ((do > di))
400400 then $Tuple2(dp, di)
401401 else $Tuple2(dh, do)
402402 let dr = dq._1
403403 let ds = dq._2
404404 let ci = fraction(dn, ds, cF)
405405 $Tuple5(N(ci, a, FLOOR), N(dr, de, CEILING), N(ds, df, CEILING), cG, dl)
406406 }
407407 }
408408 let dt = dk._1
409409 let du = dk._2
410410 let dv = dk._3
411411 let cH = K(dk._4, a)
412412 let dw = K(dk._5, a)
413413 if ((0 >= dt))
414414 then throw("LP <= 0")
415415 else {
416416 let dx = if (!(cV))
417417 then 0
418418 else dt
419419 let dy = (cQ - du)
420420 let dz = (cS - dv)
421421 let dA = if (if (cW)
422422 then (cZ == da)
423423 else false)
424424 then $Tuple2(cY, 0)
425425 else if (if (cW)
426426 then (cZ == db)
427427 else false)
428428 then $Tuple2(0, cY)
429429 else $Tuple2(du, dv)
430430 let dB = dA._1
431431 let dC = dA._2
432432 let dD = [IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH), StringEntry(ac(cu, cr), br(dB, dC, dx, cH, bO, dw, height, lastBlock.timestamp, dy, dz))]
433433 $Tuple13(dt, dx, cH, cC, cE, dg, cv, cA, dD, dy, dz, cR, cT)
434434 }
435435 }
436436
437437
438438 func dE (dF) = {
439439 let dG = dF[0]
440440 let dH = dF[1]
441441 let dI = (dG + dH)
442442 if ((dI == e))
443443 then e
444444 else {
445445 let dJ = parseIntValue(aN)
446446 let dK = (dJ * 2)
447447 let cm = fraction(dG, dH, f)
448448 let dL = fraction(cm, i, f)
449449 let dM = fraction(toBigInt(dK), dI, f)
450450 let dN = toBigInt((dK - 1))
451451 func dO (dP) = {
452452 let dQ = fraction(dP, dP, f)
453453 let dR = fraction(dQ, dP, f)
454454 let dS = fraction(dR, f, dL)
455455 fraction((dM + fraction(dS, g, f)), dP, (fraction(dN, dP, f) + fraction(h, dS, f)), CEILING)
456456 }
457457
458458 func dT (dU,dV) = if (dU._2)
459459 then dU
460460 else {
461461 let dP = dU._1
462462 let dW = dO(dP)
463463 let dX = toInt((dW - value(dP)))
464464 let dY = if ((0 > dX))
465465 then -(dX)
466466 else dX
467467 if ((1 >= dY))
468468 then $Tuple2(dW, true)
469469 else $Tuple2(dW, false)
470470 }
471471
472472 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
473473 let ea = {
474474 let eb = dZ
475475 let ec = size(eb)
476476 let ed = $Tuple2(dI, false)
477477 func ee (ef,eg) = if ((eg >= ec))
478478 then ef
479479 else dT(ef, eb[eg])
480480
481481 func eh (ef,eg) = if ((eg >= ec))
482482 then ef
483483 else throw("List size exceeds 15")
484484
485485 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)
486486 }
487487 let dP = ea._1
488488 let ei = ea._2
489489 if (ei)
490490 then dP
491491 else throw(("D calculation error, D = " + toString(dP)))
492492 }
493493 }
494494
495495
496496 func ej (dF) = {
497497 let ek = g
498498 let dG = dF[0]
499499 let dH = dF[1]
500500 let el = parseBigIntValue(l)
501501 let dJ = (parseBigIntValue(aN) * el)
502502 let dI = (dG + dH)
503503 if ((dI == e))
504504 then e
505505 else {
506506 let dK = (dJ * ek)
507507 let dL = (((dG * dH) * ek) * ek)
508508 let em = ((dK * dI) / el)
509509 let en = (dK - el)
510510 let eo = (ek + f)
511511 func dT (dU,ep) = {
512512 let eq = dU
513513 let dP = eq._1
514514 let ei = eq._2
515515 if ((ei != unit))
516516 then dU
517517 else {
518518 let dS = (((dP * dP) * dP) / dL)
519519 let dW = (((em + (dS * ek)) * dP) / (((en * dP) / el) + (eo * dS)))
520520 let dY = U((dW - value(dP)))
521521 if ((f >= dY))
522522 then $Tuple2(dW, ep)
523523 else $Tuple2(dW, unit)
524524 }
525525 }
526526
527527 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
528528 let er = {
529529 let eb = dZ
530530 let ec = size(eb)
531531 let ed = $Tuple2(dI, unit)
532532 func ee (ef,eg) = if ((eg >= ec))
533533 then ef
534534 else dT(ef, eb[eg])
535535
536536 func eh (ef,eg) = if ((eg >= ec))
537537 then ef
538538 else throw("List size exceeds 15")
539539
540540 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)
541541 }
542542 let dP = er._1
543543 let ei = er._2
544544 if ((ei != unit))
545545 then dP
546546 else throw(("D calculation error, D = " + toString(dP)))
547547 }
548548 }
549549
550550
551551 func es (dF,dV,et) = {
552552 let ek = g
553553 let eu = dF[if ((dV == 0))
554554 then 1
555555 else 0]
556556 let el = parseBigIntValue(l)
557557 let dJ = (parseBigIntValue(aN) * el)
558558 let dI = eu
559559 let dK = (dJ * ek)
560560 let ev = (((((et * et) / (eu * ek)) * et) * el) / (dK * ek))
561561 let ew = ((dI + ((et * el) / dK)) - et)
562562 func dT (dU,ep) = {
563563 let ex = dU
564564 let ey = ex._1
565565 let ei = ex._2
566566 if ((ei != unit))
567567 then dU
568568 else {
569569 let ez = (((ey * ey) + ev) / ((g * ey) + ew))
570570 let eA = U((ez - value(ey)))
571571 if ((f >= eA))
572572 then $Tuple2(ez, ep)
573573 else $Tuple2(ez, unit)
574574 }
575575 }
576576
577577 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
578578 let eB = {
579579 let eb = dZ
580580 let ec = size(eb)
581581 let ed = $Tuple2(et, unit)
582582 func ee (ef,eg) = if ((eg >= ec))
583583 then ef
584584 else dT(ef, eb[eg])
585585
586586 func eh (ef,eg) = if ((eg >= ec))
587587 then ef
588588 else throw("List size exceeds 15")
589589
590590 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)
591591 }
592592 let ey = eB._1
593593 let ei = eB._2
594594 if ((ei != unit))
595595 then ey
596596 else throw(("Y calculation error, Y = " + toString(ey)))
597597 }
598598
599599
600600 func eC (eD,eE,eF) = {
601601 let eG = fraction(dE([eD, eE]), c, eF)
602602 if ((eF == e))
603603 then e
604604 else eG
605605 }
606606
607607
608608 func eH (eI,eJ,eK) = {
609609 let eL = (toBigInt(bG(aX(bf))) - eI)
610610 let eM = (toBigInt(bG(aX(bg))) - eJ)
611611 let eN = (toBigInt(value(assetInfo(be)).quantity) - eK)
612612 let eO = eC(eL, eM, eN)
613613 eO
614614 }
615615
616616
617617 func eP (eQ,eR,eK) = {
618618 let eL = (bG(aX(bf)) + eQ)
619619 let eM = (bG(aX(bg)) + eR)
620620 let eN = (value(assetInfo(be)).quantity + eK)
621621 let eG = eC(toBigInt(eL), toBigInt(eM), toBigInt(eN))
622622 let eS = [IntegerEntry(an, height), StringEntry(am, toString(eG))]
623623 $Tuple2(eS, eG)
624624 }
625625
626626
627627 func eT (eU,eG) = if ((eG >= eU))
628628 then true
629629 else aJ("updated DLp lower than current DLp")
630630
631631
632632 func eV (eW) = {
633633 let eX = eW.amount
634634 let eY = fraction(eW.amount, eW.price, a, FLOOR)
635635 let eZ = if ((eW.orderType == Buy))
636636 then $Tuple2(eX, -(eY))
637637 else $Tuple2(-(eX), eY)
638638 let eQ = eZ._1
639639 let eR = eZ._2
640640 if (if (if (aO())
641641 then true
642642 else (bd == r))
643643 then true
644644 else (bd == s))
645645 then throw("Admin blocked")
646646 else if (if ((eW.assetPair.amountAsset != bf))
647647 then true
648648 else (eW.assetPair.priceAsset != bg))
649649 then throw("Wr assets")
650650 else {
651651 let fa = parseBigIntValue(getStringValue(this, am))
652652 let fb = eP(eQ, eR, 0)
653653 let fc = fb._1
654654 let fd = fb._2
655655 let fe = (fd >= fa)
656656 fe
657657 }
658658 }
659659
660660
661661 func ff (dV) = if ((size(dV.payments) != 1))
662662 then throw("1 pmnt exp")
663663 else {
664664 let fg = value(dV.payments[0])
665665 let cs = value(fg.assetId)
666666 let cY = fg.amount
667667 let dk = cq(toBase58String(dV.transactionId), toBase58String(cs), cY, dV.caller)
668668 let cM = dk._1
669669 let cN = dk._2
670670 let cA = parseIntValue(dk._9)
671671 let cO = dk._10
672672 if (if (aO())
673673 then true
674674 else (cA == s))
675675 then throw(("Admin blocked: " + toString(cA)))
676676 else $Tuple5(cM, cN, cY, cs, cO)
677677 }
678678
679679
680680 func fh (fi,ae,fj,fk,bO,cV,cW,cX,cY,cZ) = {
681681 let dk = cP(ae, bO, value(fj).amount, value(fj).assetId, value(fk).amount, value(fk).assetId, fi, (ae == ""), cV, cW, cX, cY, cZ)
682682 let cA = parseIntValue(dk._8)
683683 if (if (if (aO())
684684 then true
685685 else (cA == q))
686686 then true
687687 else (cA == s))
688688 then throw(("Blocked:" + toString(cA)))
689689 else dk
690690 }
691691
692692
693693 func fl (fm,cs,cu,ae,fn) = {
694694 let cw = toBase58String(value(bf))
695695 let cx = toBase58String(value(bg))
696696 let cv = be
697697 let de = bh
698698 let df = bi
699699 let eN = toBigInt(valueOrErrorMessage(assetInfo(cv), "invalid lp asset").quantity)
700700 let fo = if ((eN > e))
701701 then true
702702 else throw("initial deposit requires all coins")
703703 if ((fo == fo))
704704 then {
705705 let cC = bG(cw)
706706 let cE = bG(cx)
707707 let fp = if ((ae == ""))
708708 then $Tuple2(cC, cE)
709709 else if ((cs == cw))
710710 then if ((fm > cC))
711711 then throw("invalid payment amount")
712712 else $Tuple2((cC - fm), cE)
713713 else if ((cs == cx))
714714 then if ((fm > cE))
715715 then throw("invalid payment amount")
716716 else $Tuple2(cC, (cE - fm))
717717 else throw("wrong pmtAssetId")
718718 let fq = fp._1
719719 let fr = fp._2
720720 let fs = if ((cs == cw))
721721 then $Tuple2(fm, 0)
722722 else if ((cs == cx))
723723 then $Tuple2(0, fm)
724724 else throw("invalid payment")
725725 let ft = fs._1
726726 let fu = fs._2
727727 let fv = if (fn)
728728 then $Tuple3(cn(ft)._1, cn(fu)._1, cn(fm)._2)
729729 else $Tuple3(ft, fu, 0)
730730 let fw = fv._1
731731 let fx = fv._2
732732 let cp = fv._3
733733 let fy = (fq + fw)
734734 let fz = (fr + fx)
735735 let bT = dE([toBigInt(fq), toBigInt(fr)])
736736 let bS = dE([toBigInt(fy), toBigInt(fz)])
737737 let fA = if ((bS > bT))
738738 then true
739739 else throw()
740740 if ((fA == fA))
741741 then {
742742 let fB = fraction(eN, (bS - bT), bT, FLOOR)
743743 let cH = K(bI(H(fz, df), H(fy, de)), a)
744744 let dD = [IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH), StringEntry(ac(cu, ae), br(ft, fu, toInt(fB), cH, 0, 0, height, lastBlock.timestamp, 0, 0))]
745745 let fC = fraction(fr, a, fq)
746746 let fD = fraction(fm, a, (fC + a))
747747 let fE = (fm - fD)
748748 let fF = fraction(eN, toBigInt(fE), toBigInt(fr))
749749 let fG = toInt(fraction((fB - fF), b, fF))
750750 $Tuple4(toInt(fB), dD, cp, fG)
751751 }
752752 else throw("Strict value is not equal to itself.")
753753 }
754754 else throw("Strict value is not equal to itself.")
755755 }
756756
757757
758758 func fH (fI,fJ,fK,fi,fL,fM) = {
759759 let cv = toBase58String(value(be))
760760 let cw = toBase58String(value(bf))
761761 let cx = toBase58String(value(bg))
762762 let fN = bh
763763 let fO = bi
764764 let fP = bd
765765 let cu = if ((fi == bq))
766766 then fL
767767 else fi
768768 let fg = value(fK[0])
769769 let cs = value(fg.assetId)
770770 let cY = fg.amount
771771 let eO = eH(e, e, e)
772772 if ((eO == eO))
773773 then {
774774 let cr = toBase58String(fM)
775775 if ((cv != toBase58String(cs)))
776776 then throw("Wrong LP")
777777 else {
778778 let cC = bG(cw)
779779 let cE = bG(cx)
780780 let fQ = {
781781 let fR = invoke(this, "getOneTknV2READONLY", [fI, cY], nil)
782782 if ($isInstanceOf(fR, "(Int, Int)"))
783783 then fR
784784 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
785785 }
786786 if ((fQ == fQ))
787787 then {
788788 let cp = fQ._2
789789 let fS = fQ._1
790790 let fT = if (if ((fJ > 0))
791791 then (fJ > fS)
792792 else false)
793793 then aJ(makeString(["amount to receive is less than ", toString(fJ)], ""))
794794 else fS
795795 let fU = if ((fI == cw))
796796 then $Tuple4(fT, 0, ((cC - fT) - cp), cE)
797797 else if ((fI == cx))
798798 then $Tuple4(0, fT, cC, ((cE - fT) - cp))
799799 else throw("invalid out asset id")
800800 let fV = fU._1
801801 let fW = fU._2
802802 let fy = fU._3
803803 let fz = fU._4
804804 let fX = bI(H(fz, fO), H(fy, fN))
805805 let fY = K(fX, a)
806806 let fZ = if ((fI == "WAVES"))
807807 then unit
808808 else fromBase58String(fI)
809809 let ga = if ((cp > 0))
810810 then [ScriptTransfer(aQ, cp, fZ)]
811811 else nil
812812 let cO = ([ScriptTransfer(cu, fT, fZ), StringEntry(af(toString(cu), cr), bC(fV, fW, cY, fY, height, lastBlock.timestamp)), IntegerEntry(Y(), fY), IntegerEntry(Z(height, lastBlock.timestamp), fY)] ++ ga)
813813 if ((cO == cO))
814814 then {
815815 let gb = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
816816 if ((gb == gb))
817817 then {
818818 let gc = {
819819 let gd = if ((this == aQ))
820820 then 0
821821 else cp
822822 let ge = if ((aV(fI) == bf))
823823 then true
824824 else false
825825 if (ge)
826826 then $Tuple2(-((fS + gd)), 0)
827827 else $Tuple2(0, -((fS + gd)))
828828 }
829829 let eQ = gc._1
830830 let eR = gc._2
831831 let gf = eP(eQ, eR, 0)
832832 let gg = gf._1
833833 let eG = gf._2
834834 let gh = eT(eO, eG)
835835 if ((gh == gh))
836836 then $Tuple2((cO ++ gg), fT)
837837 else throw("Strict value is not equal to itself.")
838838 }
839839 else throw("Strict value is not equal to itself.")
840840 }
841841 else throw("Strict value is not equal to itself.")
842842 }
843843 else throw("Strict value is not equal to itself.")
844844 }
845845 }
846846 else throw("Strict value is not equal to itself.")
847847 }
848848
849849
850850 func gi () = {
851851 let gj = getString(W())
852852 if ($isInstanceOf(gj, "String"))
853853 then {
854854 let dI = gj
855855 fromBase58String(dI)
856856 }
857857 else if ($isInstanceOf(gj, "Unit"))
858858 then unit
859859 else throw("Match error")
860860 }
861861
862862
863863 func gk () = {
864864 let gj = getString(X())
865865 if ($isInstanceOf(gj, "String"))
866866 then {
867867 let dI = gj
868868 fromBase58String(dI)
869869 }
870870 else if ($isInstanceOf(gj, "Unit"))
871871 then unit
872872 else throw("Match error")
873873 }
874874
875875
876876 let gl = throw("Permission denied")
877877
878878 func gm (dV) = {
879879 let gj = gi()
880880 if ($isInstanceOf(gj, "ByteVector"))
881881 then {
882882 let gn = gj
883883 (dV.callerPublicKey == gn)
884884 }
885885 else if ($isInstanceOf(gj, "Unit"))
886886 then (dV.caller == this)
887887 else throw("Match error")
888888 }
889889
890890
891891 func go (dV) = {
892892 let gj = gi()
893893 if ($isInstanceOf(gj, "ByteVector"))
894894 then {
895895 let gn = gj
896896 if ((dV.callerPublicKey == gn))
897897 then true
898898 else gl
899899 }
900900 else if ($isInstanceOf(gj, "Unit"))
901901 then if ((dV.caller == this))
902902 then true
903903 else gl
904904 else throw("Match error")
905905 }
906906
907907
908908 @Callable(dV)
909909 func constructor (V) = {
910910 let ev = go(dV)
911911 if ((ev == ev))
912912 then [StringEntry(V(), V)]
913913 else throw("Strict value is not equal to itself.")
914914 }
915915
916916
917917
918918 @Callable(dV)
919919 func setManager (gp) = {
920920 let ev = go(dV)
921921 if ((ev == ev))
922922 then {
923923 let gq = fromBase58String(gp)
924924 if ((gq == gq))
925925 then [StringEntry(X(), gp)]
926926 else throw("Strict value is not equal to itself.")
927927 }
928928 else throw("Strict value is not equal to itself.")
929929 }
930930
931931
932932
933933 @Callable(dV)
934934 func confirmManager () = {
935935 let cm = gk()
936936 let gr = if (isDefined(cm))
937937 then true
938938 else throw("No pending manager")
939939 if ((gr == gr))
940940 then {
941941 let gs = if ((dV.callerPublicKey == value(cm)))
942942 then true
943943 else throw("You are not pending manager")
944944 if ((gs == gs))
945945 then [StringEntry(W(), toBase58String(value(cm))), DeleteEntry(X())]
946946 else throw("Strict value is not equal to itself.")
947947 }
948948 else throw("Strict value is not equal to itself.")
949949 }
950950
951951
952952
953953 @Callable(dV)
954954 func put (gt,gu) = {
955955 let gv = bl()
956956 let gw = valueOrErrorMessage(addressFromString(gv[C]), "Wr st addr")
957957 let gx = valueOrErrorMessage(addressFromString(gv[E]), "Wr sl addr")
958958 if ((0 > gt))
959959 then throw("Wrong slippage")
960960 else if ((size(dV.payments) != 2))
961961 then throw("2 pmnts expd")
962962 else {
963963 let gy = toBigInt(value(dV.payments[0]).amount)
964964 let gz = toBigInt(value(dV.payments[1]).amount)
965965 let eL = (toBigInt(bG(aX(bf))) - gy)
966966 if ((eL == eL))
967967 then {
968968 let eM = (toBigInt(bG(aX(bg))) - gz)
969969 if ((eM == eM))
970970 then {
971971 let eN = toBigInt(value(assetInfo(be)).quantity)
972972 if ((eN == eN))
973973 then {
974974 let eO = eH(gy, gz, toBigInt(0))
975975 if ((eO == eO))
976976 then {
977977 let gA = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gt, true, false, true, 0, "")
978978 let dx = gA._2
979979 let gB = gA._7
980980 let cO = gA._9
981981 let dy = gA._10
982982 let dz = gA._11
983983 let cw = gA._12
984984 let cx = gA._13
985985 let dk = invoke(aM, "emit", [dx], nil)
986986 if ((dk == dk))
987987 then {
988988 let gC = {
989989 let gj = dk
990990 if ($isInstanceOf(gj, "Address"))
991991 then {
992992 let gD = gj
993993 invoke(gD, "emit", [dx], nil)
994994 }
995995 else unit
996996 }
997997 if ((gC == gC))
998998 then {
999999 let gE = if ((dy > 0))
10001000 then invoke(gx, "put", nil, [AttachedPayment(cw, dy)])
10011001 else nil
10021002 if ((gE == gE))
10031003 then {
10041004 let gF = if ((dz > 0))
10051005 then invoke(gx, "put", nil, [AttachedPayment(cx, dz)])
10061006 else nil
10071007 if ((gF == gF))
10081008 then {
10091009 let gG = if (gu)
10101010 then {
10111011 let gH = invoke(gw, "stake", nil, [AttachedPayment(gB, dx)])
10121012 if ((gH == gH))
10131013 then nil
10141014 else throw("Strict value is not equal to itself.")
10151015 }
10161016 else [ScriptTransfer(dV.caller, dx, gB)]
10171017 let gI = eP(0, 0, 0)
10181018 let gg = gI._1
10191019 let eG = gI._2
10201020 let gJ = if ((eG >= eO))
10211021 then true
10221022 else aJ(makeString(["updated DLp lower than current DLp", toString(eL), toString(eM), toString(eN), toString(eO), toString(eG)], " "))
10231023 if ((gJ == gJ))
10241024 then {
10251025 let gK = value(assetInfo(be)).quantity
10261026 if ((gK == gK))
10271027 then ((cO ++ gG) ++ gg)
10281028 else throw("Strict value is not equal to itself.")
10291029 }
10301030 else throw("Strict value is not equal to itself.")
10311031 }
10321032 else throw("Strict value is not equal to itself.")
10331033 }
10341034 else throw("Strict value is not equal to itself.")
10351035 }
10361036 else throw("Strict value is not equal to itself.")
10371037 }
10381038 else throw("Strict value is not equal to itself.")
10391039 }
10401040 else throw("Strict value is not equal to itself.")
10411041 }
10421042 else throw("Strict value is not equal to itself.")
10431043 }
10441044 else throw("Strict value is not equal to itself.")
10451045 }
10461046 else throw("Strict value is not equal to itself.")
10471047 }
10481048 }
10491049
10501050
10511051
10521052 @Callable(dV)
10531053 func putOneTknV2 (fJ,gu) = {
10541054 let gL = {
10551055 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
10561056 if ($isInstanceOf(fR, "Boolean"))
10571057 then fR
10581058 else throw(($getType(fR) + " couldn't be cast to Boolean"))
10591059 }
10601060 let gM = if (if (if (aO())
10611061 then true
10621062 else (bd == q))
10631063 then true
10641064 else (bd == s))
10651065 then true
10661066 else gL
10671067 let gN = [if (if (!(gM))
10681068 then true
10691069 else gm(dV))
10701070 then true
10711071 else aJ("put operation is blocked by admin"), if ((size(dV.payments) == 1))
10721072 then true
10731073 else aJ("exactly 1 payment are expected")]
10741074 if ((gN == gN))
10751075 then {
10761076 let cw = toBase58String(value(bf))
10771077 let cx = toBase58String(value(bg))
10781078 let cv = be
10791079 let fN = bh
10801080 let fO = bi
10811081 let cu = if ((dV.caller == this))
10821082 then dV.originCaller
10831083 else dV.caller
10841084 let fg = value(dV.payments[0])
10851085 let cs = toBase58String(value(fg.assetId))
10861086 let cY = fg.amount
10871087 let eO = if ((fg.assetId == bf))
10881088 then eH(toBigInt(cY), toBigInt(0), toBigInt(0))
10891089 else eH(toBigInt(0), toBigInt(cY), toBigInt(0))
10901090 if ((eO == eO))
10911091 then {
10921092 let gO = fl(cY, cs, toString(cu), toBase58String(dV.transactionId), true)
10931093 if ((gO == gO))
10941094 then {
10951095 let cp = gO._3
10961096 let cO = gO._2
10971097 let gP = gO._1
10981098 let dx = if (if ((fJ > 0))
10991099 then (fJ > gP)
11001100 else false)
11011101 then aJ(makeString(["amount to receive is less than ", toString(fJ)], ""))
11021102 else gP
11031103 let gA = invoke(aM, "emit", [dx], nil)
11041104 if ((gA == gA))
11051105 then {
11061106 let gC = {
11071107 let gj = gA
11081108 if ($isInstanceOf(gj, "Address"))
11091109 then {
11101110 let gD = gj
11111111 invoke(gD, "emit", [dx], nil)
11121112 }
11131113 else unit
11141114 }
11151115 if ((gC == gC))
11161116 then {
11171117 let gG = if (gu)
11181118 then {
11191119 let gH = invoke(bn, "stake", nil, [AttachedPayment(cv, dx)])
11201120 if ((gH == gH))
11211121 then nil
11221122 else throw("Strict value is not equal to itself.")
11231123 }
11241124 else [ScriptTransfer(dV.caller, dx, cv)]
11251125 let ga = if ((cp > 0))
11261126 then [ScriptTransfer(aQ, cp, fromBase58String(cs))]
11271127 else nil
11281128 let gQ = if ((this == aQ))
11291129 then $Tuple2(0, 0)
11301130 else {
11311131 let gR = if ((fg.assetId == bf))
11321132 then true
11331133 else false
11341134 if (gR)
11351135 then $Tuple2(-(cp), 0)
11361136 else $Tuple2(0, -(cp))
11371137 }
11381138 let eQ = gQ._1
11391139 let eR = gQ._2
11401140 let gS = eP(eQ, eR, 0)
11411141 let gg = gS._1
11421142 let eG = gS._2
11431143 let gh = eT(eO, eG)
11441144 if ((gh == gh))
11451145 then $Tuple2((((cO ++ gG) ++ ga) ++ gg), dx)
11461146 else throw("Strict value is not equal to itself.")
11471147 }
11481148 else throw("Strict value is not equal to itself.")
11491149 }
11501150 else throw("Strict value is not equal to itself.")
11511151 }
11521152 else throw("Strict value is not equal to itself.")
11531153 }
11541154 else throw("Strict value is not equal to itself.")
11551155 }
11561156 else throw("Strict value is not equal to itself.")
11571157 }
11581158
11591159
11601160
11611161 @Callable(dV)
11621162 func putForFree (gT) = if ((0 > gT))
11631163 then throw("Wrong slpg")
11641164 else if ((size(dV.payments) != 2))
11651165 then throw("2 pmnts expd")
11661166 else {
11671167 let gU = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gT, false, false, true, 0, "")
11681168 let cO = gU._9
11691169 let gy = toBigInt(value(dV.payments[0]).amount)
11701170 let gz = toBigInt(value(dV.payments[1]).amount)
11711171 let eO = eH(gy, gz, toBigInt(0))
11721172 if ((eO == eO))
11731173 then {
11741174 let gV = eP(0, 0, 0)
11751175 let gg = gV._1
11761176 let eG = gV._2
11771177 let gh = eT(eO, eG)
11781178 if ((gh == gh))
11791179 then (cO ++ gg)
11801180 else throw("Strict value is not equal to itself.")
11811181 }
11821182 else throw("Strict value is not equal to itself.")
11831183 }
11841184
11851185
11861186
11871187 @Callable(dV)
11881188 func get () = {
11891189 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
11901190 if ((eO == eO))
11911191 then {
11921192 let dk = ff(dV)
11931193 let gW = dk._1
11941194 let cN = dk._2
11951195 let cY = dk._3
11961196 let cs = dk._4
11971197 let cO = dk._5
11981198 let ew = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
11991199 if ((ew == ew))
12001200 then {
12011201 let gX = eP(-(gW), -(cN), 0)
12021202 let gg = gX._1
12031203 let eG = gX._2
12041204 let gh = eT(eO, eG)
12051205 if ((gh == gh))
12061206 then (cO ++ gg)
12071207 else throw("Strict value is not equal to itself.")
12081208 }
12091209 else throw("Strict value is not equal to itself.")
12101210 }
12111211 else throw("Strict value is not equal to itself.")
12121212 }
12131213
12141214
12151215
12161216 @Callable(dV)
12171217 func getOneTknV2 (fI,fJ) = {
12181218 let gL = {
12191219 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12201220 if ($isInstanceOf(fR, "Boolean"))
12211221 then fR
12221222 else throw(($getType(fR) + " couldn't be cast to Boolean"))
12231223 }
12241224 let gY = if (if (aO())
12251225 then true
12261226 else (bd == s))
12271227 then true
12281228 else gL
12291229 let gN = [if (if (!(gY))
12301230 then true
12311231 else gm(dV))
12321232 then true
12331233 else aJ("get operation is blocked by admin"), if ((size(dV.payments) == 1))
12341234 then true
12351235 else aJ("exactly 1 payment are expected")]
12361236 if ((gN == gN))
12371237 then {
12381238 let gZ = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
12391239 let cO = gZ._1
12401240 let fT = gZ._2
12411241 $Tuple2(cO, fT)
12421242 }
12431243 else throw("Strict value is not equal to itself.")
12441244 }
12451245
12461246
12471247
12481248 @Callable(dV)
12491249 func refreshDLp () = {
12501250 let ha = valueOrElse(getInteger(an), 0)
12511251 let hb = if (((height - ha) >= aq))
12521252 then unit
12531253 else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
12541254 if ((hb == hb))
12551255 then {
12561256 let fa = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
12571257 let hc = eP(0, 0, 0)
12581258 let hd = hc._1
12591259 let eG = hc._2
12601260 let eS = if ((fa != eG))
12611261 then hd
12621262 else aJ("nothing to refresh")
12631263 $Tuple2(eS, toString(eG))
12641264 }
12651265 else throw("Strict value is not equal to itself.")
12661266 }
12671267
12681268
12691269
12701270 @Callable(dV)
12711271 func getOneTknV2READONLY (fI,he) = {
12721272 let cw = toBase58String(value(bf))
12731273 let cx = toBase58String(value(bg))
12741274 let cv = toBase58String(value(be))
12751275 let dF = [toBigInt(bG(cw)), toBigInt(bG(cx))]
12761276 let eF = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cv)), "invalid lp asset").quantity)
12771277 let bT = dE(dF)
12781278 let bS = (bT - fraction(toBigInt(he), bT, eF))
12791279 let hf = if ((fI == cw))
12801280 then 0
12811281 else if ((fI == cx))
12821282 then 1
12831283 else throw("invalid out asset id")
12841284 let hg = es(dF, hf, bS)
12851285 let hh = (dF[hf] - hg)
12861286 let hi = max([0, toInt((hh - f))])
12871287 let hj = cn(hi)
12881288 let fS = hj._1
12891289 let cp = hj._2
12901290 $Tuple2(nil, $Tuple2(fS, cp))
12911291 }
12921292
12931293
12941294
12951295 @Callable(dV)
12961296 func getOneTknV2WithBonusREADONLY (fI,he) = {
12971297 let cw = toBase58String(value(bf))
12981298 let cx = toBase58String(value(bg))
12991299 let cv = toBase58String(value(be))
13001300 let cC = bG(cw)
13011301 let cE = bG(cx)
13021302 let hk = {
13031303 let fR = invoke(this, "getOneTknV2READONLY", [fI, he], nil)
13041304 if ($isInstanceOf(fR, "(Int, Int)"))
13051305 then fR
13061306 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
13071307 }
13081308 let fS = hk._1
13091309 let cp = hk._2
13101310 let dk = cq("", cv, he, this)
13111311 let cM = dk._1
13121312 let cN = dk._2
13131313 let hl = (cM + cN)
13141314 let fG = if ((hl == 0))
13151315 then if ((fS == 0))
13161316 then 0
13171317 else throw("bonus calculation error")
13181318 else fraction((fS - hl), a, hl)
13191319 $Tuple2(nil, $Tuple3(fS, cp, fG))
13201320 }
13211321
13221322
13231323
13241324 @Callable(dV)
13251325 func getNoLess (hm,hn) = {
13261326 let ho = toBigInt(bG(aX(bf)))
13271327 if ((ho == ho))
13281328 then {
13291329 let hp = toBigInt(bG(aX(bg)))
13301330 if ((hp == hp))
13311331 then {
13321332 let hq = toBigInt(value(assetInfo(be)).quantity)
13331333 if ((hq == hq))
13341334 then {
13351335 let hr = (hq - toBigInt(value(dV.payments[0]).amount))
13361336 if ((hr == hr))
13371337 then {
13381338 let dk = ff(dV)
13391339 let cM = dk._1
13401340 let cN = dk._2
13411341 let cY = dk._3
13421342 let cs = dk._4
13431343 let cO = dk._5
13441344 if ((hm > cM))
13451345 then throw(((("Failed: " + toString(cM)) + " < ") + toString(hm)))
13461346 else if ((hn > cN))
13471347 then throw(((("Failed: " + toString(cN)) + " < ") + toString(hn)))
13481348 else {
13491349 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13501350 if ((eO == eO))
13511351 then {
13521352 let hs = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
13531353 if ((hs == hs))
13541354 then {
13551355 let ht = eP(-(cM), -(cN), 0)
13561356 let gg = ht._1
13571357 let eG = ht._2
13581358 let gh = eT(eO, eG)
13591359 if ((gh == gh))
13601360 then (cO ++ gg)
13611361 else throw("Strict value is not equal to itself.")
13621362 }
13631363 else throw("Strict value is not equal to itself.")
13641364 }
13651365 else throw("Strict value is not equal to itself.")
13661366 }
13671367 }
13681368 else throw("Strict value is not equal to itself.")
13691369 }
13701370 else throw("Strict value is not equal to itself.")
13711371 }
13721372 else throw("Strict value is not equal to itself.")
13731373 }
13741374 else throw("Strict value is not equal to itself.")
13751375 }
13761376
13771377
13781378
13791379 @Callable(dV)
13801380 func unstakeAndGet (co) = {
13811381 let hu = if ((size(dV.payments) != 0))
13821382 then throw("No pmnts expd")
13831383 else true
13841384 if ((hu == hu))
13851385 then {
13861386 let hv = bl()
13871387 let gB = be
13881388 let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
13891389 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13901390 let hx = invoke(hw, "unstake", [toBase58String(gB), co], nil)
13911391 if ((hx == hx))
13921392 then {
13931393 let dk = cq(toBase58String(dV.transactionId), toBase58String(gB), co, dV.caller)
13941394 let cM = dk._1
13951395 let cN = dk._2
13961396 let cA = parseIntValue(dk._9)
13971397 let cO = dk._10
13981398 let hy = if (if (aO())
13991399 then true
14001400 else (cA == s))
14011401 then throw(("Blocked: " + toString(cA)))
14021402 else true
14031403 if ((hy == hy))
14041404 then {
14051405 let hz = invoke(aM, "burn", [co], [AttachedPayment(gB, co)])
14061406 if ((hz == hz))
14071407 then {
14081408 let hA = eP(-(cM), -(cN), 0)
14091409 let gg = hA._1
14101410 let eG = hA._2
14111411 let gh = eT(eO, eG)
14121412 if ((gh == gh))
14131413 then (cO ++ gg)
14141414 else throw("Strict value is not equal to itself.")
14151415 }
14161416 else throw("Strict value is not equal to itself.")
14171417 }
14181418 else throw("Strict value is not equal to itself.")
14191419 }
14201420 else throw("Strict value is not equal to itself.")
14211421 }
14221422 else throw("Strict value is not equal to itself.")
14231423 }
14241424
14251425
14261426
14271427 @Callable(dV)
14281428 func unstakeAndGetNoLess (hB,hC,hn) = {
14291429 let gY = if (aO())
14301430 then true
14311431 else (bd == s)
14321432 let gN = [if (!(gY))
14331433 then true
14341434 else throw("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14351435 then true
14361436 else throw("no payments are expected")]
14371437 if ((gN == gN))
14381438 then {
14391439 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
14401440 let hx = invoke(bn, "unstake", [toBase58String(be), hB], nil)
14411441 if ((hx == hx))
14421442 then {
14431443 let hD = cq(toBase58String(dV.transactionId), toBase58String(be), hB, dV.caller)
14441444 let cM = hD._1
14451445 let cN = hD._2
14461446 let cO = hD._10
14471447 let hE = [if ((cM >= hC))
14481448 then true
14491449 else throw(makeString(["amount asset amount to receive is less than ", toString(hC)], "")), if ((cN >= hn))
14501450 then true
14511451 else throw(makeString(["price asset amount to receive is less than ", toString(hn)], ""))]
14521452 if ((hE == hE))
14531453 then {
14541454 let hs = invoke(aM, "burn", [hB], [AttachedPayment(be, hB)])
14551455 if ((hs == hs))
14561456 then {
14571457 let hF = eP(-(cM), -(cN), 0)
14581458 let gg = hF._1
14591459 let eG = hF._2
14601460 let gh = eT(eO, eG)
14611461 if ((gh == gh))
14621462 then (cO ++ gg)
14631463 else throw("Strict value is not equal to itself.")
14641464 }
14651465 else throw("Strict value is not equal to itself.")
14661466 }
14671467 else throw("Strict value is not equal to itself.")
14681468 }
14691469 else throw("Strict value is not equal to itself.")
14701470 }
14711471 else throw("Strict value is not equal to itself.")
14721472 }
14731473
14741474
14751475
14761476 @Callable(dV)
14771477 func unstakeAndGetOneTknV2 (hB,fI,fJ) = {
14781478 let gL = {
14791479 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14801480 if ($isInstanceOf(fR, "Boolean"))
14811481 then fR
14821482 else throw(($getType(fR) + " couldn't be cast to Boolean"))
14831483 }
14841484 let gY = if (if (aO())
14851485 then true
14861486 else (bd == s))
14871487 then true
14881488 else gL
14891489 let gN = [if (if (!(gY))
14901490 then true
14911491 else gm(dV))
14921492 then true
14931493 else aJ("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14941494 then true
14951495 else aJ("no payments are expected")]
14961496 if ((gN == gN))
14971497 then {
14981498 let hv = bl()
14991499 let gB = be
15001500 let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
15011501 let hx = invoke(hw, "unstake", [toBase58String(gB), hB], nil)
15021502 if ((hx == hx))
15031503 then {
15041504 let hG = fH(fI, fJ, [AttachedPayment(gB, hB)], dV.caller, dV.originCaller, dV.transactionId)
15051505 let cO = hG._1
15061506 let fT = hG._2
15071507 $Tuple2(cO, fT)
15081508 }
15091509 else throw("Strict value is not equal to itself.")
15101510 }
15111511 else throw("Strict value is not equal to itself.")
15121512 }
15131513
15141514
15151515
15161516 @Callable(dV)
15171517 func putOneTknV2WithBonusREADONLY (hH,hI) = {
15181518 let hJ = fl(hH, hI, "", "", true)
15191519 let fB = hJ._1
15201520 let cO = hJ._2
15211521 let cp = hJ._3
15221522 let fG = hJ._4
15231523 $Tuple2(nil, $Tuple3(fB, cp, fG))
15241524 }
15251525
15261526
15271527
15281528 @Callable(dV)
15291529 func putOneTknV2WithoutTakeFeeREADONLY (hH,hI) = {
15301530 let hK = fl(hH, hI, "", "", false)
15311531 let fB = hK._1
15321532 let cO = hK._2
15331533 let cp = hK._3
15341534 let fG = hK._4
15351535 $Tuple2(nil, $Tuple3(fB, cp, fG))
15361536 }
15371537
15381538
15391539
15401540 @Callable(dV)
15411541 func activate (hL,hM) = if ((toString(dV.caller) != toString(aM)))
15421542 then throw("denied")
15431543 else $Tuple2([StringEntry(ag(), hL), StringEntry(ah(), hM)], "success")
15441544
15451545
15461546
15471547 @Callable(dV)
15481548 func setS (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15491549 then gl
15501550 else [StringEntry(hN, hy)]
15511551
15521552
15531553
15541554 @Callable(dV)
15551555 func setI (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15561556 then gl
15571557 else [IntegerEntry(hN, hy)]
15581558
15591559
15601560
15611561 @Callable(dV)
15621562 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aR())
15631563
15641564
15651565
15661566 @Callable(dV)
15671567 func getAccBalanceWrapperREADONLY (bH) = $Tuple2(nil, bG(bH))
15681568
15691569
15701570
15711571 @Callable(dV)
15721572 func calcPricesWrapperREADONLY (bZ,ca,ce) = {
15731573 let hO = cd(bZ, ca, ce)
15741574 $Tuple2(nil, [toString(hO[0]), toString(hO[1]), toString(hO[2])])
15751575 }
15761576
15771577
15781578
15791579 @Callable(dV)
15801580 func fromX18WrapperREADONLY (L,hP) = $Tuple2(nil, K(parseBigIntValue(L), hP))
15811581
15821582
15831583
15841584 @Callable(dV)
15851585 func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
15861586
15871587
15881588
15891589 @Callable(dV)
15901590 func calcPriceBigIntWrapperREADONLY (bJ,bK) = $Tuple2(nil, toString(bI(parseBigIntValue(bJ), parseBigIntValue(bK))))
15911591
15921592
15931593
15941594 @Callable(dV)
15951595 func estimatePutOperationWrapperREADONLY (cr,bO,cQ,cR,cS,cT,hQ,cU,cV) = $Tuple2(nil, cP(cr, bO, cQ, cR, cS, cT, hQ, cU, cV, true, false, 0, ""))
15961596
15971597
15981598
15991599 @Callable(dV)
16001600 func estimateGetOperationWrapperREADONLY (cr,hR,ct,hQ) = {
16011601 let dk = cq(cr, hR, ct, addressFromStringValue(hQ))
16021602 $Tuple2(nil, $Tuple10(dk._1, dk._2, dk._3, dk._4, dk._5, dk._6, dk._7, toString(dk._8), dk._9, dk._10))
16031603 }
16041604
16051605
16061606
16071607 @Callable(dV)
16081608 func getFeeREADONLY () = $Tuple2(nil, al)
16091609
16101610
16111611 @Verifier(hS)
16121612 func hT () = {
16131613 let hU = {
16141614 let gj = gi()
16151615 if ($isInstanceOf(gj, "ByteVector"))
16161616 then {
16171617 let gn = gj
16181618 gn
16191619 }
16201620 else if ($isInstanceOf(gj, "Unit"))
16211621 then hS.senderPublicKey
16221622 else throw("Match error")
16231623 }
16241624 let gj = hS
16251625 if ($isInstanceOf(gj, "Order"))
16261626 then {
16271627 let eW = gj
16281628 let hV = aP()
16291629 let hW = eV(eW)
16301630 let hX = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
16311631 let hY = sigVerify(eW.bodyBytes, eW.proofs[1], hV)
16321632 if (if (if (hW)
16331633 then hX
16341634 else false)
16351635 then hY
16361636 else false)
16371637 then true
16381638 else aB(hW, hX, hY)
16391639 }
16401640 else if ($isInstanceOf(gj, "SetScriptTransaction"))
16411641 then {
16421642 let dI = gj
16431643 let hZ = blake2b256(value(dI.script))
16441644 let ia = fromBase64String(value(getString(aM, az())))
16451645 let ib = scriptHash(this)
16461646 if (if ((ia == hZ))
16471647 then (ib != hZ)
16481648 else false)
16491649 then true
16501650 else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16511651 }
16521652 else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16531653 }
16541654

github/deemru/w8io/169f3d6 
158.98 ms