tx · BL3oJzDQxq8t8jLPudSUKH8mn4h5SHVfixt7y6njYRmi

3N9Zi6AcWcGbM23jQJ4fnzFsoHoTsxYDznr:  -0.02800000 Waves

2024.04.18 16:00 [3068231] smart account 3N9Zi6AcWcGbM23jQJ4fnzFsoHoTsxYDznr > SELF 0.00000000 Waves

{ "type": 13, "id": "BL3oJzDQxq8t8jLPudSUKH8mn4h5SHVfixt7y6njYRmi", "fee": 2800000, "feeAssetId": null, "timestamp": 1713445206034, "version": 2, "chainId": 84, "sender": "3N9Zi6AcWcGbM23jQJ4fnzFsoHoTsxYDznr", "senderPublicKey": "GFbasS3jufhZkK4xR7tdTjjnP8K33KvJFEDHRtxXDkaJ", "proofs": [ "3rFkBEEzkEg5owdnftXDPLsycjVJ68XapgcusYH3vJ8isi88gxu5HXdouPoYtDMuhYRSRwg2rsUbdac2MF7MqcEj" ], "script": "base64:BgL8HAgCEgQKAggBEgcKBQgICAgBEgQKAggIEgUKAwgIARIECgIICBIDCgEBEgMKAQESAwoBCBIECgIICBIECgIIBBIAEgMKAQESABIECgIICBIECgIICBIECgIICBIAEgQKAggIEgUKAwgIASIJc2VwYXJhdG9yIg5wb29sV2VpZ2h0TXVsdCIPbWF4RGVwdGhEZWZhdWx0IhlmaW5hbGl6YXRpb25TdGFnZUJhbGFuY2VzIhZmaW5hbGl6YXRpb25TdGFnZVRvdGFsIhdmaW5hbGl6YXRpb25TdGFnZVNoYXJlcyILd2F2ZXNTdHJpbmciDmtleUVwb2NoTGVuZ3RoIhFrZXlFcG9jaExlbmd0aE5ldyIVa2V5RXBvY2hMZW5ndGhCeUVwb2NoIgVlcG9jaCIPa2V5Q3VycmVudEVwb2NoIgtrZXlNYXhEZXB0aCIQa2V5UmVzdW1wdGlvbkZlZSIia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdCIda2V5Vm90aW5nRW1pc3Npb25SYXRlQ29udHJhY3QiEmtleUZhY3RvcnlDb250cmFjdCITa2V5Qm9vc3RpbmdDb250cmFjdCISa2V5U3Rha2luZ0NvbnRyYWN0IhZrZXlBc3NldHNTdG9yZUNvbnRyYWN0IhRrZXlGaW5hbGl6YXRpb25TdGFnZSILa2V5TmV4dFBvb2wiC2tleU5leHRVc2VyIg5rZXlTdGFydEhlaWdodCIRa2V5Q3VycmVudEVwb2NoVWkiEGtleVN0YXJ0SGVpZ2h0VWkiHWtleUZpbmFsaXphdGlvblNob3VsZEJlRm9yY2VkIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoIhVrZXlTdGFydEhlaWdodEJ5RXBvY2giDGtleUZpbmFsaXplZCIJa2V5SW5MaXN0IgRwb29sIgskdDAyMTI3MjE2NyINYW1vdW50QXNzZXRJZCIMcHJpY2VBc3NldElkIhdrZXlJbnN1ZmZpY2llbnRCYWxhbmNlcyILJHQwMjMxNjIzNTYiB2tleVVzZWQiB2FkZHJlc3MiB2tleVZvdGUiCyR0MDI2NjQyNzA0Ig9rZXlWb3RpbmdSZXN1bHQiCyR0MDI4ODYyOTI2IhVrZXlWb3RpbmdSZXN1bHRTdGFrZWQiDGxwQXNzZXRJZFN0ciIMa2V5UG9vbFNoYXJlIgskdDAzMjQ3MzI4NyINa2V5VG90YWxWb3RlcyIPa2V5U3Rha2VkQnlVc2VyIg51c2VyQWRkcmVzc1N0ciIHd3JhcEVyciIDbXNnIgh0aHJvd0VyciIOZ2V0VmFsdWVPckZhaWwiA2tleSIEdHlwZSIFZXJyb3IiByRtYXRjaDAiA3N0ciIDaW50IgxnZXRTdHJPckZhaWwiAUAiDGdldEludE9yRmFpbCIMcG9vbFRvU3RyaW5nIgxzdHJpbmdUb1Bvb2wiBXBhcnRzIg9mYWN0b3J5Q29udHJhY3QiGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwIg1rZXlGYWN0b3J5Q2ZnIhRyZWFkRmFjdG9yeUNmZ09yRmFpbCIHZmFjdG9yeSIZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbCIKZmFjdG9yeUNmZyIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIgtnZXRQb29sSW5mbyIOcG9vbEluZm9PcHRpb24iFmdldExwQXNzZXRCeVBvb2xBc3NldHMiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciIpa2V5TWFwcGluZ1Bvb2xBc3NldHNUb1Bvb2xDb250cmFjdEFkZHJlc3MiGGludGVybmFsQW1vdW50QXNzZXRJZFN0ciIXaW50ZXJuYWxQcmljZUFzc2V0SWRTdHIiH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQiE3Bvb2xDb250cmFjdEFkZHJlc3MiFWFtb3VudEFzc2V0SW50ZXJuYWxJZCIUcHJpY2VBc3NldEludGVybmFsSWQiCWxwQXNzZXRJZCIYY2hlY2tXeEVtaXNzaW9uUG9vbExhYmVsIgskdDA2NjQ3NjY4NyIQZ3d4UmV3YXJkRGVwb3NpdCISZ3d4UmV3YXJkc0NvbnRyYWN0Ig1wb29sc0xpc3ROYW1lIhBnZXRWb3Rlc0xpc3ROYW1lIgskdDA3MTA0NzE0NCILa2V5TGlzdEhlYWQiCGxpc3ROYW1lIgRtZXRhIgtrZXlMaXN0U2l6ZSILa2V5TGlzdFByZXYiAmlkIgtrZXlMaXN0TmV4dCIMY29udGFpbnNOb2RlIgpoZWFkT3JVbml0IgpwcmV2T3JVbml0IgpuZXh0T3JVbml0IhFpbnNlcnROb2RlQWN0aW9ucyIIbGlzdFNpemUiCWNoZWNrTm9kZSIRZGVsZXRlTm9kZUFjdGlvbnMiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiE2tleU1hbmFnZXJQdWJsaWNLZXkiHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMiAXMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiE21hbmFnZXJWYXVsdEFkZHJlc3MiCWlzTWFuYWdlciIBaSICcGsiC211c3RNYW5hZ2VyIghtdXN0VGhpcyILdXNlckFkZHJlc3MiDHRhcmdldEhlaWdodCIXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MiH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QiEGJvb3N0aW5nQ29udHJhY3QiD3N0YWtpbmdDb250cmFjdCILZXBvY2hMZW5ndGgiBmNoZWNrcyINaW5MaXN0QWN0aW9ucyIYY3VycmVudEVwb2NoSXNOb3REZWZpbmVkIhJzdGFydEhlaWdodEFjdGlvbnMiBmFtb3VudCILc3RhcnRIZWlnaHQiCWVuZEhlaWdodCIXZmluYWxpemF0aW9uU3RhZ2VPclVuaXQiBHVzZWQiBHZvdGUiCnBvb2xSZXN1bHQiCnRvdGFsVm90ZXMiE2d3eEFtb3VudEF0RW5kVG90YWwiCWF2YWlsYWJsZSIHbmV3Vm90ZSIKd3hFbWlzc2lvbiINdm90ZXNMaXN0TmFtZSIQdm90ZXNMaXN0QWN0aW9ucyIObmV3RXBvY2hMZW5ndGgiC25ld01heERlcHRoIgdwb29sU3RyIgtjaGVja0NhbGxlciINZXBvY2hQcmV2aW91cyINJHQwMTczNjgxNzQwOCISYmFsYW5jZUlzT2tDdXJyZW50IhNiYWxhbmNlSXNPa1ByZXZpb3VzIgdhY3Rpb25zIhNkZWxldGVXeEVtaXNzaW9uSW52Ig9tb2RpZnlXZWlnaHRJbnYiC3Bvb2xBZGRyZXNzIgluZXdTdGF0dXMiEHNldFBvb2xTdGF0dXNJbnYiC2xpc3RBY3Rpb25zIhNzdGFydEhlaWdodFByZXZpb3VzIhNlcG9jaExlbmd0aFByZXZpb3VzIhFlbmRIZWlnaHRQcmV2aW91cyIQY2hlY2tUYXJnZXRFcG9jaCINJHQwMTk3NjExOTgwMSIbZ3d4QW1vdW50QXRFbmRUb3RhbFByZXZpb3VzIgx2b3RpbmdSZXN1bHQiEnZvdGVQcmV2aW91c09wdGlvbiIMdm90ZVByZXZpb3VzIhp2b3RpbmdSZXN1bHRTdGFrZWRQcmV2aW91cyIMc3Rha2VkQnlVc2VyIhl2b3RpbmdSZXN1bHRTdGFrZWRBY3Rpb25zIgVmb3JjZSILdGFyZ2V0RXBvY2giDGN1cnJlbnRFcG9jaCINJHQwMjIyNzEyMjMxMSIBciITYXNzZXRzU3RvcmVDb250cmFjdCIFc2hhcmUiDXByZXZpb3VzRXBvY2giCG5ld0Vwb2NoIhRuZXdFcG9jaExlbmd0aE9wdGlvbiIVbmV3RXBvY2hMZW5ndGhBY3Rpb25zIgpwb29sT3JVbml0IgckbWF0Y2gxIgtuZXh0UG9vbFN0ciIObmV4dFBvb2xPclVuaXQiCnVzZXJPclVuaXQiDHBvb2xzSGVhZFN0ciIObmV4dFVzZXJPclVuaXQiBHVzZXIiBG5leHQiDnByb2Nlc3NWb3RlSW52IgckbWF0Y2gyIghuZXh0VXNlciITZ3d4UmV3YXJkRGVwb3NpdEludiIHY291bnRlciIadm90aW5nRW1pc3Npb25SYXRlQ29udHJhY3QiBnJlc3VsdCIDaW52IghtYXhEZXB0aCIWZmluYWxpemF0aW9uSW5Qcm9ncmVzcyIfc2xpcHBhZ2VUb2xlcmFuY2VPck1pbk91dEFtb3VudCINJHQwMzMyNjMzMzM5MyIKZmVlUGF5bWVudCIPa0Jvb3N0aW5nQ29uZmlnIg1pZHhDZmdBc3NldElkIgl3eEFzc2V0SWQiE2Ftb3VudEFzc2V0VmVyaWZpZWQiEnByaWNlQXNzZXRWZXJpZmllZCINcmVzdW1wdGlvbkZlZSIUbHBBc3NldEJhbGFuY2VCZWZvcmUiCWF1dG9TdGFrZSIDcHV0IgtiYWxhbmNlSXNPayIOcG9vbFNjcmlwdEhhc2giEWFsbG93ZWRTY3JpcHRIYXNoIghpc1N0YWJsZSIMZnVuY3Rpb25OYW1lIhNscEFzc2V0QmFsYW5jZUFmdGVyIhJscEFzc2V0QmFsYW5jZURpZmYiFmxwQXNzZXRUcmFuc2ZlckFjdGlvbnMiEHNldFd4RW1pc3Npb25JbnYiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleUkAAWECAl9fAAFiAIDC1y8AAWMACgABZAAAAAFlAAEAAWYAAgABZwIFV0FWRVMAAWgJALkJAgkAzAgCAgIlcwkAzAgCAgtlcG9jaExlbmd0aAUDbmlsBQFhAAFpCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhBlcG9jaExlbmd0aF9fbmV3BQNuaWwFAWEBAWoBAWsJALkJAgkAzAgCAgQlcyVkCQDMCAICC2Vwb2NoTGVuZ3RoCQDMCAIJAKQDAQUBawUDbmlsBQFhAAFsCQC5CQIJAMwIAgICJXMJAMwIAgIMY3VycmVudEVwb2NoBQNuaWwFAWEAAW0JALkJAgkAzAgCAgIlcwkAzAgCAghtYXhEZXB0aAUDbmlsBQFhAAFuCQC5CQIJAMwIAgICJXMJAMwIAgINcmVzdW1wdGlvbkZlZQUDbmlsBQFhAAFvCQC5CQIJAMwIAgICJXMJAMwIAgIfdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAUDbmlsBQFhAAFwCQC5CQIJAMwIAgICJXMJAMwIAgIadm90aW5nRW1pc3Npb25SYXRlQ29udHJhY3QFA25pbAUBYQABcQkAuQkCCQDMCAICAiVzCQDMCAICD2ZhY3RvcnlDb250cmFjdAUDbmlsBQFhAAFyCQC5CQIJAMwIAgICJXMJAMwIAgIQYm9vc3RpbmdDb250cmFjdAUDbmlsBQFhAAFzCQC5CQIJAMwIAgICJXMJAMwIAgIPc3Rha2luZ0NvbnRyYWN0BQNuaWwFAWEAAXQJALkJAgkAzAgCAgIlcwkAzAgCAhNhc3NldHNTdG9yZUNvbnRyYWN0BQNuaWwFAWEAAXUJALkJAgkAzAgCAgIlcwkAzAgCAhFmaW5hbGl6YXRpb25TdGFnZQUDbmlsBQFhAAF2CQC5CQIJAMwIAgICJXMJAMwIAgIIbmV4dFBvb2wFA25pbAUBYQABdwkAuQkCCQDMCAICAiVzCQDMCAICCG5leHRVc2VyBQNuaWwFAWEAAXgJALkJAgkAzAgCAgIlcwkAzAgCAgtzdGFydEhlaWdodAUDbmlsBQFhAAF5CQC5CQIJAMwIAgICJXMJAMwIAgIOY3VycmVudEVwb2NoVWkFA25pbAUBYQABegkAuQkCCQDMCAICAiVzCQDMCAICDXN0YXJ0SGVpZ2h0VWkFA25pbAUBYQABQQkAuQkCCQDMCAICAiVzCQDMCAICBWZvcmNlBQNuaWwFAWEBAUIAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAEBQwACHSVzX19hbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAQFEAQFrCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgtzdGFydEhlaWdodAkAzAgCCQCkAwEFAWsFA25pbAUBYQEBRQEBawkAuQkCCQDMCAICBCVzJWQJAMwIAgIJZmluYWxpemVkCQDMCAIJAKQDAQUBawUDbmlsBQFhAQFGAQFHBAFIBQFHBAFJCAUBSAJfMQQBSggFAUgCXzIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGaW5MaXN0CQDMCAIFAUkJAMwIAgUBSgUDbmlsBQFhAQFLAgFHAWsEAUwFAUcEAUkIBQFMAl8xBAFKCAUBTAJfMgkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICFGluc3VmZmljaWVudEJhbGFuY2VzCQDMCAIFAUkJAMwIAgUBSgkAzAgCCQCkAwEFAWsFA25pbAUBYQEBTQIBTgFrCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICBHVzZWQJAMwIAgkApQgBBQFOCQDMCAIJAKQDAQUBawUDbmlsBQFhAQFPAwFHAU4BawQBUAUBRwQBSQgFAVACXzEEAUoIBQFQAl8yCQC5CQIJAMwIAgIKJXMlcyVzJXMlZAkAzAgCAgR2b3RlCQDMCAIFAUkJAMwIAgUBSgkAzAgCCQClCAEFAU4JAMwIAgkApAMBBQFrBQNuaWwFAWEBAVECAUcBawQBUgUBRwQBSQgFAVICXzEEAUoIBQFSAl8yCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgIMdm90aW5nUmVzdWx0CQDMCAIFAUkJAMwIAgUBSgkAzAgCCQCkAwEFAWsFA25pbAUBYQEBUwIBVAFrCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICEnZvdGluZ1Jlc3VsdFN0YWtlZAkAzAgCBQFUCQDMCAIJAKQDAQUBawUDbmlsBQFhAQFVAgFHAWsEAVYFAUcEAUkIBQFWAl8xBAFKCAUBVgJfMgkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICCXBvb2xTaGFyZQkAzAgCBQFJCQDMCAIFAUoJAMwIAgkApAMBBQFrBQNuaWwFAWEBAVcBAWsJALkJAgkAzAgCAgQlcyVkCQDMCAICCnRvdGFsVm90ZXMJAMwIAgkApAMBBQFrBQNuaWwFAWEBAVgCAVQBWQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgZzdGFrZWQJAMwIAgUBWQkAzAgCBQFUBQNuaWwFAWEBAVoBAmFhCQC5CQIJAMwIAgIVdm90aW5nX2VtaXNzaW9uLnJpZGU6CQDMCAIFAmFhBQNuaWwCASABAmFiAQJhYQkAAgEJAQFaAQUCYWEBAmFjAwFOAmFkAmFlBAJhZgkBAVoBCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAU4JAMwIAgIBLgkAzAgCBQJhZAkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIACQETdmFsdWVPckVycm9yTWVzc2FnZQIEAmFnBQJhZQMJAAECBQJhZwIGU3RyaW5nBAJhaAUCYWcJAJ0IAgUBTgUCYWQDCQABAgUCYWcCA0ludAQCYWkFAmFnCQCaCAIFAU4FAmFkCQECYWIBAhJpbnZhbGlkIGVudHJ5IHR5cGUFAmFmAQJhagIBTgJhZAoAAmFrCQECYWMDBQFOBQJhZAIAAwkAAQIFAmFrAgZTdHJpbmcFAmFrCQACAQkArAICCQADAQUCYWsCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwECYWwCAU4CYWQKAAJhawkBAmFjAwUBTgUCYWQAAAMJAAECBQJhawIDSW50BQJhawkAAgEJAKwCAgkAAwEFAmFrAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBAmFtAQFHCQCsAgIJAKwCAggFAUcCXzEFAWEIBQFHAl8yAQJhbgECYWgEAmFvCQC1CQIFAmFoBQFhAwkAAAIJAJADAQUCYW8AAgkAlAoCCQCRAwIFAmFvAAAJAJEDAgUCYW8AAQkBAmFiAQITaW52YWxpZCBwb29sIHN0cmluZwACYXAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhagIFBHRoaXMFAXEAAmFxAAoBAmFyAAIRJXNfX2ZhY3RvcnlDb25maWcBAmFzAQJhdAkAtQkCCQECYWoCBQJhdAkBAmFyAAUBYQECYXUBAmF2CQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmF2BQJhcQECYXcBAmF4AwkAAAIFAmF4BQFnBQR1bml0CQDZBAEFAmF4AQJheQECYXgDCQAAAgUCYXgFBHVuaXQFAWcJANgEAQkBBXZhbHVlAQUCYXgBAmF6AgFJAUoEAmFBCgACYWsJAPwHBAUCYXACEHBvb2xJbmZvUkVBRE9OTFkJAMwIAgUBSQkAzAgCBQFKBQNuaWwFA25pbAMJAAECBQJhawIVKEFkZHJlc3MsIEJ5dGVWZWN0b3IpBQJhawUEdW5pdAUCYUEBAmFCAgFJAUoKAQJhQwECYUQJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYUQKAQJhRQICYUYCYUcJAKwCAgkArAICCQCsAgIJAKwCAgIKJWQlZCVzJXNfXwkApAMBBQJhRgICX18JAKQDAQUCYUcCI19fbWFwcGluZ3NfX3Bvb2xBc3NldHMyUG9vbENvbnRyYWN0CgECYUgBAmFJCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFJAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAQCYUoJAQJhbAIFAmFwCQECYUMBBQFJBAJhSwkBAmFsAgUCYXAJAQJhQwEFAUoEAmFJCQECYWoCBQJhcAkBAmFFAgUCYUoFAmFLBAJhTAkBAmFqAgUCYXAJAQJhSAEFAmFJBQJhTAECYU0BAUcEAmFOBQFHBAFJCAUCYU4CXzEEAUoIBQJhTgJfMgoAAmFrCQD8BwQFAmFwAhhjaGVja1d4RW1pc3Npb25Qb29sTGFiZWwJAMwIAgUBSQkAzAgCBQFKBQNuaWwFA25pbAMJAAECBQJhawIHQm9vbGVhbgUCYWsJAAIBCQCsAgIJAAMBBQJhawIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgECYU8ABAJhdgkBAmFzAQUCYXAEAmFQCQECYXUBBQJhdgkA/AcEBQJhUAIHZGVwb3NpdAUDbmlsBQNuaWwAAmFRAgVwb29scwECYVIBAUcEAmFTBQFHBAFJCAUCYVMCXzEEAUoIBQJhUwJfMgkAuQkCCQDMCAICBXZvdGVzCQDMCAIFAUkJAMwIAgUBSgUDbmlsBQFhAQJhVAECYVUEAmFWAwkAAAIFAmFVBQJhUQIEJXMlcwIIJXMlcyVzJXMJALkJAgkAzAgCBQJhVgkAzAgCBQJhVQkAzAgCAgRoZWFkBQNuaWwFAWEBAmFXAQJhVQQCYVYDCQAAAgUCYVUFAmFRAgQlcyVzAgglcyVzJXMlcwkAuQkCCQDMCAIFAmFWCQDMCAIFAmFVCQDMCAICBHNpemUFA25pbAUBYQECYVgCAmFVAmFZBAJhVgMJAAACBQJhVQUCYVECCCVzJXMlcyVzAgolcyVzJXMlcyVzCQC5CQIJAMwIAgUCYVYJAMwIAgUCYVUJAMwIAgUCYVkJAMwIAgIEcHJldgUDbmlsBQFhAQJhWgICYVUCYVkEAmFWAwkAAAIFAmFVBQJhUQIIJXMlcyVzJXMCCiVzJXMlcyVzJXMJALkJAgkAzAgCBQJhVgkAzAgCBQJhVQkAzAgCBQJhWQkAzAgCAgRuZXh0BQNuaWwFAWEBAmJhAgJhVQJhWQQCYmIJAJ0IAgUEdGhpcwkBAmFUAQUCYVUEAmJjCQCdCAIFBHRoaXMJAQJhWAIFAmFVBQJhWQQCYmQJAJ0IAgUEdGhpcwkBAmFaAgUCYVUFAmFZAwMJAAACBQJhWQkBC3ZhbHVlT3JFbHNlAgUCYmICAAYJAQIhPQIFAmJjBQR1bml0BgkBAiE9AgUCYmQFBHVuaXQBAmJlAgJhVQJhWQQCYmIJAJ0IAgUEdGhpcwkBAmFUAQUCYVUEAmJmCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhVwEFAmFVAAAEAmJnAwkBASEBCQECYmECBQJhVQUCYVkGCQECYWIBAgtOb2RlIGV4aXN0cwMJAAACBQJiZwUCYmcJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYVcBBQJhVQkAZAIFAmJmAAEFA25pbAMJAQIhPQIFAmJiBQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhWgIFAmFVBQJhWQkBBXZhbHVlAQUCYmIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFYAgUCYVUJAQV2YWx1ZQEFAmJiBQJhWQUDbmlsBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFUAQUCYVUFAmFZBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmJoAgJhVQJhWQQCYmIJAJ0IAgUEdGhpcwkBAmFUAQUCYVUEAmJmCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhVwEFAmFVAAAEAmJjCQCdCAIFBHRoaXMJAQJhWAIFAmFVBQJhWQQCYmQJAJ0IAgUEdGhpcwkBAmFaAgUCYVUFAmFZCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhVwEFAmFVCQBlAgUCYmYAAQUDbmlsAwMJAQIhPQIFAmJjBQR1bml0CQECIT0CBQJiZAUEdW5pdAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFaAgUCYVUJAQV2YWx1ZQEFAmJjCQEFdmFsdWUBBQJiZAkAzAgCCQELU3RyaW5nRW50cnkCCQECYVgCBQJhVQkBBXZhbHVlAQUCYmQJAQV2YWx1ZQEFAmJjCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhWAIFAmFVBQJhWQkAzAgCCQELRGVsZXRlRW50cnkBCQECYVoCBQJhVQUCYVkFA25pbAMJAQIhPQIFAmJkBQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhVAEFAmFVCQEFdmFsdWUBBQJiZAkAzAgCCQELRGVsZXRlRW50cnkBCQECYVoCBQJhVQUCYVkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFYAgUCYVUJAQV2YWx1ZQEFAmJkBQNuaWwDCQECIT0CBQJiYwUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQECYVgCBQJhVQUCYVkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFaAgUCYVUJAQV2YWx1ZQEFAmJjBQNuaWwDCQAAAgUCYVkJAQt2YWx1ZU9yRWxzZQIFAmJiAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFUAQUCYVUFA25pbAkBAmFiAQkArAICCQCsAgIJAKwCAgIOaW52YWxpZCBub2RlOiAFAmFVAgEuBQJhWQECYmkAAhclc19fbWFuYWdlclZhdWx0QWRkcmVzcwECYmoAAhQlc19fbWFuYWdlclB1YmxpY0tleQECYmsABAJhZwkAoggBCQECYmkAAwkAAQIFAmFnAgZTdHJpbmcEAmJsBQJhZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYmwFBHRoaXMBAmJtAAQCYm4JAQJiawAEAmFnCQCdCAIFAmJuCQECYmoAAwkAAQIFAmFnAgZTdHJpbmcEAmJsBQJhZwkA2QQBBQJibAMJAAECBQJhZwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJibwECYnAEAmFnCQECYm0AAwkAAQIFAmFnAgpCeXRlVmVjdG9yBAJicQUCYWcJAAACCAUCYnAPY2FsbGVyUHVibGljS2V5BQJicQMJAAECBQJhZwIEVW5pdAkAAAIIBQJicAZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECYnIBAmJwAwkBAmJvAQUCYnAGCQACAQIRcGVybWlzc2lvbiBkZW5pZWQBAmJzAQJicAMJAAACCAUCYnAGY2FsbGVyBQR0aGlzBgkAAgECEXBlcm1pc3Npb24gZGVuaWVkEwJicAEYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0AgJidAJidQQCYnYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQECYWoCBQR0aGlzBQFyCQEBWgECIWludmFsaWQgYm9vc3RpbmcgY29udHJhY3QgYWRkcmVzcwkAlAoCBQNuaWwKAAJhawkA/AcEBQJidgIgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAMwIAgUCYnQJAMwIAgUCYnUFA25pbAUDbmlsAwkAAQIFAmFrAgNJbnQFAmFrCQACAQkArAICCQADAQUCYWsCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAJicAELY29uc3RydWN0b3IFAmFwAmJ3AmJ4AmJ5AmJ6BAJiQQkAzAgCCQECYnIBBQJicAkAzAgCAwkBAiE9AgkApggBBQJhcAUEdW5pdAYCIGludmFsaWQgZmFjdG9yeSBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQECIT0CCQCmCAEFAmJ3BQR1bml0BgIyaW52YWxpZCB2b3RpbmcgZW1pc3Npb24gY2FuZGlkYXRlIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAQIhPQIJAKYIAQUCYngFBHVuaXQGAiFpbnZhbGlkIGJvb3N0aW5nIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAQIhPQIJAKYIAQUCYnkFBHVuaXQGAiBpbnZhbGlkIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcwkAzAgCAwkAZgIFAmJ6AAAGCQECYWIBAhRpbnZhbGlkIGVwb2NoIGxlbmd0aAUDbmlsAwkAAAIFAmJBBQJiQQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFAXEFAmFwCQDMCAIJAQtTdHJpbmdFbnRyeQIFAW8FAmJ3CQDMCAIJAQtTdHJpbmdFbnRyeQIFAXIFAmJ4CQDMCAIJAQtTdHJpbmdFbnRyeQIFAXMFAmJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQFoBQJiegUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmJwAQZjcmVhdGUCAUkBSgQCYkEJAMwIAgMJAAACCQDYBAEICAUCYnAGY2FsbGVyBWJ5dGVzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAW8CAAYJAQJicgEFAmJwBQNuaWwDCQAAAgUCYkEFAmJBBAFHCQCUCgIFAUkFAUoEAmJCCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFGAQUBRwYFA25pbAkBAmJlAgUCYVEJAQJhbQEFAUcEAmJDCQAAAgkAmggCBQR0aGlzBQFsBQR1bml0BAJiRAMFAmJDBAFrAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFAWwFAWsJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFEAQUBawUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF4BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFAXkFAWsJAMwIAgkBDEludGVnZXJFbnRyeQIFAXoFBmhlaWdodAUDbmlsBQNuaWwJAJQKAgkAzggCBQJiQgUCYkQFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABBHZvdGUDAUkBSgJiRQQBRwkAlAoCBQFJBQFKBAFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWwAAAQCYkYJAQJhbAIFBHRoaXMJAQFEAQUBawQCYnoJAQJhbAIFBHRoaXMFAWgEAmJHCQBkAgUCYkYFAmJ6BAJiSAkAmggCBQR0aGlzBQF1BAJiSQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBTQIIBQJicAZjYWxsZXIFAWsAAAQCYkoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAU8DBQFHCAUCYnAGY2FsbGVyBQFrAAAEAmJLCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQFRAgUBRwUBawAABAJiTAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBVwEFAWsAAAQCYk0KAAJhawkA/AcEBQR0aGlzAhhnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHQJAMwIAgkA2AQBCAgFAmJwBmNhbGxlcgVieXRlcwkAzAgCBQJiRwUDbmlsBQNuaWwDCQABAgUCYWsCA0ludAUCYWsJAAIBCQCsAgIJAAMBBQJhawIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJiTgkAZQIFAmJNBQJiSQQCYk8JAGQCBQJiSgUCYkUEAmJQCQECYU0BBQFHBAJiQQkAzAgCAwkBAiE9AgkAoAgBCQEBRgEFAUcFBHVuaXQGCQECYWIBAg5pbnZhbGlkIGFzc2V0cwkAzAgCAwkAZgIFAmJHBQZoZWlnaHQGCQECYWIBAg5pbnZhbGlkIGhlaWdodAkAzAgCAwkAAAIFAmJIBQR1bml0BgkBAmFiAQIYZmluYWxpemF0aW9uIGluIHByb2dyZXNzCQDMCAIDCQBmAgUCYk0AAAYJAQJhYgECE3lvdSBkbyBub3QgaGF2ZSBnV1gJAMwIAgMDCQBmAgUCYkUAAAkAZwIFAmJOBQJiRQcGCQECYWIBAg5pbnZhbGlkIGFtb3VudAkAzAgCAwUCYlAGCQECYWIBAh1wb29sIGhhc24ndCBXWF9FTUlTU0lPTiBsYWJlbAUDbmlsAwkAAAIFAmJBBQJiQQQCYlEJAQJhUgEFAUcEAVkJAKUIAQgFAmJwBmNhbGxlcgQCYlIDCQECYmECBQJiUQUBWQUDbmlsCQECYmUCBQJiUQUBWQkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFNAggFAmJwBmNhbGxlcgUBawkAZAIFAmJJBQJiRQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU8DBQFHCAUCYnAGY2FsbGVyBQFrBQJiTwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVECBQFHBQFrCQBkAgUCYksFAmJFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwEFAWsJAGQCBQJiTAUCYkUFA25pbAUCYlIFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABCmNhbmNlbFZvdGUCAUkBSgQBRwkAlAoCBQFJBQFKBAFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWwAAAQCYkYJAQJhbAIFBHRoaXMJAQFEAQUBawQCYnoJAQJhbAIFBHRoaXMFAWgEAmJHCQBkAgUCYkYFAmJ6BAJiSAkAmggCBQR0aGlzBQF1BAJiSQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBTQIIBQJicAZjYWxsZXIFAWsAAAQCYkoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAU8DBQFHCAUCYnAGY2FsbGVyBQFrAAAEAmJLCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQFRAgUBRwUBawAABAJiTAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBVwEFAWsAAAQCYkEJAMwIAgMJAQIhPQIJAKAIAQkBAUYBBQFHBQR1bml0BgkBAmFiAQIOaW52YWxpZCBhc3NldHMJAMwIAgMJAGYCBQJiRwUGaGVpZ2h0BgkBAmFiAQIOaW52YWxpZCBoZWlnaHQJAMwIAgMJAAACBQJiSAUEdW5pdAYJAQJhYgECGGZpbmFsaXphdGlvbiBpbiBwcm9ncmVzcwkAzAgCAwkAZgIFAmJKAAAGCQECYWIBAgdubyB2b3RlBQNuaWwDCQAAAgUCYkEFAmJBBAJiUQkBAmFSAQUBRwQBWQkApQgBCAUCYnAGY2FsbGVyCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU0CCAUCYnAGY2FsbGVyBQFrCQCWAwEJAMwIAgkAZQIFAmJJBQJiSgkAzAgCAAAFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEBTwMFAUcIBQJicAZjYWxsZXIFAWsJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFRAgUBRwUBawkAZQIFAmJLBQJiSgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcBBQFrCQBlAgUCYkwFAmJKBQNuaWwJAQJiaAIFAmJRBQFZBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmJwAQ5zZXRFcG9jaExlbmd0aAECYlMEAmJBCQDMCAIJAQJicgEFAmJwCQDMCAIDCQBmAgUCYlMAAAYJAQJhYgECFGludmFsaWQgZXBvY2ggbGVuZ3RoBQNuaWwDCQAAAgUCYkEFAmJBCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAWkFAmJTBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABC3NldE1heERlcHRoAQJiVAQCYkEJAMwIAgkBAmJyAQUCYnAJAMwIAgMJAGYCBQJiVAAABgkBAmFiAQIRaW52YWxpZCBtYXggZGVwdGgFA25pbAMJAAACBQJiQQUCYkEJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUBbQUCYlQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJicAEacHJvY2Vzc1Bvb2xCYWxhbmNlSU5URVJOQUwBAmJVBAJiVgkBAmJzAQUCYnADCQAAAgUCYlYFAmJWBAFrCQECYWwCBQR0aGlzBQFsBAJiVwkAZQIFAWsAAQQBRwkBAmFuAQUCYlUEAmJYBQFHBAFJCAUCYlgCXzEEAUoIBQJiWAJfMgQCYUwJAQJhQgIFAUkFAUoEAmJZCgACYWsJAPwHBAUCYXACDGNoZWNrQmFsYW5jZQkAzAgCBQJhTAUDbmlsBQNuaWwDCQABAgUCYWsCB0Jvb2xlYW4FAmFrCQACAQkArAICCQADAQUCYWsCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmJaCQEBIQEJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBAUsCBQFHCQBlAgUCYlcAAQcEAmNhAwkBASEBBQJiWQMJAQEhAQUCYloEAmNiCQD8BwQFAmFwAhlkZWxldGVXeEVtaXNzaW9uUG9vbExhYmVsCQDMCAIFAUkJAMwIAgUBSgUDbmlsBQNuaWwDCQAAAgUCY2IFAmNiBAJjYwkA/AcEBQJhcAIMbW9kaWZ5V2VpZ2h0CQDMCAIFAmFMCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUCY2MFAmNjBAJjZAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBAmF6AgUBSQUBSgkBAVoBAg5pbnZhbGlkIGFzc2V0cwJfMQQCY2UAAwQCY2YJAPwHBAUCYXACCm1hbmFnZVBvb2wJAMwIAgkApQgBBQJjZAkAzAgCBQJjZQUDbmlsBQNuaWwDCQAAAgUCY2YFAmNmBAJjZwkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFGAQUBRwUDbmlsCQECYmgCBQJhUQkBAmFtAQUBRwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVQIFAUcFAmJXAAAFA25pbAUCY2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFLAgUBRwUCYlcGBQNuaWwFA25pbAkAlAoCBQJjYQUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJicAETcHJvY2Vzc1ZvdGVJTlRFUk5BTAICYlUBWQQCYlYJAQJicwEFAmJwAwkAAAIFAmJWBQJiVgQCYnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQFZCQEBWgEJAKwCAgIqcHJvY2Vzc1ZvdGVJTlRFUk5BTDogaW52YWxpZCB1c2VyIGFkZHJlc3MgBQFZBAFrCQECYWwCBQR0aGlzBQFsBAJiVwkAZQIFAWsAAQQCYnoJAQJhbAIFBHRoaXMFAWgEAmJGCQECYWwCBQR0aGlzCQEBRAEFAWsEAmJHCQBkAgUCYkYFAmJ6BAJjaAkBAmFsAgUEdGhpcwkBAUQBBQJiVwQCY2kJAQJhbAIFBHRoaXMJAQFqAQUCYlcEAmNqCQBkAgUCY2gFAmNpBAJjawMJAGcCBQJiVwAABgkBAmFiAQIrcHJvY2Vzc1ZvdGVJTlRFUk5BTDogaW52YWxpZCBwcmV2aW91cyBlcG9jaAMJAAACBQJjawUCY2sEAUcJAQJhbgEFAmJVBAJjbAUBRwQBSQgFAmNsAl8xBAFKCAUCY2wCXzIEAmJNCgACYWsJAPwHBAUEdGhpcwIYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0CQDMCAIFAVkJAMwIAgUCYkcFA25pbAUDbmlsAwkAAQIFAmFrAgNJbnQFAmFrCQACAQkArAICCQADAQUCYWsCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQCY20KAAJhawkA/AcEBQR0aGlzAhhnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHQJAMwIAgUBWQkAzAgCBQJjagUDbmlsBQNuaWwDCQABAgUCYWsCA0ludAUCYWsJAAIBCQCsAgIJAAMBBQJhawIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJiTAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBVwEFAWsAAAQCY24JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAVECBQFHBQFrAAAEAmNvCQCfCAEJAQFPAwUBRwUCYnQFAmJXBAJjcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQJjbwkBAVoBCQCsAgIJAKwCAgkArAICCQCsAgICFHByb2Nlc3NWb3RlSU5URVJOQUwgBQJiVQIBIAUBWQISOiBubyBwcmV2aW91cyB2b3RlBAJiSQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBTQIFAmJ0BQFrAAAEAVQJAQJhQgIFAUkFAUoEAmNxCQELdmFsdWVPckVsc2UCCQCfCAEJAQFTAgUBVAUCYlcAAAQCYnkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhagIFBHRoaXMFAXMEAmNyCQELdmFsdWVPckVsc2UCCQCaCAIFAmJ5CQEBWAIFAVQFAVkAAAQCY3MDAwkAAAIFAmNyAAAGCQAAAgUCY28FBHVuaXQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQFUBQJiVwkAZAIFAmNxBQJjcAUDbmlsBAJhTAkBAmFCAgUBSQUBSgQCYk8DCQBmAgUCY20AAAkAawMFAmNwBQJiTQUCY20AAAQCY2EDAwkAAAIFAmNvBQR1bml0BgkAZwIAAAUCYk8JAQJiaAIJAQJhUgEFAUcFAVkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFPAwUBRwUCYnQFAWsFAmJPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwEFAWsJAGQCBQJiTAUCYk8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFRAgUBRwUBawkAZAIFAmNuBQJiTwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU0CBQJidAUBawkAZAIFAmJJBQJiTwUDbmlsCQCUCgIJAM4IAgUCY2EFAmNzBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmJwARNwcm9jZXNzUG9vbElOVEVSTkFMAgJiVQJjdAQCYlYJAQJicwEFAmJwAwkAAAIFAmJWBQJiVgQCY3UEAmN2CQECYWwCBQR0aGlzBQFsAwUCY3QFAmN2CQBlAgUCY3YAAQQCY2sDCQBnAgUCY3UAAAYJAQJhYgECKXByb2Nlc3NQb29sSU5URVJOQUw6IGludmFsaWQgdGFyZ2V0IGVwb2NoAwkAAAIFAmNrBQJjawQBRwkBAmFuAQUCYlUEAmN3BQFHBAFJCAUCY3cCXzEEAUoIBQJjdwJfMgQCYnkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhagIFBHRoaXMFAXMEAmFMCQECYUICBQFJBQFKBAJjeAoAAmFrCQD8BwQFAmJ5AhJ1c2Vyc0xpc3RUcmF2ZXJzYWwJAMwIAgUCYUwFA25pbAUDbmlsAwkAAQIFAmFrAgdCb29sZWFuBQJhawkAAgEJAKwCAgkAAwEFAmFrAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFAmN4BQJjeAMFAmN4CQCUCgIFA25pbAYEAmN5CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYXAFAXQCHWludmFsaWQgYXNzZXRzIHN0b3JlIGNvbnRyYWN0BAJiTAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEBVwEFAmN1AAAEAmNuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQFRAgUBRwUCY3UAAAQCY3oDCQAAAgUCYkwAAAAACQBrAwUCY24FAWIFAmJMBAJjYwkA/AcEBQJhcAIMbW9kaWZ5V2VpZ2h0CQDMCAIFAmFMCQDMCAIFAmN6BQNuaWwFA25pbAMJAAACBQJjYwUCY2MJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVUCBQFHBQJjdQUCY3oFA25pbAcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABDmZpbmFsaXplSGVscGVyAAQCY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQUBQQcEAWsJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBbAAABAJjQQkAZQIFAWsAAQQCYkYJAQJhbAIFBHRoaXMJAQFEAQUBawQCYnoJAQJhbAIFBHRoaXMFAWgEAmJHCQBkAgUCYkYFAmJ6BAJiSAkAmggCBQR0aGlzBQF1AwMDCQBnAgUGaGVpZ2h0BQJiRwkAAAIFAmJIBQR1bml0BwkBASEBBQJjdAcEAmNCCQBkAgUBawABBAJjQwkAmggCBQR0aGlzBQFpBAJjRAQCYWcFAmNDAwkAAQIFAmFnAgNJbnQEAmJTBQJhZwkAzAgCCQEMSW50ZWdlckVudHJ5AgUBaAUCYlMJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBaQUDbmlsAwkAAQIFAmFnAgRVbml0BQNuaWwJAAIBAgtNYXRjaCBlcnJvcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFEAQUCY0IFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUBeAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQFsBQJjQgkAzAgCCQEMSW50ZWdlckVudHJ5AgUBdQUBZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAWoBBQFrBQJiegUDbmlsBQJjRAYDAwUCY3QJAAACBQJiSAUEdW5pdAcJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUBdQUBZgUDbmlsBgMJAAACBQJiSAUEdW5pdAkAlAoCBQNuaWwHAwkAAAIFAmJIBQFkBAJjRQkAoggBBQF2BAJhZwUCY0UDCQABAgUCYWcCBFVuaXQEAmNGCQCiCAEJAQJhVAEFAmFRAwkAAQIFAmNGAgRVbml0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAXUFAWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBdgUDbmlsBgMJAAECBQJjRgIGU3RyaW5nBAJjRwUCY0YJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQF2BQJjRwUDbmlsBgkAAgECC01hdGNoIGVycm9yAwkAAQIFAmFnAgZTdHJpbmcEAmJVBQJhZwQCY0gJAKIIAQkBAmFaAgUCYVEFAmJVAwkAAAIFAmNIBQJjSAQCY3gJAPwHBAUEdGhpcwIacHJvY2Vzc1Bvb2xCYWxhbmNlSU5URVJOQUwJAMwIAgUCYlUFA25pbAUDbmlsAwkAAAIFAmN4BQJjeAQCY0YFAmNIAwkAAQIFAmNGAgRVbml0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAXUFAWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBdgUDbmlsBgMJAAECBQJjRgIGU3RyaW5nBAJjRwUCY0YJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQF2BQJjRwUDbmlsBgkAAgECC01hdGNoIGVycm9yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILTWF0Y2ggZXJyb3IDCQAAAgUCYkgFAWUEAmNFCQCiCAEFAXYEAmNJCQCiCAEFAXcEAmFnBQJjRQMJAAECBQJhZwIEVW5pdAQCY0YJAKIIAQkBAmFUAQUCYVEDCQABAgUCY0YCBFVuaXQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUBdQUBZgkAzAgCCQELRGVsZXRlRW50cnkBBQF2CQDMCAIJAQtEZWxldGVFbnRyeQEFAXcFA25pbAYDCQABAgUCY0YCBlN0cmluZwQCY0oFAmNGCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUBdgUCY0oFA25pbAYJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQJhZwIGU3RyaW5nBAJiVQUCYWcEAUcJAQJhbgEFAmJVBAJjSwQCY0YFAmNJAwkAAQIFAmNGAgRVbml0CQCiCAEJAQJhVAEJAQJhUgEFAUcDCQABAgUCY0YCBlN0cmluZwQCY0wFAmNGBAJjTQkAoggBCQECYVoCCQECYVIBBQFHBQJjTAMJAAACBQJjTQUCY00EAmNOCQD8BwQFBHRoaXMCE3Byb2Nlc3NWb3RlSU5URVJOQUwJAMwIAgUCYlUJAMwIAgUCY0wFA25pbAUDbmlsAwkAAAIFAmNOBQJjTgUCY00JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAgtNYXRjaCBlcnJvcgQCY0YFAmNLAwkAAQIFAmNGAgRVbml0BAJjSAkAoggBCQECYVoCBQJhUQUCYlUEAmNPBQJjSAMJAAECBQJjTwIEVW5pdAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF1BQFmCQDMCAIJAQtEZWxldGVFbnRyeQEFAXYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBdwUDbmlsBgMJAAECBQJjTwIGU3RyaW5nBAJibAUCY08JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQF2BQJibAkAzAgCCQELRGVsZXRlRW50cnkBBQF3BQNuaWwGCQACAQILTWF0Y2ggZXJyb3IDCQABAgUCY0YCBlN0cmluZwQCY1AFAmNGCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUBdwUCY1AFA25pbAYJAAIBAgtNYXRjaCBlcnJvcgkAAgECC01hdGNoIGVycm9yAwkAAAIFAmJIBQFmBAJjRQkAoggBBQF2BAJhZwUCY0UDCQABAgUCYWcCBFVuaXQEAmNGCQCiCAEJAQJhVAEFAmFRAwkAAQIFAmNGAgRVbml0BAJjYQMFAmN0CQDMCAIJAQtEZWxldGVFbnRyeQEFAXUJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBQQUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEFAXUJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFFAQUCY0EGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF5BQFrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF6BQJiRgUDbmlsBAJjUQkBAmFPAAMJAAACBQJjUQUCY1EJAJQKAgUCY2EGCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAQIFAmNGAgZTdHJpbmcEAmNHBQJjRgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFAXYFAmNHBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IDCQABAgUCYWcCBlN0cmluZwQCYlUFAmFnBAJjSAkAoggBCQECYVoCBQJhUQUCYlUDCQAAAgUCY0gFAmNIBAJjeAoAAmFrCQD8BwQFBHRoaXMCE3Byb2Nlc3NQb29sSU5URVJOQUwJAMwIAgUCYlUJAMwIAgUCY3QFA25pbAUDbmlsAwkAAQIFAmFrAgdCb29sZWFuBQJhawkAAgEJAKwCAgkAAwEFAmFrAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFAmN4BQJjeAMFAmN4CQCUCgIFA25pbAYEAmNGBQJjSAMJAAECBQJjRgIEVW5pdAQCY2EDBQJjdAkAzAgCCQELRGVsZXRlRW50cnkBBQF1CQDMCAIJAQtEZWxldGVFbnRyeQEFAUEJAMwIAgkBC0RlbGV0ZUVudHJ5AQUBdgUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEFAXUJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFFAQUCY0EGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF5BQFrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQF6BQJiRgkAzAgCCQELRGVsZXRlRW50cnkBBQF2BQNuaWwEAmNRCQECYU8AAwkAAAIFAmNRBQJjUQkAlAoCBQJjYQYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQABAgUCY0YCBlN0cmluZwQCY0cFAmNGCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUBdgUCY0cFA25pbAYJAAIBAgtNYXRjaCBlcnJvcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECC01hdGNoIGVycm9yCQECYWIBAhZmaW5hbGl6YXRpb24gaXMgYnJva2VuAmJwAQ9maW5hbGl6ZVdyYXBwZXIBAmNSBAJjUwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUBcAQCY1QKAAJhawkA/AcEBQR0aGlzAg5maW5hbGl6ZUhlbHBlcgUDbmlsBQNuaWwDCQABAgUCYWsCB0Jvb2xlYW4FAmFrCQACAQkArAICCQADAQUCYWsCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4DCQAAAgUCY1QFAmNUAwkBASEBBQJjVAMJAAACBQJjUgAACQECYWIBAh5DdXJyZW50IHZvdGluZyBpcyBub3Qgb3ZlciB5ZXQEAmNVCQD8BwQFAmNTAghmaW5hbGl6ZQUDbmlsBQNuaWwDCQAAAgUCY1UFAmNVCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQCY1YJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBbQUBYwMJAGYCBQJjVgUCY1IEAmNVCQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCCQBkAgUCY1IAAQUDbmlsBQNuaWwDCQAAAgUCY1UFAmNVCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABCGZpbmFsaXplAAQCY1UJAPwHBAUEdGhpcwIPZmluYWxpemVXcmFwcGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUCY1UFAmNVCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJicAEUY29udGFpbnNOb2RlUkVBRE9OTFkCAmFVAmFZCQCUCgIFA25pbAkBAmJhAgUCYVUFAmFZAmJwAQppbnNlcnROb2RlAgJhVQJhWQQCYlYJAQJicgEFAmJwAwkAAAIFAmJWBQJiVgkAlAoCCQECYmUCBQJhVQUCYVkFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABCmRlbGV0ZU5vZGUCAmFVAmFZBAJiVgkBAmJyAQUCYnADCQAAAgUCYlYFAmJWCQCUCgIJAQJiaAIFAmFVBQJhWQUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJicAEYaXNGaW5hbGl6YXRpb25JblByb2dyZXNzAAQCYkgJAJoIAgUEdGhpcwUBdQQCY1cJAQIhPQIFAmJIBQR1bml0CQCUCgIFA25pbAUCY1cCYnABCmRlbGV0ZVBvb2wCAUkBSgQCYlYDAwkAAAIIBQJicAZjYWxsZXIFAmFwBgkBAmJyAQUCYnAGCQECYWIBAhFQZXJtaXNzaW9uIGRlbmllZAMJAAACBQJiVgUCYlYEAmFVAgVwb29scwQBRwkAlAoCBQFJBQFKBAJhWQkAuQkCCQDMCAIFAUkJAMwIAgUBSgUDbmlsBQFhBAJjYQMJAQJiYQIFAmFVBQJhWQkBAmJoAgUCYVUFAmFZBQNuaWwJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQEBRgEFAUcFA25pbAUCY2EJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYnABBnJlc3VtZQMBSQFKAmNYBAJiSAkAmggCBQR0aGlzBQF1BAJjWQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQECYXoCBQFJBQFKCQEBWgECDmludmFsaWQgYXNzZXRzBAJjZAgFAmNZAl8xBAJhTAgFAmNZAl8yBAJjWgkAkQMCCAUCYnAIcGF5bWVudHMAAAQCY3kJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFAXQEAmRhAgolc19fY29uZmlnBAJkYgABBAJieAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFqAgUEdGhpcwUBcgQCZGMJANkEAQkAkQMCCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFAmJ4BQJkYQUBYQUCZGIEAmRkCgACYWsJAPwHBAUCY3kCEmlzVmVyaWZpZWRSRUFET05MWQkAzAgCBQFJBQNuaWwFA25pbAMJAAECBQJhawIHQm9vbGVhbgUCYWsJAAIBCQCsAgIJAAMBBQJhawIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZGUKAAJhawkA/AcEBQJjeQISaXNWZXJpZmllZFJFQURPTkxZCQDMCAIFAUoFA25pbAUDbmlsAwkAAQIFAmFrAgdCb29sZWFuBQJhawkAAgEJAKwCAgkAAwEFAmFrAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJkZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAW4CFmludmFsaWQgcmVzdW1wdGlvbiBmZWUEAmJBCQDMCAIDCQAAAgUCYkgFBHVuaXQGCQECYWIBAhtmaW5hbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MJAMwIAgMJAAACCAUCY1oHYXNzZXRJZAUCZGMGCQECYWIBAhxpbnZhbGlkIGZlZSBwYXltZW50IGFzc2V0IGlkCQDMCAIDCQAAAggFAmNaBmFtb3VudAUCZGYGCQECYWIBAhppbnZhbGlkIGZlZSBwYXltZW50IGFtb3VudAkAzAgCAwMFAmRkBQJkZQcGCQECYWIBAh5ib3RoIGFzc2V0cyBzaG91bGQgYmUgdmVyaWZpZWQFA25pbAMJAAACBQJiQQUCYkEEAmRnCQDwBwIFBHRoaXMFAmFMAwkAAAIFAmRnBQJkZwQCZGgHBAJkaQMJAAACCQCQAwEIBQJicAhwYXltZW50cwABBAJkagoAAmFrCQD8BwQFAmFwAgxjaGVja0JhbGFuY2UJAMwIAgkBAmF5AQUCYUwFA25pbAUDbmlsAwkAAQIFAmFrAgdCb29sZWFuBQJhawkAAgEJAKwCAgkAAwEFAmFrAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwUCZGoGCQECYWIBAhlhc3NldHMgc2hvdWxkIGJlIGF0dGFjaGVkAwkAAAIJAJADAQgFAmJwCHBheW1lbnRzAAIEAmRrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAPEHAQUCY2QJAQFaAQIccG9vbCBhZGRyZXNzIGlzIG5vdCBzY3JpcHRlZAQCZGwJANsEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFwCQEBQwAJAQFaAQIoYWxsb3dlZCBscCBzdGFibGUgc2NyaXB0IGhhc2ggaXMgbm90IHNldAQCZG0JAAACBQJkawUCZGwEAmRuAwUCZG0CC3B1dE9uZVRrblYyAglwdXRPbmVUa24JAPwHBAUCY2QFAmRuCQDMCAIFAmNYCQDMCAIFAmRoBQNuaWwJAMwIAgkAkQMCCAUCYnAIcGF5bWVudHMAAQUDbmlsAwkAAAIJAJADAQgFAmJwCHBheW1lbnRzAAMJAPwHBAUCY2QCA3B1dAkAzAgCBQJjWAkAzAgCBQJkaAUDbmlsCQDMCAIJAJEDAggFAmJwCHBheW1lbnRzAAEJAMwIAgkAkQMCCAUCYnAIcGF5bWVudHMAAgUDbmlsCQECYWIBAhVpbnZhbGlkIHBheW1lbnRzIHNpemUDCQAAAgUCZGkFAmRpBAJkbwkA8AcCBQR0aGlzBQJhTAMJAAACBQJkbwUCZG8EAmRwCQBlAgUCZG8FAmRnBAJkcQMJAGYCBQJkcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJicAZjYWxsZXIFAmRwBQJhTAUDbmlsBQNuaWwEAmRyCQD8BwQFAmFwAhZzZXRXeEVtaXNzaW9uUG9vbExhYmVsCQDMCAIFAUkJAMwIAgUBSgUDbmlsBQNuaWwDCQAAAgUCZHIFAmRyBAFHCQCUCgIFAUkFAUoEAmJCCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFGAQUBRwYFA25pbAkBAmJlAgUCYVEJAQJhbQEFAUcJAJQKAgkAzggCBQJiQgUCZHEFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmRzAQJkdAAEAmR1BAJhZwkBAmJtAAMJAAECBQJhZwIKQnl0ZVZlY3RvcgQCYnEFAmFnBQJicQMJAAECBQJhZwIEVW5pdAgFAmRzD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJkcwlib2R5Qnl0ZXMJAJEDAggFAmRzBnByb29mcwAABQJkdZVbatM=", "height": 3068231, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: KTryZkBiizn7FmoWa3HxgrzWHARH3brtXuWu8ijAznF Next: 5HmkgC4yPdmKxBECrSjaNrXpyJUdUC5mTa1Xgq85b2ru Diff:
OldNewDifferences
628628 }
629629 let bL = valueOrElse(getInteger(W(k)), 0)
630630 let cn = valueOrElse(getInteger(Q(G, k)), 0)
631- let co = valueOrErrorMessage(getInteger(O(G, bt, bW)), Z((((("processVoteINTERNAL " + bU) + " ") + Y) + ": no previous vote")))
631+ let co = getInteger(O(G, bt, bW))
632+ let cp = valueOrErrorMessage(co, Z((((("processVoteINTERNAL " + bU) + " ") + Y) + ": no previous vote")))
632633 let bI = valueOrElse(getInteger(this, M(bt, k)), 0)
633634 let T = aB(I, J)
634- let cp = valueOrElse(getInteger(S(T, bW)), 0)
635+ let cq = valueOrElse(getInteger(S(T, bW)), 0)
635636 let by = addressFromStringValue(aj(this, s))
636- let cq = valueOrElse(getInteger(by, X(T, Y)), 0)
637- let cr = if ((cq == 0))
637+ let cr = valueOrElse(getInteger(by, X(T, Y)), 0)
638+ let cs = if (if ((cr == 0))
639+ then true
640+ else (co == unit))
638641 then nil
639- else [IntegerEntry(S(T, bW), (cp + co))]
642+ else [IntegerEntry(S(T, bW), (cq + cp))]
640643 let aL = aB(I, J)
641644 let bO = if ((cm > 0))
642- then fraction(co, bM, cm)
645+ then fraction(cp, bM, cm)
643646 else 0
644- let ca = if ((bO > 0))
645- then [IntegerEntry(O(G, bt, k), bO), IntegerEntry(W(k), (bL + bO)), IntegerEntry(Q(G, k), (cn + bO)), IntegerEntry(M(bt, k), (bI + bO))]
646- else bh(aR(G), Y)
647- $Tuple2((ca ++ cr), unit)
647+ let ca = if (if ((co == unit))
648+ then true
649+ else (0 >= bO))
650+ then bh(aR(G), Y)
651+ else [IntegerEntry(O(G, bt, k), bO), IntegerEntry(W(k), (bL + bO)), IntegerEntry(Q(G, k), (cn + bO)), IntegerEntry(M(bt, k), (bI + bO))]
652+ $Tuple2((ca ++ cs), unit)
648653 }
649654 else throw("Strict value is not equal to itself.")
650655 }
654659
655660
656661 @Callable(bp)
657-func processPoolINTERNAL (bU,cs) = {
662+func processPoolINTERNAL (bU,ct) = {
658663 let bV = bs(bp)
659664 if ((bV == bV))
660665 then {
661- let ct = {
662- let cu = al(this, l)
663- if (cs)
664- then cu
665- else (cu - 1)
666+ let cu = {
667+ let cv = al(this, l)
668+ if (ct)
669+ then cv
670+ else (cv - 1)
666671 }
667- let ck = if ((ct >= 0))
672+ let ck = if ((cu >= 0))
668673 then true
669674 else ab("processPoolINTERNAL: invalid target epoch")
670675 if ((ck == ck))
671676 then {
672677 let G = an(bU)
673- let cv = G
674- let I = cv._1
675- let J = cv._2
678+ let cw = G
679+ let I = cw._1
680+ let J = cw._2
676681 let by = addressFromStringValue(aj(this, s))
677682 let aL = aB(I, J)
678- let cw = {
683+ let cx = {
679684 let ak = invoke(by, "usersListTraversal", [aL], nil)
680685 if ($isInstanceOf(ak, "Boolean"))
681686 then ak
682687 else throw(($getType(ak) + " couldn't be cast to Boolean"))
683688 }
684- if ((cw == cw))
685- then if (cw)
689+ if ((cx == cx))
690+ then if (cx)
686691 then $Tuple2(nil, true)
687692 else {
688- let cx = addressFromStringValue(valueOrErrorMessage(getString(ap, t), "invalid assets store contract"))
689- let bL = valueOrElse(getInteger(this, W(ct)), 0)
690- let cn = valueOrElse(getInteger(this, Q(G, ct)), 0)
691- let cy = if ((bL == 0))
693+ let cy = addressFromStringValue(valueOrErrorMessage(getString(ap, t), "invalid assets store contract"))
694+ let bL = valueOrElse(getInteger(this, W(cu)), 0)
695+ let cn = valueOrElse(getInteger(this, Q(G, cu)), 0)
696+ let cz = if ((bL == 0))
692697 then 0
693698 else fraction(cn, b, bL)
694- let cc = invoke(ap, "modifyWeight", [aL, cy], nil)
699+ let cc = invoke(ap, "modifyWeight", [aL, cz], nil)
695700 if ((cc == cc))
696- then $Tuple2([IntegerEntry(U(G, ct), cy)], false)
701+ then $Tuple2([IntegerEntry(U(G, cu), cz)], false)
697702 else throw("Strict value is not equal to itself.")
698703 }
699704 else throw("Strict value is not equal to itself.")
707712
708713 @Callable(bp)
709714 func finalizeHelper () = {
710- let cs = valueOrElse(getBoolean(A), false)
715+ let ct = valueOrElse(getBoolean(A), false)
711716 let k = valueOrElse(getInteger(this, l), 0)
712- let cz = (k - 1)
717+ let cA = (k - 1)
713718 let bF = al(this, D(k))
714719 let bz = al(this, h)
715720 let bG = (bF + bz)
717722 if (if (if ((height >= bG))
718723 then (bH == unit)
719724 else false)
720- then !(cs)
725+ then !(ct)
721726 else false)
722727 then {
723- let cA = (k + 1)
724- let cB = getInteger(this, i)
725- let cC = {
726- let ag = cB
728+ let cB = (k + 1)
729+ let cC = getInteger(this, i)
730+ let cD = {
731+ let ag = cC
727732 if ($isInstanceOf(ag, "Int"))
728733 then {
729734 let bS = ag
733738 then nil
734739 else throw("Match error")
735740 }
736- $Tuple2(([IntegerEntry(D(cA), height), IntegerEntry(x, height), IntegerEntry(l, cA), IntegerEntry(u, d), IntegerEntry(j(k), bz)] ++ cC), true)
741+ $Tuple2(([IntegerEntry(D(cB), height), IntegerEntry(x, height), IntegerEntry(l, cB), IntegerEntry(u, d), IntegerEntry(j(k), bz)] ++ cD), true)
737742 }
738- else if (if (cs)
743+ else if (if (ct)
739744 then (bH == unit)
740745 else false)
741746 then $Tuple2([IntegerEntry(u, f)], true)
743748 then $Tuple2(nil, false)
744749 else if ((bH == d))
745750 then {
746- let cD = getString(v)
747- let ag = cD
751+ let cE = getString(v)
752+ let ag = cE
748753 if ($isInstanceOf(ag, "Unit"))
749754 then {
750- let cE = getString(aT(aQ))
751- if ($isInstanceOf(cE, "Unit"))
755+ let cF = getString(aT(aQ))
756+ if ($isInstanceOf(cF, "Unit"))
752757 then $Tuple2([IntegerEntry(u, e), DeleteEntry(v)], true)
753- else if ($isInstanceOf(cE, "String"))
758+ else if ($isInstanceOf(cF, "String"))
754759 then {
755- let cF = cE
756- $Tuple2([StringEntry(v, cF)], true)
760+ let cG = cF
761+ $Tuple2([StringEntry(v, cG)], true)
757762 }
758763 else throw("Match error")
759764 }
760765 else if ($isInstanceOf(ag, "String"))
761766 then {
762767 let bU = ag
763- let cG = getString(aZ(aQ, bU))
764- if ((cG == cG))
768+ let cH = getString(aZ(aQ, bU))
769+ if ((cH == cH))
765770 then {
766- let cw = invoke(this, "processPoolBalanceINTERNAL", [bU], nil)
767- if ((cw == cw))
771+ let cx = invoke(this, "processPoolBalanceINTERNAL", [bU], nil)
772+ if ((cx == cx))
768773 then {
769- let cE = cG
770- if ($isInstanceOf(cE, "Unit"))
774+ let cF = cH
775+ if ($isInstanceOf(cF, "Unit"))
771776 then $Tuple2([IntegerEntry(u, e), DeleteEntry(v)], true)
772- else if ($isInstanceOf(cE, "String"))
777+ else if ($isInstanceOf(cF, "String"))
773778 then {
774- let cF = cE
775- $Tuple2([StringEntry(v, cF)], true)
779+ let cG = cF
780+ $Tuple2([StringEntry(v, cG)], true)
776781 }
777782 else throw("Match error")
778783 }
784789 }
785790 else if ((bH == e))
786791 then {
787- let cD = getString(v)
788- let cH = getString(w)
789- let ag = cD
792+ let cE = getString(v)
793+ let cI = getString(w)
794+ let ag = cE
790795 if ($isInstanceOf(ag, "Unit"))
791796 then {
792- let cE = getString(aT(aQ))
793- if ($isInstanceOf(cE, "Unit"))
797+ let cF = getString(aT(aQ))
798+ if ($isInstanceOf(cF, "Unit"))
794799 then $Tuple2([IntegerEntry(u, f), DeleteEntry(v), DeleteEntry(w)], true)
795- else if ($isInstanceOf(cE, "String"))
800+ else if ($isInstanceOf(cF, "String"))
796801 then {
797- let cI = cE
798- $Tuple2([StringEntry(v, cI)], true)
802+ let cJ = cF
803+ $Tuple2([StringEntry(v, cJ)], true)
799804 }
800805 else throw("Match error")
801806 }
803808 then {
804809 let bU = ag
805810 let G = an(bU)
806- let cJ = {
807- let cE = cH
808- if ($isInstanceOf(cE, "Unit"))
811+ let cK = {
812+ let cF = cI
813+ if ($isInstanceOf(cF, "Unit"))
809814 then getString(aT(aR(G)))
810- else if ($isInstanceOf(cE, "String"))
815+ else if ($isInstanceOf(cF, "String"))
811816 then {
812- let cK = cE
813- let cL = getString(aZ(aR(G), cK))
814- if ((cL == cL))
817+ let cL = cF
818+ let cM = getString(aZ(aR(G), cL))
819+ if ((cM == cM))
815820 then {
816- let cM = invoke(this, "processVoteINTERNAL", [bU, cK], nil)
817- if ((cM == cM))
818- then cL
821+ let cN = invoke(this, "processVoteINTERNAL", [bU, cL], nil)
822+ if ((cN == cN))
823+ then cM
819824 else throw("Strict value is not equal to itself.")
820825 }
821826 else throw("Strict value is not equal to itself.")
822827 }
823828 else throw("Match error")
824829 }
825- let cE = cJ
826- if ($isInstanceOf(cE, "Unit"))
830+ let cF = cK
831+ if ($isInstanceOf(cF, "Unit"))
827832 then {
828- let cG = getString(aZ(aQ, bU))
829- let cN = cG
830- if ($isInstanceOf(cN, "Unit"))
833+ let cH = getString(aZ(aQ, bU))
834+ let cO = cH
835+ if ($isInstanceOf(cO, "Unit"))
831836 then $Tuple2([IntegerEntry(u, f), DeleteEntry(v), DeleteEntry(w)], true)
832- else if ($isInstanceOf(cN, "String"))
837+ else if ($isInstanceOf(cO, "String"))
833838 then {
834- let bl = cN
839+ let bl = cO
835840 $Tuple2([StringEntry(v, bl), DeleteEntry(w)], true)
836841 }
837842 else throw("Match error")
838843 }
839- else if ($isInstanceOf(cE, "String"))
844+ else if ($isInstanceOf(cF, "String"))
840845 then {
841- let cO = cE
842- $Tuple2([StringEntry(w, cO)], true)
846+ let cP = cF
847+ $Tuple2([StringEntry(w, cP)], true)
843848 }
844849 else throw("Match error")
845850 }
847852 }
848853 else if ((bH == f))
849854 then {
850- let cD = getString(v)
851- let ag = cD
855+ let cE = getString(v)
856+ let ag = cE
852857 if ($isInstanceOf(ag, "Unit"))
853858 then {
854- let cE = getString(aT(aQ))
855- if ($isInstanceOf(cE, "Unit"))
859+ let cF = getString(aT(aQ))
860+ if ($isInstanceOf(cF, "Unit"))
856861 then {
857- let ca = if (cs)
862+ let ca = if (ct)
858863 then [DeleteEntry(u), DeleteEntry(A)]
859- else [DeleteEntry(u), BooleanEntry(E(cz), true), IntegerEntry(y, k), IntegerEntry(z, bF)]
860- let cP = aO()
861- if ((cP == cP))
864+ else [DeleteEntry(u), BooleanEntry(E(cA), true), IntegerEntry(y, k), IntegerEntry(z, bF)]
865+ let cQ = aO()
866+ if ((cQ == cQ))
862867 then $Tuple2(ca, true)
863868 else throw("Strict value is not equal to itself.")
864869 }
865- else if ($isInstanceOf(cE, "String"))
870+ else if ($isInstanceOf(cF, "String"))
866871 then {
867- let cF = cE
868- $Tuple2([StringEntry(v, cF)], true)
872+ let cG = cF
873+ $Tuple2([StringEntry(v, cG)], true)
869874 }
870875 else throw("Match error")
871876 }
872877 else if ($isInstanceOf(ag, "String"))
873878 then {
874879 let bU = ag
875- let cG = getString(aZ(aQ, bU))
876- if ((cG == cG))
880+ let cH = getString(aZ(aQ, bU))
881+ if ((cH == cH))
877882 then {
878- let cw = {
879- let ak = invoke(this, "processPoolINTERNAL", [bU, cs], nil)
883+ let cx = {
884+ let ak = invoke(this, "processPoolINTERNAL", [bU, ct], nil)
880885 if ($isInstanceOf(ak, "Boolean"))
881886 then ak
882887 else throw(($getType(ak) + " couldn't be cast to Boolean"))
883888 }
884- if ((cw == cw))
885- then if (cw)
889+ if ((cx == cx))
890+ then if (cx)
886891 then $Tuple2(nil, true)
887892 else {
888- let cE = cG
889- if ($isInstanceOf(cE, "Unit"))
893+ let cF = cH
894+ if ($isInstanceOf(cF, "Unit"))
890895 then {
891- let ca = if (cs)
896+ let ca = if (ct)
892897 then [DeleteEntry(u), DeleteEntry(A), DeleteEntry(v)]
893- else [DeleteEntry(u), BooleanEntry(E(cz), true), IntegerEntry(y, k), IntegerEntry(z, bF), DeleteEntry(v)]
894- let cP = aO()
895- if ((cP == cP))
898+ else [DeleteEntry(u), BooleanEntry(E(cA), true), IntegerEntry(y, k), IntegerEntry(z, bF), DeleteEntry(v)]
899+ let cQ = aO()
900+ if ((cQ == cQ))
896901 then $Tuple2(ca, true)
897902 else throw("Strict value is not equal to itself.")
898903 }
899- else if ($isInstanceOf(cE, "String"))
904+ else if ($isInstanceOf(cF, "String"))
900905 then {
901- let cF = cE
902- $Tuple2([StringEntry(v, cF)], true)
906+ let cG = cF
907+ $Tuple2([StringEntry(v, cG)], true)
903908 }
904909 else throw("Match error")
905910 }
915920
916921
917922 @Callable(bp)
918-func finalizeWrapper (cQ) = {
919- let cR = addressFromStringValue(getStringValue(this, p))
920- let cS = {
923+func finalizeWrapper (cR) = {
924+ let cS = addressFromStringValue(getStringValue(this, p))
925+ let cT = {
921926 let ak = invoke(this, "finalizeHelper", nil, nil)
922927 if ($isInstanceOf(ak, "Boolean"))
923928 then ak
924929 else throw(($getType(ak) + " couldn't be cast to Boolean"))
925930 }
926- if ((cS == cS))
927- then if (!(cS))
928- then if ((cQ == 0))
931+ if ((cT == cT))
932+ then if (!(cT))
933+ then if ((cR == 0))
929934 then ab("Current voting is not over yet")
930935 else {
931- let cT = invoke(cR, "finalize", nil, nil)
932- if ((cT == cT))
936+ let cU = invoke(cS, "finalize", nil, nil)
937+ if ((cU == cU))
933938 then $Tuple2(nil, unit)
934939 else throw("Strict value is not equal to itself.")
935940 }
936941 else {
937- let cU = valueOrElse(getInteger(this, m), c)
938- if ((cU > cQ))
942+ let cV = valueOrElse(getInteger(this, m), c)
943+ if ((cV > cR))
939944 then {
940- let cT = invoke(this, "finalizeWrapper", [(cQ + 1)], nil)
941- if ((cT == cT))
945+ let cU = invoke(this, "finalizeWrapper", [(cR + 1)], nil)
946+ if ((cU == cU))
942947 then $Tuple2(nil, unit)
943948 else throw("Strict value is not equal to itself.")
944949 }
951956
952957 @Callable(bp)
953958 func finalize () = {
954- let cT = invoke(this, "finalizeWrapper", [0], nil)
955- if ((cT == cT))
959+ let cU = invoke(this, "finalizeWrapper", [0], nil)
960+ if ((cU == cU))
956961 then $Tuple2(nil, unit)
957962 else throw("Strict value is not equal to itself.")
958963 }
987992 @Callable(bp)
988993 func isFinalizationInProgress () = {
989994 let bH = getInteger(this, u)
990- let cV = (bH != unit)
991- $Tuple2(nil, cV)
995+ let cW = (bH != unit)
996+ $Tuple2(nil, cW)
992997 }
993998
994999
10161021
10171022
10181023 @Callable(bp)
1019-func resume (I,J,cW) = {
1020- let cX = valueOrErrorMessage(az(I, J), Z("invalid assets"))
1021- let cd = cX._1
1022- let aL = cX._2
1023- let cY = bp.payments[0]
1024- let cx = addressFromStringValue(getStringValue(this, t))
1025- let cZ = "%s__config"
1026- let da = 1
1024+func resume (I,J,cX) = {
1025+ let bH = getInteger(this, u)
1026+ let cY = valueOrErrorMessage(az(I, J), Z("invalid assets"))
1027+ let cd = cY._1
1028+ let aL = cY._2
1029+ let cZ = bp.payments[0]
1030+ let cy = addressFromStringValue(getStringValue(this, t))
1031+ let da = "%s__config"
1032+ let db = 1
10271033 let bx = addressFromStringValue(aj(this, r))
1028- let db = fromBase58String(split(getStringValue(bx, cZ), a)[da])
1029- let dc = {
1030- let ak = invoke(cx, "isVerifiedREADONLY", [I], nil)
1034+ let dc = fromBase58String(split(getStringValue(bx, da), a)[db])
1035+ let dd = {
1036+ let ak = invoke(cy, "isVerifiedREADONLY", [I], nil)
10311037 if ($isInstanceOf(ak, "Boolean"))
10321038 then ak
10331039 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10341040 }
1035- let dd = {
1036- let ak = invoke(cx, "isVerifiedREADONLY", [J], nil)
1041+ let de = {
1042+ let ak = invoke(cy, "isVerifiedREADONLY", [J], nil)
10371043 if ($isInstanceOf(ak, "Boolean"))
10381044 then ak
10391045 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10401046 }
1041- let de = valueOrErrorMessage(getInteger(this, n), "invalid resumption fee")
1042- let bA = [if ((cY.assetId == db))
1047+ let df = valueOrErrorMessage(getInteger(this, n), "invalid resumption fee")
1048+ let bA = [if ((bH == unit))
10431049 then true
1044- else ab("invalid fee payment asset id"), if ((cY.amount == de))
1050+ else ab("finalization is in progress"), if ((cZ.assetId == dc))
10451051 then true
1046- else ab("invalid fee payment amount"), if (if (dc)
1047- then dd
1052+ else ab("invalid fee payment asset id"), if ((cZ.amount == df))
1053+ then true
1054+ else ab("invalid fee payment amount"), if (if (dd)
1055+ then de
10481056 else false)
10491057 then true
10501058 else ab("both assets should be verified")]
10511059 if ((bA == bA))
10521060 then {
1053- let df = assetBalance(this, aL)
1054- if ((df == df))
1061+ let dg = assetBalance(this, aL)
1062+ if ((dg == dg))
10551063 then {
1056- let dg = false
1057- let dh = if ((size(bp.payments) == 1))
1064+ let dh = false
1065+ let di = if ((size(bp.payments) == 1))
10581066 then {
1059- let di = {
1067+ let dj = {
10601068 let ak = invoke(ap, "checkBalance", [ay(aL)], nil)
10611069 if ($isInstanceOf(ak, "Boolean"))
10621070 then ak
10631071 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10641072 }
1065- if (di)
1073+ if (dj)
10661074 then true
10671075 else ab("assets should be attached")
10681076 }
10691077 else if ((size(bp.payments) == 2))
10701078 then {
1071- let dj = valueOrErrorMessage(scriptHash(cd), Z("pool address is not scripted"))
1072- let dk = fromBase64String(valueOrErrorMessage(getString(ap, C()), Z("allowed lp stable script hash is not set")))
1073- let dl = (dj == dk)
1074- let dm = if (dl)
1079+ let dk = valueOrErrorMessage(scriptHash(cd), Z("pool address is not scripted"))
1080+ let dl = fromBase64String(valueOrErrorMessage(getString(ap, C()), Z("allowed lp stable script hash is not set")))
1081+ let dm = (dk == dl)
1082+ let dn = if (dm)
10751083 then "putOneTknV2"
10761084 else "putOneTkn"
1077- invoke(cd, dm, [cW, dg], [bp.payments[1]])
1085+ invoke(cd, dn, [cX, dh], [bp.payments[1]])
10781086 }
10791087 else if ((size(bp.payments) == 3))
1080- then invoke(cd, "put", [cW, dg], [bp.payments[1], bp.payments[2]])
1088+ then invoke(cd, "put", [cX, dh], [bp.payments[1], bp.payments[2]])
10811089 else ab("invalid payments size")
1082- if ((dh == dh))
1090+ if ((di == di))
10831091 then {
1084- let dn = assetBalance(this, aL)
1085- if ((dn == dn))
1092+ let do = assetBalance(this, aL)
1093+ if ((do == do))
10861094 then {
1087- let do = (dn - df)
1088- let dp = if ((do > 0))
1089- then [ScriptTransfer(bp.caller, do, aL)]
1095+ let dp = (do - dg)
1096+ let dq = if ((dp > 0))
1097+ then [ScriptTransfer(bp.caller, dp, aL)]
10901098 else nil
1091- let dq = invoke(ap, "setWxEmissionPoolLabel", [I, J], nil)
1092- if ((dq == dq))
1099+ let dr = invoke(ap, "setWxEmissionPoolLabel", [I, J], nil)
1100+ if ((dr == dr))
10931101 then {
10941102 let G = $Tuple2(I, J)
10951103 let bB = ([BooleanEntry(F(G), true)] ++ be(aQ, am(G)))
1096- $Tuple2((bB ++ dp), unit)
1104+ $Tuple2((bB ++ dq), unit)
10971105 }
10981106 else throw("Strict value is not equal to itself.")
10991107 }
11071115 }
11081116
11091117
1110-@Verifier(dr)
1111-func ds () = {
1112- let dt = {
1118+@Verifier(ds)
1119+func dt () = {
1120+ let du = {
11131121 let ag = bm()
11141122 if ($isInstanceOf(ag, "ByteVector"))
11151123 then {
11171125 bq
11181126 }
11191127 else if ($isInstanceOf(ag, "Unit"))
1120- then dr.senderPublicKey
1128+ then ds.senderPublicKey
11211129 else throw("Match error")
11221130 }
1123- sigVerify(dr.bodyBytes, dr.proofs[0], dt)
1131+ sigVerify(ds.bodyBytes, ds.proofs[0], du)
11241132 }
11251133
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 100000000
77
88 let c = 10
99
1010 let d = 0
1111
1212 let e = 1
1313
1414 let f = 2
1515
1616 let g = "WAVES"
1717
1818 let h = makeString(["%s", "epochLength"], a)
1919
2020 let i = makeString(["%s%s", "epochLength__new"], a)
2121
2222 func j (k) = makeString(["%s%d", "epochLength", toString(k)], a)
2323
2424
2525 let l = makeString(["%s", "currentEpoch"], a)
2626
2727 let m = makeString(["%s", "maxDepth"], a)
2828
2929 let n = makeString(["%s", "resumptionFee"], a)
3030
3131 let o = makeString(["%s", "votingEmissionCandidateContract"], a)
3232
3333 let p = makeString(["%s", "votingEmissionRateContract"], a)
3434
3535 let q = makeString(["%s", "factoryContract"], a)
3636
3737 let r = makeString(["%s", "boostingContract"], a)
3838
3939 let s = makeString(["%s", "stakingContract"], a)
4040
4141 let t = makeString(["%s", "assetsStoreContract"], a)
4242
4343 let u = makeString(["%s", "finalizationStage"], a)
4444
4545 let v = makeString(["%s", "nextPool"], a)
4646
4747 let w = makeString(["%s", "nextUser"], a)
4848
4949 let x = makeString(["%s", "startHeight"], a)
5050
5151 let y = makeString(["%s", "currentEpochUi"], a)
5252
5353 let z = makeString(["%s", "startHeightUi"], a)
5454
5555 let A = makeString(["%s", "force"], a)
5656
5757 func B () = "%s__allowedLpScriptHash"
5858
5959
6060 func C () = "%s__allowedLpStableScriptHash"
6161
6262
6363 func D (k) = makeString(["%s%d", "startHeight", toString(k)], a)
6464
6565
6666 func E (k) = makeString(["%s%d", "finalized", toString(k)], a)
6767
6868
6969 func F (G) = {
7070 let H = G
7171 let I = H._1
7272 let J = H._2
7373 makeString(["%s%s%s", "inList", I, J], a)
7474 }
7575
7676
7777 func K (G,k) = {
7878 let L = G
7979 let I = L._1
8080 let J = L._2
8181 makeString(["%s%s%s%d", "insufficientBalances", I, J, toString(k)], a)
8282 }
8383
8484
8585 func M (N,k) = makeString(["%s%s%d", "used", toString(N), toString(k)], a)
8686
8787
8888 func O (G,N,k) = {
8989 let P = G
9090 let I = P._1
9191 let J = P._2
9292 makeString(["%s%s%s%s%d", "vote", I, J, toString(N), toString(k)], a)
9393 }
9494
9595
9696 func Q (G,k) = {
9797 let R = G
9898 let I = R._1
9999 let J = R._2
100100 makeString(["%s%s%s%d", "votingResult", I, J, toString(k)], a)
101101 }
102102
103103
104104 func S (T,k) = makeString(["%s%s%d", "votingResultStaked", T, toString(k)], a)
105105
106106
107107 func U (G,k) = {
108108 let V = G
109109 let I = V._1
110110 let J = V._2
111111 makeString(["%s%s%s%d", "poolShare", I, J, toString(k)], a)
112112 }
113113
114114
115115 func W (k) = makeString(["%s%d", "totalVotes", toString(k)], a)
116116
117117
118118 func X (T,Y) = makeString(["%s%s%s", "staked", Y, T], a)
119119
120120
121121 func Z (aa) = makeString(["voting_emission.ride:", aa], " ")
122122
123123
124124 func ab (aa) = throw(Z(aa))
125125
126126
127127 func ac (N,ad,ae) = {
128128 let af = Z(makeString(["mandatory ", toString(N), ".", ad, " is not defined"], ""))
129129 valueOrErrorMessage({
130130 let ag = ae
131131 if ($isInstanceOf(ag, "String"))
132132 then {
133133 let ah = ag
134134 getString(N, ad)
135135 }
136136 else if ($isInstanceOf(ag, "Int"))
137137 then {
138138 let ai = ag
139139 getInteger(N, ad)
140140 }
141141 else ab("invalid entry type")
142142 }, af)
143143 }
144144
145145
146146 func aj (N,ad) = {
147147 let ak = ac(N, ad, "")
148148 if ($isInstanceOf(ak, "String"))
149149 then ak
150150 else throw(($getType(ak) + " couldn't be cast to String"))
151151 }
152152
153153
154154 func al (N,ad) = {
155155 let ak = ac(N, ad, 0)
156156 if ($isInstanceOf(ak, "Int"))
157157 then ak
158158 else throw(($getType(ak) + " couldn't be cast to Int"))
159159 }
160160
161161
162162 func am (G) = ((G._1 + a) + G._2)
163163
164164
165165 func an (ah) = {
166166 let ao = split(ah, a)
167167 if ((size(ao) == 2))
168168 then $Tuple2(ao[0], ao[1])
169169 else ab("invalid pool string")
170170 }
171171
172172
173173 let ap = addressFromStringValue(aj(this, q))
174174
175175 let aq = 10
176176
177177 func ar () = "%s__factoryConfig"
178178
179179
180180 func as (at) = split(aj(at, ar()), a)
181181
182182
183183 func au (av) = addressFromStringValue(av[aq])
184184
185185
186186 func aw (ax) = if ((ax == g))
187187 then unit
188188 else fromBase58String(ax)
189189
190190
191191 func ay (ax) = if ((ax == unit))
192192 then g
193193 else toBase58String(value(ax))
194194
195195
196196 func az (I,J) = {
197197 let aA = {
198198 let ak = invoke(ap, "poolInfoREADONLY", [I, J], nil)
199199 if ($isInstanceOf(ak, "(Address, ByteVector)"))
200200 then ak
201201 else unit
202202 }
203203 aA
204204 }
205205
206206
207207 func aB (I,J) = {
208208 func aC (aD) = ("%s%s%s__mappings__baseAsset2internalId__" + aD)
209209
210210 func aE (aF,aG) = (((("%d%d%s%s__" + toString(aF)) + "__") + toString(aG)) + "__mappings__poolAssets2PoolContract")
211211
212212 func aH (aI) = (("%s%s%s__" + aI) + "__mappings__poolContract2LpAsset")
213213
214214 let aJ = al(ap, aC(I))
215215 let aK = al(ap, aC(J))
216216 let aI = aj(ap, aE(aJ, aK))
217217 let aL = aj(ap, aH(aI))
218218 aL
219219 }
220220
221221
222222 func aM (G) = {
223223 let aN = G
224224 let I = aN._1
225225 let J = aN._2
226226 let ak = invoke(ap, "checkWxEmissionPoolLabel", [I, J], nil)
227227 if ($isInstanceOf(ak, "Boolean"))
228228 then ak
229229 else throw(($getType(ak) + " couldn't be cast to Boolean"))
230230 }
231231
232232
233233 func aO () = {
234234 let av = as(ap)
235235 let aP = au(av)
236236 invoke(aP, "deposit", nil, nil)
237237 }
238238
239239
240240 let aQ = "pools"
241241
242242 func aR (G) = {
243243 let aS = G
244244 let I = aS._1
245245 let J = aS._2
246246 makeString(["votes", I, J], a)
247247 }
248248
249249
250250 func aT (aU) = {
251251 let aV = if ((aU == aQ))
252252 then "%s%s"
253253 else "%s%s%s%s"
254254 makeString([aV, aU, "head"], a)
255255 }
256256
257257
258258 func aW (aU) = {
259259 let aV = if ((aU == aQ))
260260 then "%s%s"
261261 else "%s%s%s%s"
262262 makeString([aV, aU, "size"], a)
263263 }
264264
265265
266266 func aX (aU,aY) = {
267267 let aV = if ((aU == aQ))
268268 then "%s%s%s%s"
269269 else "%s%s%s%s%s"
270270 makeString([aV, aU, aY, "prev"], a)
271271 }
272272
273273
274274 func aZ (aU,aY) = {
275275 let aV = if ((aU == aQ))
276276 then "%s%s%s%s"
277277 else "%s%s%s%s%s"
278278 makeString([aV, aU, aY, "next"], a)
279279 }
280280
281281
282282 func ba (aU,aY) = {
283283 let bb = getString(this, aT(aU))
284284 let bc = getString(this, aX(aU, aY))
285285 let bd = getString(this, aZ(aU, aY))
286286 if (if ((aY == valueOrElse(bb, "")))
287287 then true
288288 else (bc != unit))
289289 then true
290290 else (bd != unit)
291291 }
292292
293293
294294 func be (aU,aY) = {
295295 let bb = getString(this, aT(aU))
296296 let bf = valueOrElse(getInteger(this, aW(aU)), 0)
297297 let bg = if (!(ba(aU, aY)))
298298 then true
299299 else ab("Node exists")
300300 if ((bg == bg))
301301 then (([IntegerEntry(aW(aU), (bf + 1))] ++ (if ((bb != unit))
302302 then [StringEntry(aZ(aU, aY), value(bb)), StringEntry(aX(aU, value(bb)), aY)]
303303 else nil)) ++ [StringEntry(aT(aU), aY)])
304304 else throw("Strict value is not equal to itself.")
305305 }
306306
307307
308308 func bh (aU,aY) = {
309309 let bb = getString(this, aT(aU))
310310 let bf = valueOrElse(getInteger(this, aW(aU)), 0)
311311 let bc = getString(this, aX(aU, aY))
312312 let bd = getString(this, aZ(aU, aY))
313313 ([IntegerEntry(aW(aU), (bf - 1))] ++ (if (if ((bc != unit))
314314 then (bd != unit)
315315 else false)
316316 then [StringEntry(aZ(aU, value(bc)), value(bd)), StringEntry(aX(aU, value(bd)), value(bc)), DeleteEntry(aX(aU, aY)), DeleteEntry(aZ(aU, aY))]
317317 else if ((bd != unit))
318318 then [StringEntry(aT(aU), value(bd)), DeleteEntry(aZ(aU, aY)), DeleteEntry(aX(aU, value(bd)))]
319319 else if ((bc != unit))
320320 then [DeleteEntry(aX(aU, aY)), DeleteEntry(aZ(aU, value(bc)))]
321321 else if ((aY == valueOrElse(bb, "")))
322322 then [DeleteEntry(aT(aU))]
323323 else ab(((("invalid node: " + aU) + ".") + aY))))
324324 }
325325
326326
327327 func bi () = "%s__managerVaultAddress"
328328
329329
330330 func bj () = "%s__managerPublicKey"
331331
332332
333333 func bk () = {
334334 let ag = getString(bi())
335335 if ($isInstanceOf(ag, "String"))
336336 then {
337337 let bl = ag
338338 addressFromStringValue(bl)
339339 }
340340 else this
341341 }
342342
343343
344344 func bm () = {
345345 let bn = bk()
346346 let ag = getString(bn, bj())
347347 if ($isInstanceOf(ag, "String"))
348348 then {
349349 let bl = ag
350350 fromBase58String(bl)
351351 }
352352 else if ($isInstanceOf(ag, "Unit"))
353353 then unit
354354 else throw("Match error")
355355 }
356356
357357
358358 func bo (bp) = {
359359 let ag = bm()
360360 if ($isInstanceOf(ag, "ByteVector"))
361361 then {
362362 let bq = ag
363363 (bp.callerPublicKey == bq)
364364 }
365365 else if ($isInstanceOf(ag, "Unit"))
366366 then (bp.caller == this)
367367 else throw("Match error")
368368 }
369369
370370
371371 func br (bp) = if (bo(bp))
372372 then true
373373 else throw("permission denied")
374374
375375
376376 func bs (bp) = if ((bp.caller == this))
377377 then true
378378 else throw("permission denied")
379379
380380
381381 @Callable(bp)
382382 func getUserGwxAmountAtHeight (bt,bu) = {
383383 let bv = valueOrErrorMessage(addressFromString(aj(this, r)), Z("invalid boosting contract address"))
384384 $Tuple2(nil, {
385385 let ak = invoke(bv, "getUserGwxAmountAtHeightREADONLY", [bt, bu], nil)
386386 if ($isInstanceOf(ak, "Int"))
387387 then ak
388388 else throw(($getType(ak) + " couldn't be cast to Int"))
389389 })
390390 }
391391
392392
393393
394394 @Callable(bp)
395395 func constructor (ap,bw,bx,by,bz) = {
396396 let bA = [br(bp), if ((addressFromString(ap) != unit))
397397 then true
398398 else "invalid factory contract address", if ((addressFromString(bw) != unit))
399399 then true
400400 else "invalid voting emission candidate contract address", if ((addressFromString(bx) != unit))
401401 then true
402402 else "invalid boosting contract address", if ((addressFromString(by) != unit))
403403 then true
404404 else "invalid staking contract address", if ((bz > 0))
405405 then true
406406 else ab("invalid epoch length")]
407407 if ((bA == bA))
408408 then $Tuple2([StringEntry(q, ap), StringEntry(o, bw), StringEntry(r, bx), StringEntry(s, by), IntegerEntry(h, bz)], unit)
409409 else throw("Strict value is not equal to itself.")
410410 }
411411
412412
413413
414414 @Callable(bp)
415415 func create (I,J) = {
416416 let bA = [if ((toBase58String(bp.caller.bytes) == valueOrElse(getString(this, o), "")))
417417 then true
418418 else br(bp)]
419419 if ((bA == bA))
420420 then {
421421 let G = $Tuple2(I, J)
422422 let bB = ([BooleanEntry(F(G), true)] ++ be(aQ, am(G)))
423423 let bC = (getInteger(this, l) == unit)
424424 let bD = if (bC)
425425 then {
426426 let k = 0
427427 [IntegerEntry(l, k), IntegerEntry(D(k), height), IntegerEntry(x, height), IntegerEntry(y, k), IntegerEntry(z, height)]
428428 }
429429 else nil
430430 $Tuple2((bB ++ bD), unit)
431431 }
432432 else throw("Strict value is not equal to itself.")
433433 }
434434
435435
436436
437437 @Callable(bp)
438438 func vote (I,J,bE) = {
439439 let G = $Tuple2(I, J)
440440 let k = valueOrElse(getInteger(this, l), 0)
441441 let bF = al(this, D(k))
442442 let bz = al(this, h)
443443 let bG = (bF + bz)
444444 let bH = getInteger(this, u)
445445 let bI = valueOrElse(getInteger(this, M(bp.caller, k)), 0)
446446 let bJ = valueOrElse(getInteger(this, O(G, bp.caller, k)), 0)
447447 let bK = valueOrElse(getInteger(this, Q(G, k)), 0)
448448 let bL = valueOrElse(getInteger(this, W(k)), 0)
449449 let bM = {
450450 let ak = invoke(this, "getUserGwxAmountAtHeight", [toBase58String(bp.caller.bytes), bG], nil)
451451 if ($isInstanceOf(ak, "Int"))
452452 then ak
453453 else throw(($getType(ak) + " couldn't be cast to Int"))
454454 }
455455 let bN = (bM - bI)
456456 let bO = (bJ + bE)
457457 let bP = aM(G)
458458 let bA = [if ((getBoolean(F(G)) != unit))
459459 then true
460460 else ab("invalid assets"), if ((bG > height))
461461 then true
462462 else ab("invalid height"), if ((bH == unit))
463463 then true
464464 else ab("finalization in progress"), if ((bM > 0))
465465 then true
466466 else ab("you do not have gWX"), if (if ((bE > 0))
467467 then (bN >= bE)
468468 else false)
469469 then true
470470 else ab("invalid amount"), if (bP)
471471 then true
472472 else ab("pool hasn't WX_EMISSION label")]
473473 if ((bA == bA))
474474 then {
475475 let bQ = aR(G)
476476 let Y = toString(bp.caller)
477477 let bR = if (ba(bQ, Y))
478478 then nil
479479 else be(bQ, Y)
480480 $Tuple2(([IntegerEntry(M(bp.caller, k), (bI + bE)), IntegerEntry(O(G, bp.caller, k), bO), IntegerEntry(Q(G, k), (bK + bE)), IntegerEntry(W(k), (bL + bE))] ++ bR), unit)
481481 }
482482 else throw("Strict value is not equal to itself.")
483483 }
484484
485485
486486
487487 @Callable(bp)
488488 func cancelVote (I,J) = {
489489 let G = $Tuple2(I, J)
490490 let k = valueOrElse(getInteger(this, l), 0)
491491 let bF = al(this, D(k))
492492 let bz = al(this, h)
493493 let bG = (bF + bz)
494494 let bH = getInteger(this, u)
495495 let bI = valueOrElse(getInteger(this, M(bp.caller, k)), 0)
496496 let bJ = valueOrElse(getInteger(this, O(G, bp.caller, k)), 0)
497497 let bK = valueOrElse(getInteger(this, Q(G, k)), 0)
498498 let bL = valueOrElse(getInteger(this, W(k)), 0)
499499 let bA = [if ((getBoolean(F(G)) != unit))
500500 then true
501501 else ab("invalid assets"), if ((bG > height))
502502 then true
503503 else ab("invalid height"), if ((bH == unit))
504504 then true
505505 else ab("finalization in progress"), if ((bJ > 0))
506506 then true
507507 else ab("no vote")]
508508 if ((bA == bA))
509509 then {
510510 let bQ = aR(G)
511511 let Y = toString(bp.caller)
512512 $Tuple2(([IntegerEntry(M(bp.caller, k), max([(bI - bJ), 0])), DeleteEntry(O(G, bp.caller, k)), IntegerEntry(Q(G, k), (bK - bJ)), IntegerEntry(W(k), (bL - bJ))] ++ bh(bQ, Y)), unit)
513513 }
514514 else throw("Strict value is not equal to itself.")
515515 }
516516
517517
518518
519519 @Callable(bp)
520520 func setEpochLength (bS) = {
521521 let bA = [br(bp), if ((bS > 0))
522522 then true
523523 else ab("invalid epoch length")]
524524 if ((bA == bA))
525525 then $Tuple2([IntegerEntry(i, bS)], unit)
526526 else throw("Strict value is not equal to itself.")
527527 }
528528
529529
530530
531531 @Callable(bp)
532532 func setMaxDepth (bT) = {
533533 let bA = [br(bp), if ((bT > 0))
534534 then true
535535 else ab("invalid max depth")]
536536 if ((bA == bA))
537537 then $Tuple2([IntegerEntry(m, bT)], unit)
538538 else throw("Strict value is not equal to itself.")
539539 }
540540
541541
542542
543543 @Callable(bp)
544544 func processPoolBalanceINTERNAL (bU) = {
545545 let bV = bs(bp)
546546 if ((bV == bV))
547547 then {
548548 let k = al(this, l)
549549 let bW = (k - 1)
550550 let G = an(bU)
551551 let bX = G
552552 let I = bX._1
553553 let J = bX._2
554554 let aL = aB(I, J)
555555 let bY = {
556556 let ak = invoke(ap, "checkBalance", [aL], nil)
557557 if ($isInstanceOf(ak, "Boolean"))
558558 then ak
559559 else throw(($getType(ak) + " couldn't be cast to Boolean"))
560560 }
561561 let bZ = !(valueOrElse(getBoolean(this, K(G, (bW - 1))), false))
562562 let ca = if (!(bY))
563563 then if (!(bZ))
564564 then {
565565 let cb = invoke(ap, "deleteWxEmissionPoolLabel", [I, J], nil)
566566 if ((cb == cb))
567567 then {
568568 let cc = invoke(ap, "modifyWeight", [aL, 0], nil)
569569 if ((cc == cc))
570570 then {
571571 let cd = valueOrErrorMessage(az(I, J), Z("invalid assets"))._1
572572 let ce = 3
573573 let cf = invoke(ap, "managePool", [toString(cd), ce], nil)
574574 if ((cf == cf))
575575 then {
576576 let cg = ([DeleteEntry(F(G))] ++ bh(aQ, am(G)))
577577 ([IntegerEntry(U(G, bW), 0)] ++ cg)
578578 }
579579 else throw("Strict value is not equal to itself.")
580580 }
581581 else throw("Strict value is not equal to itself.")
582582 }
583583 else throw("Strict value is not equal to itself.")
584584 }
585585 else [BooleanEntry(K(G, bW), true)]
586586 else nil
587587 $Tuple2(ca, unit)
588588 }
589589 else throw("Strict value is not equal to itself.")
590590 }
591591
592592
593593
594594 @Callable(bp)
595595 func processVoteINTERNAL (bU,Y) = {
596596 let bV = bs(bp)
597597 if ((bV == bV))
598598 then {
599599 let bt = valueOrErrorMessage(addressFromString(Y), Z(("processVoteINTERNAL: invalid user address " + Y)))
600600 let k = al(this, l)
601601 let bW = (k - 1)
602602 let bz = al(this, h)
603603 let bF = al(this, D(k))
604604 let bG = (bF + bz)
605605 let ch = al(this, D(bW))
606606 let ci = al(this, j(bW))
607607 let cj = (ch + ci)
608608 let ck = if ((bW >= 0))
609609 then true
610610 else ab("processVoteINTERNAL: invalid previous epoch")
611611 if ((ck == ck))
612612 then {
613613 let G = an(bU)
614614 let cl = G
615615 let I = cl._1
616616 let J = cl._2
617617 let bM = {
618618 let ak = invoke(this, "getUserGwxAmountAtHeight", [Y, bG], nil)
619619 if ($isInstanceOf(ak, "Int"))
620620 then ak
621621 else throw(($getType(ak) + " couldn't be cast to Int"))
622622 }
623623 let cm = {
624624 let ak = invoke(this, "getUserGwxAmountAtHeight", [Y, cj], nil)
625625 if ($isInstanceOf(ak, "Int"))
626626 then ak
627627 else throw(($getType(ak) + " couldn't be cast to Int"))
628628 }
629629 let bL = valueOrElse(getInteger(W(k)), 0)
630630 let cn = valueOrElse(getInteger(Q(G, k)), 0)
631- let co = valueOrErrorMessage(getInteger(O(G, bt, bW)), Z((((("processVoteINTERNAL " + bU) + " ") + Y) + ": no previous vote")))
631+ let co = getInteger(O(G, bt, bW))
632+ let cp = valueOrErrorMessage(co, Z((((("processVoteINTERNAL " + bU) + " ") + Y) + ": no previous vote")))
632633 let bI = valueOrElse(getInteger(this, M(bt, k)), 0)
633634 let T = aB(I, J)
634- let cp = valueOrElse(getInteger(S(T, bW)), 0)
635+ let cq = valueOrElse(getInteger(S(T, bW)), 0)
635636 let by = addressFromStringValue(aj(this, s))
636- let cq = valueOrElse(getInteger(by, X(T, Y)), 0)
637- let cr = if ((cq == 0))
637+ let cr = valueOrElse(getInteger(by, X(T, Y)), 0)
638+ let cs = if (if ((cr == 0))
639+ then true
640+ else (co == unit))
638641 then nil
639- else [IntegerEntry(S(T, bW), (cp + co))]
642+ else [IntegerEntry(S(T, bW), (cq + cp))]
640643 let aL = aB(I, J)
641644 let bO = if ((cm > 0))
642- then fraction(co, bM, cm)
645+ then fraction(cp, bM, cm)
643646 else 0
644- let ca = if ((bO > 0))
645- then [IntegerEntry(O(G, bt, k), bO), IntegerEntry(W(k), (bL + bO)), IntegerEntry(Q(G, k), (cn + bO)), IntegerEntry(M(bt, k), (bI + bO))]
646- else bh(aR(G), Y)
647- $Tuple2((ca ++ cr), unit)
647+ let ca = if (if ((co == unit))
648+ then true
649+ else (0 >= bO))
650+ then bh(aR(G), Y)
651+ else [IntegerEntry(O(G, bt, k), bO), IntegerEntry(W(k), (bL + bO)), IntegerEntry(Q(G, k), (cn + bO)), IntegerEntry(M(bt, k), (bI + bO))]
652+ $Tuple2((ca ++ cs), unit)
648653 }
649654 else throw("Strict value is not equal to itself.")
650655 }
651656 else throw("Strict value is not equal to itself.")
652657 }
653658
654659
655660
656661 @Callable(bp)
657-func processPoolINTERNAL (bU,cs) = {
662+func processPoolINTERNAL (bU,ct) = {
658663 let bV = bs(bp)
659664 if ((bV == bV))
660665 then {
661- let ct = {
662- let cu = al(this, l)
663- if (cs)
664- then cu
665- else (cu - 1)
666+ let cu = {
667+ let cv = al(this, l)
668+ if (ct)
669+ then cv
670+ else (cv - 1)
666671 }
667- let ck = if ((ct >= 0))
672+ let ck = if ((cu >= 0))
668673 then true
669674 else ab("processPoolINTERNAL: invalid target epoch")
670675 if ((ck == ck))
671676 then {
672677 let G = an(bU)
673- let cv = G
674- let I = cv._1
675- let J = cv._2
678+ let cw = G
679+ let I = cw._1
680+ let J = cw._2
676681 let by = addressFromStringValue(aj(this, s))
677682 let aL = aB(I, J)
678- let cw = {
683+ let cx = {
679684 let ak = invoke(by, "usersListTraversal", [aL], nil)
680685 if ($isInstanceOf(ak, "Boolean"))
681686 then ak
682687 else throw(($getType(ak) + " couldn't be cast to Boolean"))
683688 }
684- if ((cw == cw))
685- then if (cw)
689+ if ((cx == cx))
690+ then if (cx)
686691 then $Tuple2(nil, true)
687692 else {
688- let cx = addressFromStringValue(valueOrErrorMessage(getString(ap, t), "invalid assets store contract"))
689- let bL = valueOrElse(getInteger(this, W(ct)), 0)
690- let cn = valueOrElse(getInteger(this, Q(G, ct)), 0)
691- let cy = if ((bL == 0))
693+ let cy = addressFromStringValue(valueOrErrorMessage(getString(ap, t), "invalid assets store contract"))
694+ let bL = valueOrElse(getInteger(this, W(cu)), 0)
695+ let cn = valueOrElse(getInteger(this, Q(G, cu)), 0)
696+ let cz = if ((bL == 0))
692697 then 0
693698 else fraction(cn, b, bL)
694- let cc = invoke(ap, "modifyWeight", [aL, cy], nil)
699+ let cc = invoke(ap, "modifyWeight", [aL, cz], nil)
695700 if ((cc == cc))
696- then $Tuple2([IntegerEntry(U(G, ct), cy)], false)
701+ then $Tuple2([IntegerEntry(U(G, cu), cz)], false)
697702 else throw("Strict value is not equal to itself.")
698703 }
699704 else throw("Strict value is not equal to itself.")
700705 }
701706 else throw("Strict value is not equal to itself.")
702707 }
703708 else throw("Strict value is not equal to itself.")
704709 }
705710
706711
707712
708713 @Callable(bp)
709714 func finalizeHelper () = {
710- let cs = valueOrElse(getBoolean(A), false)
715+ let ct = valueOrElse(getBoolean(A), false)
711716 let k = valueOrElse(getInteger(this, l), 0)
712- let cz = (k - 1)
717+ let cA = (k - 1)
713718 let bF = al(this, D(k))
714719 let bz = al(this, h)
715720 let bG = (bF + bz)
716721 let bH = getInteger(this, u)
717722 if (if (if ((height >= bG))
718723 then (bH == unit)
719724 else false)
720- then !(cs)
725+ then !(ct)
721726 else false)
722727 then {
723- let cA = (k + 1)
724- let cB = getInteger(this, i)
725- let cC = {
726- let ag = cB
728+ let cB = (k + 1)
729+ let cC = getInteger(this, i)
730+ let cD = {
731+ let ag = cC
727732 if ($isInstanceOf(ag, "Int"))
728733 then {
729734 let bS = ag
730735 [IntegerEntry(h, bS), DeleteEntry(i)]
731736 }
732737 else if ($isInstanceOf(ag, "Unit"))
733738 then nil
734739 else throw("Match error")
735740 }
736- $Tuple2(([IntegerEntry(D(cA), height), IntegerEntry(x, height), IntegerEntry(l, cA), IntegerEntry(u, d), IntegerEntry(j(k), bz)] ++ cC), true)
741+ $Tuple2(([IntegerEntry(D(cB), height), IntegerEntry(x, height), IntegerEntry(l, cB), IntegerEntry(u, d), IntegerEntry(j(k), bz)] ++ cD), true)
737742 }
738- else if (if (cs)
743+ else if (if (ct)
739744 then (bH == unit)
740745 else false)
741746 then $Tuple2([IntegerEntry(u, f)], true)
742747 else if ((bH == unit))
743748 then $Tuple2(nil, false)
744749 else if ((bH == d))
745750 then {
746- let cD = getString(v)
747- let ag = cD
751+ let cE = getString(v)
752+ let ag = cE
748753 if ($isInstanceOf(ag, "Unit"))
749754 then {
750- let cE = getString(aT(aQ))
751- if ($isInstanceOf(cE, "Unit"))
755+ let cF = getString(aT(aQ))
756+ if ($isInstanceOf(cF, "Unit"))
752757 then $Tuple2([IntegerEntry(u, e), DeleteEntry(v)], true)
753- else if ($isInstanceOf(cE, "String"))
758+ else if ($isInstanceOf(cF, "String"))
754759 then {
755- let cF = cE
756- $Tuple2([StringEntry(v, cF)], true)
760+ let cG = cF
761+ $Tuple2([StringEntry(v, cG)], true)
757762 }
758763 else throw("Match error")
759764 }
760765 else if ($isInstanceOf(ag, "String"))
761766 then {
762767 let bU = ag
763- let cG = getString(aZ(aQ, bU))
764- if ((cG == cG))
768+ let cH = getString(aZ(aQ, bU))
769+ if ((cH == cH))
765770 then {
766- let cw = invoke(this, "processPoolBalanceINTERNAL", [bU], nil)
767- if ((cw == cw))
771+ let cx = invoke(this, "processPoolBalanceINTERNAL", [bU], nil)
772+ if ((cx == cx))
768773 then {
769- let cE = cG
770- if ($isInstanceOf(cE, "Unit"))
774+ let cF = cH
775+ if ($isInstanceOf(cF, "Unit"))
771776 then $Tuple2([IntegerEntry(u, e), DeleteEntry(v)], true)
772- else if ($isInstanceOf(cE, "String"))
777+ else if ($isInstanceOf(cF, "String"))
773778 then {
774- let cF = cE
775- $Tuple2([StringEntry(v, cF)], true)
779+ let cG = cF
780+ $Tuple2([StringEntry(v, cG)], true)
776781 }
777782 else throw("Match error")
778783 }
779784 else throw("Strict value is not equal to itself.")
780785 }
781786 else throw("Strict value is not equal to itself.")
782787 }
783788 else throw("Match error")
784789 }
785790 else if ((bH == e))
786791 then {
787- let cD = getString(v)
788- let cH = getString(w)
789- let ag = cD
792+ let cE = getString(v)
793+ let cI = getString(w)
794+ let ag = cE
790795 if ($isInstanceOf(ag, "Unit"))
791796 then {
792- let cE = getString(aT(aQ))
793- if ($isInstanceOf(cE, "Unit"))
797+ let cF = getString(aT(aQ))
798+ if ($isInstanceOf(cF, "Unit"))
794799 then $Tuple2([IntegerEntry(u, f), DeleteEntry(v), DeleteEntry(w)], true)
795- else if ($isInstanceOf(cE, "String"))
800+ else if ($isInstanceOf(cF, "String"))
796801 then {
797- let cI = cE
798- $Tuple2([StringEntry(v, cI)], true)
802+ let cJ = cF
803+ $Tuple2([StringEntry(v, cJ)], true)
799804 }
800805 else throw("Match error")
801806 }
802807 else if ($isInstanceOf(ag, "String"))
803808 then {
804809 let bU = ag
805810 let G = an(bU)
806- let cJ = {
807- let cE = cH
808- if ($isInstanceOf(cE, "Unit"))
811+ let cK = {
812+ let cF = cI
813+ if ($isInstanceOf(cF, "Unit"))
809814 then getString(aT(aR(G)))
810- else if ($isInstanceOf(cE, "String"))
815+ else if ($isInstanceOf(cF, "String"))
811816 then {
812- let cK = cE
813- let cL = getString(aZ(aR(G), cK))
814- if ((cL == cL))
817+ let cL = cF
818+ let cM = getString(aZ(aR(G), cL))
819+ if ((cM == cM))
815820 then {
816- let cM = invoke(this, "processVoteINTERNAL", [bU, cK], nil)
817- if ((cM == cM))
818- then cL
821+ let cN = invoke(this, "processVoteINTERNAL", [bU, cL], nil)
822+ if ((cN == cN))
823+ then cM
819824 else throw("Strict value is not equal to itself.")
820825 }
821826 else throw("Strict value is not equal to itself.")
822827 }
823828 else throw("Match error")
824829 }
825- let cE = cJ
826- if ($isInstanceOf(cE, "Unit"))
830+ let cF = cK
831+ if ($isInstanceOf(cF, "Unit"))
827832 then {
828- let cG = getString(aZ(aQ, bU))
829- let cN = cG
830- if ($isInstanceOf(cN, "Unit"))
833+ let cH = getString(aZ(aQ, bU))
834+ let cO = cH
835+ if ($isInstanceOf(cO, "Unit"))
831836 then $Tuple2([IntegerEntry(u, f), DeleteEntry(v), DeleteEntry(w)], true)
832- else if ($isInstanceOf(cN, "String"))
837+ else if ($isInstanceOf(cO, "String"))
833838 then {
834- let bl = cN
839+ let bl = cO
835840 $Tuple2([StringEntry(v, bl), DeleteEntry(w)], true)
836841 }
837842 else throw("Match error")
838843 }
839- else if ($isInstanceOf(cE, "String"))
844+ else if ($isInstanceOf(cF, "String"))
840845 then {
841- let cO = cE
842- $Tuple2([StringEntry(w, cO)], true)
846+ let cP = cF
847+ $Tuple2([StringEntry(w, cP)], true)
843848 }
844849 else throw("Match error")
845850 }
846851 else throw("Match error")
847852 }
848853 else if ((bH == f))
849854 then {
850- let cD = getString(v)
851- let ag = cD
855+ let cE = getString(v)
856+ let ag = cE
852857 if ($isInstanceOf(ag, "Unit"))
853858 then {
854- let cE = getString(aT(aQ))
855- if ($isInstanceOf(cE, "Unit"))
859+ let cF = getString(aT(aQ))
860+ if ($isInstanceOf(cF, "Unit"))
856861 then {
857- let ca = if (cs)
862+ let ca = if (ct)
858863 then [DeleteEntry(u), DeleteEntry(A)]
859- else [DeleteEntry(u), BooleanEntry(E(cz), true), IntegerEntry(y, k), IntegerEntry(z, bF)]
860- let cP = aO()
861- if ((cP == cP))
864+ else [DeleteEntry(u), BooleanEntry(E(cA), true), IntegerEntry(y, k), IntegerEntry(z, bF)]
865+ let cQ = aO()
866+ if ((cQ == cQ))
862867 then $Tuple2(ca, true)
863868 else throw("Strict value is not equal to itself.")
864869 }
865- else if ($isInstanceOf(cE, "String"))
870+ else if ($isInstanceOf(cF, "String"))
866871 then {
867- let cF = cE
868- $Tuple2([StringEntry(v, cF)], true)
872+ let cG = cF
873+ $Tuple2([StringEntry(v, cG)], true)
869874 }
870875 else throw("Match error")
871876 }
872877 else if ($isInstanceOf(ag, "String"))
873878 then {
874879 let bU = ag
875- let cG = getString(aZ(aQ, bU))
876- if ((cG == cG))
880+ let cH = getString(aZ(aQ, bU))
881+ if ((cH == cH))
877882 then {
878- let cw = {
879- let ak = invoke(this, "processPoolINTERNAL", [bU, cs], nil)
883+ let cx = {
884+ let ak = invoke(this, "processPoolINTERNAL", [bU, ct], nil)
880885 if ($isInstanceOf(ak, "Boolean"))
881886 then ak
882887 else throw(($getType(ak) + " couldn't be cast to Boolean"))
883888 }
884- if ((cw == cw))
885- then if (cw)
889+ if ((cx == cx))
890+ then if (cx)
886891 then $Tuple2(nil, true)
887892 else {
888- let cE = cG
889- if ($isInstanceOf(cE, "Unit"))
893+ let cF = cH
894+ if ($isInstanceOf(cF, "Unit"))
890895 then {
891- let ca = if (cs)
896+ let ca = if (ct)
892897 then [DeleteEntry(u), DeleteEntry(A), DeleteEntry(v)]
893- else [DeleteEntry(u), BooleanEntry(E(cz), true), IntegerEntry(y, k), IntegerEntry(z, bF), DeleteEntry(v)]
894- let cP = aO()
895- if ((cP == cP))
898+ else [DeleteEntry(u), BooleanEntry(E(cA), true), IntegerEntry(y, k), IntegerEntry(z, bF), DeleteEntry(v)]
899+ let cQ = aO()
900+ if ((cQ == cQ))
896901 then $Tuple2(ca, true)
897902 else throw("Strict value is not equal to itself.")
898903 }
899- else if ($isInstanceOf(cE, "String"))
904+ else if ($isInstanceOf(cF, "String"))
900905 then {
901- let cF = cE
902- $Tuple2([StringEntry(v, cF)], true)
906+ let cG = cF
907+ $Tuple2([StringEntry(v, cG)], true)
903908 }
904909 else throw("Match error")
905910 }
906911 else throw("Strict value is not equal to itself.")
907912 }
908913 else throw("Strict value is not equal to itself.")
909914 }
910915 else throw("Match error")
911916 }
912917 else ab("finalization is broken")
913918 }
914919
915920
916921
917922 @Callable(bp)
918-func finalizeWrapper (cQ) = {
919- let cR = addressFromStringValue(getStringValue(this, p))
920- let cS = {
923+func finalizeWrapper (cR) = {
924+ let cS = addressFromStringValue(getStringValue(this, p))
925+ let cT = {
921926 let ak = invoke(this, "finalizeHelper", nil, nil)
922927 if ($isInstanceOf(ak, "Boolean"))
923928 then ak
924929 else throw(($getType(ak) + " couldn't be cast to Boolean"))
925930 }
926- if ((cS == cS))
927- then if (!(cS))
928- then if ((cQ == 0))
931+ if ((cT == cT))
932+ then if (!(cT))
933+ then if ((cR == 0))
929934 then ab("Current voting is not over yet")
930935 else {
931- let cT = invoke(cR, "finalize", nil, nil)
932- if ((cT == cT))
936+ let cU = invoke(cS, "finalize", nil, nil)
937+ if ((cU == cU))
933938 then $Tuple2(nil, unit)
934939 else throw("Strict value is not equal to itself.")
935940 }
936941 else {
937- let cU = valueOrElse(getInteger(this, m), c)
938- if ((cU > cQ))
942+ let cV = valueOrElse(getInteger(this, m), c)
943+ if ((cV > cR))
939944 then {
940- let cT = invoke(this, "finalizeWrapper", [(cQ + 1)], nil)
941- if ((cT == cT))
945+ let cU = invoke(this, "finalizeWrapper", [(cR + 1)], nil)
946+ if ((cU == cU))
942947 then $Tuple2(nil, unit)
943948 else throw("Strict value is not equal to itself.")
944949 }
945950 else $Tuple2(nil, unit)
946951 }
947952 else throw("Strict value is not equal to itself.")
948953 }
949954
950955
951956
952957 @Callable(bp)
953958 func finalize () = {
954- let cT = invoke(this, "finalizeWrapper", [0], nil)
955- if ((cT == cT))
959+ let cU = invoke(this, "finalizeWrapper", [0], nil)
960+ if ((cU == cU))
956961 then $Tuple2(nil, unit)
957962 else throw("Strict value is not equal to itself.")
958963 }
959964
960965
961966
962967 @Callable(bp)
963968 func containsNodeREADONLY (aU,aY) = $Tuple2(nil, ba(aU, aY))
964969
965970
966971
967972 @Callable(bp)
968973 func insertNode (aU,aY) = {
969974 let bV = br(bp)
970975 if ((bV == bV))
971976 then $Tuple2(be(aU, aY), unit)
972977 else throw("Strict value is not equal to itself.")
973978 }
974979
975980
976981
977982 @Callable(bp)
978983 func deleteNode (aU,aY) = {
979984 let bV = br(bp)
980985 if ((bV == bV))
981986 then $Tuple2(bh(aU, aY), unit)
982987 else throw("Strict value is not equal to itself.")
983988 }
984989
985990
986991
987992 @Callable(bp)
988993 func isFinalizationInProgress () = {
989994 let bH = getInteger(this, u)
990- let cV = (bH != unit)
991- $Tuple2(nil, cV)
995+ let cW = (bH != unit)
996+ $Tuple2(nil, cW)
992997 }
993998
994999
9951000
9961001 @Callable(bp)
9971002 func deletePool (I,J) = {
9981003 let bV = if (if ((bp.caller == ap))
9991004 then true
10001005 else br(bp))
10011006 then true
10021007 else ab("Permission denied")
10031008 if ((bV == bV))
10041009 then {
10051010 let aU = "pools"
10061011 let G = $Tuple2(I, J)
10071012 let aY = makeString([I, J], a)
10081013 let ca = if (ba(aU, aY))
10091014 then bh(aU, aY)
10101015 else nil
10111016 ([DeleteEntry(F(G))] ++ ca)
10121017 }
10131018 else throw("Strict value is not equal to itself.")
10141019 }
10151020
10161021
10171022
10181023 @Callable(bp)
1019-func resume (I,J,cW) = {
1020- let cX = valueOrErrorMessage(az(I, J), Z("invalid assets"))
1021- let cd = cX._1
1022- let aL = cX._2
1023- let cY = bp.payments[0]
1024- let cx = addressFromStringValue(getStringValue(this, t))
1025- let cZ = "%s__config"
1026- let da = 1
1024+func resume (I,J,cX) = {
1025+ let bH = getInteger(this, u)
1026+ let cY = valueOrErrorMessage(az(I, J), Z("invalid assets"))
1027+ let cd = cY._1
1028+ let aL = cY._2
1029+ let cZ = bp.payments[0]
1030+ let cy = addressFromStringValue(getStringValue(this, t))
1031+ let da = "%s__config"
1032+ let db = 1
10271033 let bx = addressFromStringValue(aj(this, r))
1028- let db = fromBase58String(split(getStringValue(bx, cZ), a)[da])
1029- let dc = {
1030- let ak = invoke(cx, "isVerifiedREADONLY", [I], nil)
1034+ let dc = fromBase58String(split(getStringValue(bx, da), a)[db])
1035+ let dd = {
1036+ let ak = invoke(cy, "isVerifiedREADONLY", [I], nil)
10311037 if ($isInstanceOf(ak, "Boolean"))
10321038 then ak
10331039 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10341040 }
1035- let dd = {
1036- let ak = invoke(cx, "isVerifiedREADONLY", [J], nil)
1041+ let de = {
1042+ let ak = invoke(cy, "isVerifiedREADONLY", [J], nil)
10371043 if ($isInstanceOf(ak, "Boolean"))
10381044 then ak
10391045 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10401046 }
1041- let de = valueOrErrorMessage(getInteger(this, n), "invalid resumption fee")
1042- let bA = [if ((cY.assetId == db))
1047+ let df = valueOrErrorMessage(getInteger(this, n), "invalid resumption fee")
1048+ let bA = [if ((bH == unit))
10431049 then true
1044- else ab("invalid fee payment asset id"), if ((cY.amount == de))
1050+ else ab("finalization is in progress"), if ((cZ.assetId == dc))
10451051 then true
1046- else ab("invalid fee payment amount"), if (if (dc)
1047- then dd
1052+ else ab("invalid fee payment asset id"), if ((cZ.amount == df))
1053+ then true
1054+ else ab("invalid fee payment amount"), if (if (dd)
1055+ then de
10481056 else false)
10491057 then true
10501058 else ab("both assets should be verified")]
10511059 if ((bA == bA))
10521060 then {
1053- let df = assetBalance(this, aL)
1054- if ((df == df))
1061+ let dg = assetBalance(this, aL)
1062+ if ((dg == dg))
10551063 then {
1056- let dg = false
1057- let dh = if ((size(bp.payments) == 1))
1064+ let dh = false
1065+ let di = if ((size(bp.payments) == 1))
10581066 then {
1059- let di = {
1067+ let dj = {
10601068 let ak = invoke(ap, "checkBalance", [ay(aL)], nil)
10611069 if ($isInstanceOf(ak, "Boolean"))
10621070 then ak
10631071 else throw(($getType(ak) + " couldn't be cast to Boolean"))
10641072 }
1065- if (di)
1073+ if (dj)
10661074 then true
10671075 else ab("assets should be attached")
10681076 }
10691077 else if ((size(bp.payments) == 2))
10701078 then {
1071- let dj = valueOrErrorMessage(scriptHash(cd), Z("pool address is not scripted"))
1072- let dk = fromBase64String(valueOrErrorMessage(getString(ap, C()), Z("allowed lp stable script hash is not set")))
1073- let dl = (dj == dk)
1074- let dm = if (dl)
1079+ let dk = valueOrErrorMessage(scriptHash(cd), Z("pool address is not scripted"))
1080+ let dl = fromBase64String(valueOrErrorMessage(getString(ap, C()), Z("allowed lp stable script hash is not set")))
1081+ let dm = (dk == dl)
1082+ let dn = if (dm)
10751083 then "putOneTknV2"
10761084 else "putOneTkn"
1077- invoke(cd, dm, [cW, dg], [bp.payments[1]])
1085+ invoke(cd, dn, [cX, dh], [bp.payments[1]])
10781086 }
10791087 else if ((size(bp.payments) == 3))
1080- then invoke(cd, "put", [cW, dg], [bp.payments[1], bp.payments[2]])
1088+ then invoke(cd, "put", [cX, dh], [bp.payments[1], bp.payments[2]])
10811089 else ab("invalid payments size")
1082- if ((dh == dh))
1090+ if ((di == di))
10831091 then {
1084- let dn = assetBalance(this, aL)
1085- if ((dn == dn))
1092+ let do = assetBalance(this, aL)
1093+ if ((do == do))
10861094 then {
1087- let do = (dn - df)
1088- let dp = if ((do > 0))
1089- then [ScriptTransfer(bp.caller, do, aL)]
1095+ let dp = (do - dg)
1096+ let dq = if ((dp > 0))
1097+ then [ScriptTransfer(bp.caller, dp, aL)]
10901098 else nil
1091- let dq = invoke(ap, "setWxEmissionPoolLabel", [I, J], nil)
1092- if ((dq == dq))
1099+ let dr = invoke(ap, "setWxEmissionPoolLabel", [I, J], nil)
1100+ if ((dr == dr))
10931101 then {
10941102 let G = $Tuple2(I, J)
10951103 let bB = ([BooleanEntry(F(G), true)] ++ be(aQ, am(G)))
1096- $Tuple2((bB ++ dp), unit)
1104+ $Tuple2((bB ++ dq), unit)
10971105 }
10981106 else throw("Strict value is not equal to itself.")
10991107 }
11001108 else throw("Strict value is not equal to itself.")
11011109 }
11021110 else throw("Strict value is not equal to itself.")
11031111 }
11041112 else throw("Strict value is not equal to itself.")
11051113 }
11061114 else throw("Strict value is not equal to itself.")
11071115 }
11081116
11091117
1110-@Verifier(dr)
1111-func ds () = {
1112- let dt = {
1118+@Verifier(ds)
1119+func dt () = {
1120+ let du = {
11131121 let ag = bm()
11141122 if ($isInstanceOf(ag, "ByteVector"))
11151123 then {
11161124 let bq = ag
11171125 bq
11181126 }
11191127 else if ($isInstanceOf(ag, "Unit"))
1120- then dr.senderPublicKey
1128+ then ds.senderPublicKey
11211129 else throw("Match error")
11221130 }
1123- sigVerify(dr.bodyBytes, dr.proofs[0], dt)
1131+ sigVerify(ds.bodyBytes, ds.proofs[0], du)
11241132 }
11251133

github/deemru/w8io/169f3d6 
254.93 ms