tx · 8k2tLttoL5Ros45FUs2RkN1aukqGJvL4TuJD8u52djY1

3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni:  -0.04000000 Waves

2023.02.09 22:45 [2442518] smart account 3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni > SELF 0.00000000 Waves

{ "type": 13, "id": "8k2tLttoL5Ros45FUs2RkN1aukqGJvL4TuJD8u52djY1", "fee": 4000000, "feeAssetId": null, "timestamp": 1675971918169, "version": 2, "chainId": 84, "sender": "3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni", "senderPublicKey": "BRyVaCURUMe7ssUbXucteig1g44bGwWirJQzugKahUQ1", "proofs": [ "4q8mt4oXdCYUrsL6er6ktzHsCNNeyHUrrZaEpgcLf8KCKV7dZeFu14L7Ev2QjGt45RF6tWKCtwC6MfWwek5XCfQc" ], "script": "base64:BgLlKggCEgQKAgEEEgYKBAEEAQgSAwoBCBIDCgEIEgASBAoCAQQSBAoCAQQSAwoBARIAEgQKAggBEgASBAoCCAESBAoCCAESBAoCAQESAwoBARIFCgMBAQESBQoDAQgBEgQKAgEIEgQKAgEIEgQKAggIEgQKAggIEgQKAggBEgASAwoBCBIFCgMBAQESBAoCCAESBAoCAQESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyILdGVzc3R0dGluZ2ciBUFtdWx0IgVEY29udiIDU0VQIgVFTVBUWSIKUG9vbEFjdGl2ZSIKUG9vbFB1dERpcyIOUG9vbE1hdGNoZXJEaXMiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiCWlkeFBvb2xTdCIJaWR4TFBBc0lkIglpZHhBbUFzSWQiCWlkeFByQXNJZCILaWR4QW10QXNEY20iDWlkeFByaWNlQXNEY20iC2lkeElBbXRBc0lkIg1pZHhJUHJpY2VBc0lkIg9pZHhGYWN0U3Rha0NudHIiEmlkeEZhY3RvcnlSZXN0Q250ciIQaWR4RmFjdFNsaXBwQ250ciIRaWR4RmFjdEd3eFJld0NudHIiCmZlZURlZmF1bHQiAnQxIgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0Igh0MUJpZ0ludCICZjEiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igxmcm9tWDE4Um91bmQiBXJvdW5kIgJ0MiICZjIiAnRzIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIBdCIDcGF1IgJ1YSIEdHhJZCIDZ2F1IgJhYSICcGEiA2FtcCIDYWRhIgZrZXlGZWUiA2ZlZSIGa2V5RExwIhVrZXlETHBSZWZyZXNoZWRIZWlnaHQiEmtleURMcFJlZnJlc2hEZWxheSIWZExwUmVmcmVzaERlbGF5RGVmYXVsdCIPZExwUmVmcmVzaERlbGF5IgRmY2ZnIgRtdHBrIgJwYyIGaUFtdEFzIgVpUHJBcyIDbWJhIgViQVN0ciIDYXBzIhxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiDm9yZGVyVmFsaWRJbmZvIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIgRzdHJmIgRhZGRyIgNrZXkiBGludGYiCHRocm93RXJyIgNtc2ciBmZtdEVyciIDZmNhIgVpbkZlZSIBQCIGb3V0RmVlIgFBIgNpZ3MiAm1wIhNmZWVDb2xsZWN0b3JBZGRyZXNzIgNncGMiBWFtdEFzIgdwcmljZUFzIghpUHJpY2VBcyIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc5ODQ4MjEzIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyISY2ZnSW5BbW91bnRBc3NlZElkIhFjZmdJblByaWNlQXNzZXRJZCIDZ2ZjIg1mYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiD3NsaXBhZ2VDb250cmFjdCILZ3d4Q29udHJhY3QiDHJlc3RDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIgpzbGlwQnlVc2VyIgxzbGlwcGFnZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCIMc2xpcGFnZUFtQW10IgxzbGlwYWdlUHJBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIEY3BiaSIIcHJBbXRYMTgiCGFtQW10WDE4IgVjcGJpciIDdmFkIgJBMSICQTIiCHNsaXBwYWdlIgRkaWZmIgRwYXNzIgJ2ZCICRDEiAkQwIgRzbHBnIgRmYWlsIgNwY3AiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCILYW10QXNBbXRYMTgiCnByQXNBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4Ig9jYWxjdWxhdGVQcmljZXMiAXAiB3Rha2VGZWUiBmFtb3VudCIJZmVlQW1vdW50IgRnZXREIgJ4cCIDeHAwIgN4cDEiAXMiAWEiA2FubiILeHAwX3hwMV9uX24iBWFubl9zIgVhbm5fMSIJY2FsY0ROZXh0IgFkIgJkZCIDZGRkIgJkcCIEY2FsYyIDYWNjIgFpIgVkTmV4dCIIZERpZmZSYXciBWREaWZmIgNhcnIiDSR0MDEyNzEwMTI3NTgiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIgVmb3VuZCIDZWdvIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10Igt1c2VyQWRkcmVzcyIEbHBJZCIEYW1JZCIEcHJJZCIFYW1EY20iBXByRGNtIgNzdHMiB2xwRW1pc3MiCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCIKbHBFbWlzc1gxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIgNlcG8iB2luQW1BbXQiBmluQW1JZCIHaW5QckFtdCIGaW5QcklkIgZpc0V2YWwiBmVtaXRMcCIKaXNPbmVBc3NldCIQdmFsaWRhdGVTbGlwcGFnZSIGcG10QW10IgVwbXRJZCIHYW1JZFN0ciIHcHJJZFN0ciIJaW5BbUlkU3RyIglpblBySWRTdHIiBmFtdERjbSIIcHJpY2VEY20iBGxwRW0iD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiAXIiBmNoZWNrRCILc2xpcHBhZ2VYMTgiD3NsaXBwYWdlUmVhbFgxOCINbHBFbWlzc2lvblgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiINJHQwMjA1OTcyMDk0MiIKd3JpdGVBbUFtdCIKd3JpdGVQckFtdCILY29tbW9uU3RhdGUiBWdldFlEIgFEIgFuIgF4IgphUHJlY2lzaW9uIgFjIgFiIgNjdXIiDSR0MDIyMTM3MjIxNTciAXkiBXlOZXh0IgV5RGlmZiINJHQwMjI0NjQyMjUxMSIHY2FsY0RMcCINYW1vdW50QmFsYW5jZSIMcHJpY2VCYWxhbmNlIgpscEVtaXNzaW9uIgp1cGRhdGVkRExwIg5jYWxjQ3VycmVudERMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50RExwIhJyZWZyZXNoRExwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRETHAiBm9sZERMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI0NzA5MjQ5MjEiA2RMcCINJHQwMjUyNjMyNTM2MyINdW51c2VkQWN0aW9ucyIGZExwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iAmNnIgNwbXQiAmNwIgZjYWxsZXIiB2FtQXNQbXQiB3ByQXNQbXQiDWNhbGNQdXRPbmVUa24iCXBtdEFtdFJhdyILd2l0aFRha2VGZWUiDWNoZWNoRW1pc3Npb24iDSR0MDI4MDE5Mjg0ODEiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIg0kdDAyODQ4NzI4NjYzIgthbUFtb3VudFJhdyILcHJBbW91bnRSYXciDSR0MDI4NjY3Mjg5MjEiCGFtQW1vdW50IghwckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciCGxwQW1vdW50Ig5wb29sUHJvcG9ydGlvbiIPYW1vdW50QXNzZXRQYXJ0Ig5wcmljZUFzc2V0UGFydCIJbHBBbXRCb3RoIgVib251cyITZ2V0T25lVGtuVjJJbnRlcm5hbCIKb3V0QXNzZXRJZCIMbWluT3V0QW1vdW50IghwYXltZW50cyIMb3JpZ2luQ2FsbGVyIg10cmFuc2FjdGlvbklkIgphbURlY2ltYWxzIgpwckRlY2ltYWxzIgpwb29sU3RhdHVzIg0kdDAzMTAzMzMxMTQ0Igh0b3RhbEdldCILdG90YWxBbW91bnQiDSR0MDMxMzM0MzE2NDEiBW91dEFtIgVvdXRQciIIY3VyUHJYMTgiBWN1clByIhFvdXRBc3NldElkT3JXYXZlcyIQc2VuZEZlZVRvTWF0Y2hlciIEYnVybiINJHQwMzI0MjYzMjc3NiIQZmVlQW1vdW50Rm9yQ2FsYyIQb3V0SW5BbW91bnRBc3NldCINJHQwMzI3NzkzMjg4NyIRcmVmcmVzaERMcEFjdGlvbnMiEWlzVXBkYXRlZERMcFZhbGlkIgFtIgckbWF0Y2gwIgJwbSICcGQiCWlzTWFuYWdlciICcGsiAm1tIgRnZXRZIglpc1JldmVyc2UiE3Bvb2xBbW91bnRJbkJhbGFuY2UiDSR0MDM0MzM0MzQzNTQiDSR0MDM0Njg1MzQ3MzIiDWNsZWFuQW1vdW50SW4iDSR0MDM0OTUzMzUzNzciCGFzc2V0T3V0IgJkeSILdG90YWxHZXRSYXciBW5ld1hwIgRuZXdEIgxhbW91bnRPdXRNaW4iCWFkZHJlc3NUbyILc3dhcENvbnRhY3QiBmNoZWNrcyIHYXNzZXRJbiINJHQwMzY4MTUzNzIwOSIIY2hlY2tNaW4iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgJjbSIDaHBtIgNjcG0iBHNsaXAiCWF1dG9TdGFrZSIHZmFjdENmZyILc3Rha2luZ0NudHIiCHNsaXBDbnRyIgphbUFzc2V0UG10IgpwckFzc2V0UG10IgFlIglscEFzc2V0SWQiAmVsIgZsZWdhY3kiAnNhIgJzcCIIbHBUcm5zZnIiAnNzIg0kdDA0MjA2NjQyMjA4IgVjaGVjayIUbHBBc3NldEVtaXNzaW9uQWZ0ZXIiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIg0kdDA0Mzg0OTQ0MDA3Igdlc3RpbUxQIg0kdDA0NDgyMjQ1MTcxIhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwNDUxNzQ0NTI4MiIHbWF4U2xwZyIGZXN0UHV0Ig0kdDA0NjMxMjQ2Mzc3IglvdXRBbXRBbXQiDSR0MDQ3NTUwNDc2MzIiDWlzR2V0RGlzYWJsZWQiDSR0MDQ4MjUwNDg0MDUiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDQ4OTI5NDg5OTMiEGRMcFVwZGF0ZUFjdGlvbnMiDWxwQXNzZXRBbW91bnQiBWluZGV4IgRuZXdZIg0kdDA1MDAwMzUwMDU4Ig0kdDA1MDQzMzUwNTQ4Ig5zdW1PZkdldEFzc2V0cyISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCIUYnVybkxQQXNzZXRPbkZhY3RvcnkiDSR0MDUxNzE0NTE3OTUiDWNoZWNrUGF5bWVudHMiCmZhY3RvcnlDZmciB3N0YWtpbmciCnVuc3Rha2VJbnYiAXYiBWJ1cm5BIg0kdDA1MjgyMjUyOTAzIg11bnN0YWtlQW1vdW50IhVub0xlc3NUaGVuQW1vdW50QXNzZXQiA3JlcyIMY2hlY2tBbW91bnRzIg0kdDA1NDE1NDU0MjM1Ig0kdDA1NTEzMDU1MzE4IhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCINJHQwNTU0NDY1NTU0OSINJHQwNTU2OTc1NTgwMSIIYW10QXNTdHIiB3ByQXNTdHIiAWsiAnByIgxyZXNTY2FsZU11bHQiB3VzckFkZHIiB3BtdEFzSWQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiINJHQwNTg1OTM1ODY2MiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNogwEAAWEAgMLXLwABYgkAtgIBAIDC1y8AAWMJALYCAQCAgJC7utat8A0AAWQJALYCAQAAAAFlCQC2AgEAAAABZgkAtgIBAAEAAWcJALYCAQACAAFoCQC2AgEAAwABaQkAtgIBAAQAAWoJALYCAQkAZQIFAWEJAGkCCQBoAgUBYQABBQFhAAFrAgVXQVZFUwABbAABAAFtAgMxMDAAAW4CATEAAW8CAl9fAAFwAgAAAXEAAQABcgACAAFzAAMAAXQABAABdQABAAF2AAIAAXcAAwABeAAEAAF5AAUAAXoABgABQQAHAAFCAAgAAUMACQABRAABAAFFAAYAAUYABwABRwAKAAFICQBrAwAKBQFhAJBOAQFJAgFKAUsJALwCAwkAtgIBBQFKBQFjCQC2AgEFAUsBAUwCAUoBSwkAvAIDBQFKBQFjBQFLAQFNAgFOAU8JAKADAQkAvAIDBQFOCQC2AgEFAU8FAWMBAVADAU4BTwFRCQCgAwEJAL0CBAUBTgkAtgIBBQFPBQFjBQFRAQFSAgFKAUsJALwCAwUBSgUBYwkAtgIBBQFLAQFTAgFOAU8JALwCAwUBTgkAtgIBBQFPBQFjAQFUAwFVAVYBVwkAawMFAVUFAVYFAVcBAVgBAU4DCQC/AgIFAWQFAU4JAL4CAQUBTgUBTgEBWQEBTgMJAL8CAgUBZAUBTgkAvgIBBQFOBQFOAQFaAAITJXNfX2ZhY3RvcnlDb250cmFjdAECYWEAAhQlc19fbWFuYWdlclB1YmxpY0tleQECYWIAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAmFjAAIRJXMlc19fcHJpY2VfX2xhc3QBAmFkAgJhZQJhZgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAmFlCQDMCAIJAKQDAQUCYWYFA25pbAUBbwECYWcCAmFoAmFpCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX1BfXwUCYWgCAl9fBQJhaQECYWoCAmFoAmFpCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUCYWgCAl9fBQJhaQECYWsAAg8lc19fYW1vdW50QXNzZXQBAmFsAAIOJXNfX3ByaWNlQXNzZXQBAmFtAAIHJXNfX2FtcAECYW4AAg0lc19fYWRkb25BZGRyAAJhbwIHJXNfX2ZlZQACYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYW8FAUgAAmFxCQC5CQIJAMwIAgICJXMJAMwIAgIDZExwBQNuaWwFAW8AAmFyCQC5CQIJAMwIAgICJXMJAMwIAgISZExwUmVmcmVzaGVkSGVpZ2h0BQNuaWwFAW8AAmFzCQC5CQIJAMwIAgICJXMJAMwIAgIPcmVmcmVzaERMcERlbGF5BQNuaWwFAW8AAmF0AB4AAmF1CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFzBQJhdAECYXYAAhElc19fZmFjdG9yeUNvbmZpZwECYXcAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmF4AgJheQJhegkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYXkCAl9fBQJhegIIX19jb25maWcBAmFBAQJhQgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhQgECYUMAAgwlc19fc2h1dGRvd24BAmFEAAIdJXNfX2FsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2gBAmFFAAIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmFGBAJhRwJhSAJhSQJhSgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUcCAiAoBQJhSAIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhSQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYUoBAmFLAgJhTAJhTQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFMBQJhTQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTAkAzAgCAgEuCQDMCAIFAmFNCQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFOAgJhTAJhTQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFMBQJhTQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTAkAzAgCAgEuCQDMCAIFAmFNCQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFPAQJhUAkAAgEJALkJAgkAzAgCAg9scF9zdGFibGUucmlkZToJAMwIAgUCYVAFA25pbAIBIAECYVEBAmFQCQC5CQIJAMwIAgIPbHBfc3RhYmxlLnJpZGU6CQDMCAIFAmFQBQNuaWwCASAAAmFSCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYUsCBQR0aGlzCQEBWgAAAmFTCgACYVQJAPwHBAUCYVICEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhVAIDSW50BQJhVAkAAgEJAKwCAgkAAwEFAmFUAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmFVCgACYVQJAPwHBAUCYVICEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVQCA0ludAUCYVQJAAIBCQCsAgIJAAMBBQJhVAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhVgkBAmFLAgUEdGhpcwkBAmFtAAECYVcACQELdmFsdWVPckVsc2UCCQCbCAIFAmFSCQECYUMABwECYVgACQDZBAEJAQJhSwIFAmFSCQECYXcAAAJhWQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFLAgUCYVIJAQJhRQABAmFaAAQCYmEJAQJhSwIFBHRoaXMJAQJhawAEAmJiCQECYUsCBQR0aGlzCQECYWwABAJiYwkBAmFOAgUCYVIJAQJhQQEFAmJiBAJheQkBAmFOAgUCYVIJAQJhQQEFAmJhCQC1CQIJAQJhSwIFAmFSCQECYXgCCQCkAwEFAmF5CQCkAwEFAmJjBQFvAQJiZAECYmUDCQAAAgUCYmUFAWsFBHVuaXQJANkEAQUCYmUBAmJmAQJiZQMJAAACBQJiZQUEdW5pdAUBawkA2AQBCQEFdmFsdWUBBQJiZQECYmcBAmJoCQCbCgkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYmgFAXUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiaAUBdgkA2QQBCQCRAwIFAmJoBQF3CQECYmQBCQCRAwIFAmJoBQF4CQECYmQBCQCRAwIFAmJoBQF5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmgFAXoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiaAUBQQkA2QQBCQCRAwIFAmJoBQFCCQDZBAEJAJEDAgUCYmgFAUMAAmJpCQECYmcBCQECYVoAAAJiagUCYmkAAmJrCAUCYmoCXzEAAmJsCAUCYmoCXzIAAmJtCAUCYmoCXzMAAmJuCAUCYmoCXzQAAmJvCAUCYmoCXzUAAmJwCAUCYmoCXzYAAmJxCAUCYmoCXzcAAmJyCAUCYmoCXzgAAmJzCAUCYmoCXzkBAmJ0AAkAtQkCCQECYUsCBQJhUgkBAmF2AAUBbwACYnUJAQJidAAAAmJ2CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJidQUBRAIgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MAAmJ3CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJidQUBRgIgSW52YWxpZCBzbGlwYWdlIGNvbnRyYWN0IGFkZHJlc3MAAmJ4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJidQUBRwIcSW52YWxpZCBnd3ggY29udHJhY3QgYWRkcmVzcwACYnkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJ1BQFFAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJiegoCYkECYkICYkMCYkQCYkUCYkYCYkcCYkgCYkkCYkoJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJBCQDMCAIJAKQDAQUCYkIJAMwIAgkApAMBBQJiQwkAzAgCCQCkAwEFAmJECQDMCAIJAKQDAQUCYkUJAMwIAgkApAMBBQJiRgkAzAgCCQCkAwEFAmJHCQDMCAIJAKQDAQUCYkgJAMwIAgkApAMBBQJiSQkAzAgCCQCkAwEFAmJKBQNuaWwFAW8BAmJLBgJiTAJiTQJiTgJiRAJiRwJiSAkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJMCQDMCAIJAKQDAQUCYk0JAMwIAgkApAMBBQJiTgkAzAgCCQCkAwEFAmJECQDMCAIJAKQDAQUCYkcJAMwIAgkApAMBBQJiSAUDbmlsBQFvAQJiTwECYlADCQAAAgUCYlACBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJQAQJiUQICYlICYlMJALwCAwUCYlIFAWMFAmJTAQJiVAMCYlICYlMBUQkAvQIEBQJiUgUBYwUCYlMFAVEBAmJVAwJiVgJiVwJiWAQCYlkJALwCAwkAuAICBQJiVgUCYlcFAWIFAmJXBAJiWgkAvwICCQC4AgIFAmJYCQEBWAEFAmJZBQFkAwkBASEBBQJiWgkAAgEJAKwCAgIKQmlnIHNscGc6IAkApgMBBQJiWQkAlAoCBQJiWgkAmQMBCQDMCAIFAmJWCQDMCAIFAmJXBQNuaWwBAmNhAwJjYgJjYwJjZAQCYlkJALwCAwUCY2MFAWIFAmNiBAJjZQkAvwICBQJjZAUCYlkDAwUCY2UGCQC/AgIFAmNjBQJjYgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKYDAQUCY2MCASAJAKYDAQUCY2ICASAJAKYDAQUCYlkCASAJAKYDAQUCY2QFAmNlAQJjZgQCY2cCY2gCY2kCY2oEAmNrCQEBSQIFAmNpBQJjZwQCY2wJAQFJAgUCY2oFAmNoCQECYlECBQJjbAUCY2sBAmNtAwJjaQJjagJjbgQCY28FAmJwBAJjcAUCYnEEAmNxCQECY2YEBQJjbwUCY3AFAmNpBQJjagQCYlMJAQFJAgUCY2kFAmNvBAJiUgkBAUkCBQJjagUCY3AEAmNyCQEBSQIFAmNuBQFhBAJjcwkBAmJRAgUCYlMFAmNyBAJjdAkBAmJRAgUCYlIFAmNyCQDMCAIFAmNxCQDMCAIFAmNzCQDMCAIFAmN0BQNuaWwBAmN1AwJjaQJjagJjbgQCY3YJAQJjbQMFAmNpBQJjagUCY24JAMwIAgkBAU0CCQCRAwIFAmN2AAAFAWEJAMwIAgkBAU0CCQCRAwIFAmN2AAEFAWEJAMwIAgkBAU0CCQCRAwIFAmN2AAIFAWEFA25pbAECY3cCAmN4AmFwBAJjeQMJAAACBQJhcAAAAAAJAGsDBQJjeAUCYXAFAWEJAJQKAgkAZQIFAmN4BQJjeQUCY3kBAmN6AQJjQQQCY0IJAJEDAgUCY0EAAAQCY0MJAJEDAgUCY0EAAQQCY0QJALcCAgUCY0IFAmNDAwkAAAIFAmNEBQFlBQFlBAJjRQkBDXBhcnNlSW50VmFsdWUBBQJhVgQCY0YJAGgCBQJjRQACBAJjdgkAvAIDBQJjQgUCY0MFAWYEAmNHCQC8AgMFAmN2BQFpBQFmBAJjSAkAvAIDCQC2AgEFAmNGBQJjRAUBZgQCY0kJALYCAQkAZQIFAmNGAAEKAQJjSgECY0sEAmNMCQC8AgMFAmNLBQJjSwUBZgQCY00JALwCAwUCY0wFAmNLBQFmBAJjTgkAvAIDBQJjTQUBZgUCY0cJALwCAwkAtwICBQJjSAkAvAIDBQJjTgUBZwUBZgUCY0sJALcCAgkAvAIDBQJjSQUCY0sFAWYJALwCAwUBaAUCY04FAWYKAQJjTwICY1ACY1EDCAUCY1ACXzIFAmNQBAJjSwgFAmNQAl8xBAJjUgkBAmNKAQUCY0sEAmNTCQC4AgIFAmNSCQEFdmFsdWUBBQJjSwQCY1QDCQC/AgIFAWUFAmNTCQC+AgEFAmNTBQJjUwMJAMACAgUBZgUCY1QJAJQKAgUCY1IGCQCUCgIFAmNSBwQCY1UJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCY1YKAAJjVwUCY1UKAAJjWAkAkAMBBQJjVwoAAmNZCQCUCgIFAmNEBwoBAmNaAgJkYQJkYgMJAGcCBQJkYgUCY1gFAmRhCQECY08CBQJkYQkAkQMCBQJjVwUCZGIKAQJkYwICZGECZGIDCQBnAgUCZGIFAmNYBQJkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZGMCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCBQJjWQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJjSwgFAmNWAl8xBAJkZAgFAmNWAl8yAwUCZGQFAmNLCQACAQkArAICAhlEIGNhbGN1bGF0aW9uIGVycm9yLCBEID0gCQCmAwEFAmNLAQJkZQQCZGYCZGcCZGgCZGkEAmRqBQJibQQCZGsJANgEAQkBBXZhbHVlAQUCYm4EAmRsCQDYBAEJAQV2YWx1ZQEFAmJvBAJkbQUCYnAEAmRuBQJicQQCZG8JAKQDAQUCYmwEAmRwCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRqAgtXcm9uZyBMUCBpZAhxdWFudGl0eQMJAQIhPQIJANgEAQUCZGoFAmRnCQACAQIPV3JvbmcgcG10IGFzc2V0BAJkcQkBAmJPAQUCZGsEAmRyCQEBSQIFAmRxBQJkbQQCZHMJAQJiTwEFAmRsBAJkdAkBAUkCBQJkcwUCZG4EAmR1CQECYlECBQJkdAUCZHIEAmR2CQEBTQIFAmR1BQFhBAJkdwkBAUkCBQJkaAUBYQQCZHgJAQFJAgUCZHAFAWEEAmR5CQC8AgMFAmRyBQJkdwUCZHgEAmR6CQC8AgMFAmR0BQJkdwUCZHgEAmRBCQEBUAMFAmR5BQJkbQUFRkxPT1IEAmRCCQEBUAMFAmR6BQJkbgUFRkxPT1IEAmRDAwkAAAIFAmRmAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJkaQUCZEEDCQAAAgUCZGsCBVdBVkVTBQR1bml0CQDZBAEFAmRrCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmRpBQJkQgMJAAACBQJkbAIFV0FWRVMFBHVuaXQJANkEAQUCZGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFqAgkApQgBBQJkaQUCZGYJAQJiSwYFAmRBBQJkQgUCZGgFAmR2BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMABQJkdgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFkAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHYFA25pbAkAnAoKBQJkQQUCZEIFAmRrBQJkbAUCZHEFAmRzBQJkcAUCZHUFAmRvBQJkQwECZEQNAmRmAmJYAmRFAmRGAmRHAmRIAmRpAmRJAmRKAmRLAmRMAmRNAmROBAJkagUCYm0EAmRPCQDYBAEJAQV2YWx1ZQEFAmJuBAJkUAkA2AQBCQEFdmFsdWUBBQJibwQCZFEFAmJyBAJkUgUCYnMEAmRTBQJicAQCZFQFAmJxBAJkbwkApAMBBQJibAQCZFUICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZGoCCFdyIGxwIGFzCHF1YW50aXR5BAJkcQMFAmRJCQECYk8BBQJkTwMDBQJkSwkAAAIFAmROBQJkTwcJAGUCCQECYk8BBQJkTwUCZE0DBQJkSwkBAmJPAQUCZE8JAGUCCQECYk8BBQJkTwUCZEUEAmRzAwUCZEkJAQJiTwEFAmRQAwMFAmRLCQAAAgUCZE4FAmRQBwkAZQIJAQJiTwEFAmRQBQJkTQMFAmRLCQECYk8BBQJkUAkAZQIJAQJiTwEFAmRQBQJkRwQCZFYJAQFJAgUCZEUFAmRTBAJkVwkBAUkCBQJkRwUCZFQEAmRYCQECYlECBQJkVwUCZFYEAmRyCQEBSQIFAmRxBQJkUwQCZHQJAQFJAgUCZHMFAmRUBAJjYwkBAmN6AQkAzAgCBQJkcgkAzAgCBQJkdAUDbmlsBAJkWQMJAAACBQJkVQAABAJjYgkBAmN6AQkAzAgCCQC3AgIFAmRyBQJkVgkAzAgCCQC3AgIFAmR0BQJkVwUDbmlsBAJkWgMJAL8CAgUCY2IFAmNjBgkAAgECHEQxIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gRDADCQAAAgUCZFoFAmRaBAJkdQUBZAQCZWEFAWQEAmNyBQJjYgkAlwoFCQEBTQIFAmNyBQFhCQEBTQIFAmRWBQJkUwkBAU0CBQJkVwUCZFQJAQJiUQIJALcCAgUCZHQFAmRXCQC3AgIFAmRyBQJkVgUCZWEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAmR1CQECYlECBQJkdAUCZHIEAmViCQC8AgMJAQFYAQkAuAICBQJkdQUCZFgFAWMFAmR1BAJlYQkBAUkCBQJiWAUBYQMDAwUCZEwJAQIhPQIFAmR1BQFkBwkAvwICBQJlYgUCZWEHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmViAgMgPiAJAKYDAQUCZWEEAmVjCQEBSQIFAmRVBQFhBAJlZAkAvQIEBQJkVgkBAmJUAwUCZHQFAmRyBQdDRUlMSU5HBQFjBQdDRUlMSU5HBAJlZQkAvQIEBQJkVwUBYwkBAmJUAwUCZHQFAmRyBQVGTE9PUgUHQ0VJTElORwQCZWYDCQC/AgIFAmVkBQJkVwkAlAoCBQJlZQUCZFcJAJQKAgUCZFYFAmVkBAJlZwgFAmVmAl8xBAJlaAgFAmVmAl8yBAJjYgkBAmN6AQkAzAgCCQC3AgIFAmRyBQJlZwkAzAgCCQC3AgIFAmR0BQJlaAUDbmlsBAJkWgMJAL8CAgUCY2IFAmNjBgkAAgECHEQxIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gRDADCQAAAgUCZFoFAmRaBAJjcgkAvAIDBQJlYwkAuAICBQJjYgUCY2MFAmNjCQCXCgUJAQFQAwUCY3IFAWEFBUZMT09SCQEBUAMFAmVnBQJkUwUHQ0VJTElORwkBAVADBQJlaAUCZFQFB0NFSUxJTkcFAmR1BQJlYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQCZWkIBQJkWQJfMQQCZWoIBQJkWQJfMgQCZWsIBQJkWQJfMwQCZHYJAQFNAggFAmRZAl80BQFhBAJlbAkBAU0CCAUCZFkCXzUFAWEDCQBnAgAABQJlaQkAAgECB0xQIDw9IDAEAmVtAwkBASEBBQJkSgAABQJlaQQCZW4JAGUCBQJkRQUCZWoEAmVvCQBlAgUCZEcFAmVrBAJlcAMDBQJkSwkAAAIFAmROBQJkTwcJAJQKAgUCZE0AAAMDBQJkSwkAAAIFAmROBQJkUAcJAJQKAgAABQJkTQkAlAoCBQJlagUCZWsEAmVxCAUCZXACXzEEAmVyCAUCZXACXzIEAmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMABQJkdgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFkAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFnAgUCZGkFAmRmCQECYnoKBQJlcQUCZXIFAmVtBQJkdgUCYlgFAmVsBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJlbgUCZW8FA25pbAkAnwoNBQJlaQUCZW0FAmR2BQJkcQUCZHMFAmRVBQJkagUCZG8FAmVzBQJlbgUCZW8FAmRGBQJkSAECZXQDAmNBAmNRAmV1BAJldgUBZwQCZXcJAJEDAgUCY0EDCQAAAgUCY1EAAAABAAAEAmV4CQCnAwEFAW0EAmNFCQC5AgIJAKcDAQUCYVYFAmV4BAJjRAUCZXcEAmNGCQC5AgIFAmNFBQJldgQCZXkJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQJldQUCZXUJALkCAgUCZXcFAmV2BQJldQUCZXgJALkCAgUCY0YFAmV2BAJlegkAuAICCQC3AgIFAmNECQC6AgIJALkCAgUCZXUFAmV4BQJjRgUCZXUKAQJjTwICY1ACZUEEAmVCBQJjUAQCZUMIBQJlQgJfMQQCZGQIBQJlQgJfMgMJAQIhPQIFAmRkBQR1bml0BQJjUAQCZUQJALoCAgkAtwICCQC5AgIFAmVDBQJlQwUCZXkJALcCAgkAuQICBQFnBQJlQwUCZXoEAmVFCQEBWQEJALgCAgUCZUQJAQV2YWx1ZQEFAmVDAwkAwAICBQFmBQJlRQkAlAoCBQJlRAUCZUEJAJQKAgUCZUQFBHVuaXQEAmNVCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmVGCgACY1cFAmNVCgACY1gJAJADAQUCY1cKAAJjWQkAlAoCBQJldQUEdW5pdAoBAmNaAgJkYQJkYgMJAGcCBQJkYgUCY1gFAmRhCQECY08CBQJkYQkAkQMCBQJjVwUCZGIKAQJkYwICZGECZGIDCQBnAgUCZGIFAmNYBQJkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZGMCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCCQECY1oCBQJjWQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJlQwgFAmVGAl8xBAJkZAgFAmVGAl8yAwkBAiE9AgUCZGQFBHVuaXQFAmVDCQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAmVDAQJlRwMCZUgCZUkCZUoEAmVLCQC8AgMJAQJjegEJAMwIAgkBAUwCBQJlSAkAtgIBBQJicAkAzAgCCQEBTAIFAmVJCQC2AgEFAmJxBQNuaWwFAWMFAmVKAwkAAAIFAmVKBQFlBQFlBQJlSwECZUwDAmVNAmVOAmVPBAJlUAkAuAICCQC2AgEJAQJiTwEJAQJiZgEFAmJuBQJlTQQCZVEJALgCAgkAtgIBCQECYk8BCQECYmYBBQJibwUCZU4EAmVSCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYm0IcXVhbnRpdHkFAmVPBAJlUwkBAmVHAwUCZVAFAmVRBQJlUgUCZVMBAmVUAwJlVQJlVgJlTwQCZVAJAGQCCQECYk8BCQECYmYBBQJibgUCZVUEAmVRCQBkAgkBAmJPAQkBAmJmAQUCYm8FAmVWBAJlUgkAZAIICQEFdmFsdWUBCQDsBwEFAmJtCHF1YW50aXR5BQJlTwQCZUsJAQJlRwMJALYCAQUCZVAJALYCAQUCZVEJALYCAQUCZVIEAmVXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhcgUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFxCQCmAwEFAmVLBQNuaWwJAJQKAgUCZVcFAmVLAQJlWAICZVkCZUsDCQDAAgIFAmVLBQJlWQYJAQJhTwECInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHABAmVaAQJmYQQCZVAJAQJiTwEJAQJiZgEFAmJuBAJlUQkBAmJPAQkBAmJmAQUCYm8EAmZiCAUCZmEGYW1vdW50BAJmYwkAbgQIBQJmYQZhbW91bnQIBQJmYQVwcmljZQUBYQUFRkxPT1IEAmZkAwkAAAIIBQJmYQlvcmRlclR5cGUFA0J1eQkAlAoCBQJmYgkBAS0BBQJmYwkAlAoCCQEBLQEFAmZiBQJmYwQCZVUIBQJmZAJfMQQCZVYIBQJmZAJfMgMDAwkBAmFXAAYJAAACBQJibAUBcwYJAAACBQJibAUBdAkAAgECDUFkbWluIGJsb2NrZWQDAwkBAiE9AggIBQJmYQlhc3NldFBhaXILYW1vdW50QXNzZXQFAmJuBgkBAiE9AggIBQJmYQlhc3NldFBhaXIKcHJpY2VBc3NldAUCYm8JAAIBAglXciBhc3NldHMEAmZlCQCnAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYXECATAEAmZmCQECZVQDBQJlVQUCZVYAAAQCZmcIBQJmZgJfMQQCZmgIBQJmZgJfMgQCZmkJAMACAgUCZmgFAmZlBAJmagkAuQkCCQDMCAICBGRMcD0JAMwIAgkApgMBBQJmZQkAzAgCAgggZExwTmV3PQkAzAgCCQCmAwEFAmZoCQDMCAICFCBhbW91bnRBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZVAJAMwIAgITIHByaWNlQXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmVRCQDMCAICGSBhbW91bnRBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlVQkAzAgCAhggcHJpY2VBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlVgkAzAgCAgggaGVpZ2h0PQkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgAJAJQKAgUCZmkFAmZqAQJmawECY1EDCQECIT0CCQCQAwEIBQJjUQhwYXltZW50cwABCQACAQIKMSBwbW50IGV4cAQCZmwJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAEAmRnCQEFdmFsdWUBCAUCZmwHYXNzZXRJZAQCZE0IBQJmbAZhbW91bnQEAmRZCQECZGUECQDYBAEIBQJjUQ10cmFuc2FjdGlvbklkCQDYBAEFAmRnBQJkTQgFAmNRBmNhbGxlcgQCZEEIBQJkWQJfMQQCZEIIBQJkWQJfMgQCZG8JAQ1wYXJzZUludFZhbHVlAQgFAmRZAl85BAJkQwgFAmRZA18xMAMDCQECYVcABgkAAAIFAmRvBQF0CQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUCZG8JAJcKBQUCZEEFAmRCBQJkTQUCZGcFAmRDAQJmbQoCZm4CYWkCZm8CZnACYlgCZEoCZEsCZEwCZE0CZE4EAmRZCQECZEQNBQJhaQUCYlgICQEFdmFsdWUBBQJmbwZhbW91bnQICQEFdmFsdWUBBQJmbwdhc3NldElkCAkBBXZhbHVlAQUCZnAGYW1vdW50CAkBBXZhbHVlAQUCZnAHYXNzZXRJZAUCZm4JAAACBQJhaQIABQJkSgUCZEsFAmRMBQJkTQUCZE4EAmRvCQENcGFyc2VJbnRWYWx1ZQEIBQJkWQJfOAMDAwkBAmFXAAYJAAACBQJkbwUBcgYJAAACBQJkbwUBdAkAAgEJAKwCAgIIQmxvY2tlZDoJAKQDAQUCZG8FAmRZAQJmcQUCZnICZGcCZGkCYWkCZnMEAmRrCQDYBAEJAQV2YWx1ZQEFAmJuBAJkbAkA2AQBCQEFdmFsdWUBBQJibwQCZGoFAmJtBAJkUwUCYnAEAmRUBQJicQQCZVIJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkagIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCZnQDCQC/AgIFAmVSBQFlBgkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZnQFAmZ0BAJkcQkBAmJPAQUCZGsEAmRzCQECYk8BBQJkbAQCZnUDCQAAAgUCYWkCAAkAlAoCBQJkcQUCZHMDCQAAAgUCZGcFAmRrAwkAZgIFAmZyBQJkcQkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgkAZQIFAmRxBQJmcgUCZHMDCQAAAgUCZGcFAmRsAwkAZgIFAmZyBQJkcwkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgUCZHEJAGUCBQJkcwUCZnIJAAIBAhB3cm9uZyBwbXRBc3NldElkBAJmdggFAmZ1Al8xBAJmdwgFAmZ1Al8yBAJmeAMJAAACBQJkZwUCZGsJAJQKAgUCZnIAAAMJAAACBQJkZwUCZGwJAJQKAgAABQJmcgkAAgECD2ludmFsaWQgcGF5bWVudAQCZnkIBQJmeAJfMQQCZnoIBQJmeAJfMgQCZkEDBQJmcwkAlQoDCAkBAmN3AgUCZnkFAmFTAl8xCAkBAmN3AgUCZnoFAmFTAl8xCAkBAmN3AgUCZnIFAmFTAl8yCQCVCgMFAmZ5BQJmegAABAJmQggFAmZBAl8xBAJmQwgFAmZBAl8yBAJjeQgFAmZBAl8zBAJmRAkAZAIFAmZ2BQJmQgQCZkUJAGQCBQJmdwUCZkMEAmNjCQECY3oBCQDMCAIJAQFJAgUCZnYFAmJwCQDMCAIJAQFJAgUCZncFAmJxBQNuaWwEAmNiCQECY3oBCQDMCAIJAQFJAgUCZkQFAmJwCQDMCAIJAQFJAgUCZkUFAmJxBQNuaWwEAmRaAwkAvwICBQJjYgUCY2MGCQEFdGhyb3cAAwkAAAIFAmRaBQJkWgQCZkYJAL0CBAUCZVIJALgCAgUCY2IFAmNjBQJjYwUFRkxPT1IEAmR2CQEBTQIJAQJiUQIJAQFJAgUCZkUFAmRUCQEBSQIFAmZEBQJkUwUBYQQCZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYwAFAmR2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkdgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWcCBQJkaQUCYWkJAQJiegoFAmZ5BQJmegkAoAMBBQJmRgUCZHYAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmRwkAawMFAmZ3BQFhBQJmdgQCZkgJAGsDBQJmcgUBYQkAZAIFAmZHBQFhBAJmSQkAZQIFAmZyBQJmSAQCZkoJALwCAwUCZVIJALYCAQUCZkkJALYCAQUCZncEAmZLCQCgAwEJALwCAwkAuAICBQJmRgUCZkoFAWIFAmZKCQCWCgQJAKADAQUCZkYFAmVzBQJjeQUCZksJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZMBgJmTQJmTgJmTwJmbgJmUAJmUQQCZGoJANgEAQkBBXZhbHVlAQUCYm0EAmRrCQDYBAEJAQV2YWx1ZQEFAmJuBAJkbAkA2AQBCQEFdmFsdWUBBQJibwQCZlIFAmJwBAJmUwUCYnEEAmZUBQJibAQCZGkDCQAAAgUCZm4FAmJ5BQJmUAUCZm4EAmZsCQEFdmFsdWUBCQCRAwIFAmZPAAAEAmRnCQEFdmFsdWUBCAUCZmwHYXNzZXRJZAQCZE0IBQJmbAZhbW91bnQEAmVTCQECZUwDBQFlBQFlBQFlAwkAAAIFAmVTBQJlUwQCZGYJANgEAQUCZlEDCQECIT0CBQJkagkA2AQBBQJkZwkAAgECCFdyb25nIExQBAJkcQkBAmJPAQUCZGsEAmRzCQECYk8BBQJkbAQCZlUKAAJhVAkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZNCQDMCAIFAmRNBQNuaWwFA25pbAMJAAECBQJhVAIKKEludCwgSW50KQUCYVQJAAIBCQCsAgIJAAMBBQJhVAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQJmVQUCZlUEAmN5CAUCZlUCXzIEAmZWCAUCZlUCXzEEAmZXAwMJAGYCBQJmTgAACQBmAgUCZk4FAmZWBwkBAmFPAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmTgUDbmlsAgAFAmZWBAJmWAMJAAACBQJmTQUCZGsJAJYKBAUCZlcAAAkAZQIJAGUCBQJkcQUCZlcFAmN5BQJkcwMJAAACBQJmTQUCZGwJAJYKBAAABQJmVwUCZHEJAGUCCQBlAgUCZHMFAmZXBQJjeQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJmWQgFAmZYAl8xBAJmWggFAmZYAl8yBAJmRAgFAmZYAl8zBAJmRQgFAmZYAl80BAJnYQkBAmJRAgkBAUkCBQJmRQUCZlMJAQFJAgUCZkQFAmZSBAJnYgkBAU0CBQJnYQUBYQQCZ2MDCQAAAgUCZk0CBVdBVkVTBQR1bml0CQDZBAEFAmZNBAJnZAMJAGYCBQJjeQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFZBQJjeQUCZ2MFA25pbAUDbmlsBAJkQwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmRpBQJmVwUCZ2MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFqAgkApQgBBQJkaQUCZGYJAQJiSwYFAmZZBQJmWgUCZE0FAmdiBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMABQJnYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFkAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZ2IFA25pbAUCZ2QDCQAAAgUCZEMFAmRDBAJnZQkA/AcEBQJhUgIEYnVybgkAzAgCBQJkTQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkZwUCZE0FA25pbAMJAAACBQJnZQUCZ2UEAmdmBAJnZwMJAAACBQR0aGlzBQJhWQAABQJjeQQCZ2gDCQAAAgkBAmJkAQUCZk0FAmJuBgcDBQJnaAkAlAoCCQEBLQEJAGQCBQJmVgUCZ2cAAAkAlAoCAAAJAQEtAQkAZAIFAmZWBQJnZwQCZVUIBQJnZgJfMQQCZVYIBQJnZgJfMgQCZ2kJAQJlVAMFAmVVBQJlVgAABAJnaggFAmdpAl8xBAJlSwgFAmdpAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAlAoCCQDOCAIFAmRDBQJnagUCZlcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmdsAAQCZ20JAKIIAQkBAmFhAAMJAAECBQJnbQIGU3RyaW5nBAJjRAUCZ20JANkEAQUCY0QDCQABAgUCZ20CBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ24ABAJnbQkAoggBCQECYWIAAwkAAQIFAmdtAgZTdHJpbmcEAmNEBQJnbQkA2QQBBQJjRAMJAAECBQJnbQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAAJnbwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAQJncAECY1EEAmdtCQECZ2wAAwkAAQIFAmdtAgpCeXRlVmVjdG9yBAJncQUCZ20JAAACCAUCY1EPY2FsbGVyUHVibGljS2V5BQJncQMJAAECBQJnbQIEVW5pdAkAAAIIBQJjUQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ3IBAmNRBAJnbQkBAmdsAAMJAAECBQJnbQIKQnl0ZVZlY3RvcgQCZ3EFAmdtAwkAAAIIBQJjUQ9jYWxsZXJQdWJsaWNLZXkFAmdxBgUCZ28DCQABAgUCZ20CBFVuaXQDCQAAAggFAmNRBmNhbGxlcgUEdGhpcwYFAmdvCQACAQILTWF0Y2ggZXJyb3IBAmdzAwJndAJldQJndQQCYmgJAQJhWgAEAmRrCQCRAwIFAmJoBQF4BAJkbAkAkQMCBQJiaAUBeQQCZXYFAWcEAmV4CQCnAwEFAW0EAmNFCQC5AgIJAKcDAQUCYVYFAmV4BAJjQQMJAAACBQJndAcJAMwIAgkAtwICCQC2AgEJAQJiTwEFAmRrBQJndQkAzAgCCQC2AgEJAQJiTwEFAmRsBQNuaWwJAMwIAgkAtwICCQC2AgEJAQJiTwEFAmRsBQJndQkAzAgCCQC2AgEJAQJiTwEFAmRrBQNuaWwEAmV3CQCRAwIFAmNBAAAEAmNEBQJldwQCY0YJALkCAgUCY0UFAmV2BAJleQkAugICCQC5AgIJALkCAgkAugICCQC5AgIFAmV1BQJldQkAuQICBQJldwUCZXYFAmV1BQJleAkAuQICBQJjRgUCZXYEAmV6CQC4AgIJALcCAgUCY0QJALoCAgkAuQICBQJldQUCZXgFAmNGBQJldQoBAmNPAgJjUAJlQQQCZ3YFAmNQBAJlQwgFAmd2Al8xBAJkZAgFAmd2Al8yAwkBAiE9AgUCZGQFBHVuaXQFAmNQBAJlRAkAugICCQC3AgIJALkCAgUCZUMFAmVDBQJleQkAtwICCQC5AgIFAWcFAmVDBQJlegQCZUUJAQFZAQkAuAICBQJlRAkBBXZhbHVlAQUCZUMDCQDAAgIFAWYFAmVFCQCUCgIFAmVEBQJlQQkAlAoCBQJlRAUEdW5pdAQCY1UJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZ3cKAAJjVwUCY1UKAAJjWAkAkAMBBQJjVwoAAmNZCQCUCgIFAmV1BQR1bml0CgECY1oCAmRhAmRiAwkAZwIFAmRiBQJjWAUCZGEJAQJjTwIFAmRhCQCRAwIFAmNXBQJkYgoBAmRjAgJkYQJkYgMJAGcCBQJkYgUCY1gFAmRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJkYwIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIJAQJjWgIFAmNZAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmVDCAUCZ3cCXzEEAmRkCAUCZ3cCXzIDCQECIT0CBQJkZAUEdW5pdAUCZUMJAAIBCQCsAgICGVkgY2FsY3VsYXRpb24gZXJyb3IsIFkgPSAJAKYDAQUCZUMeAmNRASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkCAmd4Amd0BAJneQMJAAACBQJndAcEAmd6CQECYUsCBQR0aGlzCQECYWwABAJndQkAtwICCQC2AgEJAQJiTwEJAQJhSwIFBHRoaXMJAQJhawAJALYCAQUCZ3gJAJQKAgUCZ3oFAmd1BAJnegkBAmFLAgUEdGhpcwkBAmFrAAQCZ3UJALcCAgkAtgIBCQECYk8BCQECYUsCBQR0aGlzCQECYWwACQC2AgEFAmd4CQCUCgIFAmd6BQJndQQCZ3oIBQJneQJfMQQCZ3UIBQJneQJfMgQCYmgJAQJhWgAEAmRrCQCRAwIFAmJoBQF4BAJkbAkAkQMCBQJiaAUBeQQCY0EJAMwIAgkAtgIBCQECYk8BBQJkawkAzAgCCQC2AgEJAQJiTwEFAmRsBQNuaWwEAmV1CQECY3oBBQJjQQQCZUMJAQJncwMFAmd0BQJldQkAtgIBBQJneAQCZ0EJALgCAgkAuAICCQC2AgEJAQJiTwEFAmd6BQJlQwkAtgIBAAEEAmdCCQCWAwEJAMwIAgAACQDMCAIJAKADAQUCZ0EFA25pbAQCZ0MDCQAAAgUCZ3QHCQDMCAIJALcCAgkAtgIBCQECYk8BBQJkawkAtgIBBQJneAkAzAgCCQC4AgIJALYCAQkBAmJPAQUCZGwFAmdBBQNuaWwJAMwIAgkAuAICCQC2AgEJAQJiTwEFAmRrBQJnQQkAzAgCCQC3AgIJALYCAQkBAmJPAQUCZGwJALYCAQUCZ3gFA25pbAQCZ0QJAQJjegEFAmdDBAJkWgMJAMACAgUCZ0QFAmV1BgkAAgEJALkJAgkAzAgCAhRuZXcgRCBpcyBmZXdlciBlcnJvcgkAzAgCCQCmAwEFAmV1CQDMCAIJAKYDAQUCZ0QFA25pbAICX18DCQAAAgUCZFoFAmRaCQCUCgIFA25pbAUCZ0IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBAJneAJndAJnRQJnRgQCZ0cKAAJhVAkA/AcEBQJhUgIXZ2V0U3dhcENvbnRyYWN0UkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAmFUAgZTdHJpbmcFAmFUCQACAQkArAICCQADAQUCYVQCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQCZ0gJAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCY1EIcGF5bWVudHMAAAZhbW91bnQFAmd4BgkBAmFPAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmNRBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ0cGCQECYU8BAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmdIBQJnSAQCZmwJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAEAmdJAwkAAAIIBQJmbAdhc3NldElkBQR1bml0CQDYBAEJAJsDAQIFV0FWRVMJANgEAQkBBXZhbHVlAQgFAmZsB2Fzc2V0SWQEAmdKAwkAAAIFAmd0BwQCZ3oJAQJhSwIFBHRoaXMJAQJhbAAEAmd1CQBlAgkBAmJPAQUCZ0kICQEFdmFsdWUBCQCRAwIIBQJjUQhwYXltZW50cwAABmFtb3VudAkAlAoCBQJnegUCZ3UEAmd6CQECYUsCBQR0aGlzCQECYWsABAJndQkAZQIJAQJiTwEFAmdJCAkBBXZhbHVlAQkAkQMCCAUCY1EIcGF5bWVudHMAAAZhbW91bnQJAJQKAgUCZ3oFAmd1BAJneggFAmdKAl8xBAJndQgFAmdKAl8yBAJiaAkBAmFaAAQCZGsJAJEDAgUCYmgFAXgEAmRsCQCRAwIFAmJoBQF5BAJjQQMJAAACBQJndAcJAMwIAgkAuAICCQC2AgEJAQJiTwEFAmRrCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjUQhwYXltZW50cwAABmFtb3VudAkAzAgCCQC2AgEJAQJiTwEFAmRsBQNuaWwJAMwIAgkAtgIBCQECYk8BBQJkawkAzAgCCQC4AgIJALYCAQkBAmJPAQUCZGwJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAGYW1vdW50BQNuaWwEAmV1CQECY3oBBQJjQQQCZUMJAQJncwMFAmd0BQJldQkAtgIBAAAEAmdBCQC4AgIJALgCAgkAtgIBCQECYk8BBQJnegUCZUMJALYCAQABBAJnQgkAlgMBCQDMCAIAAAkAzAgCCQCgAwEFAmdBBQNuaWwEAmdLAwkAZwIFAmdCBQJnRQYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQJnSwUCZ0sEAmdDAwkAAAIFAmd0BwkAzAgCCQC2AgEJAQJiTwEFAmRrCQDMCAIJALgCAgkAtgIBCQECYk8BBQJkbAUCZ0EFA25pbAkAzAgCCQC4AgIJALYCAQkBAmJPAQUCZGsFAmdBCQDMCAIJALYCAQkBAmJPAQUCZGwFA25pbAQCZ0QJAQJjegEFAmdDBAJkWgMJAMACAgUCZ0QFAmV1BgkAAgECFG5ldyBEIGlzIGZld2VyIGVycm9yAwkAAAIFAmRaBQJkWgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdGBQJnQgkBAmJkAQUCZ3oFA25pbAUCZ0IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBC2NvbnN0cnVjdG9yAQFaBAJleQkBAmdyAQUCY1EDCQAAAgUCZXkFAmV5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAAUBWgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNRAQpzZXRNYW5hZ2VyAQJnTAQCZXkJAQJncgEFAmNRAwkAAAIFAmV5BQJleQQCZ00JANkEAQUCZ0wDCQAAAgUCZ00FAmdNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYgAFAmdMBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBDmNvbmZpcm1NYW5hZ2VyAAQCY3YJAQJnbgAEAmdOAwkBCWlzRGVmaW5lZAEFAmN2BgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnTgUCZ04EAmdPAwkAAAIIBQJjUQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmN2BgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnTwUCZ08JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAkA2AQBCQEFdmFsdWUBBQJjdgkAzAgCCQELRGVsZXRlRW50cnkBCQECYWIABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBA3B1dAICZ1ACZ1EEAmdSCQECYnQABAJnUwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ1IFAUQCCldyIHN0IGFkZHIEAmdUCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJnUgUBRgIKV3Igc2wgYWRkcgMJAGYCAAAFAmdQCQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJjUQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJnVQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1EIcGF5bWVudHMAAAZhbW91bnQEAmdWCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjUQhwYXltZW50cwABBmFtb3VudAQCZVAJALgCAgkAtgIBCQECYk8BCQECYmYBBQJibgUCZ1UDCQAAAgUCZVAFAmVQBAJlUQkAuAICCQC2AgEJAQJiTwEJAQJiZgEFAmJvBQJnVgMJAAACBQJlUQUCZVEEAmVSCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJtCHF1YW50aXR5AwkAAAIFAmVSBQJlUgQCZVMJAQJlTAMFAmdVBQJnVgkAtgIBAAADCQAAAgUCZVMFAmVTBAJnVwkBAmZtCgkApQgBCAUCY1EGY2FsbGVyCQDYBAEIBQJjUQ10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJjUQhwYXltZW50cwABBQJnUAYHBgAAAgAEAmVtCAUCZ1cCXzIEAmdYCAUCZ1cCXzcEAmRDCAUCZ1cCXzkEAmVuCAUCZ1cDXzEwBAJlbwgFAmdXA18xMQQCZGsIBQJnVwNfMTIEAmRsCAUCZ1cDXzEzBAJkWQkA/AcEBQJhUgIEZW1pdAkAzAgCBQJlbQUDbmlsBQNuaWwDCQAAAgUCZFkFAmRZBAJnWQQCZ20FAmRZAwkAAQIFAmdtAgdBZGRyZXNzBAJnWgUCZ20JAPwHBAUCZ1oCBGVtaXQJAMwIAgUCZW0FA25pbAUDbmlsBQR1bml0AwkAAAIFAmdZBQJnWQQCaGEDCQBmAgUCZW4AAAkA/AcEBQJnVAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRrBQJlbgUDbmlsBQNuaWwDCQAAAgUCaGEFAmhhBAJoYgMJAGYCBQJlbwAACQD8BwQFAmdUAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGwFAmVvBQNuaWwFA25pbAMJAAACBQJoYgUCaGIEAmhjAwUCZ1EEAmhkCQD8BwQFAmdTAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnWAUCZW0FA25pbAMJAAACBQJoZAUCaGQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCY1EGY2FsbGVyBQJlbQUCZ1gFA25pbAQCaGUJAQJlVAMAAAAAAAAEAmdqCAUCaGUCXzEEAmVLCAUCaGUCXzIEAmhmAwkAwAICBQJlSwUCZVMGCQECYU8BCQC5CQIJAMwIAgIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAkAzAgCCQCmAwEFAmVQCQDMCAIJAKYDAQUCZVEJAMwIAgkApgMBBQJlUgkAzAgCCQCmAwEFAmVTCQDMCAIJAKYDAQUCZUsJAMwIAgkApAMBBQJlbgkAzAgCCQCkAwEFAmVvBQNuaWwCASADCQAAAgUCaGYFAmhmBAJoZwgJAQV2YWx1ZQEJAOwHAQUCYm0IcXVhbnRpdHkDCQAAAgUCaGcFAmhnCQDOCAIJAM4IAgUCZEMFAmhjBQJnagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQELcHV0T25lVGtuVjICAmZOAmdRBAJoaAoAAmFUCQD8BwQFAmFSAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVQCB0Jvb2xlYW4FAmFUCQACAQkArAICCQADAQUCYVQCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhpAwMDCQECYVcABgkAAAIFAmJsBQFyBgkAAAIFAmJsBQF0BgUCaGgEAmdICQDMCAIDAwkBASEBBQJoaQYJAQJncAEFAmNRBgkBAmFPAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1EIcGF5bWVudHMAAQYJAQJhTwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdIBQJnSAQCZGsJANgEAQkBBXZhbHVlAQUCYm4EAmRsCQDYBAEJAQV2YWx1ZQEFAmJvBAJkagUCYm0EAmZSBQJicAQCZlMFAmJxBAJkaQMJAAACCAUCY1EGY2FsbGVyBQR0aGlzCAUCY1EMb3JpZ2luQ2FsbGVyCAUCY1EGY2FsbGVyBAJmbAkBBXZhbHVlAQkAkQMCCAUCY1EIcGF5bWVudHMAAAQCZGcJANgEAQkBBXZhbHVlAQgFAmZsB2Fzc2V0SWQEAmRNCAUCZmwGYW1vdW50BAJlUwMJAAACCAUCZmwHYXNzZXRJZAUCYm4JAQJlTAMJALYCAQUCZE0JALYCAQAACQC2AgEAAAkBAmVMAwkAtgIBAAAJALYCAQUCZE0JALYCAQAAAwkAAAIFAmVTBQJlUwQCaGoJAQJmcQUFAmRNBQJkZwkApQgBBQJkaQkA2AQBCAUCY1ENdHJhbnNhY3Rpb25JZAYDCQAAAgUCaGoFAmhqBAJjeQgFAmhqAl8zBAJkQwgFAmhqAl8yBAJoawgFAmhqAl8xBAJlbQMDCQBmAgUCZk4AAAkAZgIFAmZOBQJoawcJAQJhTwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZk4FA25pbAIABQJoawQCZ1cJAPwHBAUCYVICBGVtaXQJAMwIAgUCZW0FA25pbAUDbmlsAwkAAAIFAmdXBQJnVwQCZ1kEAmdtBQJnVwMJAAECBQJnbQIHQWRkcmVzcwQCZ1oFAmdtCQD8BwQFAmdaAgRlbWl0CQDMCAIFAmVtBQNuaWwFA25pbAUEdW5pdAMJAAACBQJnWQUCZ1kEAmhjAwUCZ1EEAmhkCQD8BwQFAmJ2AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkagUCZW0FA25pbAMJAAACBQJoZAUCaGQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCY1EGY2FsbGVyBQJlbQUCZGoFA25pbAQCZ2QDCQBmAgUCY3kAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhWQUCY3kJANkEAQUCZGcFA25pbAUDbmlsBAJobAMJAAACBQR0aGlzBQJhWQkAlAoCAAAAAAQCaG0DCQAAAggFAmZsB2Fzc2V0SWQFAmJuBgcDBQJobQkAlAoCCQEBLQEFAmN5AAAJAJQKAgAACQEBLQEFAmN5BAJlVQgFAmhsAl8xBAJlVggFAmhsAl8yBAJobgkBAmVUAwUCZVUFAmVWAAAEAmdqCAUCaG4CXzEEAmVLCAUCaG4CXzIEAmdrCQECZVgCBQJlUwUCZUsDCQAAAgUCZ2sFAmdrCQCUCgIJAM4IAgkAzggCCQDOCAIFAmRDBQJoYwUCZ2QFAmdqBQJlbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQEKcHV0Rm9yRnJlZQECaG8DCQBmAgAABQJobwkAAgECCldyb25nIHNscGcDCQECIT0CCQCQAwEIBQJjUQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJocAkBAmZtCgkApQgBCAUCY1EGY2FsbGVyCQDYBAEIBQJjUQ10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJjUQhwYXltZW50cwABBQJobwcHBgAAAgAEAmRDCAUCaHACXzkEAmdVCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjUQhwYXltZW50cwAABmFtb3VudAQCZ1YJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmNRCHBheW1lbnRzAAEGYW1vdW50BAJlUwkBAmVMAwUCZ1UFAmdWCQC2AgEAAAMJAAACBQJlUwUCZVMEAmhxCQECZVQDAAAAAAAABAJnaggFAmhxAl8xBAJlSwgFAmhxAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAzggCBQJkQwUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBA2dldAAEAmVTCQECZUwDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVTBQJlUwQCZFkJAQJmawEFAmNRBAJocggFAmRZAl8xBAJkQggFAmRZAl8yBAJkTQgFAmRZAl8zBAJkZwgFAmRZAl80BAJkQwgFAmRZAl81BAJlegkA/AcEBQJhUgIEYnVybgkAzAgCBQJkTQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkZwUCZE0FA25pbAMJAAACBQJlegUCZXoEAmhzCQECZVQDCQEBLQEFAmhyCQEBLQEFAmRCAAAEAmdqCAUCaHMCXzEEAmVLCAUCaHMCXzIEAmdrCQECZVgCBQJlUwUCZUsDCQAAAgUCZ2sFAmdrCQDOCAIFAmRDBQJnagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQELZ2V0T25lVGtuVjICAmZNAmZOBAJoaAoAAmFUCQD8BwQFAmFSAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVQCB0Jvb2xlYW4FAmFUCQACAQkArAICCQADAQUCYVQCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmh0AwMJAQJhVwAGCQAAAgUCYmwFAXQGBQJoaAQCZ0gJAMwIAgMDCQEBIQEFAmh0BgkBAmdwAQUCY1EGCQECYU8BAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJjUQhwYXltZW50cwABBgkBAmFPAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ0gFAmdIBAJodQkBAmZMBgUCZk0FAmZOCAUCY1EIcGF5bWVudHMIBQJjUQZjYWxsZXIIBQJjUQxvcmlnaW5DYWxsZXIIBQJjUQ10cmFuc2FjdGlvbklkBAJkQwgFAmh1Al8xBAJmVwgFAmh1Al8yCQCUCgIFAmRDBQJmVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQEKcmVmcmVzaERMcAAEAmh2CQELdmFsdWVPckVsc2UCCQCfCAEFAmFyAAAEAmh3AwkAZwIJAGUCBQZoZWlnaHQFAmh2BQJhdQUEdW5pdAkBAmFPAQkAuQkCCQDMCAIJAKQDAQUCYXUJAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmh3BQJodwQCZmUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFxAgEwCQECYVEBAgtpbnZhbGlkIGRMcAQCaHgJAQJlVAMAAAAAAAAEAmh5CAUCaHgCXzEEAmVLCAUCaHgCXzIEAmVXAwkBAiE9AgUCZmUFAmVLBQJoeQkBAmFPAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmVXCQCmAwEFAmVLCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNRARNnZXRPbmVUa25WMlJFQURPTkxZAgJmTQJoegQCZGsJANgEAQkBBXZhbHVlAQUCYm4EAmRsCQDYBAEJAQV2YWx1ZQEFAmJvBAJkagkA2AQBCQEFdmFsdWUBBQJibQQCY0EJAMwIAgkAtgIBCQECYk8BBQJkawkAzAgCCQC2AgEJAQJiTwEFAmRsBQNuaWwEAmVKCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJkagIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCY2MJAQJjegEFAmNBBAJjYgkAuAICBQJjYwkAvAIDCQC2AgEFAmh6BQJjYwUCZUoEAmhBAwkAAAIFAmZNBQJkawAAAwkAAAIFAmZNBQJkbAABCQACAQIUaW52YWxpZCBvdXQgYXNzZXQgaWQEAmhCCQECZXQDBQJjQQUCaEEFAmNiBAJnQQkAuAICCQCRAwIFAmNBBQJoQQUCaEIEAmdCCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAuAICBQJnQQUBZgUDbmlsBAJoQwkBAmN3AgUCZ0IFAmFVBAJmVggFAmhDAl8xBAJjeQgFAmhDAl8yCQCUCgIFA25pbAkAlAoCBQJmVgUCY3kCY1EBHGdldE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmZNAmh6BAJkawkA2AQBCQEFdmFsdWUBBQJibgQCZGwJANgEAQkBBXZhbHVlAQUCYm8EAmRqCQDYBAEJAQV2YWx1ZQEFAmJtBAJkcQkBAmJPAQUCZGsEAmRzCQECYk8BBQJkbAQCaEQKAAJhVAkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZNCQDMCAIFAmh6BQNuaWwFA25pbAMJAAECBQJhVAIKKEludCwgSW50KQUCYVQJAAIBCQCsAgIJAAMBBQJhVAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQQCZlYIBQJoRAJfMQQCY3kIBQJoRAJfMgQCZFkJAQJkZQQCAAUCZGoFAmh6BQR0aGlzBAJkQQgFAmRZAl8xBAJkQggFAmRZAl8yBAJoRQkAZAIFAmRBBQJkQgQCZksDCQAAAgUCaEUAAAMJAAACBQJmVgAAAAAJAAIBAhdib251cyBjYWxjdWxhdGlvbiBlcnJvcgkAawMJAGUCBQJmVgUCaEUFAWEFAmhFCQCUCgIFA25pbAkAlQoDBQJmVgUCY3kFAmZLAmNRAQlnZXROb0xlc3MCAmhGAmhHBAJkWQkBAmZrAQUCY1EEAmRBCAUCZFkCXzEEAmRCCAUCZFkCXzIEAmRNCAUCZFkCXzMEAmRnCAUCZFkCXzQEAmRDCAUCZFkCXzUDCQBmAgUCaEYFAmRBCQACAQkArAICCQCsAgIJAKwCAgIJRmFpbGVkOiAgCQCkAwEFAmRBAgMgPCAJAKQDAQUCaEYDCQBmAgUCaEcFAmRCCQACAQkArAICCQCsAgIJAKwCAgIIRmFpbGVkOiAJAKQDAQUCZEICAyA8IAkApAMBBQJoRwQCZVMJAQJlTAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZVMFAmVTBAJoSAkA/AcEBQJhUgIEYnVybgkAzAgCBQJkTQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkZwUCZE0FA25pbAMJAAACBQJoSAUCaEgEAmhJCQECZVQDCQEBLQEFAmRBCQEBLQEFAmRCAAAEAmdqCAUCaEkCXzEEAmVLCAUCaEkCXzIEAmdrCQECZVgCBQJlUwUCZUsDCQAAAgUCZ2sFAmdrCQDOCAIFAmRDBQJnagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQENdW5zdGFrZUFuZEdldAECY3gEAmhKAwkBAiE9AgkAkAMBCAUCY1EIcGF5bWVudHMAAAkAAgECDU5vIHBtbnRzIGV4cGQGAwkAAAIFAmhKBQJoSgQCaEsJAQJidAAEAmdYBQJibQQCaEwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmhLBQFEAgpXciBzdCBhZGRyBAJlUwkBAmVMAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlUwUCZVMEAmhNCQD8BwQFAmhMAgd1bnN0YWtlCQDMCAIJANgEAQUCZ1gJAMwIAgUCY3gFA25pbAUDbmlsAwkAAAIFAmhNBQJoTQQCZFkJAQJkZQQJANgEAQgFAmNRDXRyYW5zYWN0aW9uSWQJANgEAQUCZ1gFAmN4CAUCY1EGY2FsbGVyBAJkQQgFAmRZAl8xBAJkQggFAmRZAl8yBAJkbwkBDXBhcnNlSW50VmFsdWUBCAUCZFkCXzkEAmRDCAUCZFkDXzEwBAJoTgMDCQECYVcABgkAAAIFAmRvBQF0CQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCZG8GAwkAAAIFAmhOBQJoTgQCaE8JAPwHBAUCYVICBGJ1cm4JAMwIAgUCY3gFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ1gFAmN4BQNuaWwDCQAAAgUCaE8FAmhPBAJoUAkBAmVUAwkBAS0BBQJkQQkBAS0BBQJkQgAABAJnaggFAmhQAl8xBAJlSwgFAmhQAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAzggCBQJkQwUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhRAmhSAmhHBAJodAMJAQJhVwAGCQAAAgUCYmwFAXQEAmdICQDMCAIDCQEBIQEFAmh0BgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmNRCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ0gFAmdIBAJlUwkBAmVMAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlUwUCZVMEAmhNCQD8BwQFAmJ2Agd1bnN0YWtlCQDMCAIJANgEAQUCYm0JAMwIAgUCaFEFA25pbAUDbmlsAwkAAAIFAmhNBQJoTQQCaFMJAQJkZQQJANgEAQgFAmNRDXRyYW5zYWN0aW9uSWQJANgEAQUCYm0FAmhRCAUCY1EGY2FsbGVyBAJkQQgFAmhTAl8xBAJkQggFAmhTAl8yBAJkQwgFAmhTA18xMAQCaFQJAMwIAgMJAGcCBQJkQQUCaFIGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaFIFA25pbAIACQDMCAIDCQBnAgUCZEIFAmhHBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaEcFA25pbAIABQNuaWwDCQAAAgUCaFQFAmhUBAJoSAkA/AcEBQJhUgIEYnVybgkAzAgCBQJoUQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJibQUCaFEFA25pbAMJAAACBQJoSAUCaEgEAmhVCQECZVQDCQEBLQEFAmRBCQEBLQEFAmRCAAAEAmdqCAUCaFUCXzEEAmVLCAUCaFUCXzIEAmdrCQECZVgCBQJlUwUCZUsDCQAAAgUCZ2sFAmdrCQDOCAIFAmRDBQJnagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUQEVdW5zdGFrZUFuZEdldE9uZVRrblYyAwJoUQJmTQJmTgQCaGgKAAJhVAkA/AcEBQJhUgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFUAgdCb29sZWFuBQJhVAkAAgEJAKwCAgkAAwEFAmFUAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJodAMDCQECYVcABgkAAAIFAmJsBQF0BgUCaGgEAmdICQDMCAIDAwkBASEBBQJodAYJAQJncAEFAmNRBgkBAmFPAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1EIcGF5bWVudHMAAAYJAQJhTwECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdIBQJnSAQCaEsJAQJidAAEAmdYBQJibQQCaEwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmhLBQFEAgpXciBzdCBhZGRyBAJoTQkA/AcEBQJoTAIHdW5zdGFrZQkAzAgCCQDYBAEFAmdYCQDMCAIFAmhRBQNuaWwFA25pbAMJAAACBQJoTQUCaE0EAmhWCQECZkwGBQJmTQUCZk4JAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmdYBQJoUQUDbmlsCAUCY1EGY2FsbGVyCAUCY1EMb3JpZ2luQ2FsbGVyCAUCY1ENdHJhbnNhY3Rpb25JZAQCZEMIBQJoVgJfMQQCZlcIBQJoVgJfMgkAlAoCBQJkQwUCZlcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1EBHHB1dE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmhXAmhYBAJoWQkBAmZxBQUCaFcFAmhYAgACAAYEAmZGCAUCaFkCXzEEAmRDCAUCaFkCXzIEAmN5CAUCaFkCXzMEAmZLCAUCaFkCXzQJAJQKAgUDbmlsCQCVCgMFAmZGBQJjeQUCZksCY1EBIXB1dE9uZVRrblYyV2l0aG91dFRha2VGZWVSRUFET05MWQICaFcCaFgEAmhaCQECZnEFBQJoVwUCaFgCAAIABwQCZkYIBQJoWgJfMQQCZEMIBQJoWgJfMgQCY3kIBQJoWgJfMwQCZksIBQJoWgJfNAkAlAoCBQNuaWwJAJUKAwUCZkYFAmN5BQJmSwJjUQEIYWN0aXZhdGUCAmlhAmliAwkBAiE9AgkApQgBCAUCY1EGY2FsbGVyCQClCAEFAmFSCQACAQIGZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFrAAUCaWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFsAAUCaWIFA25pbAIHc3VjY2VzcwJjUQEEc2V0UwICaWMCaE4DCQECIT0CCQClCAEIBQJjUQZjYWxsZXIJAQJhSwIFBHRoaXMJAQJhbgAFAmdvCQDMCAIJAQtTdHJpbmdFbnRyeQIFAmljBQJoTgUDbmlsAmNRAQRzZXRJAgJpYwJoTgMJAQIhPQIJAKUIAQgFAmNRBmNhbGxlcgkBAmFLAgUEdGhpcwkBAmFuAAUCZ28JAMwIAgkBDEludGVnZXJFbnRyeQIFAmljBQJoTgUDbmlsAmNRARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQJhWgACY1EBHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkBAmJQCQCUCgIFA25pbAkBAmJPAQUCYlACY1EBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDAmNpAmNqAmNuBAJpZAkBAmNtAwUCY2kFAmNqBQJjbgkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFAmlkAAAJAMwIAgkApgMBCQCRAwIFAmlkAAEJAMwIAgkApgMBCQCRAwIFAmlkAAIFA25pbAJjUQEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBTgJpZQkAlAoCBQNuaWwJAQFNAgkApwMBBQFOBQJpZQJjUQEUdG9YMThXcmFwcGVyUkVBRE9OTFkCAUoBSwkAlAoCBQNuaWwJAKYDAQkBAUkCBQFKBQFLAmNRAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJSAmJTCQCUCgIFA25pbAkApgMBCQECYlECCQCnAwEFAmJSCQCnAwEFAmJTAmNRASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCZGYCYlgCZEUCZEYCZEcCZEgCaWYCZEkCZEoJAJQKAgUDbmlsCQECZEQNBQJkZgUCYlgFAmRFBQJkRgUCZEcFAmRIBQJpZgUCZEkFAmRKBgcAAAIAAmNRASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCZGYCaWcCZGgCaWYEAmRZCQECZGUEBQJkZgUCaWcFAmRoCQERQGV4dHJOYXRpdmUoMTA2MikBBQJpZgkAlAoCBQNuaWwJAJwKCggFAmRZAl8xCAUCZFkCXzIIBQJkWQJfMwgFAmRZAl80CAUCZFkCXzUIBQJkWQJfNggFAmRZAl83CQCmAwEIBQJkWQJfOAgFAmRZAl85CAUCZFkDXzEwAQJpaAECaWkABAJpagQCZ20JAQJnbAADCQABAgUCZ20CCkJ5dGVWZWN0b3IEAmdxBQJnbQUCZ3EDCQABAgUCZ20CBFVuaXQIBQJpaA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZ20FAmloAwkAAQIFAmdtAgVPcmRlcgQCZmEFAmdtBAJpawkBAmFYAAQCaWwJAQJlWgEFAmZhBAJhRwgFAmlsAl8xBAJhSAgFAmlsAl8yBAJhSQkA9AMDCAUCZmEJYm9keUJ5dGVzCQCRAwIIBQJmYQZwcm9vZnMAAAgFAmZhD3NlbmRlclB1YmxpY0tleQQCYUoJAPQDAwgFAmZhCWJvZHlCeXRlcwkAkQMCCAUCZmEGcHJvb2ZzAAEFAmlrAwMDBQJhRwUCYUkHBQJhSgcGCQECYUYEBQJhRwUCYUgFAmFJBQJhSgMJAAECBQJnbQIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmNEBQJnbQMJAPQDAwgFAmloCWJvZHlCeXRlcwkAkQMCCAUCaWgGcHJvb2ZzAAAFAmlqBgQCaW0JAPYDAQkBBXZhbHVlAQgFAmNEBnNjcmlwdAQCaW4JANsEAQkBBXZhbHVlAQkAnQgCBQJhUgkBAmFEAAQCaW8JAPEHAQUEdGhpcwMJAAACBQJpbgUCaW0JAQIhPQIFAmlvBQJpbQcJAPQDAwgFAmloCWJvZHlCeXRlcwkAkQMCCAUCaWgGcHJvb2ZzAAAFAmlqbhIQfA==", "height": 2442518, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2DfoJE7u5orr2VwMwCgHR2ZHLc4PdCMFVxRTHQuNv5cr Next: 78SJsx9GinbQ4f6HYDRxUotTKAnukUbwzskrFRWM5KCH Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let testing1 = "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
4+let scale8 = 100000000
55
6-let testing2 = "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
6+let scale8BigInt = toBigInt(100000000)
77
8-let testing3 = "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
8+let scale18 = toBigInt(1000000000000000000)
99
10-let testing4 = "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
10+let zeroBigInt = toBigInt(0)
11+
12+let big0 = toBigInt(0)
13+
14+let big1 = toBigInt(1)
15+
16+let big2 = toBigInt(2)
17+
18+let big3 = toBigInt(3)
19+
20+let big4 = toBigInt(4)
21+
22+let slippage4D = toBigInt((scale8 - ((scale8 * 1) / scale8)))
23+
24+let wavesString = "WAVES"
25+
26+let tesstttingg = 1
27+
28+let Amult = "100"
29+
30+let Dconv = "1"
31+
32+let SEP = "__"
33+
34+let EMPTY = ""
35+
36+let PoolActive = 1
37+
38+let PoolPutDis = 2
39+
40+let PoolMatcherDis = 3
41+
42+let PoolShutdown = 4
43+
44+let idxPoolAddress = 1
45+
46+let idxPoolSt = 2
47+
48+let idxLPAsId = 3
49+
50+let idxAmAsId = 4
51+
52+let idxPrAsId = 5
53+
54+let idxAmtAsDcm = 6
55+
56+let idxPriceAsDcm = 7
57+
58+let idxIAmtAsId = 8
59+
60+let idxIPriceAsId = 9
61+
62+let idxFactStakCntr = 1
63+
64+let idxFactoryRestCntr = 6
65+
66+let idxFactSlippCntr = 7
67+
68+let idxFactGwxRewCntr = 10
69+
70+let feeDefault = fraction(10, scale8, 10000)
71+
72+func t1 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
73+
74+
75+func t1BigInt (origVal,origScaleMult) = fraction(origVal, scale18, origScaleMult)
76+
77+
78+func f1 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
79+
80+
81+func fromX18Round (val,resultScaleMult,round) = toInt(fraction(val, toBigInt(resultScaleMult), scale18, round))
82+
83+
84+func t2 (origVal,origScaleMult) = fraction(origVal, scale18, toBigInt(origScaleMult))
85+
86+
87+func f2 (val,resultScaleMult) = fraction(val, toBigInt(resultScaleMult), scale18)
88+
89+
90+func ts (amt,resScale,curScale) = fraction(amt, resScale, curScale)
91+
92+
93+func abs (val) = if ((zeroBigInt > val))
94+ then -(val)
95+ else val
96+
97+
98+func absBigInt (val) = if ((zeroBigInt > val))
99+ then -(val)
100+ else val
101+
102+
103+func fc () = "%s__factoryContract"
104+
105+
106+func mpk () = "%s__managerPublicKey"
107+
108+
109+func pmpk () = "%s__pendingManagerPublicKey"
110+
111+
112+func pl () = "%s%s__price__last"
113+
114+
115+func ph (h,t) = makeString(["%s%s%d%d__price__history", toString(h), toString(t)], SEP)
116+
117+
118+func pau (ua,txId) = ((("%s%s%s__P__" + ua) + "__") + txId)
119+
120+
121+func gau (ua,txId) = ((("%s%s%s__G__" + ua) + "__") + txId)
122+
123+
124+func aa () = "%s__amountAsset"
125+
126+
127+func pa () = "%s__priceAsset"
128+
129+
130+func amp () = "%s__amp"
131+
132+
133+func ada () = "%s__addonAddr"
134+
135+
136+let keyFee = "%s__fee"
137+
138+let fee = valueOrElse(getInteger(this, keyFee), feeDefault)
139+
140+let keyDLp = makeString(["%s", "dLp"], SEP)
141+
142+let keyDLpRefreshedHeight = makeString(["%s", "dLpRefreshedHeight"], SEP)
143+
144+let keyDLpRefreshDelay = makeString(["%s", "refreshDLpDelay"], SEP)
145+
146+let dLpRefreshDelayDefault = 30
147+
148+let dLpRefreshDelay = valueOrElse(getInteger(this, keyDLpRefreshDelay), dLpRefreshDelayDefault)
149+
150+func fcfg () = "%s__factoryConfig"
151+
152+
153+func mtpk () = "%s%s__matcher__publicKey"
154+
155+
156+func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
157+
158+
159+func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
160+
161+
162+func aps () = "%s__shutdown"
163+
164+
165+func keyAllowedLpStableScriptHash () = "%s__allowedLpStableScriptHash"
166+
167+
168+func keyFeeCollectorAddress () = "%s__feeCollectorAddress"
169+
170+
171+func throwOrderError (orderValid,orderValidInfo,senderValid,matcherValid) = throw((((((((("order validation failed: orderValid=" + toString(orderValid)) + " (") + orderValidInfo) + ")") + " senderValid=") + toString(senderValid)) + " matcherValid=") + toString(matcherValid)))
172+
173+
174+func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
175+
176+
177+func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
178+
179+
180+func throwErr (msg) = throw(makeString(["lp_stable.ride:", msg], " "))
181+
182+
183+func fmtErr (msg) = makeString(["lp_stable.ride:", msg], " ")
184+
185+
186+let fca = addressFromStringValue(strf(this, fc()))
187+
188+let inFee = {
189+ let @ = invoke(fca, "getInFeeREADONLY", [toString(this)], nil)
190+ if ($isInstanceOf(@, "Int"))
191+ then @
192+ else throw(($getType(@) + " couldn't be cast to Int"))
193+ }
194+
195+let outFee = {
196+ let @ = invoke(fca, "getOutFeeREADONLY", [toString(this)], nil)
197+ if ($isInstanceOf(@, "Int"))
198+ then @
199+ else throw(($getType(@) + " couldn't be cast to Int"))
200+ }
201+
202+let A = strf(this, amp())
203+
204+func igs () = valueOrElse(getBoolean(fca, aps()), false)
205+
206+
207+func mp () = fromBase58String(strf(fca, mtpk()))
208+
209+
210+let feeCollectorAddress = addressFromStringValue(strf(fca, keyFeeCollectorAddress()))
211+
212+func gpc () = {
213+ let amtAs = strf(this, aa())
214+ let priceAs = strf(this, pa())
215+ let iPriceAs = intf(fca, mba(priceAs))
216+ let iAmtAs = intf(fca, mba(amtAs))
217+ split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
218+ }
219+
220+
221+func parseAssetId (input) = if ((input == wavesString))
222+ then unit
223+ else fromBase58String(input)
224+
225+
226+func assetIdToString (input) = if ((input == unit))
227+ then wavesString
228+ else toBase58String(value(input))
229+
230+
231+func parsePoolConfig (poolConfig) = $Tuple9(addressFromStringValue(poolConfig[idxPoolAddress]), parseIntValue(poolConfig[idxPoolSt]), fromBase58String(poolConfig[idxLPAsId]), parseAssetId(poolConfig[idxAmAsId]), parseAssetId(poolConfig[idxPrAsId]), parseIntValue(poolConfig[idxAmtAsDcm]), parseIntValue(poolConfig[idxPriceAsDcm]), fromBase58String(poolConfig[idxIAmtAsId]), fromBase58String(poolConfig[idxIPriceAsId]))
232+
233+
234+let poolConfigParsed = parsePoolConfig(gpc())
235+
236+let $t079848213 = poolConfigParsed
237+
238+let cfgPoolAddress = $t079848213._1
239+
240+let cfgPoolStatus = $t079848213._2
241+
242+let cfgLpAssetId = $t079848213._3
243+
244+let cfgAmountAssetId = $t079848213._4
245+
246+let cfgPriceAssetId = $t079848213._5
247+
248+let cfgAmountAssetDecimals = $t079848213._6
249+
250+let cfgPriceAssetDecimals = $t079848213._7
251+
252+let cfgInAmountAssedId = $t079848213._8
253+
254+let cfgInPriceAssetId = $t079848213._9
255+
256+func gfc () = split(strf(fca, fcfg()), SEP)
257+
258+
259+let factoryConfig = gfc()
260+
261+let stakingContract = valueOrErrorMessage(addressFromString(factoryConfig[idxFactStakCntr]), "Invalid staking contract address")
262+
263+let slipageContract = valueOrErrorMessage(addressFromString(factoryConfig[idxFactSlippCntr]), "Invalid slipage contract address")
264+
265+let gwxContract = valueOrErrorMessage(addressFromString(factoryConfig[idxFactGwxRewCntr]), "Invalid gwx contract address")
266+
267+let restContract = valueOrErrorMessage(addressFromString(factoryConfig[idxFactoryRestCntr]), "Invalid gwx contract address")
268+
269+func dataPutActionInfo (inAmtAssetAmt,inPriceAssetAmt,outLpAmt,price,slipByUser,slippageReal,txHeight,txTimestamp,slipageAmAmt,slipagePrAmt) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(inAmtAssetAmt), toString(inPriceAssetAmt), toString(outLpAmt), toString(price), toString(slipByUser), toString(slippageReal), toString(txHeight), toString(txTimestamp), toString(slipageAmAmt), toString(slipagePrAmt)], SEP)
270+
271+
272+func dataGetActionInfo (outAmtAssetAmt,outPriceAssetAmt,inLpAmt,price,txHeight,txTimestamp) = makeString(["%d%d%d%d%d%d", toString(outAmtAssetAmt), toString(outPriceAssetAmt), toString(inLpAmt), toString(price), toString(txHeight), toString(txTimestamp)], SEP)
273+
274+
275+func getAccBalance (assetId) = if ((assetId == "WAVES"))
276+ then wavesBalance(this).available
277+ else assetBalance(this, fromBase58String(assetId))
278+
279+
280+func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
281+
282+
283+func cpbir (prAmtX18,amAmtX18,round) = fraction(prAmtX18, scale18, amAmtX18, round)
284+
285+
286+func vad (A1,A2,slippage) = {
287+ let diff = fraction((A1 - A2), scale8BigInt, A2)
288+ let pass = ((slippage - abs(diff)) > zeroBigInt)
289+ if (!(pass))
290+ then throw(("Big slpg: " + toString(diff)))
291+ else $Tuple2(pass, min([A1, A2]))
292+ }
293+
294+
295+func vd (D1,D0,slpg) = {
296+ let diff = fraction(D0, scale8BigInt, D1)
297+ let fail = (slpg > diff)
298+ if (if (fail)
299+ then true
300+ else (D0 > D1))
301+ then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
302+ else fail
303+ }
304+
305+
306+func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
307+ let amtAsAmtX18 = t1(amAmt, amAssetDcm)
308+ let prAsAmtX18 = t1(prAmt, prAssetDcm)
309+ cpbi(prAsAmtX18, amtAsAmtX18)
310+ }
311+
312+
313+func calcPrices (amAmt,prAmt,lpAmt) = {
314+ let amtAsDcm = cfgAmountAssetDecimals
315+ let prAsDcm = cfgPriceAssetDecimals
316+ let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
317+ let amAmtX18 = t1(amAmt, amtAsDcm)
318+ let prAmtX18 = t1(prAmt, prAsDcm)
319+ let lpAmtX18 = t1(lpAmt, scale8)
320+ let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
321+ let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
322+[priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
323+ }
324+
325+
326+func calculatePrices (amAmt,prAmt,lpAmt) = {
327+ let p = calcPrices(amAmt, prAmt, lpAmt)
328+[f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
329+ }
330+
331+
332+func takeFee (amount,fee) = {
333+ let feeAmount = if ((fee == 0))
334+ then 0
335+ else fraction(amount, fee, scale8)
336+ $Tuple2((amount - feeAmount), feeAmount)
337+ }
338+
339+
340+func getD (xp) = {
341+ let xp0 = xp[0]
342+ let xp1 = xp[1]
343+ let s = (xp0 + xp1)
344+ if ((s == big0))
345+ then big0
346+ else {
347+ let a = parseIntValue(A)
348+ let ann = (a * 2)
349+ let p = fraction(xp0, xp1, big1)
350+ let xp0_xp1_n_n = fraction(p, big4, big1)
351+ let ann_s = fraction(toBigInt(ann), s, big1)
352+ let ann_1 = toBigInt((ann - 1))
353+ func calcDNext (d) = {
354+ let dd = fraction(d, d, big1)
355+ let ddd = fraction(dd, d, big1)
356+ let dp = fraction(ddd, big1, xp0_xp1_n_n)
357+ fraction((ann_s + fraction(dp, big2, big1)), d, (fraction(ann_1, d, big1) + fraction(big3, dp, big1)))
358+ }
359+
360+ func calc (acc,i) = if (acc._2)
361+ then acc
362+ else {
363+ let d = acc._1
364+ let dNext = calcDNext(d)
365+ let dDiffRaw = (dNext - value(d))
366+ let dDiff = if ((big0 > dDiffRaw))
367+ then -(dDiffRaw)
368+ else dDiffRaw
369+ if ((big1 >= dDiff))
370+ then $Tuple2(dNext, true)
371+ else $Tuple2(dNext, false)
372+ }
373+
374+ let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
375+ let $t01271012758 = {
376+ let $l = arr
377+ let $s = size($l)
378+ let $acc0 = $Tuple2(s, false)
379+ func $f0_1 ($a,$i) = if (($i >= $s))
380+ then $a
381+ else calc($a, $l[$i])
382+
383+ func $f0_2 ($a,$i) = if (($i >= $s))
384+ then $a
385+ else throw("List size exceeds 15")
386+
387+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
388+ }
389+ let d = $t01271012758._1
390+ let found = $t01271012758._2
391+ if (found)
392+ then d
393+ else throw(("D calculation error, D = " + toString(d)))
394+ }
395+ }
396+
397+
398+func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
399+ let lpId = cfgLpAssetId
400+ let amId = toBase58String(value(cfgAmountAssetId))
401+ let prId = toBase58String(value(cfgPriceAssetId))
402+ let amDcm = cfgAmountAssetDecimals
403+ let prDcm = cfgPriceAssetDecimals
404+ let sts = toString(cfgPoolStatus)
405+ let lpEmiss = valueOrErrorMessage(assetInfo(lpId), "Wrong LP id").quantity
406+ if ((toBase58String(lpId) != pmtAssetId))
407+ then throw("Wrong pmt asset")
408+ else {
409+ let amBalance = getAccBalance(amId)
410+ let amBalanceX18 = t1(amBalance, amDcm)
411+ let prBalance = getAccBalance(prId)
412+ let prBalanceX18 = t1(prBalance, prDcm)
413+ let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
414+ let curPrice = f1(curPriceX18, scale8)
415+ let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
416+ let lpEmissX18 = t1(lpEmiss, scale8)
417+ let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
418+ let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
419+ let outAmAmt = fromX18Round(outAmAmtX18, amDcm, FLOOR)
420+ let outPrAmt = fromX18Round(outPrAmtX18, prDcm, FLOOR)
421+ let state = if ((txId58 == ""))
422+ then nil
423+ else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
424+ then unit
425+ else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
426+ then unit
427+ else fromBase58String(prId)), StringEntry(gau(toString(userAddress), txId58), dataGetActionInfo(outAmAmt, outPrAmt, pmtLpAmt, curPrice, height, lastBlock.timestamp)), IntegerEntry(pl(), curPrice), IntegerEntry(ph(height, lastBlock.timestamp), curPrice)]
428+ $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
429+ }
430+ }
431+
432+
433+func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,validateSlippage,pmtAmt,pmtId) = {
434+ let lpId = cfgLpAssetId
435+ let amIdStr = toBase58String(value(cfgAmountAssetId))
436+ let prIdStr = toBase58String(value(cfgPriceAssetId))
437+ let inAmIdStr = cfgInAmountAssedId
438+ let inPrIdStr = cfgInPriceAssetId
439+ let amtDcm = cfgAmountAssetDecimals
440+ let priceDcm = cfgPriceAssetDecimals
441+ let sts = toString(cfgPoolStatus)
442+ let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
443+ let amBalance = if (isEval)
444+ then getAccBalance(amIdStr)
445+ else if (if (isOneAsset)
446+ then (pmtId == amIdStr)
447+ else false)
448+ then (getAccBalance(amIdStr) - pmtAmt)
449+ else if (isOneAsset)
450+ then getAccBalance(amIdStr)
451+ else (getAccBalance(amIdStr) - inAmAmt)
452+ let prBalance = if (isEval)
453+ then getAccBalance(prIdStr)
454+ else if (if (isOneAsset)
455+ then (pmtId == prIdStr)
456+ else false)
457+ then (getAccBalance(prIdStr) - pmtAmt)
458+ else if (isOneAsset)
459+ then getAccBalance(prIdStr)
460+ else (getAccBalance(prIdStr) - inPrAmt)
461+ let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
462+ let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
463+ let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
464+ let amBalanceX18 = t1(amBalance, amtDcm)
465+ let prBalanceX18 = t1(prBalance, priceDcm)
466+ let D0 = getD([amBalanceX18, prBalanceX18])
467+ let r = if ((lpEm == 0))
468+ then {
469+ let D1 = getD([(amBalanceX18 + inAmAssetAmtX18), (prBalanceX18 + inPrAssetAmtX18)])
470+ let checkD = if ((D1 > D0))
471+ then true
472+ else throw("D1 should be greater than D0")
473+ if ((checkD == checkD))
474+ then {
475+ let curPriceX18 = zeroBigInt
476+ let slippageX18 = zeroBigInt
477+ let lpAmtX18 = D1
478+ $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
479+ }
480+ else throw("Strict value is not equal to itself.")
481+ }
482+ else {
483+ let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
484+ let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
485+ let slippageX18 = t1(slippage, scale8)
486+ if (if (if (validateSlippage)
487+ then (curPriceX18 != zeroBigInt)
488+ else false)
489+ then (slippageRealX18 > slippageX18)
490+ else false)
491+ then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
492+ else {
493+ let lpEmissionX18 = t1(lpEm, scale8)
494+ let prViaAmX18 = fraction(inAmAssetAmtX18, cpbir(prBalanceX18, amBalanceX18, CEILING), scale18, CEILING)
495+ let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, cpbir(prBalanceX18, amBalanceX18, FLOOR), CEILING)
496+ let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
497+ then $Tuple2(amViaPrX18, inPrAssetAmtX18)
498+ else $Tuple2(inAmAssetAmtX18, prViaAmX18)
499+ let expAmtAssetAmtX18 = expectedAmts._1
500+ let expPriceAssetAmtX18 = expectedAmts._2
501+ let D1 = getD([(amBalanceX18 + expAmtAssetAmtX18), (prBalanceX18 + expPriceAssetAmtX18)])
502+ let checkD = if ((D1 > D0))
503+ then true
504+ else throw("D1 should be greater than D0")
505+ if ((checkD == checkD))
506+ then {
507+ let lpAmtX18 = fraction(lpEmissionX18, (D1 - D0), D0)
508+ $Tuple5(fromX18Round(lpAmtX18, scale8, FLOOR), fromX18Round(expAmtAssetAmtX18, amtDcm, CEILING), fromX18Round(expPriceAssetAmtX18, priceDcm, CEILING), curPriceX18, slippageX18)
509+ }
510+ else throw("Strict value is not equal to itself.")
511+ }
512+ }
513+ let calcLpAmt = r._1
514+ let calcAmAssetPmt = r._2
515+ let calcPrAssetPmt = r._3
516+ let curPrice = f1(r._4, scale8)
517+ let slippageCalc = f1(r._5, scale8)
518+ if ((0 >= calcLpAmt))
519+ then throw("LP <= 0")
520+ else {
521+ let emitLpAmt = if (!(emitLp))
522+ then 0
523+ else calcLpAmt
524+ let amDiff = (inAmAmt - calcAmAssetPmt)
525+ let prDiff = (inPrAmt - calcPrAssetPmt)
526+ let $t02059720942 = if (if (isOneAsset)
527+ then (pmtId == amIdStr)
528+ else false)
529+ then $Tuple2(pmtAmt, 0)
530+ else if (if (isOneAsset)
531+ then (pmtId == prIdStr)
532+ else false)
533+ then $Tuple2(0, pmtAmt)
534+ else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
535+ let writeAmAmt = $t02059720942._1
536+ let writePrAmt = $t02059720942._2
537+ let commonState = [IntegerEntry(pl(), curPrice), IntegerEntry(ph(height, lastBlock.timestamp), curPrice), StringEntry(pau(userAddress, txId58), dataPutActionInfo(writeAmAmt, writePrAmt, emitLpAmt, curPrice, slippage, slippageCalc, height, lastBlock.timestamp, amDiff, prDiff))]
538+ $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
539+ }
540+ }
541+
542+
543+func getYD (xp,i,D) = {
544+ let n = big2
545+ let x = xp[if ((i == 0))
546+ then 1
547+ else 0]
548+ let aPrecision = parseBigIntValue(Amult)
549+ let a = (parseBigIntValue(A) * aPrecision)
550+ let s = x
551+ let ann = (a * n)
552+ let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n))
553+ let b = ((s + ((D * aPrecision) / ann)) - D)
554+ func calc (acc,cur) = {
555+ let $t02213722157 = acc
556+ let y = $t02213722157._1
557+ let found = $t02213722157._2
558+ if ((found != unit))
559+ then acc
560+ else {
561+ let yNext = (((y * y) + c) / ((big2 * y) + b))
562+ let yDiff = absBigInt((yNext - value(y)))
563+ if ((big1 >= yDiff))
564+ then $Tuple2(yNext, cur)
565+ else $Tuple2(yNext, unit)
566+ }
567+ }
568+
569+ let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
570+ let $t02246422511 = {
571+ let $l = arr
572+ let $s = size($l)
573+ let $acc0 = $Tuple2(D, unit)
574+ func $f0_1 ($a,$i) = if (($i >= $s))
575+ then $a
576+ else calc($a, $l[$i])
577+
578+ func $f0_2 ($a,$i) = if (($i >= $s))
579+ then $a
580+ else throw("List size exceeds 15")
581+
582+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
583+ }
584+ let y = $t02246422511._1
585+ let found = $t02246422511._2
586+ if ((found != unit))
587+ then y
588+ else throw(("Y calculation error, Y = " + toString(y)))
589+ }
590+
591+
592+func calcDLp (amountBalance,priceBalance,lpEmission) = {
593+ let updatedDLp = fraction(getD([t1BigInt(amountBalance, toBigInt(cfgAmountAssetDecimals)), t1BigInt(priceBalance, toBigInt(cfgPriceAssetDecimals))]), scale18, lpEmission)
594+ if ((lpEmission == big0))
595+ then big0
596+ else updatedDLp
597+ }
598+
599+
600+func calcCurrentDLp (amountAssetDelta,priceAssetDelta,lpAssetEmissionDelta) = {
601+ let amountAssetBalance = (toBigInt(getAccBalance(assetIdToString(cfgAmountAssetId))) - amountAssetDelta)
602+ let priceAssetBalance = (toBigInt(getAccBalance(assetIdToString(cfgPriceAssetId))) - priceAssetDelta)
603+ let lpAssetEmission = (toBigInt(value(assetInfo(cfgLpAssetId)).quantity) - lpAssetEmissionDelta)
604+ let currentDLp = calcDLp(amountAssetBalance, priceAssetBalance, lpAssetEmission)
605+ currentDLp
606+ }
607+
608+
609+func refreshDLpInternal (amountAssetBalanceDelta,priceAssetBalanceDelta,lpAssetEmissionDelta) = {
610+ let amountAssetBalance = (getAccBalance(assetIdToString(cfgAmountAssetId)) + amountAssetBalanceDelta)
611+ let priceAssetBalance = (getAccBalance(assetIdToString(cfgPriceAssetId)) + priceAssetBalanceDelta)
612+ let lpAssetEmission = (value(assetInfo(cfgLpAssetId)).quantity + lpAssetEmissionDelta)
613+ let updatedDLp = calcDLp(toBigInt(amountAssetBalance), toBigInt(priceAssetBalance), toBigInt(lpAssetEmission))
614+ let actions = [IntegerEntry(keyDLpRefreshedHeight, height), StringEntry(keyDLp, toString(updatedDLp))]
615+ $Tuple2(actions, updatedDLp)
616+ }
617+
618+
619+func validateUpdatedDLp (oldDLp,updatedDLp) = if ((updatedDLp >= oldDLp))
620+ then true
621+ else throwErr("updated DLp lower than current DLp")
622+
623+
624+func validateMatcherOrderAllowed (order) = {
625+ let amountAssetBalance = getAccBalance(assetIdToString(cfgAmountAssetId))
626+ let priceAssetBalance = getAccBalance(assetIdToString(cfgPriceAssetId))
627+ let amountAssetAmount = order.amount
628+ let priceAssetAmount = fraction(order.amount, order.price, scale8, FLOOR)
629+ let $t02470924921 = if ((order.orderType == Buy))
630+ then $Tuple2(amountAssetAmount, -(priceAssetAmount))
631+ else $Tuple2(-(amountAssetAmount), priceAssetAmount)
632+ let amountAssetBalanceDelta = $t02470924921._1
633+ let priceAssetBalanceDelta = $t02470924921._2
634+ if (if (if (igs())
635+ then true
636+ else (cfgPoolStatus == PoolMatcherDis))
637+ then true
638+ else (cfgPoolStatus == PoolShutdown))
639+ then throw("Admin blocked")
640+ else if (if ((order.assetPair.amountAsset != cfgAmountAssetId))
641+ then true
642+ else (order.assetPair.priceAsset != cfgPriceAssetId))
643+ then throw("Wr assets")
644+ else {
645+ let dLp = parseBigIntValue(valueOrElse(getString(this, keyDLp), "0"))
646+ let $t02526325363 = refreshDLpInternal(amountAssetBalanceDelta, priceAssetBalanceDelta, 0)
647+ let unusedActions = $t02526325363._1
648+ let dLpNew = $t02526325363._2
649+ let isOrderValid = (dLpNew >= dLp)
650+ let info = makeString(["dLp=", toString(dLp), " dLpNew=", toString(dLpNew), " amountAssetBalance=", toString(amountAssetBalance), " priceAssetBalance=", toString(priceAssetBalance), " amountAssetBalanceDelta=", toString(amountAssetBalanceDelta), " priceAssetBalanceDelta=", toString(priceAssetBalanceDelta), " height=", toString(height)], "")
651+ $Tuple2(isOrderValid, info)
652+ }
653+ }
654+
655+
656+func cg (i) = if ((size(i.payments) != 1))
657+ then throw("1 pmnt exp")
658+ else {
659+ let pmt = value(i.payments[0])
660+ let pmtAssetId = value(pmt.assetId)
661+ let pmtAmt = pmt.amount
662+ let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
663+ let outAmAmt = r._1
664+ let outPrAmt = r._2
665+ let sts = parseIntValue(r._9)
666+ let state = r._10
667+ if (if (igs())
668+ then true
669+ else (sts == PoolShutdown))
670+ then throw(("Admin blocked: " + toString(sts)))
671+ else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
672+ }
673+
674+
675+func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,validateSlippage,pmtAmt,pmtId) = {
676+ let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, (txId == ""), emitLp, isOneAsset, validateSlippage, pmtAmt, pmtId)
677+ let sts = parseIntValue(r._8)
678+ if (if (if (igs())
679+ then true
680+ else (sts == PoolPutDis))
681+ then true
682+ else (sts == PoolShutdown))
683+ then throw(("Blocked:" + toString(sts)))
684+ else r
685+ }
686+
687+
688+func calcPutOneTkn (pmtAmtRaw,pmtAssetId,userAddress,txId,withTakeFee) = {
689+ let amId = toBase58String(value(cfgAmountAssetId))
690+ let prId = toBase58String(value(cfgPriceAssetId))
691+ let lpId = cfgLpAssetId
692+ let amtDcm = cfgAmountAssetDecimals
693+ let priceDcm = cfgPriceAssetDecimals
694+ let lpAssetEmission = toBigInt(valueOrErrorMessage(assetInfo(lpId), "invalid lp asset").quantity)
695+ let chechEmission = if ((lpAssetEmission > big0))
696+ then true
697+ else throw("initial deposit requires all coins")
698+ if ((chechEmission == chechEmission))
699+ then {
700+ let amBalance = getAccBalance(amId)
701+ let prBalance = getAccBalance(prId)
702+ let $t02801928481 = if ((txId == ""))
703+ then $Tuple2(amBalance, prBalance)
704+ else if ((pmtAssetId == amId))
705+ then if ((pmtAmtRaw > amBalance))
706+ then throw("invalid payment amount")
707+ else $Tuple2((amBalance - pmtAmtRaw), prBalance)
708+ else if ((pmtAssetId == prId))
709+ then if ((pmtAmtRaw > prBalance))
710+ then throw("invalid payment amount")
711+ else $Tuple2(amBalance, (prBalance - pmtAmtRaw))
712+ else throw("wrong pmtAssetId")
713+ let amBalanceOld = $t02801928481._1
714+ let prBalanceOld = $t02801928481._2
715+ let $t02848728663 = if ((pmtAssetId == amId))
716+ then $Tuple2(pmtAmtRaw, 0)
717+ else if ((pmtAssetId == prId))
718+ then $Tuple2(0, pmtAmtRaw)
719+ else throw("invalid payment")
720+ let amAmountRaw = $t02848728663._1
721+ let prAmountRaw = $t02848728663._2
722+ let $t02866728921 = if (withTakeFee)
723+ then $Tuple3(takeFee(amAmountRaw, inFee)._1, takeFee(prAmountRaw, inFee)._1, takeFee(pmtAmtRaw, inFee)._2)
724+ else $Tuple3(amAmountRaw, prAmountRaw, 0)
725+ let amAmount = $t02866728921._1
726+ let prAmount = $t02866728921._2
727+ let feeAmount = $t02866728921._3
728+ let amBalanceNew = (amBalanceOld + amAmount)
729+ let prBalanceNew = (prBalanceOld + prAmount)
730+ let D0 = getD([t1(amBalanceOld, cfgAmountAssetDecimals), t1(prBalanceOld, cfgPriceAssetDecimals)])
731+ let D1 = getD([t1(amBalanceNew, cfgAmountAssetDecimals), t1(prBalanceNew, cfgPriceAssetDecimals)])
732+ let checkD = if ((D1 > D0))
733+ then true
734+ else throw()
735+ if ((checkD == checkD))
736+ then {
737+ let lpAmount = fraction(lpAssetEmission, (D1 - D0), D0, FLOOR)
738+ let curPrice = f1(cpbi(t1(prBalanceNew, priceDcm), t1(amBalanceNew, amtDcm)), scale8)
739+ let commonState = [IntegerEntry(pl(), curPrice), IntegerEntry(ph(height, lastBlock.timestamp), curPrice), StringEntry(pau(userAddress, txId), dataPutActionInfo(amAmountRaw, prAmountRaw, toInt(lpAmount), curPrice, 0, 0, height, lastBlock.timestamp, 0, 0))]
740+ let poolProportion = fraction(prBalanceOld, scale8, amBalanceOld)
741+ let amountAssetPart = fraction(pmtAmtRaw, scale8, (poolProportion + scale8))
742+ let priceAssetPart = (pmtAmtRaw - amountAssetPart)
743+ let lpAmtBoth = fraction(lpAssetEmission, toBigInt(priceAssetPart), toBigInt(prBalanceOld))
744+ let bonus = toInt(fraction((lpAmount - lpAmtBoth), scale8BigInt, lpAmtBoth))
745+ $Tuple4(toInt(lpAmount), commonState, feeAmount, bonus)
746+ }
747+ else throw("Strict value is not equal to itself.")
748+ }
749+ else throw("Strict value is not equal to itself.")
750+ }
751+
752+
753+func getOneTknV2Internal (outAssetId,minOutAmount,payments,caller,originCaller,transactionId) = {
754+ let lpId = toBase58String(value(cfgLpAssetId))
755+ let amId = toBase58String(value(cfgAmountAssetId))
756+ let prId = toBase58String(value(cfgPriceAssetId))
757+ let amDecimals = cfgAmountAssetDecimals
758+ let prDecimals = cfgPriceAssetDecimals
759+ let poolStatus = cfgPoolStatus
760+ let userAddress = if ((caller == restContract))
761+ then originCaller
762+ else caller
763+ let pmt = value(payments[0])
764+ let pmtAssetId = value(pmt.assetId)
765+ let pmtAmt = pmt.amount
766+ let currentDLp = calcCurrentDLp(big0, big0, big0)
767+ if ((currentDLp == currentDLp))
768+ then {
769+ let txId58 = toBase58String(transactionId)
770+ if ((lpId != toBase58String(pmtAssetId)))
771+ then throw("Wrong LP")
772+ else {
773+ let amBalance = getAccBalance(amId)
774+ let prBalance = getAccBalance(prId)
775+ let $t03103331144 = {
776+ let @ = invoke(this, "getOneTknV2READONLY", [outAssetId, pmtAmt], nil)
777+ if ($isInstanceOf(@, "(Int, Int)"))
778+ then @
779+ else throw(($getType(@) + " couldn't be cast to (Int, Int)"))
780+ }
781+ if (($t03103331144 == $t03103331144))
782+ then {
783+ let feeAmount = $t03103331144._2
784+ let totalGet = $t03103331144._1
785+ let totalAmount = if (if ((minOutAmount > 0))
786+ then (minOutAmount > totalGet)
787+ else false)
788+ then throwErr(makeString(["amount to receive is less than ", toString(minOutAmount)], ""))
789+ else totalGet
790+ let $t03133431641 = if ((outAssetId == amId))
791+ then $Tuple4(totalAmount, 0, ((amBalance - totalAmount) - feeAmount), prBalance)
792+ else if ((outAssetId == prId))
793+ then $Tuple4(0, totalAmount, amBalance, ((prBalance - totalAmount) - feeAmount))
794+ else throw("invalid out asset id")
795+ let outAm = $t03133431641._1
796+ let outPr = $t03133431641._2
797+ let amBalanceNew = $t03133431641._3
798+ let prBalanceNew = $t03133431641._4
799+ let curPrX18 = cpbi(t1(prBalanceNew, prDecimals), t1(amBalanceNew, amDecimals))
800+ let curPr = f1(curPrX18, scale8)
801+ let outAssetIdOrWaves = if ((outAssetId == "WAVES"))
802+ then unit
803+ else fromBase58String(outAssetId)
804+ let sendFeeToMatcher = if ((feeAmount > 0))
805+ then [ScriptTransfer(feeCollectorAddress, feeAmount, outAssetIdOrWaves)]
806+ else nil
807+ let state = ([ScriptTransfer(userAddress, totalAmount, outAssetIdOrWaves), StringEntry(gau(toString(userAddress), txId58), dataGetActionInfo(outAm, outPr, pmtAmt, curPr, height, lastBlock.timestamp)), IntegerEntry(pl(), curPr), IntegerEntry(ph(height, lastBlock.timestamp), curPr)] ++ sendFeeToMatcher)
808+ if ((state == state))
809+ then {
810+ let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
811+ if ((burn == burn))
812+ then {
813+ let $t03242632776 = {
814+ let feeAmountForCalc = if ((this == feeCollectorAddress))
815+ then 0
816+ else feeAmount
817+ let outInAmountAsset = if ((parseAssetId(outAssetId) == cfgAmountAssetId))
818+ then true
819+ else false
820+ if (outInAmountAsset)
821+ then $Tuple2(-((totalGet + feeAmountForCalc)), 0)
822+ else $Tuple2(0, -((totalGet + feeAmountForCalc)))
823+ }
824+ let amountAssetBalanceDelta = $t03242632776._1
825+ let priceAssetBalanceDelta = $t03242632776._2
826+ let $t03277932887 = refreshDLpInternal(amountAssetBalanceDelta, priceAssetBalanceDelta, 0)
827+ let refreshDLpActions = $t03277932887._1
828+ let updatedDLp = $t03277932887._2
829+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
830+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
831+ then $Tuple2((state ++ refreshDLpActions), totalAmount)
832+ else throw("Strict value is not equal to itself.")
833+ }
834+ else throw("Strict value is not equal to itself.")
835+ }
836+ else throw("Strict value is not equal to itself.")
837+ }
838+ else throw("Strict value is not equal to itself.")
839+ }
840+ }
841+ else throw("Strict value is not equal to itself.")
842+ }
843+
844+
845+func m () = match getString(mpk()) {
846+ case s: String =>
847+ fromBase58String(s)
848+ case _: Unit =>
849+ unit
850+ case _ =>
851+ throw("Match error")
852+}
853+
854+
855+func pm () = match getString(pmpk()) {
856+ case s: String =>
857+ fromBase58String(s)
858+ case _: Unit =>
859+ unit
860+ case _ =>
861+ throw("Match error")
862+}
863+
864+
865+let pd = throw("Permission denied")
866+
867+func isManager (i) = match m() {
868+ case pk: ByteVector =>
869+ (i.callerPublicKey == pk)
870+ case _: Unit =>
871+ (i.caller == this)
872+ case _ =>
873+ throw("Match error")
874+}
875+
876+
877+func mm (i) = match m() {
878+ case pk: ByteVector =>
879+ if ((i.callerPublicKey == pk))
880+ then true
881+ else pd
882+ case _: Unit =>
883+ if ((i.caller == this))
884+ then true
885+ else pd
886+ case _ =>
887+ throw("Match error")
888+}
889+
890+
891+func getY (isReverse,D,poolAmountInBalance) = {
892+ let poolConfig = gpc()
893+ let amId = poolConfig[idxAmAsId]
894+ let prId = poolConfig[idxPrAsId]
895+ let n = big2
896+ let aPrecision = parseBigIntValue(Amult)
897+ let a = (parseBigIntValue(A) * aPrecision)
898+ let xp = if ((isReverse == false))
899+ then [(toBigInt(getAccBalance(amId)) + poolAmountInBalance), toBigInt(getAccBalance(prId))]
900+ else [(toBigInt(getAccBalance(prId)) + poolAmountInBalance), toBigInt(getAccBalance(amId))]
901+ let x = xp[0]
902+ let s = x
903+ let ann = (a * n)
904+ let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n))
905+ let b = ((s + ((D * aPrecision) / ann)) - D)
906+ func calc (acc,cur) = {
907+ let $t03433434354 = acc
908+ let y = $t03433434354._1
909+ let found = $t03433434354._2
910+ if ((found != unit))
911+ then acc
912+ else {
913+ let yNext = (((y * y) + c) / ((big2 * y) + b))
914+ let yDiff = absBigInt((yNext - value(y)))
915+ if ((big1 >= yDiff))
916+ then $Tuple2(yNext, cur)
917+ else $Tuple2(yNext, unit)
918+ }
919+ }
920+
921+ let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
922+ let $t03468534732 = {
923+ let $l = arr
924+ let $s = size($l)
925+ let $acc0 = $Tuple2(D, unit)
926+ func $f0_1 ($a,$i) = if (($i >= $s))
927+ then $a
928+ else calc($a, $l[$i])
929+
930+ func $f0_2 ($a,$i) = if (($i >= $s))
931+ then $a
932+ else throw("List size exceeds 15")
933+
934+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
935+ }
936+ let y = $t03468534732._1
937+ let found = $t03468534732._2
938+ if ((found != unit))
939+ then y
940+ else throw(("Y calculation error, Y = " + toString(y)))
941+ }
942+
943+
944+@Callable(i)
945+func calculateAmountOutForSwapREADONLY (cleanAmountIn,isReverse) = {
946+ let $t03495335377 = if ((isReverse == false))
947+ then {
948+ let assetOut = strf(this, pa())
949+ let poolAmountInBalance = (toBigInt(getAccBalance(strf(this, aa()))) + toBigInt(cleanAmountIn))
950+ $Tuple2(assetOut, poolAmountInBalance)
951+ }
952+ else {
953+ let assetOut = strf(this, aa())
954+ let poolAmountInBalance = (toBigInt(getAccBalance(strf(this, pa()))) + toBigInt(cleanAmountIn))
955+ $Tuple2(assetOut, poolAmountInBalance)
956+ }
957+ let assetOut = $t03495335377._1
958+ let poolAmountInBalance = $t03495335377._2
959+ let poolConfig = gpc()
960+ let amId = poolConfig[idxAmAsId]
961+ let prId = poolConfig[idxPrAsId]
962+ let xp = [toBigInt(getAccBalance(amId)), toBigInt(getAccBalance(prId))]
963+ let D = getD(xp)
964+ let y = getY(isReverse, D, toBigInt(cleanAmountIn))
965+ let dy = ((toBigInt(getAccBalance(assetOut)) - y) - toBigInt(1))
966+ let totalGetRaw = max([0, toInt(dy)])
967+ let newXp = if ((isReverse == false))
968+ then [(toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn)), (toBigInt(getAccBalance(prId)) - dy)]
969+ else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))]
970+ let newD = getD(newXp)
971+ let checkD = if ((newD >= D))
972+ then true
973+ else throw(makeString(["new D is fewer error", toString(D), toString(newD)], "__"))
974+ if ((checkD == checkD))
975+ then $Tuple2(nil, totalGetRaw)
976+ else throw("Strict value is not equal to itself.")
977+ }
978+
979+
980+
981+@Callable(i)
982+func calculateAmountOutForSwapAndSendTokens (cleanAmountIn,isReverse,amountOutMin,addressTo) = {
983+ let swapContact = {
984+ let @ = invoke(fca, "getSwapContractREADONLY", nil, nil)
985+ if ($isInstanceOf(@, "String"))
986+ then @
987+ else throw(($getType(@) + " couldn't be cast to String"))
988+ }
989+ let checks = [if ((value(i.payments[0]).amount >= cleanAmountIn))
990+ then true
991+ else throwErr("Wrong amount"), if ((i.caller == addressFromStringValue(swapContact)))
992+ then true
993+ else throwErr("Permission denied")]
994+ if ((checks == checks))
995+ then {
996+ let pmt = value(i.payments[0])
997+ let assetIn = if ((pmt.assetId == unit))
998+ then toBase58String(toBytes("WAVES"))
999+ else toBase58String(value(pmt.assetId))
1000+ let $t03681537209 = if ((isReverse == false))
1001+ then {
1002+ let assetOut = strf(this, pa())
1003+ let poolAmountInBalance = (getAccBalance(assetIn) - value(i.payments[0]).amount)
1004+ $Tuple2(assetOut, poolAmountInBalance)
1005+ }
1006+ else {
1007+ let assetOut = strf(this, aa())
1008+ let poolAmountInBalance = (getAccBalance(assetIn) - value(i.payments[0]).amount)
1009+ $Tuple2(assetOut, poolAmountInBalance)
1010+ }
1011+ let assetOut = $t03681537209._1
1012+ let poolAmountInBalance = $t03681537209._2
1013+ let poolConfig = gpc()
1014+ let amId = poolConfig[idxAmAsId]
1015+ let prId = poolConfig[idxPrAsId]
1016+ let xp = if ((isReverse == false))
1017+ then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
1018+ else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
1019+ let D = getD(xp)
1020+ let y = getY(isReverse, D, toBigInt(0))
1021+ let dy = ((toBigInt(getAccBalance(assetOut)) - y) - toBigInt(1))
1022+ let totalGetRaw = max([0, toInt(dy)])
1023+ let checkMin = if ((totalGetRaw >= amountOutMin))
1024+ then true
1025+ else throw("Exchange result is fewer coins than expected")
1026+ if ((checkMin == checkMin))
1027+ then {
1028+ let newXp = if ((isReverse == false))
1029+ then [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - dy)]
1030+ else [(toBigInt(getAccBalance(amId)) - dy), toBigInt(getAccBalance(prId))]
1031+ let newD = getD(newXp)
1032+ let checkD = if ((newD >= D))
1033+ then true
1034+ else throw("new D is fewer error")
1035+ if ((checkD == checkD))
1036+ then $Tuple2([ScriptTransfer(addressFromStringValue(addressTo), totalGetRaw, parseAssetId(assetOut))], totalGetRaw)
1037+ else throw("Strict value is not equal to itself.")
1038+ }
1039+ else throw("Strict value is not equal to itself.")
1040+ }
1041+ else throw("Strict value is not equal to itself.")
1042+ }
1043+
1044+
1045+
1046+@Callable(i)
1047+func constructor (fc) = {
1048+ let c = mm(i)
1049+ if ((c == c))
1050+ then [StringEntry(fc(), fc)]
1051+ else throw("Strict value is not equal to itself.")
1052+ }
1053+
1054+
1055+
1056+@Callable(i)
1057+func setManager (pendingManagerPublicKey) = {
1058+ let c = mm(i)
1059+ if ((c == c))
1060+ then {
1061+ let cm = fromBase58String(pendingManagerPublicKey)
1062+ if ((cm == cm))
1063+ then [StringEntry(pmpk(), pendingManagerPublicKey)]
1064+ else throw("Strict value is not equal to itself.")
1065+ }
1066+ else throw("Strict value is not equal to itself.")
1067+ }
1068+
1069+
1070+
1071+@Callable(i)
1072+func confirmManager () = {
1073+ let p = pm()
1074+ let hpm = if (isDefined(p))
1075+ then true
1076+ else throw("No pending manager")
1077+ if ((hpm == hpm))
1078+ then {
1079+ let cpm = if ((i.callerPublicKey == value(p)))
1080+ then true
1081+ else throw("You are not pending manager")
1082+ if ((cpm == cpm))
1083+ then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
1084+ else throw("Strict value is not equal to itself.")
1085+ }
1086+ else throw("Strict value is not equal to itself.")
1087+ }
1088+
1089+
1090+
1091+@Callable(i)
1092+func put (slip,autoStake) = {
1093+ let factCfg = gfc()
1094+ let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
1095+ let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
1096+ if ((0 > slip))
1097+ then throw("Wrong slippage")
1098+ else if ((size(i.payments) != 2))
1099+ then throw("2 pmnts expd")
1100+ else {
1101+ let amAssetPmt = toBigInt(value(i.payments[0]).amount)
1102+ let prAssetPmt = toBigInt(value(i.payments[1]).amount)
1103+ let amountAssetBalance = (toBigInt(getAccBalance(assetIdToString(cfgAmountAssetId))) - amAssetPmt)
1104+ if ((amountAssetBalance == amountAssetBalance))
1105+ then {
1106+ let priceAssetBalance = (toBigInt(getAccBalance(assetIdToString(cfgPriceAssetId))) - prAssetPmt)
1107+ if ((priceAssetBalance == priceAssetBalance))
1108+ then {
1109+ let lpAssetEmission = toBigInt(value(assetInfo(cfgLpAssetId)).quantity)
1110+ if ((lpAssetEmission == lpAssetEmission))
1111+ then {
1112+ let currentDLp = calcCurrentDLp(amAssetPmt, prAssetPmt, toBigInt(0))
1113+ if ((currentDLp == currentDLp))
1114+ then {
1115+ let e = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(value(i.payments[0]).assetId, value(i.payments[0]).amount), i.payments[1], slip, true, false, true, 0, "")
1116+ let emitLpAmt = e._2
1117+ let lpAssetId = e._7
1118+ let state = e._9
1119+ let amDiff = e._10
1120+ let prDiff = e._11
1121+ let amId = e._12
1122+ let prId = e._13
1123+ let r = invoke(fca, "emit", [emitLpAmt], nil)
1124+ if ((r == r))
1125+ then {
1126+ let el = match r {
1127+ case legacy: Address =>
1128+ invoke(legacy, "emit", [emitLpAmt], nil)
1129+ case _ =>
1130+ unit
1131+ }
1132+ if ((el == el))
1133+ then {
1134+ let sa = if ((amDiff > 0))
1135+ then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
1136+ else nil
1137+ if ((sa == sa))
1138+ then {
1139+ let sp = if ((prDiff > 0))
1140+ then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
1141+ else nil
1142+ if ((sp == sp))
1143+ then {
1144+ let lpTrnsfr = if (autoStake)
1145+ then {
1146+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
1147+ if ((ss == ss))
1148+ then nil
1149+ else throw("Strict value is not equal to itself.")
1150+ }
1151+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
1152+ let $t04206642208 = refreshDLpInternal(0, 0, 0)
1153+ let refreshDLpActions = $t04206642208._1
1154+ let updatedDLp = $t04206642208._2
1155+ let check = if ((updatedDLp >= currentDLp))
1156+ then true
1157+ else throwErr(makeString(["updated DLp lower than current DLp", toString(amountAssetBalance), toString(priceAssetBalance), toString(lpAssetEmission), toString(currentDLp), toString(updatedDLp), toString(amDiff), toString(prDiff)], " "))
1158+ if ((check == check))
1159+ then {
1160+ let lpAssetEmissionAfter = value(assetInfo(cfgLpAssetId)).quantity
1161+ if ((lpAssetEmissionAfter == lpAssetEmissionAfter))
1162+ then ((state ++ lpTrnsfr) ++ refreshDLpActions)
1163+ else throw("Strict value is not equal to itself.")
1164+ }
1165+ else throw("Strict value is not equal to itself.")
1166+ }
1167+ else throw("Strict value is not equal to itself.")
1168+ }
1169+ else throw("Strict value is not equal to itself.")
1170+ }
1171+ else throw("Strict value is not equal to itself.")
1172+ }
1173+ else throw("Strict value is not equal to itself.")
1174+ }
1175+ else throw("Strict value is not equal to itself.")
1176+ }
1177+ else throw("Strict value is not equal to itself.")
1178+ }
1179+ else throw("Strict value is not equal to itself.")
1180+ }
1181+ else throw("Strict value is not equal to itself.")
1182+ }
1183+ }
1184+
1185+
1186+
1187+@Callable(i)
1188+func putOneTknV2 (minOutAmount,autoStake) = {
1189+ let isPoolOneTokenOperationsDisabled = {
1190+ let @ = invoke(fca, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1191+ if ($isInstanceOf(@, "Boolean"))
1192+ then @
1193+ else throw(($getType(@) + " couldn't be cast to Boolean"))
1194+ }
1195+ let isPutDisabled = if (if (if (igs())
1196+ then true
1197+ else (cfgPoolStatus == PoolPutDis))
1198+ then true
1199+ else (cfgPoolStatus == PoolShutdown))
1200+ then true
1201+ else isPoolOneTokenOperationsDisabled
1202+ let checks = [if (if (!(isPutDisabled))
1203+ then true
1204+ else isManager(i))
1205+ then true
1206+ else throwErr("put operation is blocked by admin"), if ((size(i.payments) == 1))
1207+ then true
1208+ else throwErr("exactly 1 payment are expected")]
1209+ if ((checks == checks))
1210+ then {
1211+ let amId = toBase58String(value(cfgAmountAssetId))
1212+ let prId = toBase58String(value(cfgPriceAssetId))
1213+ let lpId = cfgLpAssetId
1214+ let amDecimals = cfgAmountAssetDecimals
1215+ let prDecimals = cfgPriceAssetDecimals
1216+ let userAddress = if ((i.caller == this))
1217+ then i.originCaller
1218+ else i.caller
1219+ let pmt = value(i.payments[0])
1220+ let pmtAssetId = toBase58String(value(pmt.assetId))
1221+ let pmtAmt = pmt.amount
1222+ let currentDLp = if ((pmt.assetId == cfgAmountAssetId))
1223+ then calcCurrentDLp(toBigInt(pmtAmt), toBigInt(0), toBigInt(0))
1224+ else calcCurrentDLp(toBigInt(0), toBigInt(pmtAmt), toBigInt(0))
1225+ if ((currentDLp == currentDLp))
1226+ then {
1227+ let $t04384944007 = calcPutOneTkn(pmtAmt, pmtAssetId, toString(userAddress), toBase58String(i.transactionId), true)
1228+ if (($t04384944007 == $t04384944007))
1229+ then {
1230+ let feeAmount = $t04384944007._3
1231+ let state = $t04384944007._2
1232+ let estimLP = $t04384944007._1
1233+ let emitLpAmt = if (if ((minOutAmount > 0))
1234+ then (minOutAmount > estimLP)
1235+ else false)
1236+ then throwErr(makeString(["amount to receive is less than ", toString(minOutAmount)], ""))
1237+ else estimLP
1238+ let e = invoke(fca, "emit", [emitLpAmt], nil)
1239+ if ((e == e))
1240+ then {
1241+ let el = match e {
1242+ case legacy: Address =>
1243+ invoke(legacy, "emit", [emitLpAmt], nil)
1244+ case _ =>
1245+ unit
1246+ }
1247+ if ((el == el))
1248+ then {
1249+ let lpTrnsfr = if (autoStake)
1250+ then {
1251+ let ss = invoke(stakingContract, "stake", nil, [AttachedPayment(lpId, emitLpAmt)])
1252+ if ((ss == ss))
1253+ then nil
1254+ else throw("Strict value is not equal to itself.")
1255+ }
1256+ else [ScriptTransfer(i.caller, emitLpAmt, lpId)]
1257+ let sendFeeToMatcher = if ((feeAmount > 0))
1258+ then [ScriptTransfer(feeCollectorAddress, feeAmount, fromBase58String(pmtAssetId))]
1259+ else nil
1260+ let $t04482245171 = if ((this == feeCollectorAddress))
1261+ then $Tuple2(0, 0)
1262+ else {
1263+ let paymentInAmountAsset = if ((pmt.assetId == cfgAmountAssetId))
1264+ then true
1265+ else false
1266+ if (paymentInAmountAsset)
1267+ then $Tuple2(-(feeAmount), 0)
1268+ else $Tuple2(0, -(feeAmount))
1269+ }
1270+ let amountAssetBalanceDelta = $t04482245171._1
1271+ let priceAssetBalanceDelta = $t04482245171._2
1272+ let $t04517445282 = refreshDLpInternal(amountAssetBalanceDelta, priceAssetBalanceDelta, 0)
1273+ let refreshDLpActions = $t04517445282._1
1274+ let updatedDLp = $t04517445282._2
1275+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1276+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1277+ then $Tuple2((((state ++ lpTrnsfr) ++ sendFeeToMatcher) ++ refreshDLpActions), emitLpAmt)
1278+ else throw("Strict value is not equal to itself.")
1279+ }
1280+ else throw("Strict value is not equal to itself.")
1281+ }
1282+ else throw("Strict value is not equal to itself.")
1283+ }
1284+ else throw("Strict value is not equal to itself.")
1285+ }
1286+ else throw("Strict value is not equal to itself.")
1287+ }
1288+ else throw("Strict value is not equal to itself.")
1289+ }
1290+
1291+
1292+
1293+@Callable(i)
1294+func putForFree (maxSlpg) = if ((0 > maxSlpg))
1295+ then throw("Wrong slpg")
1296+ else if ((size(i.payments) != 2))
1297+ then throw("2 pmnts expd")
1298+ else {
1299+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(value(i.payments[0]).assetId, value(i.payments[0]).amount), i.payments[1], maxSlpg, false, false, true, 0, "")
1300+ let state = estPut._9
1301+ let amAssetPmt = toBigInt(value(i.payments[0]).amount)
1302+ let prAssetPmt = toBigInt(value(i.payments[1]).amount)
1303+ let currentDLp = calcCurrentDLp(amAssetPmt, prAssetPmt, toBigInt(0))
1304+ if ((currentDLp == currentDLp))
1305+ then {
1306+ let $t04631246377 = refreshDLpInternal(0, 0, 0)
1307+ let refreshDLpActions = $t04631246377._1
1308+ let updatedDLp = $t04631246377._2
1309+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1310+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1311+ then (state ++ refreshDLpActions)
1312+ else throw("Strict value is not equal to itself.")
1313+ }
1314+ else throw("Strict value is not equal to itself.")
1315+ }
1316+
1317+
1318+
1319+@Callable(i)
1320+func get () = {
1321+ let currentDLp = calcCurrentDLp(toBigInt(0), toBigInt(0), toBigInt(0))
1322+ if ((currentDLp == currentDLp))
1323+ then {
1324+ let r = cg(i)
1325+ let outAmtAmt = r._1
1326+ let outPrAmt = r._2
1327+ let pmtAmt = r._3
1328+ let pmtAssetId = r._4
1329+ let state = r._5
1330+ let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
1331+ if ((b == b))
1332+ then {
1333+ let $t04755047632 = refreshDLpInternal(-(outAmtAmt), -(outPrAmt), 0)
1334+ let refreshDLpActions = $t04755047632._1
1335+ let updatedDLp = $t04755047632._2
1336+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1337+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1338+ then (state ++ refreshDLpActions)
1339+ else throw("Strict value is not equal to itself.")
1340+ }
1341+ else throw("Strict value is not equal to itself.")
1342+ }
1343+ else throw("Strict value is not equal to itself.")
1344+ }
1345+
1346+
1347+
1348+@Callable(i)
1349+func getOneTknV2 (outAssetId,minOutAmount) = {
1350+ let isPoolOneTokenOperationsDisabled = {
1351+ let @ = invoke(fca, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1352+ if ($isInstanceOf(@, "Boolean"))
1353+ then @
1354+ else throw(($getType(@) + " couldn't be cast to Boolean"))
1355+ }
1356+ let isGetDisabled = if (if (igs())
1357+ then true
1358+ else (cfgPoolStatus == PoolShutdown))
1359+ then true
1360+ else isPoolOneTokenOperationsDisabled
1361+ let checks = [if (if (!(isGetDisabled))
1362+ then true
1363+ else isManager(i))
1364+ then true
1365+ else throwErr("get operation is blocked by admin"), if ((size(i.payments) == 1))
1366+ then true
1367+ else throwErr("exactly 1 payment are expected")]
1368+ if ((checks == checks))
1369+ then {
1370+ let $t04825048405 = getOneTknV2Internal(outAssetId, minOutAmount, i.payments, i.caller, i.originCaller, i.transactionId)
1371+ let state = $t04825048405._1
1372+ let totalAmount = $t04825048405._2
1373+ $Tuple2(state, totalAmount)
1374+ }
1375+ else throw("Strict value is not equal to itself.")
1376+ }
1377+
1378+
1379+
1380+@Callable(i)
1381+func refreshDLp () = {
1382+ let lastRefreshedBlockHeight = valueOrElse(getInteger(keyDLpRefreshedHeight), 0)
1383+ let checkLastRefreshedBlockHeight = if (((height - lastRefreshedBlockHeight) >= dLpRefreshDelay))
1384+ then unit
1385+ else throwErr(makeString([toString(dLpRefreshDelay), " blocks have not passed since the previous call"], ""))
1386+ if ((checkLastRefreshedBlockHeight == checkLastRefreshedBlockHeight))
1387+ then {
1388+ let dLp = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, keyDLp), "0")), fmtErr("invalid dLp"))
1389+ let $t04892948993 = refreshDLpInternal(0, 0, 0)
1390+ let dLpUpdateActions = $t04892948993._1
1391+ let updatedDLp = $t04892948993._2
1392+ let actions = if ((dLp != updatedDLp))
1393+ then dLpUpdateActions
1394+ else throwErr("nothing to refresh")
1395+ $Tuple2(actions, toString(updatedDLp))
1396+ }
1397+ else throw("Strict value is not equal to itself.")
1398+ }
1399+
1400+
1401+
1402+@Callable(i)
1403+func getOneTknV2READONLY (outAssetId,lpAssetAmount) = {
1404+ let amId = toBase58String(value(cfgAmountAssetId))
1405+ let prId = toBase58String(value(cfgPriceAssetId))
1406+ let lpId = toBase58String(value(cfgLpAssetId))
1407+ let xp = [toBigInt(getAccBalance(amId)), toBigInt(getAccBalance(prId))]
1408+ let lpEmission = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "invalid lp asset").quantity)
1409+ let D0 = getD(xp)
1410+ let D1 = (D0 - fraction(toBigInt(lpAssetAmount), D0, lpEmission))
1411+ let index = if ((outAssetId == amId))
1412+ then 0
1413+ else if ((outAssetId == prId))
1414+ then 1
1415+ else throw("invalid out asset id")
1416+ let newY = getYD(xp, index, D1)
1417+ let dy = (xp[index] - newY)
1418+ let totalGetRaw = max([0, toInt((dy - big1))])
1419+ let $t05000350058 = takeFee(totalGetRaw, outFee)
1420+ let totalGet = $t05000350058._1
1421+ let feeAmount = $t05000350058._2
1422+ $Tuple2(nil, $Tuple2(totalGet, feeAmount))
1423+ }
1424+
1425+
1426+
1427+@Callable(i)
1428+func getOneTknV2WithBonusREADONLY (outAssetId,lpAssetAmount) = {
1429+ let amId = toBase58String(value(cfgAmountAssetId))
1430+ let prId = toBase58String(value(cfgPriceAssetId))
1431+ let lpId = toBase58String(value(cfgLpAssetId))
1432+ let amBalance = getAccBalance(amId)
1433+ let prBalance = getAccBalance(prId)
1434+ let $t05043350548 = {
1435+ let @ = invoke(this, "getOneTknV2READONLY", [outAssetId, lpAssetAmount], nil)
1436+ if ($isInstanceOf(@, "(Int, Int)"))
1437+ then @
1438+ else throw(($getType(@) + " couldn't be cast to (Int, Int)"))
1439+ }
1440+ let totalGet = $t05043350548._1
1441+ let feeAmount = $t05043350548._2
1442+ let r = ego("", lpId, lpAssetAmount, this)
1443+ let outAmAmt = r._1
1444+ let outPrAmt = r._2
1445+ let sumOfGetAssets = (outAmAmt + outPrAmt)
1446+ let bonus = if ((sumOfGetAssets == 0))
1447+ then if ((totalGet == 0))
1448+ then 0
1449+ else throw("bonus calculation error")
1450+ else fraction((totalGet - sumOfGetAssets), scale8, sumOfGetAssets)
1451+ $Tuple2(nil, $Tuple3(totalGet, feeAmount, bonus))
1452+ }
1453+
1454+
1455+
1456+@Callable(i)
1457+func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
1458+ let r = cg(i)
1459+ let outAmAmt = r._1
1460+ let outPrAmt = r._2
1461+ let pmtAmt = r._3
1462+ let pmtAssetId = r._4
1463+ let state = r._5
1464+ if ((noLessThenAmtAsset > outAmAmt))
1465+ then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
1466+ else if ((noLessThenPriceAsset > outPrAmt))
1467+ then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
1468+ else {
1469+ let currentDLp = calcCurrentDLp(toBigInt(0), toBigInt(0), toBigInt(0))
1470+ if ((currentDLp == currentDLp))
1471+ then {
1472+ let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
1473+ if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
1474+ then {
1475+ let $t05171451795 = refreshDLpInternal(-(outAmAmt), -(outPrAmt), 0)
1476+ let refreshDLpActions = $t05171451795._1
1477+ let updatedDLp = $t05171451795._2
1478+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1479+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1480+ then (state ++ refreshDLpActions)
1481+ else throw("Strict value is not equal to itself.")
1482+ }
1483+ else throw("Strict value is not equal to itself.")
1484+ }
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ }
1488+
1489+
1490+
1491+@Callable(i)
1492+func unstakeAndGet (amount) = {
1493+ let checkPayments = if ((size(i.payments) != 0))
1494+ then throw("No pmnts expd")
1495+ else true
1496+ if ((checkPayments == checkPayments))
1497+ then {
1498+ let factoryCfg = gfc()
1499+ let lpAssetId = cfgLpAssetId
1500+ let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
1501+ let currentDLp = calcCurrentDLp(toBigInt(0), toBigInt(0), toBigInt(0))
1502+ if ((currentDLp == currentDLp))
1503+ then {
1504+ let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
1505+ if ((unstakeInv == unstakeInv))
1506+ then {
1507+ let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
1508+ let outAmAmt = r._1
1509+ let outPrAmt = r._2
1510+ let sts = parseIntValue(r._9)
1511+ let state = r._10
1512+ let v = if (if (igs())
1513+ then true
1514+ else (sts == PoolShutdown))
1515+ then throw(("Blocked: " + toString(sts)))
1516+ else true
1517+ if ((v == v))
1518+ then {
1519+ let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
1520+ if ((burnA == burnA))
1521+ then {
1522+ let $t05282252903 = refreshDLpInternal(-(outAmAmt), -(outPrAmt), 0)
1523+ let refreshDLpActions = $t05282252903._1
1524+ let updatedDLp = $t05282252903._2
1525+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1526+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1527+ then (state ++ refreshDLpActions)
1528+ else throw("Strict value is not equal to itself.")
1529+ }
1530+ else throw("Strict value is not equal to itself.")
1531+ }
1532+ else throw("Strict value is not equal to itself.")
1533+ }
1534+ else throw("Strict value is not equal to itself.")
1535+ }
1536+ else throw("Strict value is not equal to itself.")
1537+ }
1538+ else throw("Strict value is not equal to itself.")
1539+ }
1540+
1541+
1542+
1543+@Callable(i)
1544+func unstakeAndGetNoLess (unstakeAmount,noLessThenAmountAsset,noLessThenPriceAsset) = {
1545+ let isGetDisabled = if (igs())
1546+ then true
1547+ else (cfgPoolStatus == PoolShutdown)
1548+ let checks = [if (!(isGetDisabled))
1549+ then true
1550+ else throw("get operation is blocked by admin"), if ((size(i.payments) == 0))
1551+ then true
1552+ else throw("no payments are expected")]
1553+ if ((checks == checks))
1554+ then {
1555+ let currentDLp = calcCurrentDLp(toBigInt(0), toBigInt(0), toBigInt(0))
1556+ if ((currentDLp == currentDLp))
1557+ then {
1558+ let unstakeInv = invoke(stakingContract, "unstake", [toBase58String(cfgLpAssetId), unstakeAmount], nil)
1559+ if ((unstakeInv == unstakeInv))
1560+ then {
1561+ let res = ego(toBase58String(i.transactionId), toBase58String(cfgLpAssetId), unstakeAmount, i.caller)
1562+ let outAmAmt = res._1
1563+ let outPrAmt = res._2
1564+ let state = res._10
1565+ let checkAmounts = [if ((outAmAmt >= noLessThenAmountAsset))
1566+ then true
1567+ else throw(makeString(["amount asset amount to receive is less than ", toString(noLessThenAmountAsset)], "")), if ((outPrAmt >= noLessThenPriceAsset))
1568+ then true
1569+ else throw(makeString(["price asset amount to receive is less than ", toString(noLessThenPriceAsset)], ""))]
1570+ if ((checkAmounts == checkAmounts))
1571+ then {
1572+ let burnLPAssetOnFactory = invoke(fca, "burn", [unstakeAmount], [AttachedPayment(cfgLpAssetId, unstakeAmount)])
1573+ if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
1574+ then {
1575+ let $t05415454235 = refreshDLpInternal(-(outAmAmt), -(outPrAmt), 0)
1576+ let refreshDLpActions = $t05415454235._1
1577+ let updatedDLp = $t05415454235._2
1578+ let isUpdatedDLpValid = validateUpdatedDLp(currentDLp, updatedDLp)
1579+ if ((isUpdatedDLpValid == isUpdatedDLpValid))
1580+ then (state ++ refreshDLpActions)
1581+ else throw("Strict value is not equal to itself.")
1582+ }
1583+ else throw("Strict value is not equal to itself.")
1584+ }
1585+ else throw("Strict value is not equal to itself.")
1586+ }
1587+ else throw("Strict value is not equal to itself.")
1588+ }
1589+ else throw("Strict value is not equal to itself.")
1590+ }
1591+ else throw("Strict value is not equal to itself.")
1592+ }
1593+
1594+
1595+
1596+@Callable(i)
1597+func unstakeAndGetOneTknV2 (unstakeAmount,outAssetId,minOutAmount) = {
1598+ let isPoolOneTokenOperationsDisabled = {
1599+ let @ = invoke(fca, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1600+ if ($isInstanceOf(@, "Boolean"))
1601+ then @
1602+ else throw(($getType(@) + " couldn't be cast to Boolean"))
1603+ }
1604+ let isGetDisabled = if (if (igs())
1605+ then true
1606+ else (cfgPoolStatus == PoolShutdown))
1607+ then true
1608+ else isPoolOneTokenOperationsDisabled
1609+ let checks = [if (if (!(isGetDisabled))
1610+ then true
1611+ else isManager(i))
1612+ then true
1613+ else throwErr("get operation is blocked by admin"), if ((size(i.payments) == 0))
1614+ then true
1615+ else throwErr("no payments are expected")]
1616+ if ((checks == checks))
1617+ then {
1618+ let factoryCfg = gfc()
1619+ let lpAssetId = cfgLpAssetId
1620+ let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
1621+ let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), unstakeAmount], nil)
1622+ if ((unstakeInv == unstakeInv))
1623+ then {
1624+ let $t05513055318 = getOneTknV2Internal(outAssetId, minOutAmount, [AttachedPayment(lpAssetId, unstakeAmount)], i.caller, i.originCaller, i.transactionId)
1625+ let state = $t05513055318._1
1626+ let totalAmount = $t05513055318._2
1627+ $Tuple2(state, totalAmount)
1628+ }
1629+ else throw("Strict value is not equal to itself.")
1630+ }
1631+ else throw("Strict value is not equal to itself.")
1632+ }
1633+
1634+
1635+
1636+@Callable(i)
1637+func putOneTknV2WithBonusREADONLY (paymentAmountRaw,paymentAssetId) = {
1638+ let $t05544655549 = calcPutOneTkn(paymentAmountRaw, paymentAssetId, "", "", true)
1639+ let lpAmount = $t05544655549._1
1640+ let state = $t05544655549._2
1641+ let feeAmount = $t05544655549._3
1642+ let bonus = $t05544655549._4
1643+ $Tuple2(nil, $Tuple3(lpAmount, feeAmount, bonus))
1644+ }
1645+
1646+
1647+
1648+@Callable(i)
1649+func putOneTknV2WithoutTakeFeeREADONLY (paymentAmountRaw,paymentAssetId) = {
1650+ let $t05569755801 = calcPutOneTkn(paymentAmountRaw, paymentAssetId, "", "", false)
1651+ let lpAmount = $t05569755801._1
1652+ let state = $t05569755801._2
1653+ let feeAmount = $t05569755801._3
1654+ let bonus = $t05569755801._4
1655+ $Tuple2(nil, $Tuple3(lpAmount, feeAmount, bonus))
1656+ }
1657+
1658+
1659+
1660+@Callable(i)
1661+func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
1662+ then throw("denied")
1663+ else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
1664+
1665+
1666+
1667+@Callable(i)
1668+func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
1669+ then pd
1670+ else [StringEntry(k, v)]
1671+
1672+
1673+
1674+@Callable(i)
1675+func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
1676+ then pd
1677+ else [IntegerEntry(k, v)]
1678+
1679+
1680+
1681+@Callable(i)
1682+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
1683+
1684+
1685+
1686+@Callable(i)
1687+func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
1688+
1689+
1690+
1691+@Callable(i)
1692+func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
1693+ let pr = calcPrices(amAmt, prAmt, lpAmt)
1694+ $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
1695+ }
1696+
1697+
1698+
1699+@Callable(i)
1700+func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
1701+
1702+
1703+
1704+@Callable(i)
1705+func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
1706+
1707+
1708+
1709+@Callable(i)
1710+func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
1711+
1712+
1713+
1714+@Callable(i)
1715+func estimatePutOperationWrapperREADONLY (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,usrAddr,isEval,emitLp) = $Tuple2(nil, epo(txId58, slippage, inAmAmt, inAmId, inPrAmt, inPrId, usrAddr, isEval, emitLp, true, false, 0, ""))
1716+
1717+
1718+
1719+@Callable(i)
1720+func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
1721+ let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
1722+ $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
1723+ }
111724
121725
131726 @Verifier(tx)
14-func verify () = true
1727+func verify () = {
1728+ let targetPublicKey = match m() {
1729+ case pk: ByteVector =>
1730+ pk
1731+ case _: Unit =>
1732+ tx.senderPublicKey
1733+ case _ =>
1734+ throw("Match error")
1735+ }
1736+ match tx {
1737+ case order: Order =>
1738+ let matcherPub = mp()
1739+ let $t05859358662 = validateMatcherOrderAllowed(order)
1740+ let orderValid = $t05859358662._1
1741+ let orderValidInfo = $t05859358662._2
1742+ let senderValid = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
1743+ let matcherValid = sigVerify(order.bodyBytes, order.proofs[1], matcherPub)
1744+ if (if (if (orderValid)
1745+ then senderValid
1746+ else false)
1747+ then matcherValid
1748+ else false)
1749+ then true
1750+ else throwOrderError(orderValid, orderValidInfo, senderValid, matcherValid)
1751+ case s: SetScriptTransaction =>
1752+ if (sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey))
1753+ then true
1754+ else {
1755+ let newHash = blake2b256(value(s.script))
1756+ let allowedHash = fromBase64String(value(getString(fca, keyAllowedLpStableScriptHash())))
1757+ let currentHash = scriptHash(this)
1758+ if ((allowedHash == newHash))
1759+ then (currentHash != newHash)
1760+ else false
1761+ }
1762+ case _ =>
1763+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
1764+ }
1765+ }
151766

github/deemru/w8io/3ef1775 
178.57 ms