tx · D14ezK4sCdd93Xf88f9JYyQSgCn9xq7gBkdNKpAm7Qpb

3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG:  -0.01400000 Waves

2020.09.28 14:44 [1197134] smart account 3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG > SELF 0.00000000 Waves

{ "type": 13, "id": "D14ezK4sCdd93Xf88f9JYyQSgCn9xq7gBkdNKpAm7Qpb", "fee": 1400000, "feeAssetId": null, "timestamp": 1601293495204, "version": 2, "chainId": 84, "sender": "3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG", "senderPublicKey": "9SULUbW7L2jV2nv8v48Kdzox4cZ8jEfg778yJHJpgVwM", "proofs": [ "2Ff4RbhR5rXVqGRwC5mxRNCYTj4GSmFdps2a3tuZ2LrkrPYwU6HeTr2zQ6nmo7BMgF82tquSKkPRoSubcmCmMk4F" ], "script": "base64:AAIEAAAAAAAAAE4IAhIGCgQICAgIEgYKBAgICAgSBAoCCAgSAwoBCBIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBAoCCAgSBAoCCAESBAoCCAgAAAAvAAAAAA9zdG9yYWdlVmVyaWZpZXIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM04yczVSdGFIUEJlbkNzeDJFQ2NvRlJiWUh4M25vWmhYVzEAAAAADHNpZ25WZXJpZmllcgkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAABnVzZG5JRAIAAAAsM0tGWEJHR0xDakE1WjJEdVc0RHE5ZkREckhqSkpQMVpFa2FvYWpTenVLc0MAAAAABWFkbWluAgAAACMzTXNHNmpQTkNyVkpVdFlCN1hKQnhTN3V0V3NYQWY0bjlWcAAAAAAGYWRtaW4yAgAAACMzTXptNFZMd3NOOXVad2JUTXpQajNYdXhWNmtFZkFSOFVETgAAAAAPV0hJVEVMSVNURURPTkxZBgAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQAAAAADnVzZXJSZWdpc3RlcmVkAgAAAApSRUdJU1RFUkVEAAAAAAx1c2VyVmVyaWZpZWQCAAAACFZFUklGSUVEAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAABm9uU2FsZQIAAAAHT05fU0FMRQAAAAAEc29sZAIAAAAEU09MRAAAAAAIY2FuY2VsZWQCAAAACENBTkNFTEVEAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAAAAQAAABRjaGVja1NpZ25DZXJ0aWZpY2F0ZQAAAAMAAAAGc2lnbklEAAAABU93bmVyAAAACnNoYTI1Nkhhc2gEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAMc2lnblZlcmlmaWVyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhkYXRhX2ZjXwUAAAAGc2lnbklEAgAAAAFfBQAAAAVPd25lcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwAwkBAAAACGNvbnRhaW5zAAAAAgUAAAABYQUAAAAKc2hhMjU2SGFzaAYHBwEAAAAMdmFsaWRhdGVORlRzAAAAAgAAAAthY2N1bXVsYXRvcgAAAAJpZAQAAAAMYXNzZXREZXRhaWxzCQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAACaWQDAwMJAQAAAAIhPQAAAAIIBQAAAAxhc3NldERldGFpbHMAAAAIcXVhbnRpdHkAAAAAAAAAAAEGCQEAAAACIT0AAAACCAUAAAAMYXNzZXREZXRhaWxzAAAACGRlY2ltYWxzAAAAAAAAAAAABgkBAAAAAiE9AAAAAggFAAAADGFzc2V0RGV0YWlscwAAAApyZWlzc3VhYmxlBwkAAGQAAAACBQAAAAthY2N1bXVsYXRvcgAAAAAAAAAAAAkAAGQAAAACBQAAAAthY2N1bXVsYXRvcgAAAAAAAAAAAQEAAAAMdmVyaWZ5U3RhdHVzAAAAAQAAAARhZGRyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAMdXNlcl9zdGF0dXNfBQAAAARhZGRyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmcuAQAAAAtrZXlVc2VyQWRkcgAAAAEAAAAKY2FsbGVyQWRkcgkAASwAAAACAgAAAAV1c2VyXwUAAAAKY2FsbGVyQWRkcgEAAAALa2V5VXNlck5hbWUAAAABAAAACmNhbGxlckFkZHIJAAEsAAAAAgIAAAAKdXNlcl9uYW1lXwUAAAAKY2FsbGVyQWRkcgEAAAALa2V5VXNlckRlc2MAAAABAAAACmNhbGxlckFkZHIJAAEsAAAAAgIAAAAKdXNlcl9kZXNjXwUAAAAKY2FsbGVyQWRkcgEAAAANa2V5VXNlclNvY2lhbAAAAAEAAAAKY2FsbGVyQWRkcgkAASwAAAACAgAAAAx1c2VyX3NvY2lhbF8FAAAACmNhbGxlckFkZHIBAAAADGtleVVzZXJUaHVtYgAAAAEAAAAKY2FsbGVyQWRkcgkAASwAAAACAgAAAAt1c2VyX3RodW1iXwUAAAAKY2FsbGVyQWRkcgEAAAANa2V5VXNlclN0YXR1cwAAAAEAAAAKY2FsbGVyQWRkcgkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAACmNhbGxlckFkZHIBAAAAC2tleVVzZXJEYXRlAAAAAQAAAApjYWxsZXJBZGRyCQABLAAAAAICAAAACnVzZXJfZGF0ZV8FAAAACmNhbGxlckFkZHIBAAAACmtleUFydERhdGUAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kYXRlXwUAAAAFYXJ0SWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAACmtleUFydE5hbWUAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9uYW1lXwUAAAAFYXJ0SWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAACmtleUFydERlc2MAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kZXNjXwUAAAAFYXJ0SWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAAEGtleUFydERpc3BsYXlDaWQAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEGFydF9kaXNwbGF5X2NpZF8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABBhcnRfZXhwb3J0X2hhc2hfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9hcnRfZXhwb3J0X2NpZF8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAAA1rZXlBcnRNYXhNaW50AAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxhcnRfbWF4bWludF8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAAAxrZXlBcnRTaWduSUQAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC2FydF9zaWduaWRfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAMa2V5QXJ0SXNzdWVkAAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAthcnRfaXNzdWVkXwUAAAAFYXJ0SWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAADGtleUFydE9uU2FsZQAAAAIAAAAKY2FsbGVyQWRkcgAAAAVhcnRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALYXJ0X29uc2FsZV8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIAAAAKY2FsbGVyQWRkcgAAAAVhcnRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAARYXJ0X2xpY2VuY2VfaGFzaF8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABBhcnRfbGljZW5jZV9jaWRfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAKa2V5QXJ0VGFncwAAAAIAAAAKY2FsbGVyQWRkcgAAAAVhcnRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3RhZ3NfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAKa2V5QXJ0VHlwZQAAAAIAAAAKY2FsbGVyQWRkcgAAAAVhcnRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3R5cGVfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACAAAACmNhbGxlckFkZHIAAAAEdHhpZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAATZ2V0X2hhc2hieXR4aWRhZGRyXwUAAAAEdHhpZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAARa2V5QXJ0T3duZXJCeUhhc2gAAAABAAAACnNoYTI1Nkhhc2gJAAEsAAAAAgIAAAASZ2V0X293bmVyX2J5X2hhc2hfBQAAAApzaGEyNTZIYXNoAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgAAAApjYWxsZXJBZGRyAAAABnNpZ25JZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASZ2V0X2FydGlkYnlzaWduaWRfBQAAAAZzaWduSWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIAAAAKc2hhMjU2SGFzaAAAAApjYWxsZXJBZGRyCQABLAAAAAICAAAAF2dldF90eGlkX2J5X2hhc2hfb3duZXJfCQACWAAAAAEJAAtUAAAAAQkAAZsAAAABCQABLAAAAAIFAAAACnNoYTI1Nkhhc2gFAAAACmNhbGxlckFkZHIAAAAJAAAAAWkBAAAADHJlZ2lzdGVyVXNlcgAAAAQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAV0aHVtYgAAAAZzb2NpYWwEAAAACmNhbGxlckFkZHIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA91c2VyQ2FuUmVnaXN0ZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAKY2FsbGVyQWRkcgQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAJdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMDCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgUAAAANdXNlclN1c3BlbmRlZAYJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAEtZb3UgYXJlIG5vdyBhbGxvd2VkIHRvIHJlZ2lzdGVyLCB5b3VyIGFjY291bnQgaGF2ZSBiZWVuIHN1c3BlbmRlZC8gcmVtb3ZlZC4DCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgUAAAAOdXNlclJlZ2lzdGVyZWQJAAACAAAAAQIAAAA9WW91IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQsIHBsZWFzZSB1c2UgdXBkYXRlIG1ldGhvZCBpbnN0ZWFkLgMDCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgIAAAAABQAAAA9XSElURUxJU1RFRE9OTFkHCQAAAgAAAAECAAAATVlvdSBhcmUgbm93IGFsbG93ZWQgdG8gcmVnaXN0ZXIgeWV0LCBwbGVhc2UgY29udGFjdCB1cyBmaXJzdCB0byBnZXQgYXBwcm92ZWQuAwMJAAAAAAAAAgUAAAAEbmFtZQIAAAAABgkAAAAAAAACBQAAAAtkZXNjcmlwdGlvbgIAAAAACQAAAgAAAAECAAAAJE5hbWUgYW5kIGRlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eQMJAABmAAAAAgkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAACWAkAAAIAAAABAgAAACo2MDAgQ2hhcmFjdGVycyBtYXhpbXVtIGZvciB0aGUgZGVzY3JpcHRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAtrZXlVc2VyRGF0ZQAAAAEFAAAACmNhbGxlckFkZHIFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5VXNlckFkZHIAAAABBQAAAApjYWxsZXJBZGRyCQABLAAAAAIJAAEsAAAAAgUAAAACaWQCAAAAAV8JAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVVzZXJOYW1lAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAEbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5VXNlckRlc2MAAAABBQAAAApjYWxsZXJBZGRyBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5VXNlclNvY2lhbAAAAAEFAAAACmNhbGxlckFkZHIFAAAABnNvY2lhbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5VXNlclRodW1iAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAFdGh1bWIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAApjYWxsZXJBZGRyBQAAAA51c2VyUmVnaXN0ZXJlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAACaWQFAAAAA25pbAAAAAFpAQAAAAp1cGRhdGVVc2VyAAAABAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABXRodW1iAAAABnNvY2lhbAQAAAAKY2FsbGVyQWRkcgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAD3VzZXJDYW5SZWdpc3RlcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAApjYWxsZXJBZGRyAwMJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAA11c2VyU3VzcGVuZGVkBgkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAAC3VzZXJSZW1vdmVkCQAAAgAAAAECAAAAS1lvdSBhcmUgbm93IGFsbG93ZWQgdG8gcmVnaXN0ZXIsIHlvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VzcGVuZGVkLyByZW1vdmVkLgMDCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgIAAAAABgkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAAC3VzZXJBbGxvd2VkCQAAAgAAAAECAAAAJ1BsZWFzZSByZWdpc3RlciBmaXJzdCB3aXRoIHJlZ2lzdGVyVXNlcgQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAJdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMDCQAAAAAAAAIFAAAABG5hbWUCAAAAAAYJAAAAAAAAAgUAAAALZGVzY3JpcHRpb24CAAAAAAkAAAIAAAABAgAAACROYW1lIGFuZCBkZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAAlgJAAACAAAAAQIAAAAqNjAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIGRlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyTmFtZQAAAAEFAAAACmNhbGxlckFkZHIFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVVzZXJEZXNjAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVVzZXJTb2NpYWwAAAABBQAAAApjYWxsZXJBZGRyBQAAAAZzb2NpYWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleVVzZXJUaHVtYgAAAAEF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DHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlBAAAAAVhcnRJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzAwkAAAAAAAACCQABkAAAAAEIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAATTm8gcGF5bWVudCBhdHRhY2hlZAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAAGaW52b2tlAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAHYXNzZXRJZAMDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAtzaWduQXNzZXRJZAcIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAmT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGF0IHRoZSBtb21lbnQEAAAAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAPc3RvcmFnZVZlcmlmaWVyCQABLAAAAAICAAAAEmNlcnRpZmljYXRpb25fZmVlXwkAAlgAAAABBQAAAAtzaWduQXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVwcmljZQUAAAAHJG1hdGNoMAUAAAAFcHJpY2UJAAACAAAAAQIAAAAZUHJpY2UgdW5kZWZpbmVkIGluIG9yYWNsZQMJAQAAAAIhPQAAAAIFAAAABmFtb3VudAUAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAAAIAAAABCQABLAAAAAICAAAAGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAAGkAAAAAQUAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAqWW91IGFscmVhZHkgYWRkZWQgdGhpcyBhcnR3b3JrIG9uIFNpZ24gQXJ0BAAAAAloYXNoRXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlBcnRPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gDCQEAAAACIT0AAAACBQAAAAloYXNoRXhpc3QCAAAAAAkAAAIAAAABAgAAADNUaGlzIGFydHdvcmsgaGFzaCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gU2lnbiBBcnQEAAAAD2lzU2lnbkNlcnRpZmllZAkBAAAAFGNoZWNrU2lnbkNlcnRpZmljYXRlAAAAAwUAAAAGc2lnbklEBQAAAA1jYWxsZXJBZGRyZXNzBQAAAApzaGEyNTZIYXNoAwkBAAAAASEAAAABBQAAAA9pc1NpZ25DZXJ0aWZpZWQJAAACAAAAAQIAAABLU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgb24gU2lnbi13ZWIuYXBwIHNtYXJ0IGNvbnRyYWN0IGZvciB0aGlzIGFkZHJlc3MuAwkAAAAAAAACCQABMQAAAAEFAAAACmNpZERpc3BsYXkAAAAAAAAAAAAJAAACAAAAAQIAAAAbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkAAAAAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAVVGl0bGUgY2Fubm90IGJlIGVtcHR5AwkAAGYAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAGQJAAACAAAAAQIAAAAjMTAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIG5hbWUDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAA+gJAAACAAAAAQIAAAArMTAwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBkZXNjcmlwdGlvbgMJAAAAAAAAAgkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAAkAAAIAAAABAgAAABtEZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkEAAAACHRhZ3NMaXN0CQAEtQAAAAIFAAAABHRhZ3MCAAAAASwDCQAAZgAAAAIJAAGQAAAAAQUAAAAIdGFnc0xpc3QAAAAAAAAAAAUJAAACAAAAAQIAAAA4VGFncyBzaG91bGQgYmUgbWF4aW11bSA1IHNpbmdsZSB3b3JkIHNlcGFyYXRlZCBieSBzcGFjZS4EAAAAEHVzZXJJc1JlZ2lzdGVyZWQEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAADWNhbGxlckFkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwUAAAAQdXNlclVucmVnaXN0ZXJlZAQAAAAJdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAQdXNlcklzUmVnaXN0ZXJlZAkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAABB1c2VyVW5yZWdpc3RlcmVkBwkAAAIAAAABAgAAADhQbGVhc2UgcmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIlVzZXIgaW5mb3MiIHRhYgMJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAUAAAANdXNlclN1c3BlbmRlZAkAAAIAAAABAgAAABlZb3VyIGFjY291bnQgaXMgc3VzcGVuZGVkAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAB5Zb3VyIGFjY291bnQgaGF2ZSBiZWVuIHJlbW92ZWQDCQAAZgAAAAIFAAAAB21heG1pbnQAAAAAAAAAAAoJAAACAAAAAQIAAAAfTWF4aW11bSAxMCBlZGl0aW9ucyBwZXIgYXJ0d29yawMJAQAAAAIhPQAAAAIJAAExAAAAAQUAAAAKc2hhMjU2SGFzaAAAAAAAAAAAQAkAAAIAAAABAgAAADFIYXNoIHNob3VsZCBiZSBzaGEyNTYgc3RyaW5nIGNvbXBvc2VkIG9mIDY0IGNoYXIuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlBcnRPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QXJ0RGF0ZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydE5hbWUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAEbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAApjaWREaXNwbGF5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAJY2lkRXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAANc2hhMjU2TGljZW5jZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAApjaWRMaWNlbmNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUeXBlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAABHR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFRhZ3MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAHbWF4bWludAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAABnNpZ25JRAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAGc2lnbklEBQAAAAVhcnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAA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AAABBQAAAA1hcnR3b3JrTWludGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnROYW1lAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAKY2lkRGlzcGxheQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAJY2lkRXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAMc2hhMjU2RXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAKY2lkTGljZW5jZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAA1zaGEyNTZMaWNlbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAAB21heG1pbnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFRhZ3MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAR0YWdzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUeXBlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAAIdXBkYXRlSWQFAAAAA25pbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydERlc2MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFR5cGUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEdGFncwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAAIdXBkYXRlSWQFAAAAA25pbAAAAAFpAQAAAA1kZWxldGVBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAAdhZGRyZXNzBAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAMYWRkcmVzc1RvVXNlAwMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYWRtaW4GCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABmFkbWluMgUAAAAHYWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAAKZW50cnlFeGlzdAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwkAAAIAAAABAgAAADdObyBhcnR3b3JrIG1hdGNoaW5nIHRoaXMgcmVxdWVzdCBvciB5b3UgYXJlIG5vdCBhbGxvd2VkBAAAAA1hcnR3b3JrTWludGVkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAAAWIAAAAAAAAAAAAHBgcEAAAACnNoYTI1Nkhhc2gEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAJU5vIGFydHdvcmsgaGFzaCBtYXRjaGluZyB0aGlzIHJlcXVlc3QEAAAABnNpZ25JRAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAIE5vIFNJR04gSUQgbWF0Y2hpbmcgdGhpcyByZXF1ZXN0BAAAAAxkYXRhVG9EZWxldGUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydERhdGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUFydERpc3BsYXlDaWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0VHlwZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydFRhZ3MAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlBcnRNYXhNaW50AAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0SXNzdWVkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAATa2V5QXJ0QXJ0aWRCeVNpZ25pZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAGc2lnbklECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAxhZGRyZXNzVG9Vc2UFAAAAA25pbAMDCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFkbWluBgkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZhZG1pbjIFAAAADGRhdGFUb0RlbGV0ZQMJAQAAAAEhAAAAAQUAAAANYXJ0d29ya01pbnRlZAUAAAAMZGF0YVRvRGVsZXRlCQAAAgAAAAECAAAAOlRoaXMgYXJ0d29yayBhbHJlYWR5IGhhdmUgbWludGVkIE5GVCwgeW91IGNhbm5vdCBkZWxldGUgaXQAAAAGaW52b2tlAQAAAAtzZWxsQXJ0d29yawAAAAIAAAAEaGFzaAAAAAVwcmljZQQAAAACaWQJAAJYAAAAAQgFAAAABmludm9rZQAAAA10cmFuc2FjdGlvbklkBAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAAGaW52b2tlAAAABmNhbGxlcgAAAAVieXRlcwQAAAAJZW50cnlEYXRlCAUAAAAJbGFzdEJsb2NrAAAA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", "height": 1197134, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: BgZ78g9VsUix4owBnu1DvXfNzLMqS1XeH7cJ14aeScCU Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let storageVerifier = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
5+
6+let signVerifier = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
7+
8+let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
9+
10+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
11+
12+let usdnID = "3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC"
13+
14+let admin = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
15+
16+let admin2 = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
17+
18+let WHITELISTEDONLY = true
19+
20+let userAllowed = "ALLOWED"
21+
22+let userRegistered = "REGISTERED"
23+
24+let userVerified = "VERIFIED"
25+
26+let userSuspended = "SUSPENDED"
27+
28+let userRemoved = "REMOVED"
29+
30+let userUnregistered = "UNREGISTERED"
31+
32+let onSale = "ON_SALE"
33+
34+let sold = "SOLD"
35+
36+let canceled = "CANCELED"
37+
38+func getStringByKey (key) = match getString(this, key) {
39+ case a: String =>
40+ a
41+ case _ =>
42+ ""
43+}
44+
45+
46+func getIntegerByKey (key) = match getInteger(this, key) {
47+ case i: Int =>
48+ i
49+ case _ =>
50+ 0
51+}
52+
53+
54+func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signVerifier, ((("data_fc_" + signID) + "_") + Owner)) {
55+ case a: String =>
56+ if (contains(a, sha256Hash))
57+ then true
58+ else false
59+ case _ =>
60+ false
61+}
62+
63+
64+func validateNFTs (accumulator,id) = {
65+ let assetDetails = value(assetInfo(fromBase58String(id)))
66+ if (if (if ((assetDetails.quantity != 1))
67+ then true
68+ else (assetDetails.decimals != 0))
69+ then true
70+ else (assetDetails.reissuable != false))
71+ then (accumulator + 0)
72+ else (accumulator + 1)
73+ }
74+
75+
76+func verifyStatus (addr) = match getString(this, ("user_status_" + addr)) {
77+ case b: String =>
78+ b
79+ case _ =>
80+ throw("Something went wrong.")
81+}
82+
83+
84+func keyUserAddr (callerAddr) = ("user_" + callerAddr)
85+
86+
87+func keyUserName (callerAddr) = ("user_name_" + callerAddr)
88+
89+
90+func keyUserDesc (callerAddr) = ("user_desc_" + callerAddr)
91+
92+
93+func keyUserSocial (callerAddr) = ("user_social_" + callerAddr)
94+
95+
96+func keyUserThumb (callerAddr) = ("user_thumb_" + callerAddr)
97+
98+
99+func keyUserStatus (callerAddr) = ("user_status_" + callerAddr)
100+
101+
102+func keyUserDate (callerAddr) = ("user_date_" + callerAddr)
103+
104+
105+func keyArtDate (callerAddr,artId) = ((("art_date_" + artId) + "_") + callerAddr)
106+
107+
108+func keyArtName (callerAddr,artId) = ((("art_name_" + artId) + "_") + callerAddr)
109+
110+
111+func keyArtDesc (callerAddr,artId) = ((("art_desc_" + artId) + "_") + callerAddr)
112+
113+
114+func keyArtDisplayCid (callerAddr,artId) = ((("art_display_cid_" + artId) + "_") + callerAddr)
115+
116+
117+func keyArtExportHash (callerAddr,artId) = ((("art_export_hash_" + artId) + "_") + callerAddr)
118+
119+
120+func keyArtExportCid (callerAddr,artId) = ((("art_export_cid_" + artId) + "_") + callerAddr)
121+
122+
123+func keyArtMaxMint (callerAddr,artId) = ((("art_maxmint_" + artId) + "_") + callerAddr)
124+
125+
126+func keyArtSignID (callerAddr,artId) = ((("art_signid_" + artId) + "_") + callerAddr)
127+
128+
129+func keyArtIssued (callerAddr,artId) = ((("art_issued_" + artId) + "_") + callerAddr)
130+
131+
132+func keyArtOnSale (callerAddr,artId) = ((("art_onsale_" + artId) + "_") + callerAddr)
133+
134+
135+func keyArtLicenceHash (callerAddr,artId) = ((("art_licence_hash_" + artId) + "_") + callerAddr)
136+
137+
138+func keyArtLicenceCid (callerAddr,artId) = ((("art_licence_cid_" + artId) + "_") + callerAddr)
139+
140+
141+func keyArtTags (callerAddr,artId) = ((("art_tags_" + artId) + "_") + callerAddr)
142+
143+
144+func keyArtType (callerAddr,artId) = ((("art_type_" + artId) + "_") + callerAddr)
145+
146+
147+func keyArtHashByTxidAddr (callerAddr,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + callerAddr)
148+
149+
150+func keyArtOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
151+
152+
153+func keyArtArtidBySignid (callerAddr,signId) = ((("get_artidbysignid_" + signId) + "_") + callerAddr)
154+
155+
156+func keyArtTxidByHashOwner (sha256Hash,callerAddr) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + callerAddr)))))
157+
158+
159+@Callable(i)
160+func registerUser (name,description,thumb,social) = {
161+ let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
162+ let userCanRegister = getStringByKey(keyUserStatus(callerAddr))
163+ let id = toBase58String(i.transactionId)
164+ let timestamp = lastBlock.timestamp
165+ if (if ((userCanRegister == userSuspended))
166+ then true
167+ else (userCanRegister == userRemoved))
168+ then throw("You are now allowed to register, your account have been suspended/ removed.")
169+ else if ((userCanRegister == userRegistered))
170+ then throw("You are already registered, please use update method instead.")
171+ else if (if ((userCanRegister == ""))
172+ then WHITELISTEDONLY
173+ else false)
174+ then throw("You are now allowed to register yet, please contact us first to get approved.")
175+ else if (if ((name == ""))
176+ then true
177+ else (description == ""))
178+ then throw("Name and description cannot be empty")
179+ else if ((size(description) > 600))
180+ then throw("600 Characters maximum for the description")
181+ else [IntegerEntry(keyUserDate(callerAddr), timestamp), StringEntry(keyUserAddr(callerAddr), ((id + "_") + toString(lastBlock.timestamp))), StringEntry(keyUserName(callerAddr), name), StringEntry(keyUserDesc(callerAddr), description), StringEntry(keyUserSocial(callerAddr), social), StringEntry(keyUserThumb(callerAddr), thumb), StringEntry(keyUserStatus(callerAddr), userRegistered), StringEntry("last_invoke_id", id)]
182+ }
183+
184+
185+
186+@Callable(i)
187+func updateUser (name,description,thumb,social) = {
188+ let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
189+ let userCanRegister = getStringByKey(keyUserStatus(callerAddr))
190+ if (if ((userCanRegister == userSuspended))
191+ then true
192+ else (userCanRegister == userRemoved))
193+ then throw("You are now allowed to register, your account have been suspended/ removed.")
194+ else if (if ((userCanRegister == ""))
195+ then true
196+ else (userCanRegister == userAllowed))
197+ then throw("Please register first with registerUser")
198+ else {
199+ let id = toBase58String(i.transactionId)
200+ let timestamp = lastBlock.timestamp
201+ if (if ((name == ""))
202+ then true
203+ else (description == ""))
204+ then throw("Name and description cannot be empty")
205+ else if ((size(description) > 600))
206+ then throw("600 Characters maximum for the description")
207+ else [StringEntry(keyUserName(callerAddr), name), StringEntry(keyUserDesc(callerAddr), description), StringEntry(keyUserSocial(callerAddr), social), StringEntry(keyUserThumb(callerAddr), thumb), StringEntry("last_invoke_id", id)]
208+ }
209+ }
210+
211+
212+
213+@Callable(i)
214+func changeUserStatus (address,status) = {
215+ let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
216+ let id = toBase58String(i.transactionId)
217+ let statusToSet = if ((status == userVerified))
218+ then userVerified
219+ else if ((status == userRegistered))
220+ then userRegistered
221+ else if ((status == userSuspended))
222+ then userSuspended
223+ else if ((status == userRemoved))
224+ then userRemoved
225+ else if ((status == userAllowed))
226+ then userAllowed
227+ else throw("Unknown status")
228+ if (if ((callerAddr == admin))
229+ then true
230+ else (callerAddr == admin2))
231+ then [StringEntry(keyUserStatus(address), statusToSet), StringEntry("last_invoke_id", id)]
232+ else throw(((("You are not allowed to change user status " + callerAddr) + " / ") + admin))
233+ }
234+
235+
236+
237+@Callable(i)
238+func deleteUser (address) = {
239+ let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
240+ let id = toBase58String(i.transactionId)
241+ if (if ((callerAddr == admin))
242+ then true
243+ else (callerAddr == admin2))
244+ then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), StringEntry(keyUserStatus(address), userRemoved), StringEntry("last_invoke_id", id)]
245+ else throw("You are not allowed to do that")
246+ }
247+
248+
249+
250+@Callable(invoke)
251+func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
252+ let artId = toBase58String(invoke.transactionId)
253+ let callerAddress = toBase58String(invoke.caller.bytes)
254+ if ((size(invoke.payments) == 0))
255+ then throw("No payment attached")
256+ else {
257+ let payment = value(invoke.payments[0])
258+ let amount = value(payment.amount)
259+ let assetId = if (if (isDefined(payment.assetId))
260+ then (payment.assetId == signAssetId)
261+ else false)
262+ then payment.assetId
263+ else throw("Only SIGN token accepted at the moment")
264+ let currentCertificationPrice = match getInteger(storageVerifier, ("certification_fee_" + toBase58String(signAssetId))) {
265+ case price: Int =>
266+ price
267+ case _ =>
268+ throw("Price undefined in oracle")
269+ }
270+ if ((amount != currentCertificationPrice))
271+ then throw(("Payment amount should be " + toString(currentCertificationPrice)))
272+ else {
273+ let entryExist = getStringByKey(keyArtTxidByHashOwner(sha256Hash, callerAddress))
274+ if ((entryExist != ""))
275+ then throw("You already added this artwork on Sign Art")
276+ else {
277+ let hashExist = getStringByKey(keyArtOwnerByHash(sha256Hash))
278+ if ((hashExist != ""))
279+ then throw("This artwork hash is already registered on Sign Art")
280+ else {
281+ let isSignCertified = checkSignCertificate(signID, callerAddress, sha256Hash)
282+ if (!(isSignCertified))
283+ then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
284+ else if ((size(cidDisplay) == 0))
285+ then throw("Display CID cannot be empty")
286+ else if ((size(name) == 0))
287+ then throw("Title cannot be empty")
288+ else if ((size(name) > 100))
289+ then throw("100 Characters maximum for the name")
290+ else if ((size(description) > 1000))
291+ then throw("1000 Characters maximum for the description")
292+ else if ((size(description) == 0))
293+ then throw("Description cannot be empty")
294+ else {
295+ let tagsList = split(tags, ",")
296+ if ((size(tagsList) > 5))
297+ then throw("Tags should be maximum 5 single word separated by space.")
298+ else {
299+ let userIsRegistered = match getString(this, ("user_status_" + callerAddress)) {
300+ case s: String =>
301+ s
302+ case _ =>
303+ userUnregistered
304+ }
305+ let timestamp = lastBlock.timestamp
306+ if (if (isDefined(userIsRegistered))
307+ then (userIsRegistered == userUnregistered)
308+ else false)
309+ then throw("Please register this account first with \"User infos\" tab")
310+ else if ((userIsRegistered == userSuspended))
311+ then throw("Your account is suspended")
312+ else if ((userIsRegistered == userRemoved))
313+ then throw("Your account have been removed")
314+ else if ((maxmint > 10))
315+ then throw("Maximum 10 editions per artwork")
316+ else if ((size(sha256Hash) != 64))
317+ then throw("Hash should be sha256 string composed of 64 char.")
318+ else [StringEntry(keyArtOwnerByHash(sha256Hash), callerAddress), StringEntry(keyArtTxidByHashOwner(sha256Hash, callerAddress), artId), IntegerEntry(keyArtDate(callerAddress, artId), timestamp), StringEntry(keyArtName(callerAddress, artId), name), StringEntry(keyArtDesc(callerAddress, artId), description), StringEntry(keyArtDisplayCid(callerAddress, artId), cidDisplay), StringEntry(keyArtExportCid(callerAddress, artId), cidExport), StringEntry(keyArtExportHash(callerAddress, artId), sha256Export), StringEntry(keyArtLicenceHash(callerAddress, artId), sha256Licence), StringEntry(keyArtLicenceCid(callerAddress, artId), cidLicence), StringEntry(keyArtType(callerAddress, artId), type), StringEntry(keyArtTags(callerAddress, artId), tags), IntegerEntry(keyArtMaxMint(callerAddress, artId), maxmint), StringEntry(keyArtSignID(callerAddress, artId), signID), IntegerEntry(keyArtIssued(callerAddress, artId), 0), BooleanEntry(keyArtOnSale(callerAddress, artId), false), StringEntry(keyArtArtidBySignid(callerAddress, signID), artId), StringEntry("last_invoke_id", artId), StringEntry(keyArtHashByTxidAddr(callerAddress, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
319+ }
320+ }
321+ }
322+ }
323+ }
324+ }
325+ }
326+
327+
328+
329+@Callable(invoke)
330+func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
331+ let updateId = toBase58String(invoke.transactionId)
332+ let callerAddress = toBase58String(invoke.caller.bytes)
333+ let entryExist = getStringByKey(keyArtName(callerAddress, txid))
334+ if ((entryExist == ""))
335+ then throw("This entry doesn't exist or you are not the owner")
336+ else if ((size(name) == 0))
337+ then throw("Title cannot be empty")
338+ else if ((size(name) > 100))
339+ then throw("100 Characters maximum for the name")
340+ else if ((size(description) > 1000))
341+ then throw("1000 Characters maximum for the description")
342+ else if ((size(description) == 0))
343+ then throw("Description cannot be empty")
344+ else {
345+ let artworkMinted = match getInteger(this, keyArtIssued(callerAddress, txid)) {
346+ case b: Int =>
347+ if ((b == 0))
348+ then false
349+ else true
350+ case _ =>
351+ false
352+ }
353+ let tagsList = split(tags, ",")
354+ if ((size(tagsList) > 5))
355+ then throw("Tags should be maximum 5 single word separated by space.")
356+ else {
357+ let userIsRegistered = match getString(this, ("user_status_" + callerAddress)) {
358+ case s: String =>
359+ s
360+ case _ =>
361+ userUnregistered
362+ }
363+ if (if (isDefined(userIsRegistered))
364+ then (userIsRegistered == userUnregistered)
365+ else false)
366+ then throw("Please register this account first with \"User infos\" tab")
367+ else if ((userIsRegistered == userSuspended))
368+ then throw("Your account is suspended")
369+ else if ((userIsRegistered == userRemoved))
370+ then throw("Your account have been removed")
371+ else if ((maxmint > 10))
372+ then throw("Maximum 10 editions per artwork")
373+ else if (!(artworkMinted))
374+ then [StringEntry(keyArtName(callerAddress, txid), name), StringEntry(keyArtDesc(callerAddress, txid), description), StringEntry(keyArtDisplayCid(callerAddress, txid), cidDisplay), StringEntry(keyArtExportCid(callerAddress, txid), cidExport), StringEntry(keyArtExportHash(callerAddress, txid), sha256Export), StringEntry(keyArtLicenceCid(callerAddress, txid), cidLicence), StringEntry(keyArtLicenceHash(callerAddress, txid), sha256Licence), IntegerEntry(keyArtMaxMint(callerAddress, txid), maxmint), StringEntry(keyArtTags(callerAddress, txid), tags), StringEntry(keyArtType(callerAddress, txid), type), StringEntry("last_invoke_id", updateId)]
375+ else [StringEntry(keyArtName(callerAddress, txid), name), StringEntry(keyArtDesc(callerAddress, txid), description), StringEntry(keyArtDisplayCid(callerAddress, txid), cidDisplay), StringEntry(keyArtType(callerAddress, txid), type), StringEntry(keyArtTags(callerAddress, txid), tags), StringEntry("last_invoke_id", updateId)]
376+ }
377+ }
378+ }
379+
380+
381+
382+@Callable(i)
383+func deleteArtwork (artId,address) = {
384+ let callerAddress = toString(addressFromPublicKey(i.callerPublicKey))
385+ let id = toBase58String(i.transactionId)
386+ let addressToUse = if (if ((callerAddress == admin))
387+ then true
388+ else (callerAddress == admin2))
389+ then address
390+ else callerAddress
391+ let entryExist = match getString(this, getStringByKey(keyArtName(addressToUse, artId))) {
392+ case s: String =>
393+ s
394+ case _ =>
395+ throw("No artwork matching this request or you are not allowed")
396+ }
397+ let artworkMinted = match getInteger(this, keyArtIssued(addressToUse, artId)) {
398+ case b: Int =>
399+ if ((b == 0))
400+ then false
401+ else true
402+ case _ =>
403+ false
404+ }
405+ let sha256Hash = match getString(this, getStringByKey(keyArtHashByTxidAddr(addressToUse, artId))) {
406+ case s: String =>
407+ s
408+ case _ =>
409+ throw("No artwork hash matching this request")
410+ }
411+ let signID = match getString(this, getStringByKey(keyArtSignID(addressToUse, artId))) {
412+ case s: String =>
413+ s
414+ case _ =>
415+ throw("No SIGN ID matching this request")
416+ }
417+ let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), StringEntry("last_invoke_id", id), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse))]
418+ if (if ((callerAddress == admin))
419+ then true
420+ else (callerAddress == admin2))
421+ then dataToDelete
422+ else if (!(artworkMinted))
423+ then dataToDelete
424+ else throw("This artwork already have minted NFT, you cannot delete it")
425+ }
426+
427+
428+
429+@Callable(invoke)
430+func sellArtwork (hash,price) = {
431+ let id = toBase58String(invoke.transactionId)
432+ let callerAddress = toBase58String(invoke.caller.bytes)
433+ let entryDate = lastBlock.timestamp
434+ let entryID = getStringByKey(((hash + "_") + callerAddress))
435+ if (!(isDefined(entryID)))
436+ then throw("This artwork doesn't exit or you are not the owner")
437+ else {
438+ let userIsRegistered = getStringByKey(("user_status_" + callerAddress))
439+ if ((userIsRegistered == ""))
440+ then throw("Please register this account first")
441+ else {
442+ let amountSold = getIntegerByKey(((("art_issued_" + entryID) + "_") + callerAddress))
443+ let maxCanSell = getIntegerByKey(((("art_maxmint_" + entryID) + "_") + callerAddress))
444+ if ((amountSold == maxCanSell))
445+ then throw("You reached the max edition allowed to sell for this edition.")
446+ else if ((userIsRegistered == userSuspended))
447+ then throw("Your account is suspended")
448+ else if (!(isDefined(entryID)))
449+ then throw("This artwork desn't exist")
450+ else if ((size(hash) != 64))
451+ then throw("This hash is incorrect.")
452+ else {
453+ let sellStatus = if ((price > 0))
454+ then true
455+ else false
456+[BooleanEntry(((("art_onsale_" + entryID) + "_") + callerAddress), sellStatus), IntegerEntry(((("art_price_" + entryID) + "_") + callerAddress), price), StringEntry("last_invoke_id", id)]
457+ }
458+ }
459+ }
460+ }
461+
462+
463+
464+@Callable(invoke)
465+func buyArtwork (hash,issuer) = {
466+ let id = toBase58String(invoke.transactionId)
467+ let callerAddress = toBase58String(invoke.caller.bytes)
468+ let totalNFT = getIntegerByKey("total_nft_issued")
469+ let entryID = getStringByKey(((hash + "_") + issuer))
470+ if ((entryID == ""))
471+ then throw("This artwork doesn't exit or you are not the owner")
472+ else {
473+ let userIsRegistered = getStringByKey(("user_status_" + callerAddress))
474+ if (!(isDefined(userIsRegistered)))
475+ then throw("Please register this account first")
476+ else {
477+ let alreadySoldList = getStringByKey(((("art_sold_" + entryID) + "_") + issuer))
478+ let amountSold = getIntegerByKey(((("art_issued_" + entryID) + "_") + issuer))
479+ let artworkPrice = getIntegerByKey(((("art_price_" + entryID) + "_") + issuer))
480+ if ((artworkPrice == 0))
481+ then throw("This artwork is not for sell")
482+ else {
483+ let maxCanSell = getIntegerByKey(((("art_maxmint_" + entryID) + "_") + issuer))
484+ let payment = value(invoke.payments[0])
485+ let amount = value(payment.amount)
486+ let assetId = if (isDefined(payment.assetId))
487+ then throw("Only Waves token accepted at the moment")
488+ else unit
489+ if ((amountSold == maxCanSell))
490+ then throw("Cannot buy this artwork anymore")
491+ else if ((artworkPrice != amount))
492+ then throw("Payment don't match seller price")
493+ else {
494+ let newAmountSold = (amountSold + 1)
495+ let entryDate = lastBlock.timestamp
496+ let issueMeta = (((((((((((((("{\"version\": 1,\"artID\": \"" + entryID) + "\",\"maxIssuable\": \"") + toString(maxCanSell)) + "\",\"signID\": \"SA_") + toString((totalNFT + 1))) + "\", \"creator\": \"") + issuer) + "\", \"issue\": \"") + toString(newAmountSold)) + "/") + toString(maxCanSell)) + "\", \"hash\": ") + hash) + "}")
497+ let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
498+ let idNFT = calculateAssetId(issueNFT)
499+ let sellStatus = if ((newAmountSold == maxCanSell))
500+ then false
501+ else true
502+[IntegerEntry(((("art_issued_" + entryID) + "_") + issuer), newAmountSold), StringEntry(((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + entryID) + "_") + issuer), ((((((callerAddress + "_") + toString(entryDate)) + "_") + id) + "_") + toString(artworkPrice))), IntegerEntry("total_nft_issued", (totalNFT + 1)), StringEntry("last_invoke_id", id), issueNFT, BooleanEntry(((("art_onsale_" + entryID) + "_") + callerAddress), sellStatus), ScriptTransfer(Address(fromBase58String(issuer)), amount, assetId), ScriptTransfer(invoke.caller, 1, idNFT)]
503+ }
504+ }
505+ }
506+ }
507+ }
508+
509+

github/deemru/w8io/6500d08 
832.45 ms