tx · 6fJZPiE6ibuoRk673mECYYtHr6GTy2HTj7xGEytRcycL

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01900000 Waves

2023.03.24 06:43 [2503561] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "6fJZPiE6ibuoRk673mECYYtHr6GTy2HTj7xGEytRcycL", "fee": 1900000, "feeAssetId": null, "timestamp": 1679629418677, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "wXzhyf3w2UW3qjtXznR8mt1MGssxEaM4AEoX3UnnTHCSUmhJDvkui3PvFachYBZ86imLcShp4SVGq5PxqetRSTE" ], "script": "base64:BgL+FAgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzIwMjEzMjkxIgJpZCIEZGF0ZSIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTQ4OTUxNTA4NyIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDI2MzIwMzM2Ig0kdDAyMDQzNzIwNTA2Ig92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIwODA1MjA4ODkiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjM5MjMyMzk5MyINJHQwMjQwMDMyNDA3MiIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU2OTkyNTczMyINJHQwMjYxNjkyNjIwMyIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTAzOTI5MTA5IgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNDkxMzE1MzEiDSR0MDMxNTM2MzE1NzIiDSR0MDMyNzkyMzI4NjMiB2NhbGxlcjEiDSR0MDMzMDk4MzMxNTkiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAQBTgMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgUCYnQAAAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzBAJidQMDCQECIT0CBQJicwIACQBmAgUCYnQAAAcJAPwHBAUBaAIJdXNlRnJlZVR4CQDMCAIJAKUIAQkApwgBCQDZBAEFAmJzBQNuaWwFA25pbAUEdW5pdAMJAAACBQJidQUCYnUJAJYKBAkA2AQBCAUCYVINdHJhbnNhY3Rpb25JZAMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgUCYnQAAAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAZgIFAmJ0AAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmJ2AQJhUgMJAQEhAQUBdgkAAgEFAXcJAJUKAwkA2AQBCAUCYVINdHJhbnNhY3Rpb25JZAkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABAmJ3BgJhUgFQAmJ4AmJ5AmJ6AmJzBAJiQQkBAmJyAgUCYVIFAmJzBAJiQggFAmJBAl8xBAFOCAUCYkECXzIEAmJDCAUCYkECXzMEAmJ0CAUCYkECXzQDBgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAU4CAyAvIAUCYngCAyAvIAUCYnoCAyAvIAUCYnMEAmJEAwMDCQAAAgUBTgUCYngJAQIhPQIFAmJ6AgAHCQECIT0CBQJieQIABwYHBAJiRQkBAW8BCQECYWgCBQFOBQFQAwMDCQECIT0CBQJiRQAACQBnAgUGaGVpZ2h0BQJiRQcJAQEhAQUCYkQHCQACAQILU2FsZSBlbmRlZC4EAmJGCQAAAgUBTgUCYngEAmJHCQEBbwECEHRvdGFsX25mdF9pc3N1ZWQEAUQJAQFhAQkBAVcCBQJieAUBUAQCYkgJAQFhAQkBAVECBQJieAUBUAMJAAACBQJiSAIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QEAmJJCQEBcQEJAQFZAgUCYngFAVAEAmJKCQEBbwEJAQFYAgUCYngFAVAEAmJjAwUCYkYJAGgCBQFCAAIJAQFvAQkBAmFnAgUCYngFAVAEAmJiAwUCYkYJANgEAQUBaQkBAWEBCQECYWkCBQJieAUBUAQCYksJAQFvAQkBAVYCBQJieAUBUAMDAwkBASEBBQJiRAkBASEBBQJiRgcDAwkAZwIAAAUCYmMGCQEBIQEFAmJJBgkAZwIAAAUCYksHCQACAQIQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBASEBBQJiRAUCYkYHCQBnAgAABQJiSwcJAAIBAhRNYXggaXNzdWFibGUgbm90IHNldAQCYVAJAQJhRgEFAmJ4AwMFAmJECQECIT0CBQJhUAIABwkAAgEFAmFQBAJibQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUCYnoCAV8FAmJ5BAJiTAMFAmJECQECYmwBBQJibQkBAmJhAwUCYVIFAmJiBQJiYwQCYVQIBQJiTAJfMQQCYVcIBQJiTAJfMgQCYk0JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUBZwkBAmFrAQUCYngFAWYEAmJOCQELdmFsdWVPckVsc2UCCQCaCAIFAWcJAQJhbQEFAmJ4AAAEAmJPCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQJhbgEFAmJ4BQFmBAJiUAkBC3ZhbHVlT3JFbHNlAgkAmggCBQFnCQECYW8BBQJieAAABAJiUQkBAXABBQJieAQCYlIDCQBmAgUCYlEFBmhlaWdodAAAAwkAAAIFAmFXBQFpBQFyBQFzBAJiUwkAawMFAmFUBQJiUgBkBAJiVAMDAwkBAiE9AgUCYk0FAWYJAGYCBQJiTgAABwkAZgIFBmhlaWdodAUCYlEHCQBrAwUCYVQFAmJOAJBOAAAEAmJVAwMDCQECIT0CBQJiTwUBZgkAZgIFAmJQAAAHCQBmAgUGaGVpZ2h0BQJiUQcJAGsDBQJhVAUCYlAAkE4AAAQCYlYJAGUCBQJhVAUCYlMDCQAAAgUCYkoFAmJLCQACAQIMQXJ0IHNvbGQgb3V0BAJiVwkAZAIFAmJKAAEEAmJYCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJQ3JlYXRvcjogBQJieAIKLAogQXJ0SUQ6IAUBUAILLAogU2lnbklEOiAFAUQCESwKIEFydHdvcmsgbmFtZTogBQJiSAIKLAogSXNzdWU6IAkApAMBBQJiVwIBLwkApAMBBQJiSwQCYlkJAMIIBQkArAICAgNTQV8JAKQDAQkAZAIFAmJHAAEFAmJYAAEAAAcEAmJaCQC4CAEFAmJZBAJjYQMDCQAAAgUCYlcFAmJLBgkBASEBBQJiSQcGBAJjYgMDAwkAAAIFAU4FAmJ4CQECIT0CBQJiegIABwkBAiE9AgUCYnkCAAcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJ6CAUCYVIGY2FsbGVyBAJjYwMJAQEhAQkBCWlzRGVmaW5lZAEFAmFXAgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJhVwQCYm4JAQFhAQkArAICBQJibQIFX09QRU4EAmNkCQELRGVsZXRlRW50cnkBCQCsAgIFAmJtAgVfT1BFTgQCY2UJAQtTdHJpbmdFbnRyeQIJAKwCAgUCYm0CB19DTE9TRUQJAKwCAgkArAICBQJibgIBXwkApAMBBQJiQwQCY2YJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJYXJ0X3NvbGRfCQCkAwEFAmJXAgRfb2ZfCQCkAwEFAmJLAgFfBQFQAgFfBQJieAQCY2cDCQEBIQEFAmJECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAU4CAV8JAKQDAQUCYkMCAV8FAmJCAgFfCQCkAwEFAmJjAgFfBQJiYgIBXwkA2AQBBQJiWgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEFAmNiAgFfCQCkAwEFAmJDAgFfBQJiQgIBXwkApAMBBQJhVAIBXwUCY2MCAV8JANgEAQUCYloEAmNoCQELU3RyaW5nRW50cnkCBQJjZgUCY2cEAmNpAwkBAiE9AgUCYlQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgkAZQIFAmJTBQJiVAUCYVcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJNBQJiVAUCYVcFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgUCYlMFAmFXBQNuaWwEAmNqAwkBAiE9AgUCYlUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYk8FAmJVBQJhVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYngJAGUCBQJiVgUCYlUFAmFXBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJ4BQJiVgUCYVcFA25pbAQCY2sDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAQCY2wJAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUCYngFAVAFAmJXCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQJiWgUCY2YJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQJiRwABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWgCBQJieAUBUAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEBWQIFAmJ4BQFQBQJjYQkAzAgCBQJiWQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjYgABBQJiWgUDbmlsBQJjaQUCY2oFAmNrAwUCYkQJAMwIAgUCY2gJAMwIAgUCY2UJAMwIAgUCY2QFAmNsCQDMCAIFAmNoBQJjbAECY20BAmNuBAFHBQJjbgMJAAECBQFHAgZTdHJpbmcEAmNvBQFHBQJjbwkAAgECJFNwb25zb3JlZCBQdWJsaWMgS2V5IFN0cmluZyBleHBlY3RlZAoCY3ABB3NldENvbmYCAWICY3EEAU4JAKUIAQgFAmNwBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4DCQEIY29udGFpbnMCBQFiAgVjb25mXwkAzAgCCQELU3RyaW5nRW50cnkCBQFiBQJjcQUDbmlsCQACAQIgRW50cmllcyBzdGFydGluZyB3aXRoIGNvbmZfIG9ubHkJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAmFSAQphZGRBcnR3b3JrDgFGAUQCYUwCYU0CYU4CY3ICYXcCYUECYXgCYUICYXkCY3MCYU8CYnMEAmN0CQECYnICBQJhUgUCYnMEAVAIBQJjdAJfMQQBTggFAmN0Al8yBAJiQwgFAmN0Al8zBAJidAgFAmN0Al80AwkBASEBCQEBSwEFAUYJAAIBAiRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAmN1CQECYUgCBQJheQUCYUIEAmFKCAUCY3UCXzEEAmFLCAUCY3UCXzIEAmN2CQECYUkKBQFOBQJhdwUCYXgFAmFKBQJhQQUCYUsFAmFMBQJhTQUCYU4FAmFPAwkBAiE9AgUCY3YCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCY3cJAGYCCQEBcAEJAKwCAgUBTgILX2ZyZWVfZHJvcHMAAAQCY3gDBQJjdwkAlAoCAAAFAUQJAQJhVQEFAmFSBAJhVAgFAmN4Al8xBAJhVwgFAmN4Al8yAwkBASEBCQEJaXNEZWZpbmVkAQUCYVQJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQCY3kJAQFhAQkBAmF1AgUBRgUBTgMJAQIhPQIFAmN5AgAJAAIBAhRZb3UgYWxyZWFkeSBhZGRlZCBpdAQCY3oJAQFhAQkBAmFyAQUBRgMJAQIhPQIFAmN6AgAJAAIBAhdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAQCY0EJAQFDAwUBRAUBTgUBRgMJAQEhAQUCY0EJAAIBAixTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgQCY0IDBQJjdwkA/AcEBQFoAgt1c2VGcmVlRHJvcAkAzAgCBQFOBQNuaWwFA25pbAUEdW5pdAMJAAACBQJjQgUCY0IEAmNrAwUCYnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYXIBBQFGBQFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhdQIFAUYFAU4FAVAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFPAgUBTgUBUAUCYkMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVECBQFOBQFQBQJhTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBUgIFAU4FAVAFAmFNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFTAgUBTgUBUAUCYXcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUCBQFOBQFQBQJheAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVAIFAU4FAVAFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgUBTgUBUAUCYUsJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUBTgUBUAUCYUoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUBTgUBUAUCY3IJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAgUBTgUBUAUCYU4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUBTgUBUAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgUBTgUBUAUBRAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQFOBQFQAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUBTgUBUAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFzAgUBTgUBRAUBUAkAzAgCCQELU3RyaW5nRW50cnkCCQECYXACBQFOBQFQBQFGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQIFAU4FAVAFAmNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWYCBQFOBQFQBQJhTwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgUCYVQFAWkFA25pbAUCY2sJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYVIBDXVwZGF0ZUFydHdvcmsNAmFxAmFMAmFNAmFOAmNyAmF3AmFBAmF4AmFCAmF5AmNzAmFPAmJzAwkBASEBBQF2CQACAQUBdwQCY0MJAQJicgIFAmFSBQJicwQCYkIIBQJjQwJfMQQBTggFAmNDAl8yBAJiQwgFAmNDAl8zBAJidAgFAmNDAl80BAJjRAkBAmFIAgUCYXkFAmFCBAJhSggFAmNEAl8xBAJhSwgFAmNEAl8yBAJjdgkBAmFJCgUBTgUCYXcFAmF4BQJhSgUCYUEFAmFLBQJhTAUCYU0FAmFOBQJhTwMJAQIhPQIFAmN2AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEAmN5CQEBYQEJAQFRAgUBTgUCYXEDCQAAAgUCY3kCAAkAAgECD0VudHJ5IG5vdCBmb3VuZAQCY0UJAQFhAQkBAmFqAgUBTgUCYXEDCQAAAgUCY0UCB0lMTEVHQUwJAAIBAh1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQEhAQkBAmFYAgUBTgUCYXEEAmNrAwUCYnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQIFAU4FAmFxBQJhTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBUgIFAU4FAmFxBQJhTQkAzAgCCQELU3RyaW5nRW50cnkCCQEBUwIFAU4FAmFxBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQIFAU4FAmFxBQJheAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVAIFAU4FAmFxBQJhQQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQFOBQJhcQUCYUoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCBQFOBQJhcQUCYUsJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAgUBTgUCYXEFAmFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYwIFAU4FAmFxBQJjcgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWUCBQFOBQJhcQUCY3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZgIFAU4FAmFxBQJhTwUDbmlsBQJjawkAAgECDkFscmVhZHkgbWludGVkAmFSAQtmbGFnQXJ0d29yawQBUAJjRgJjRQJjRwQCY0gJAQJidgEFAmFSBAJiQggFAmNIAl8xBAFOCAUCY0gCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQFtCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQFOAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQJjRQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWoCBQJjRgUBUAUCY0UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgUCY0YFAVAFAmNHBQNuaWwJAAIBCQCsAgICDlVua25vdyBzdGF0dXMgBQJjRQkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQCYVIBDWRlbGV0ZUFydHdvcmsCAVACY0YEAmNJCQECYnYBBQJhUgQCYkIIBQJjSQJfMQQBTggFAmNJAl8yBAJhWQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4FAmNGBQFOBAJjeQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQEBYQEJAQFRAgUCYVkFAVACIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzAwkAAAIFAmN5AgAJAAIBAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQBRgkBAWEBCQECYXACBQJhWQUBUAMJAAACBQFGAgAJAAIBAiVObyBhcnQgaGFzaCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAFECQEBYQEJAQFXAgUCYVkFAVADCQAAAgUBRAIACQACAQITTm8gU0lHTiBJRCBtYXRjaGluZwQCY0oJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAU8CBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFSAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVMCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFUAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVoCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWECBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWMCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWICBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFXAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVgCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhagIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhaQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhcgEFAUYJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFzAgUCYVkFAUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmF1AgUBRgUCYVkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFoAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFkAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFlAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFmAgUCYVkFAVAFA25pbAMJAQEhAQkBAmFYAgUCYVkFAVADCQEBIQEFAXYJAAIBBQF3BQJjSgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4FAmNKCQACAQIoQXJ0IGFscmVhZHkgbWludGVkLCB5b3UgY2Fubm90IGRlbGV0ZSBpdAJhUgELc2VsbEFydHdvcmsGAVACYmcCY0sCYVcCYkUCYnMEAmNMCQECYnICBQJhUgUCYnMEAmJCCAUCY0wCXzEEAU4IBQJjTAJfMgQCYkMIBQJjTAJfMwQCYnQIBQJjTAJfNAQCYkgJAQFhAQkBAVECBQFOBQFQAwkAAAIFAmJIAgAJAAIBAiNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQCY0UJAQFhAQkBAmFqAgUBTgUBUAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUCY0UJAAIBAg9GbGFnZ2VkIGFydHdvcmsEAmNNCQEBbwEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQAwkAZgIAAAUCYkUJAAIBAgxOZWdhdGl2ZSBlbmQDAwkAZgIFAmJFAAADCQECIT0CBQJjSwABBgkBAiE9AgUCYmcAAAcJAAIBAjpUaW1lZCBvZmZlciBvbmx5IGFsbG93ZWQgZm9yIHVuaXF1ZSBlZGl0aW9uIGFuZCBvZmZlciBvbmx5BAJjTgMJAAACBQJiRQAAAAAFBmhlaWdodAMJAQEhAQkBAmJlAQUCYVcJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEDCQEBIQEJAQJiZgIFAmFXBQJiZwkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVAEAmJKCQEBbwEJAQFYAgUBTgUBUAQCYksJAQFvAQkBAVYCBQFOBQFQAwkAZgIFAmNLAGQJAAIBAhwxMDAgZWRpdGlvbnMgbWF4IHBlciBhcnR3b3JrAwMJAQIhPQIFAmJKAAAJAAACBQJiSgUCYksHCQACAQIUTWF4IGVkaXRpb24gcmVhY2hlZC4DAwkAZgIFAmJKAAAJAQIhPQIFAmJLBQJjSwcJAAIBAiZDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgYW55bW9yZQMDCQBmAgUCY00AAAkBAiE9AgUCYksFAmNLBwkAAgECMUNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSB3aXRoIGFjdGl2ZSBvcmRlcnMEAmNhAwMJAGYCBQJiZwAACQBmAgUCY0sAAAcGBwQCY2sDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBWQIFAU4FAVAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWcCBQFOBQFQBQJiZwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQFOBQFQBQJjSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWkCBQFOBQFQBQJhVwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFoAgUBTgUBUAkAZAIFAmNOBQJiRQUDbmlsBQJjawJhUgEKYnV5QXJ0d29yawIBUAJieAkBAmJ3BgUCYVIFAVAFAmJ4AgACAAIAAmFSAQZzZXRCaWQCAVACYngEAmNPCQECYnYBBQJhUgQCYkIIBQJjTwJfMQQBTggFAmNPAl8yBAJiQwgFAmNPAl8zBAJjUAkBAmFRAQUCYVIEAmFTCAUCY1ACXzEEAmFUCAUCY1ACXzIEAmFXAwkBASEBCQEJaXNEZWZpbmVkAQgFAmFTB2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBAJiRQkBAW8BCQECYWgCBQJieAUBUAMDCQECIT0CBQJiRQAACQBnAgUGaGVpZ2h0BQJiRQcJAAIBAgtTYWxlIGVuZGVkLgQCY00JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVADCQEBIQEJAQJiZQEFAmFXCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkBASEBCQECYmYCBQJhVwUCYVQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQCYkoJAQFvAQkBAVgCBQJieAUBUAQCYksJAQFvAQkBAVYCBQJieAUBUAMJAGcCAAAFAmJLCQACAQIjTm8gbWF4IGVkaXRpb24gc2V0IGZvciB0aGlzIGFydHdvcmsDCQBnAgUCYkoFAmJLCQACAQIYU29sZCBvdXQsIHlvdSBjYW5ub3QgYmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUBTgIBXwUCYkICBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFAmFXAgFfCQCkAwEFAmFUAgFfCQCkAwEFAmJDCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAkAZAIFAmNNAAEFA25pbAJhUgEJYWNjZXB0QmlkBQFQAmJ4AmJ5AmJ6AmJzBAJjUQkBAmJyAgUCYVIFAmJzBAJiQggFAmNRAl8xBAJjUggFAmNRAl8yBAJiQwgFAmNRAl8zBAJidAgFAmNRAl80AwkBAiE9AgUCY1IFAmJ4CQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgkBAmJ3BgUCYVIFAVAFAmJ4BQJieQUCYnoFAmJzAmFSAQljYW5jZWxCaWQEAVACYngCYnkCYnoEAmNTCQECYnYBBQJhUgQCYkIIBQJjUwJfMQQBTggFAmNTAl8yBAJiQwgFAmNTAl8zAwMJAQIhPQIFAU4FAmJ6CQECIT0CBQFOBQJieAcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBAJjVAMJAAACBQFOBQJieAUCYnoFAU4EAmNNCQEBbwEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQBAJibQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUCYnoCAV8FAmJ5BAJibgkBAWEBCQCsAgIFAmJtAgVfT1BFTgMJAAACBQJibgIACQACAQINQmlkIG5vdCBmb3VuZAQCYm8JALUJAgUCYm4CAV8EAmFXCQECYmsBCQCRAwIFAmJvAAAEAmNVAghDQU5DRUxFRAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFAmJtAgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUCYm0CAV8FAmNVCQCsAgIJAKwCAgUCYm4CAV8JAKQDAQUCYkMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQCQBlAgUCY00AAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCY1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBQJhVwUDbmlsAQJjVgECY1cABAFHBQJjVgMJAAECBQFHAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQCY1gFAUcDAwMDCQAAAggFAmNYCGZ1bmN0aW9uAgphZGRBcnR3b3JrCQAAAggFAmNYBGRBcHAFBHRoaXMHCQAAAggFAmNYA2ZlZQCgwh4HCQAAAggFAmNYCmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJjVglib2R5Qnl0ZXMJAJEDAggFAmNWBnByb29mcwAACQDZBAEJAQJjbQEJAJEDAggFAmNYBGFyZ3MADQMDAwMJAAACCAUCY1gIZnVuY3Rpb24CDXVwZGF0ZUFydHdvcmsJAAACCAUCY1gEZEFwcAUEdGhpcwcJAAACCAUCY1gDZmVlAKDCHgcJAAACCAUCY1gKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNWCWJvZHlCeXRlcwkAkQMCCAUCY1YGcHJvb2ZzAAAJANkEAQkBAmNtAQkAkQMCCAUCY1gEYXJncwAMAwMDAwkAAAIIBQJjWAhmdW5jdGlvbgILc2VsbEFydHdvcmsJAAACCAUCY1gEZEFwcAUEdGhpcwcJAAACCAUCY1gDZmVlAKDCHgcJAAACCAUCY1gKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNWCWJvZHlCeXRlcwkAkQMCCAUCY1YGcHJvb2ZzAAAJANkEAQkBAmNtAQkAkQMCCAUCY1gEYXJncwAFAwMDAwkAAAIIBQJjWAhmdW5jdGlvbgIJYWNjZXB0QmlkCQAAAggFAmNYBGRBcHAFBHRoaXMHCQAAAggFAmNYA2ZlZQCgwh4HCQAAAggFAmNYCmZlZUFzc2V0SWQFBHVuaXQHCQDIEwMIBQJjVglib2R5Qnl0ZXMJAJEDAggFAmNWBnByb29mcwAACQDZBAEJAQJjbQEJAJEDAggFAmNYBGFyZ3MABAkA9AMDCAUCY1YJYm9keUJ5dGVzCQCRAwIIBQJjVgZwcm9vZnMAAAgFAmNWD3NlbmRlclB1YmxpY0tleQkA9AMDCAUCY1YJYm9keUJ5dGVzCQCRAwIIBQJjVgZwcm9vZnMAAAgFAmNWD3NlbmRlclB1YmxpY0tlecYT64k=", "height": 2503561, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 424W6tJ4RUixfDnJMdGeYvdyQem9Zq6h6huB4AJxztLK Next: JA8zsJgXhe3ophRxBEVeTeGJkAYoBuwzGfB57W9dAXaQ Diff:
OldNewDifferences
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383- if (true)
384- then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString((isSponsored > 0))))
385- else {
386- let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
387- then (isSponsored > 0)
388- else false)
389- then toString(addressFromPublicKey(fromBase58String(pubKey)))
390- else toBase58String(i.caller.bytes)
391- let get_sponsored_waves = if (if ((pubKey != ""))
392- then (isSponsored > 0)
393- else false)
394- then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
395- else unit
396- if ((get_sponsored_waves == get_sponsored_waves))
397- then $Tuple4(toBase58String(i.transactionId), if (if ((toBase58String(i.caller.bytes) == toString(this)))
398- then (isSponsored > 0)
399- else false)
400- then toString(addressFromPublicKey(fromBase58String(pubKey)))
401- else toBase58String(i.caller.bytes), lastBlock.timestamp, (isSponsored > 0))
402- else throw("Strict value is not equal to itself.")
403- }
383+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
384+ then (isSponsored > 0)
385+ else false)
386+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
387+ else toBase58String(i.caller.bytes)
388+ let get_sponsored_waves = if (if ((pubKey != ""))
389+ then (isSponsored > 0)
390+ else false)
391+ then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392+ else unit
393+ if ((get_sponsored_waves == get_sponsored_waves))
394+ then $Tuple4(toBase58String(i.transactionId), if (if ((toBase58String(i.caller.bytes) == toString(this)))
395+ then (isSponsored > 0)
396+ else false)
397+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
398+ else toBase58String(i.caller.bytes), lastBlock.timestamp, (isSponsored > 0))
399+ else throw("Strict value is not equal to itself.")
404400 }
405401
406402
410406
411407
412408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
413- let $t01332813417 = idCallerDateSponsored(i, pubKey)
414- let id = $t01332813417._1
415- let caller = $t01332813417._2
416- let date = $t01332813417._3
417- let isSponsored = $t01332813417._4
409+ let $t01320213291 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01320213291._1
411+ let caller = $t01320213291._2
412+ let date = $t01320213291._3
413+ let isSponsored = $t01320213291._4
418414 if (true)
419415 then throw(((((((caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
420416 else {
473469 then throw(checkUser)
474470 else {
475471 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01502115213 = if (isBid)
472+ let $t01489515087 = if (isBid)
477473 then getPriceAssetIdFromBid(bidDataKey)
478474 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01502115213._1
480- let assetId = $t01502115213._2
475+ let amount = $t01489515087._1
476+ let assetId = $t01489515087._2
481477 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482478 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483479 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
582578
583579 @Callable(i)
584580 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
585- let $t02038920462 = idCallerDateSponsored(i, pubKey)
586- let artId = $t02038920462._1
587- let caller = $t02038920462._2
588- let date = $t02038920462._3
589- let isSponsored = $t02038920462._4
581+ let $t02026320336 = idCallerDateSponsored(i, pubKey)
582+ let artId = $t02026320336._1
583+ let caller = $t02026320336._2
584+ let date = $t02026320336._3
585+ let isSponsored = $t02026320336._4
590586 if (!(validateHash(sha256Hash)))
591587 then throw("Hash should be 64 characters maximum")
592588 else {
593- let $t02056320632 = setLIcence(cidLicence, sha256Licence)
594- let licenceCID = $t02056320632._1
595- let licenceHash = $t02056320632._2
589+ let $t02043720506 = setLIcence(cidLicence, sha256Licence)
590+ let licenceCID = $t02043720506._1
591+ let licenceHash = $t02043720506._2
596592 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
597593 if ((validateArtwork != ""))
598594 then throw("Something went wrong!")
599595 else {
600596 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
601- let $t02093121015 = if (whitelisted_drop)
597+ let $t02080520889 = if (whitelisted_drop)
602598 then $Tuple2(0, signID)
603599 else validatePayment(i)
604- let amount = $t02093121015._1
605- let assetId = $t02093121015._2
600+ let amount = $t02080520889._1
601+ let assetId = $t02080520889._2
606602 if (!(isDefined(amount)))
607603 then throw("Something went wrong")
608604 else {
643639 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
644640 then throw(maintenanceMSG)
645641 else {
646- let $t02404924119 = idCallerDateSponsored(i, pubKey)
647- let id = $t02404924119._1
648- let caller = $t02404924119._2
649- let date = $t02404924119._3
650- let isSponsored = $t02404924119._4
651- let $t02412924198 = setLIcence(cidLicence, sha256Licence)
652- let licenceCID = $t02412924198._1
653- let licenceHash = $t02412924198._2
642+ let $t02392323993 = idCallerDateSponsored(i, pubKey)
643+ let id = $t02392323993._1
644+ let caller = $t02392323993._2
645+ let date = $t02392323993._3
646+ let isSponsored = $t02392323993._4
647+ let $t02400324072 = setLIcence(cidLicence, sha256Licence)
648+ let licenceCID = $t02400324072._1
649+ let licenceHash = $t02400324072._2
654650 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
655651 if ((validateArtwork != ""))
656652 then throw("Something went wrong!")
678674
679675 @Callable(i)
680676 func flagArtwork (artId,addr,flag,note) = {
681- let $t02582525859 = idCallerDate(i)
682- let id = $t02582525859._1
683- let caller = $t02582525859._2
677+ let $t02569925733 = idCallerDate(i)
678+ let id = $t02569925733._1
679+ let caller = $t02569925733._2
684680 if (containsElement([chris, toString(this)], caller))
685681 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
686682 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
692688
693689 @Callable(i)
694690 func deleteArtwork (artId,addr) = {
695- let $t02629526329 = idCallerDate(i)
696- let id = $t02629526329._1
697- let caller = $t02629526329._2
691+ let $t02616926203 = idCallerDate(i)
692+ let id = $t02616926203._1
693+ let caller = $t02616926203._2
698694 let addrToUse = if (containsElement([chris, toString(this)], caller))
699695 then addr
700696 else caller
727723
728724 @Callable(i)
729725 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
730- let $t02916529235 = idCallerDateSponsored(i, pubKey)
731- let id = $t02916529235._1
732- let caller = $t02916529235._2
733- let date = $t02916529235._3
734- let isSponsored = $t02916529235._4
726+ let $t02903929109 = idCallerDateSponsored(i, pubKey)
727+ let id = $t02903929109._1
728+ let caller = $t02903929109._2
729+ let date = $t02903929109._3
730+ let isSponsored = $t02903929109._4
735731 let artworkName = getStringByKey(keyName(caller, artId))
736732 if ((artworkName == ""))
737733 then throw("This art doesn't match your account")
805801
806802 @Callable(i)
807803 func setBid (artId,issuer) = {
808- let $t03161731657 = idCallerDate(i)
809- let id = $t03161731657._1
810- let caller = $t03161731657._2
811- let date = $t03161731657._3
812- let $t03166231698 = isPayment(i)
813- let payment = $t03166231698._1
814- let amount = $t03166231698._2
804+ let $t03149131531 = idCallerDate(i)
805+ let id = $t03149131531._1
806+ let caller = $t03149131531._2
807+ let date = $t03149131531._3
808+ let $t03153631572 = isPayment(i)
809+ let payment = $t03153631572._1
810+ let amount = $t03153631572._2
815811 let assetId = if (!(isDefined(payment.assetId)))
816812 then "WAVES"
817813 else toBase58String(value(payment.assetId))
842838
843839 @Callable(i)
844840 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
845- let $t03291832989 = idCallerDateSponsored(i, pubKey)
846- let id = $t03291832989._1
847- let caller1 = $t03291832989._2
848- let date = $t03291832989._3
849- let isSponsored = $t03291832989._4
841+ let $t03279232863 = idCallerDateSponsored(i, pubKey)
842+ let id = $t03279232863._1
843+ let caller1 = $t03279232863._2
844+ let date = $t03279232863._3
845+ let isSponsored = $t03279232863._4
850846 if ((caller1 != issuer))
851847 then throw("You cannot do this action")
852848 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
856852
857853 @Callable(i)
858854 func cancelBid (artId,issuer,bidId,bidOwner) = {
859- let $t03322433285 = idCallerDate(i)
860- let id = $t03322433285._1
861- let caller = $t03322433285._2
862- let date = $t03322433285._3
855+ let $t03309833159 = idCallerDate(i)
856+ let id = $t03309833159._1
857+ let caller = $t03309833159._2
858+ let date = $t03309833159._3
863859 if (if ((caller != bidOwner))
864860 then (caller != issuer)
865861 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1010
1111 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1212
1313 let feeReceiver = getStringByKey("conf_fee_receiver")
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStringByKey("conf_users_dapp")))
1818
1919 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2020
2121 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2222
2323 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2424
2525 let usdtAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDT"))
2626
2727 let wavesAssetId = base58''
2828
2929 let chris = getStringByKey("conf_admin_1")
3030
3131 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3232
3333
3434 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3535
3636
3737 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3838
3939
4040 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4141
4242
4343 let signCut = 7
4444
4545 let usdnWaveCut = 10
4646
4747 let defaultLicence = getStringByKey("conf_default_licence")
4848
4949 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5050
5151 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5252
5353 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5454
5555 let userSuspended = "SUSPENDED"
5656
5757 let userRemoved = "REMOVED"
5858
5959 let userUnregistered = "UNREGISTERED"
6060
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6464
6565 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6666 case a: String =>
6767 if (contains(a, sha256Hash))
6868 then true
6969 else false
7070 case _ =>
7171 false
7272 }
7373
7474
7575 func validateCID (cid) = if (contains(cid, "/"))
7676 then if (if ((76 > size(cid)))
7777 then (size(split(cid, "/")[0]) == 59)
7878 else false)
7979 then (16 > size(split(cid, "/")[1]))
8080 else false
8181 else false
8282
8383
8484 func validateHash (hash) = (size(hash) == 64)
8585
8686
8787 func keyUserStatus (caller) = ("user_status_" + caller)
8888
8989
9090 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9191
9292
9393 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9494
9595
9696 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9797
9898
9999 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100100
101101
102102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103103
104104
105105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106106
107107
108108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109109
110110
111111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112112
113113
114114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115115
116116
117117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118118
119119
120120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124124
125125
126126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127127
128128
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132132 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133133
134134
135135 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
136136
137137
138138 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
139139
140140
141141 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
142142
143143
144144 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
145145
146146
147147 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
148148
149149
150150 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
151151
152152
153153 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
154154
155155
156156 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
157157
158158
159159 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
160160
161161
162162 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
163163
164164
165165 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
166166
167167
168168 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
169169
170170
171171 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
172172
173173
174174 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
175175
176176
177177 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
178178 then throw("Wrong Display CID")
179179 else if (!(validateCID(cidExport)))
180180 then throw("Wrong Export CID")
181181 else if (if ((cidLicence != ""))
182182 then !(validateCID(cidLicence))
183183 else false)
184184 then throw("Wrong Licence CID")
185185 else true
186186
187187
188188 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
189189 then throw("Export Hash 64 char. max")
190190 else if (!(validateHash(sha256Licence)))
191191 then throw("Licence Hash 64 char. max")
192192 else true
193193
194194
195195 func validateString (str,max) = if ((size(str) == 0))
196196 then throw("Field cannot be is empty")
197197 else if ((size(str) > max))
198198 then throw((str + " is too long"))
199199 else true
200200
201201
202202 func validateUser (caller) = {
203203 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
204204 if (if ((userStatus == userUnregistered))
205205 then true
206206 else (userStatus == userAllowed))
207207 then "Register this account first with \"Account\" tab"
208208 else if ((userStatus == userSuspended))
209209 then "Account suspended"
210210 else if ((userStatus == userRemoved))
211211 then "Account removed"
212212 else ""
213213 }
214214
215215
216216 func setLIcence (cidLicence,sha256Licence) = {
217217 let cid = if ((size(cidLicence) == 0))
218218 then defaultLicence
219219 else cidLicence
220220 let hash = if ((size(sha256Licence) == 0))
221221 then defaultHashLicence
222222 else sha256Licence
223223 $Tuple2(cid, hash)
224224 }
225225
226226
227227 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
228228 let checkUser = validateUser(caller)
229229 if ((checkUser != ""))
230230 then throw(checkUser)
231231 else if ((size(cidDisplay) == 0))
232232 then throw("Display CID cannot be empty")
233233 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
234234 then throw("Problem with CID")
235235 else if (!(validateAllHash(sha256Export, licenceHash)))
236236 then throw("Problem with Hashes")
237237 else if (!(validateString(name, 100)))
238238 then throw("100 Char. max name")
239239 else if (!(validateString(description, 1000)))
240240 then throw("1000 Char. max description")
241241 else if (if ((0 > royalties))
242242 then true
243243 else (royalties > 1000))
244244 then throw("Royalties cannot be less than 0% or higher than 10%")
245245 else if ((size(split(tags, ",")) > 5))
246246 then throw("5 tags max.")
247247 else ""
248248 }
249249
250250
251251 func isPayment (i) = if ((size(i.payments) == 0))
252252 then throw("No payment attached")
253253 else {
254254 let payment = value(i.payments[0])
255255 let amount = value(payment.amount)
256256 $Tuple2(payment, amount)
257257 }
258258
259259
260260 func validatePayment (i) = {
261261 let $t091809216 = isPayment(i)
262262 let payment = $t091809216._1
263263 let amount = $t091809216._2
264264 let assetId = if (if (isDefined(payment.assetId))
265265 then (payment.assetId == signAssetId)
266266 else false)
267267 then payment.assetId
268268 else throw("Only SIGN token accepted as transaction fee")
269269 if ((amount != currentCertificationPrice))
270270 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
271271 else $Tuple2(amount, assetId)
272272 }
273273
274274
275275 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
276276 case b: Int =>
277277 if ((b != 0))
278278 then true
279279 else false
280280 case _ =>
281281 false
282282 }
283283
284284
285285 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
286286 let $t098049840 = isPayment(i)
287287 let payment = $t098049840._1
288288 let amount = $t098049840._2
289289 let assetId = if (!(isDefined(payment.assetId)))
290290 then unit
291291 else if (if ((size(priceAssetId) > 0))
292292 then (toBase58String(value(payment.assetId)) == priceAssetId)
293293 else false)
294294 then payment.assetId
295295 else throw("Wrong asset id")
296296 if (if ((assetId == unit))
297297 then (priceAssetId != "")
298298 else false)
299299 then throw("Wrong asset id")
300300 else if ((artworkPrice != amount))
301301 then throw("Payment don't match")
302302 else $Tuple2(amount, assetId)
303303 }
304304
305305
306306 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
307307 then (assetId != toBase58String(wavesAssetId))
308308 else false)
309309 then (assetId != "WAVES")
310310 else false)
311311 then (assetId != toBase58String(usdnAssetId))
312312 else false)
313313 then (assetId != toBase58String(usdtAssetId))
314314 else false)
315315 then throw("Only SIGN, USDN,USDT or WAVES accepted")
316316 else true
317317
318318
319319 func validateMinSell (assetId,price) = {
320320 let minSellWaves = if (unitTest)
321321 then 10
322322 else getIntegerByKeyFromOracle("waves_min_sell")
323323 let minSellUsdn = 1000000
324324 let minSellSign = if (unitTest)
325325 then 1
326326 else (currentCertificationPrice * 2)
327327 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
328328 then (minSellUsdn > price)
329329 else false)
330330 then (price != 0)
331331 else false)
332332 then true
333333 else if (if ((assetId == toBase58String(usdtAssetId)))
334334 then (minSellUsdn > price)
335335 else false)
336336 then (price != 0)
337337 else false)
338338 then true
339339 else if (if ((assetId == toBase58String(signAssetId)))
340340 then (minSellSign > price)
341341 else false)
342342 then (price != 0)
343343 else false)
344344 then true
345345 else if (if (if ((assetId == toBase58String(wavesAssetId)))
346346 then true
347347 else (assetId == "WAVES"))
348348 then (minSellWaves > price)
349349 else false)
350350 then (price != 0)
351351 else false)
352352 then throw("Wrong minimum sell price")
353353 else true
354354 }
355355
356356
357357 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
358358 then unit
359359 else fromBase58String(assetId)
360360
361361
362362 func getPriceAssetIdFromBid (bidDataKey) = {
363363 let bidData = getStringByKey((bidDataKey + "_OPEN"))
364364 if ((bidData == ""))
365365 then throw("Bid not found")
366366 else {
367367 let bidDataArr = split(bidData, "_")
368368 let bidAmount = parseIntValue(bidDataArr[1])
369369 let bidAssetId = getBidAssetId(bidDataArr[0])
370370 if ((0 >= bidAmount))
371371 then throw("Wrong amount")
372372 else $Tuple2(bidAmount, bidAssetId)
373373 }
374374 }
375375
376376
377377 func idCallerDateSponsored (i,pubKey) = if (!(dappRunning))
378378 then throw(maintenanceMSG)
379379 else {
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383- if (true)
384- then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString((isSponsored > 0))))
385- else {
386- let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
387- then (isSponsored > 0)
388- else false)
389- then toString(addressFromPublicKey(fromBase58String(pubKey)))
390- else toBase58String(i.caller.bytes)
391- let get_sponsored_waves = if (if ((pubKey != ""))
392- then (isSponsored > 0)
393- else false)
394- then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
395- else unit
396- if ((get_sponsored_waves == get_sponsored_waves))
397- then $Tuple4(toBase58String(i.transactionId), if (if ((toBase58String(i.caller.bytes) == toString(this)))
398- then (isSponsored > 0)
399- else false)
400- then toString(addressFromPublicKey(fromBase58String(pubKey)))
401- else toBase58String(i.caller.bytes), lastBlock.timestamp, (isSponsored > 0))
402- else throw("Strict value is not equal to itself.")
403- }
383+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
384+ then (isSponsored > 0)
385+ else false)
386+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
387+ else toBase58String(i.caller.bytes)
388+ let get_sponsored_waves = if (if ((pubKey != ""))
389+ then (isSponsored > 0)
390+ else false)
391+ then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392+ else unit
393+ if ((get_sponsored_waves == get_sponsored_waves))
394+ then $Tuple4(toBase58String(i.transactionId), if (if ((toBase58String(i.caller.bytes) == toString(this)))
395+ then (isSponsored > 0)
396+ else false)
397+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
398+ else toBase58String(i.caller.bytes), lastBlock.timestamp, (isSponsored > 0))
399+ else throw("Strict value is not equal to itself.")
404400 }
405401
406402
407403 func idCallerDate (i) = if (!(dappRunning))
408404 then throw(maintenanceMSG)
409405 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
410406
411407
412408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
413- let $t01332813417 = idCallerDateSponsored(i, pubKey)
414- let id = $t01332813417._1
415- let caller = $t01332813417._2
416- let date = $t01332813417._3
417- let isSponsored = $t01332813417._4
409+ let $t01320213291 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01320213291._1
411+ let caller = $t01320213291._2
412+ let date = $t01320213291._3
413+ let isSponsored = $t01320213291._4
418414 if (true)
419415 then throw(((((((caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
420416 else {
421417 let isBid = if (if (if ((caller == issuer))
422418 then (bidOwner != "")
423419 else false)
424420 then (bidId != "")
425421 else false)
426422 then true
427423 else false
428424 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
429425 if (if (if ((blockEnd != 0))
430426 then (height >= blockEnd)
431427 else false)
432428 then !(isBid)
433429 else false)
434430 then throw("Sale ended.")
435431 else {
436432 let callerIsIssuer = (caller == issuer)
437433 let totalNFT = getIntegerByKey("total_nft_issued")
438434 let signID = getStringByKey(keySignID(issuer, artId))
439435 let artworkName = getStringByKey(keyName(issuer, artId))
440436 if ((artworkName == ""))
441437 then throw("Art doesn't exist")
442438 else {
443439 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
444440 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
445441 let artworkPrice = if (callerIsIssuer)
446442 then (currentCertificationPrice * 2)
447443 else getIntegerByKey(keyPrice(issuer, artId))
448444 let priceAssetId = if (callerIsIssuer)
449445 then toBase58String(signAssetId)
450446 else getStringByKey(keyAssetIdAccepted(issuer, artId))
451447 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
452448 if (if (if (!(isBid))
453449 then !(callerIsIssuer)
454450 else false)
455451 then if (if ((0 >= artworkPrice))
456452 then true
457453 else !(isOnSale))
458454 then true
459455 else (0 >= maxCanSell)
460456 else false)
461457 then throw("Art not for sale")
462458 else if (if (if (!(isBid))
463459 then callerIsIssuer
464460 else false)
465461 then (0 >= maxCanSell)
466462 else false)
467463 then throw("Max issuable not set")
468464 else {
469465 let checkUser = validateUser(issuer)
470466 if (if (isBid)
471467 then (checkUser != "")
472468 else false)
473469 then throw(checkUser)
474470 else {
475471 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01502115213 = if (isBid)
472+ let $t01489515087 = if (isBid)
477473 then getPriceAssetIdFromBid(bidDataKey)
478474 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01502115213._1
480- let assetId = $t01502115213._2
475+ let amount = $t01489515087._1
476+ let assetId = $t01489515087._2
481477 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482478 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483479 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
484480 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
485481 let isWhitelisted = checkWhitelist(issuer)
486482 let cut = if ((isWhitelisted > height))
487483 then 0
488484 else if ((assetId == signAssetId))
489485 then signCut
490486 else usdnWaveCut
491487 let amountForSign = fraction(amount, cut, 100)
492488 let amountForAgent = if (if (if ((agent != feeReceiver))
493489 then (agentShare > 0)
494490 else false)
495491 then (height > isWhitelisted)
496492 else false)
497493 then fraction(amount, agentShare, 10000)
498494 else 0
499495 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
500496 then (publicAgentShare > 0)
501497 else false)
502498 then (height > isWhitelisted)
503499 else false)
504500 then fraction(amount, publicAgentShare, 10000)
505501 else 0
506502 let amountForCreator = (amount - amountForSign)
507503 if ((amountSold == maxCanSell))
508504 then throw("Art sold out")
509505 else {
510506 let newAmountSold = (amountSold + 1)
511507 let issueMeta = ((((((((((("Creator: " + issuer) + ",
512508 ArtID: ") + artId) + ",
513509 SignID: ") + signID) + ",
514510 Artwork name: ") + artworkName) + ",
515511 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
516512 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
517513 let idNFT = calculateAssetId(issueNFT)
518514 let sellStatus = if (if ((newAmountSold == maxCanSell))
519515 then true
520516 else !(isOnSale))
521517 then false
522518 else true
523519 let receiveNFT = if (if (if ((caller == issuer))
524520 then (bidOwner != "")
525521 else false)
526522 then (bidId != "")
527523 else false)
528524 then addressFromStringValue(bidOwner)
529525 else i.caller
530526 let assetIdBid = if (!(isDefined(assetId)))
531527 then "WAVES"
532528 else toBase58String(value(assetId))
533529 let bidData = getStringByKey((bidDataKey + "_OPEN"))
534530 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
535531 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
536532 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
537533 let soldValue = if (!(isBid))
538534 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
539535 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
540536 let soldData = StringEntry(soldKey, soldValue)
541537 let commissionsWithAgent = if ((amountForAgent != 0))
542538 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
543539 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
544540 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
545541 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
546542 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
547543 let txToCaller = if (isSponsored)
548544 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
549545 else nil
550546 let buyRes = ((([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissionsWithAgent) ++ commissionsWithPublicAgent) ++ txToCaller)
551547 if (isBid)
552548 then [soldData, bidUpdate, bidDelOld] :: buyRes
553549 else soldData :: buyRes
554550 }
555551 }
556552 }
557553 }
558554 }
559555 }
560556 }
561557
562558
563559 func asString (bv) = match bv {
564560 case bv0: String =>
565561 bv0
566562 case _ =>
567563 throw("Sponsored Public Key String expected")
568564 }
569565
570566
571567 @Callable(invoke)
572568 func setConf (key,val) = {
573569 let caller = toString(invoke.caller)
574570 if (containsElement([chris, toString(this)], caller))
575571 then if (contains(key, "conf_"))
576572 then [StringEntry(key, val)]
577573 else throw("Entries starting with conf_ only")
578574 else throw("You are not allowed to change this")
579575 }
580576
581577
582578
583579 @Callable(i)
584580 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
585- let $t02038920462 = idCallerDateSponsored(i, pubKey)
586- let artId = $t02038920462._1
587- let caller = $t02038920462._2
588- let date = $t02038920462._3
589- let isSponsored = $t02038920462._4
581+ let $t02026320336 = idCallerDateSponsored(i, pubKey)
582+ let artId = $t02026320336._1
583+ let caller = $t02026320336._2
584+ let date = $t02026320336._3
585+ let isSponsored = $t02026320336._4
590586 if (!(validateHash(sha256Hash)))
591587 then throw("Hash should be 64 characters maximum")
592588 else {
593- let $t02056320632 = setLIcence(cidLicence, sha256Licence)
594- let licenceCID = $t02056320632._1
595- let licenceHash = $t02056320632._2
589+ let $t02043720506 = setLIcence(cidLicence, sha256Licence)
590+ let licenceCID = $t02043720506._1
591+ let licenceHash = $t02043720506._2
596592 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
597593 if ((validateArtwork != ""))
598594 then throw("Something went wrong!")
599595 else {
600596 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
601- let $t02093121015 = if (whitelisted_drop)
597+ let $t02080520889 = if (whitelisted_drop)
602598 then $Tuple2(0, signID)
603599 else validatePayment(i)
604- let amount = $t02093121015._1
605- let assetId = $t02093121015._2
600+ let amount = $t02080520889._1
601+ let assetId = $t02080520889._2
606602 if (!(isDefined(amount)))
607603 then throw("Something went wrong")
608604 else {
609605 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
610606 if ((entryExist != ""))
611607 then throw("You already added it")
612608 else {
613609 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
614610 if ((hashExist != ""))
615611 then throw("Hash already registered")
616612 else {
617613 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
618614 if (!(isSignCertified))
619615 then throw("Sign Certificate not found for this address.")
620616 else {
621617 let decrease_whitelist_drop = if (whitelisted_drop)
622618 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
623619 else unit
624620 if ((decrease_whitelist_drop == decrease_whitelist_drop))
625621 then {
626622 let txToCaller = if (isSponsored)
627623 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
628624 else nil
629625 ([StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, signAssetId)] ++ txToCaller)
630626 }
631627 else throw("Strict value is not equal to itself.")
632628 }
633629 }
634630 }
635631 }
636632 }
637633 }
638634 }
639635
640636
641637
642638 @Callable(i)
643639 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
644640 then throw(maintenanceMSG)
645641 else {
646- let $t02404924119 = idCallerDateSponsored(i, pubKey)
647- let id = $t02404924119._1
648- let caller = $t02404924119._2
649- let date = $t02404924119._3
650- let isSponsored = $t02404924119._4
651- let $t02412924198 = setLIcence(cidLicence, sha256Licence)
652- let licenceCID = $t02412924198._1
653- let licenceHash = $t02412924198._2
642+ let $t02392323993 = idCallerDateSponsored(i, pubKey)
643+ let id = $t02392323993._1
644+ let caller = $t02392323993._2
645+ let date = $t02392323993._3
646+ let isSponsored = $t02392323993._4
647+ let $t02400324072 = setLIcence(cidLicence, sha256Licence)
648+ let licenceCID = $t02400324072._1
649+ let licenceHash = $t02400324072._2
654650 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
655651 if ((validateArtwork != ""))
656652 then throw("Something went wrong!")
657653 else {
658654 let entryExist = getStringByKey(keyName(caller, txid))
659655 if ((entryExist == ""))
660656 then throw("Entry not found")
661657 else {
662658 let flag = getStringByKey(keyFlag(caller, txid))
663659 if ((flag == "ILLEGAL"))
664660 then throw("Cannot update ILLEGAL artwork")
665661 else if (!(isArtMinted(caller, txid)))
666662 then {
667663 let txToCaller = if (isSponsored)
668664 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
669665 else nil
670666 ([StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler), IntegerEntry(keyRoyalties(caller, txid), royalties)] ++ txToCaller)
671667 }
672668 else throw("Already minted")
673669 }
674670 }
675671 }
676672
677673
678674
679675 @Callable(i)
680676 func flagArtwork (artId,addr,flag,note) = {
681- let $t02582525859 = idCallerDate(i)
682- let id = $t02582525859._1
683- let caller = $t02582525859._2
677+ let $t02569925733 = idCallerDate(i)
678+ let id = $t02569925733._1
679+ let caller = $t02569925733._2
684680 if (containsElement([chris, toString(this)], caller))
685681 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
686682 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
687683 else throw(("Unknow status " + flag))
688684 else throw("You are not allowed")
689685 }
690686
691687
692688
693689 @Callable(i)
694690 func deleteArtwork (artId,addr) = {
695- let $t02629526329 = idCallerDate(i)
696- let id = $t02629526329._1
697- let caller = $t02629526329._2
691+ let $t02616926203 = idCallerDate(i)
692+ let id = $t02616926203._1
693+ let caller = $t02616926203._2
698694 let addrToUse = if (containsElement([chris, toString(this)], caller))
699695 then addr
700696 else caller
701697 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
702698 if ((entryExist == ""))
703699 then throw("No art matching for this address")
704700 else {
705701 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
706702 if ((sha256Hash == ""))
707703 then throw("No art hash matching for this address")
708704 else {
709705 let signID = getStringByKey(keySignID(addrToUse, artId))
710706 if ((signID == ""))
711707 then throw("No SIGN ID matching")
712708 else {
713709 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))]
714710 if (!(isArtMinted(addrToUse, artId)))
715711 then if (!(dappRunning))
716712 then throw(maintenanceMSG)
717713 else dataToDelete
718714 else if (containsElement([chris, toString(this)], caller))
719715 then dataToDelete
720716 else throw("Art already minted, you cannot delete it")
721717 }
722718 }
723719 }
724720 }
725721
726722
727723
728724 @Callable(i)
729725 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
730- let $t02916529235 = idCallerDateSponsored(i, pubKey)
731- let id = $t02916529235._1
732- let caller = $t02916529235._2
733- let date = $t02916529235._3
734- let isSponsored = $t02916529235._4
726+ let $t02903929109 = idCallerDateSponsored(i, pubKey)
727+ let id = $t02903929109._1
728+ let caller = $t02903929109._2
729+ let date = $t02903929109._3
730+ let isSponsored = $t02903929109._4
735731 let artworkName = getStringByKey(keyName(caller, artId))
736732 if ((artworkName == ""))
737733 then throw("This art doesn't match your account")
738734 else {
739735 let flag = getStringByKey(keyFlag(caller, artId))
740736 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
741737 then throw("Flagged artwork")
742738 else {
743739 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
744740 if ((0 > blockEnd))
745741 then throw("Negative end")
746742 else if (if ((blockEnd > 0))
747743 then if ((maxMint != 1))
748744 then true
749745 else (price != 0)
750746 else false)
751747 then throw("Timed offer only allowed for unique edition and offer only")
752748 else {
753749 let baseHeight = if ((blockEnd == 0))
754750 then 0
755751 else height
756752 if (!(acceptedAssetIds(assetId)))
757753 then throw("Something went wrong!")
758754 else if (!(validateMinSell(assetId, price)))
759755 then throw("Something went wrong!")
760756 else {
761757 let checkUser = validateUser(caller)
762758 if ((checkUser != ""))
763759 then throw(checkUser)
764760 else {
765761 let amountSold = getIntegerByKey(keyIssued(caller, artId))
766762 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
767763 if ((maxMint > 100))
768764 then throw("100 editions max per artwork")
769765 else if (if ((amountSold != 0))
770766 then (amountSold == maxCanSell)
771767 else false)
772768 then throw("Max edition reached.")
773769 else if (if ((amountSold > 0))
774770 then (maxCanSell != maxMint)
775771 else false)
776772 then throw("Cannot change maximum issuable anymore")
777773 else if (if ((bidNbr > 0))
778774 then (maxCanSell != maxMint)
779775 else false)
780776 then throw("Cannot change maximum issuable with active orders")
781777 else {
782778 let sellStatus = if (if ((price > 0))
783779 then (maxMint > 0)
784780 else false)
785781 then true
786782 else false
787783 let txToCaller = if (isSponsored)
788784 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
789785 else nil
790786 ([BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))] ++ txToCaller)
791787 }
792788 }
793789 }
794790 }
795791 }
796792 }
797793 }
798794
799795
800796
801797 @Callable(i)
802798 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
803799
804800
805801
806802 @Callable(i)
807803 func setBid (artId,issuer) = {
808- let $t03161731657 = idCallerDate(i)
809- let id = $t03161731657._1
810- let caller = $t03161731657._2
811- let date = $t03161731657._3
812- let $t03166231698 = isPayment(i)
813- let payment = $t03166231698._1
814- let amount = $t03166231698._2
804+ let $t03149131531 = idCallerDate(i)
805+ let id = $t03149131531._1
806+ let caller = $t03149131531._2
807+ let date = $t03149131531._3
808+ let $t03153631572 = isPayment(i)
809+ let payment = $t03153631572._1
810+ let amount = $t03153631572._2
815811 let assetId = if (!(isDefined(payment.assetId)))
816812 then "WAVES"
817813 else toBase58String(value(payment.assetId))
818814 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
819815 if (if ((blockEnd != 0))
820816 then (height >= blockEnd)
821817 else false)
822818 then throw("Sale ended.")
823819 else {
824820 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
825821 if (!(acceptedAssetIds(assetId)))
826822 then throw("asset not accepted")
827823 else if (!(validateMinSell(assetId, amount)))
828824 then throw("Wrong min sell")
829825 else {
830826 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
831827 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
832828 if ((0 >= maxCanSell))
833829 then throw("No max edition set for this artwork")
834830 else if ((amountSold >= maxCanSell))
835831 then throw("Sold out, you cannot bid")
836832 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
837833 }
838834 }
839835 }
840836
841837
842838
843839 @Callable(i)
844840 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
845- let $t03291832989 = idCallerDateSponsored(i, pubKey)
846- let id = $t03291832989._1
847- let caller1 = $t03291832989._2
848- let date = $t03291832989._3
849- let isSponsored = $t03291832989._4
841+ let $t03279232863 = idCallerDateSponsored(i, pubKey)
842+ let id = $t03279232863._1
843+ let caller1 = $t03279232863._2
844+ let date = $t03279232863._3
845+ let isSponsored = $t03279232863._4
850846 if ((caller1 != issuer))
851847 then throw("You cannot do this action")
852848 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
853849 }
854850
855851
856852
857853 @Callable(i)
858854 func cancelBid (artId,issuer,bidId,bidOwner) = {
859- let $t03322433285 = idCallerDate(i)
860- let id = $t03322433285._1
861- let caller = $t03322433285._2
862- let date = $t03322433285._3
855+ let $t03309833159 = idCallerDate(i)
856+ let id = $t03309833159._1
857+ let caller = $t03309833159._2
858+ let date = $t03309833159._3
863859 if (if ((caller != bidOwner))
864860 then (caller != issuer)
865861 else false)
866862 then throw("You cannot do this action")
867863 else {
868864 let returnMoneyTo = if ((caller == issuer))
869865 then bidOwner
870866 else caller
871867 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
872868 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
873869 let bidData = getStringByKey((bidDataKey + "_OPEN"))
874870 if ((bidData == ""))
875871 then throw("Bid not found")
876872 else {
877873 let bidDataArr = split(bidData, "_")
878874 let assetId = getBidAssetId(bidDataArr[0])
879875 let bidStatus = "CANCELED"
880876 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
881877 }
882878 }
883879 }
884880
885881
886882 @Verifier(tx)
887883 func verifier () = match tx {
888884 case inv: InvokeScriptTransaction =>
889885 if (if (if (if ((inv.function == "addArtwork"))
890886 then (inv.dApp == this)
891887 else false)
892888 then (inv.fee == 500000)
893889 else false)
894890 then (inv.feeAssetId == unit)
895891 else false)
896892 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
897893 else if (if (if (if ((inv.function == "updateArtwork"))
898894 then (inv.dApp == this)
899895 else false)
900896 then (inv.fee == 500000)
901897 else false)
902898 then (inv.feeAssetId == unit)
903899 else false)
904900 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
905901 else if (if (if (if ((inv.function == "sellArtwork"))
906902 then (inv.dApp == this)
907903 else false)
908904 then (inv.fee == 500000)
909905 else false)
910906 then (inv.feeAssetId == unit)
911907 else false)
912908 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
913909 else if (if (if (if ((inv.function == "acceptBid"))
914910 then (inv.dApp == this)
915911 else false)
916912 then (inv.fee == 500000)
917913 else false)
918914 then (inv.feeAssetId == unit)
919915 else false)
920916 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
921917 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
922918 case _ =>
923919 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
924920 }
925921

github/deemru/w8io/873ac7e 
228.87 ms