tx · 5BUM7Kj8n12HoTQxRt7bxEBBxXHJWEVR3FGk1wuxsu5r

3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2:  -0.01500000 Waves

2019.10.14 16:42 [719679] smart account 3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2 > SELF 0.00000000 Waves

{ "type": 13, "id": "5BUM7Kj8n12HoTQxRt7bxEBBxXHJWEVR3FGk1wuxsu5r", "fee": 1500000, "feeAssetId": null, "timestamp": 1571060493946, "version": 1, "sender": "3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2", "senderPublicKey": "8y2Uc9uYf5gRD6Dzm1aC73zYe3LZvtVDUVAnAhNdN2mg", "proofs": [ "4xhmxWe7r1vmNAMoku2bitLbiNfqxtLwZ6KPdTuQjQkMepaPFxLWrNyuARWPS995PJNvumssN2JuVax6b9eCm8be" ], "script": "base64:AAIDAAAAAAAAAD8IARIDCgEIEgMKAQgSBQoDAQEIEgQKAggBEgQKAggIEgQKAggBEgMKAQgSAwoBCBIECgIICBIDCgEIEgMKAQgAAAAxAAAAAANkYXkAAAAAAAAABaAAAAAABVdBVkVTBQAAAAR1bml0AAAAAAR3QlRDAQAAACBs+mr/xe2qjAt/tSqT0qIML4KC23R6BIxT+/0TH3Og/wAAAAAEd0VVUgEAAAAg7BZhBF97kSFBBjs38+fX1Pjz08YOqoCX85C/0PoVupkAAAAABHdVU0QBAAAAIN0cvQHwz3UFMHgHsqi2OJjRRd1cH7ozWuNAb/pmWXD9AAAAAAlhdWN0VG9rZW4BAAAAAQAAAAAACXN0YXRlT3BlbgIAAAAGT3BlbmVkAAAAAA5zdGF0ZVN1Z2dlc3RlZAIAAAAJU3VnZ2VzdGVkAAAAAAtzdGF0ZUNhbmNlbAIAAAAIQ2FuY2VsZWQAAAAAD3N0YXRlSW5Qcm9ncmVzcwIAAAAKSW5Qcm9ncmVzcwAAAAARc3RhdGVXYWl0NENvbmZpcm0CAAAAE1dhaXRGb3JDb25maXJtYXRpb24AAAAADXN0YXRlQ29tcGxldGUCAAAACUNvbXBsZXRlZAAAAAAMc3RhdGVEaXNwdXRlAgAAAAdEaXNwdXRlAAAAABRzdGF0ZURpc3B1dGVSZXNvbHZlZAIAAAAPRGlzcHV0ZVJlc29sdmVkAAAAAAZjbGllbnQCAAAAAkNMAAAAAApmcmVlbGFuY2VyAgAAAAJGTAAAAAALYW1iYXNzYWRvcjECAAAALEZuZUNKcU01QlAyZUF1eXRlTWl1RUVIWUFMckU0YXhoRWZjcEhWR2JkcjVzAAAAAAthbWJhc3NhZG9yMgIAAAAsNlFBTWRzc2IxR0pqcFFWUVFjbng4ZktVOFdodGNGOVpzUWhpZmRUaEFFSzgAAAAAC2FtYmFzc2Fkb3IzAgAAACwyaXR1d1c3RFNSc0xQM1ZjYm5wcjk4UVVRTUdGUldLbXlZUEZxc1VLUkRvUAAAAAALYW1iYXNzYWRvcjQCAAAALEFOc1BRb2NFRVN5TGIzeVFxazJwd0Nkb0s3UEpReExvWlZwWXZzbTNTeFVHAAAAAAthbWJhc3NhZG9yNQIAAAAsMTNWaXh3UWluMU16WkN5WTY5TlNXTVNCTkVWMjdSemMxNTlvN3VaWFI5VlMBAAAABmdldEludAAAAAEAAAADa2V5BAAAABB2YWx1ZUpvYnNPbkdvaW5nCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQQAAAAHJG1hdGNoMAUAAAAQdmFsdWVKb2JzT25Hb2luZwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABJBc3NldElkVG9Bc3NldE5hbWUAAAABAAAACnBtdEFzc2V0SWQDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAApwbXRBc3NldElkAgAAAAVXQVZFUwMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAEd0JUQwIAAAADQlRDAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAR3RVVSAgAAAANFVVIDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAABHdVU0QCAAAAA1VTRAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAJYXVjdFRva2VuAgAAAARBVUNUCQAAAgAAAAECAAAAFEFzc2V0SWQgaXMgaW5jb3JyZWN0AQAAABJBc3NldE5hbWVUb0Fzc2V0SWQAAAABAAAAEGF1Y3Rpb25Bc3NldE5hbWUDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAABVdBVkVTBQAAAAVXQVZFUwMJAAAAAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAADQlRDBQAAAAR3QlRDAwkAAAAAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAANFVVIFAAAABHdFVVIDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAA1VTRAUAAAAEd1VTRAMJAAAAAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAEQVVDVAUAAAAJYXVjdFRva2VuCQAAAgAAAAECAAAAEkluY29ycmVjdCBBc3NldCBJZAEAAAAJdGltZUNoZWNrAAAAAwAAAAtjdXJyZW50VGltZQAAAAlzdGFydFRpbWUAAAAOZXhwaXJhdGlvblRpbWUJAABmAAAAAgkAAGUAAAACBQAAAAtjdXJyZW50VGltZQUAAAAJc3RhcnRUaW1lBQAAAA5leHBpcmF0aW9uVGltZQEAAAAOYmlkQW1vdW50Q2hlY2sAAAACAAAABmFtb3VudAAAAAxhdWN0aW9uUHJpY2UDCQAAZgAAAAIFAAAABmFtb3VudAUAAAAMYXVjdGlvblByaWNlCQAAAgAAAAECAAAAM0JpZCBhbW91bnQgbXVzdCBiZSBsb3dlciBvciBlcXVhbCB0aGFuIGF1Y3Rpb25QcmljZQUAAAAGYW1vdW50AQAAABZpbmNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgAAAAxwbXRBc3NldE5hbWUAAAAMYXVjdGlvblByaWNlBAAAAA9rZXlGcmVlemVkRnVuZHMJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAxwbXRBc3NldE5hbWUCAAAACF9GcmVlemVkBAAAABVjdXJyZW50RnJlZXplZEJhbGFuY2UEAAAAByRtYXRjaDAFAAAAD2tleUZyZWV6ZWRGdW5kcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAACQAAZAAAAAIFAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQUAAAAMYXVjdGlvblByaWNlAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgAAAAxwbXRBc3NldE5hbWUAAAAMYXVjdGlvblByaWNlBAAAAA9rZXlGcmVlemVkRnVuZHMJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAxwbXRBc3NldE5hbWUCAAAACF9GcmVlemVkBAAAABVjdXJyZW50RnJlZXplZEJhbGFuY2UEAAAAByRtYXRjaDAFAAAAD2tleUZyZWV6ZWRGdW5kcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAFhCQAAZQAAAAIFAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQUAAAAMYXVjdGlvblByaWNlAwkAAGcAAAACBQAAAAFhAAAAAAAAAAAABQAAAAFhCQAAAgAAAAECAAAAJkZyZWV6ZWQgYW1vdW50IGNvdWxkbid0IGJlIGxlc3MgdGhhbiAwAQAAABBjbGllbnRSZWdpc3RlcmVkAAAAAQAAAAljYWxsZXJQdWIEAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAljYWxsZXJQdWICAAAAC19GcmVlbGFuY2VyBAAAAAckbWF0Y2gwBQAAABZmcmVlbGFuY2VySXNSZWdpc3RlcmVkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAACWNhbGxlclB1YgkAAAIAAAABAgAAACNPbmx5IHJlZ2lzdGVyZWQgdXNlcnMgY2FuIG1ha2UgYmV0cwEAAAAUZnJlZWxhbmNlclJlZ2lzdGVyZWQAAAABAAAACWNhbGxlclB1YgQAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWNhbGxlclB1YgIAAAALX0ZyZWVsYW5jZXIEAAAAByRtYXRjaDAFAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAAI09ubHkgcmVnaXN0ZXJlZCB1c2VycyBjYW4gbWFrZSBiZXRzAQAAABdjcmVhdGVBdWN0aW9uUHJpY2VDaGVjawAAAAEAAAAJcG10QW1vdW50AwkAAGYAAAACBQAAAAlwbXRBbW91bnQAAAAAAAAAAAAFAAAACXBtdEFtb3VudAkAAAIAAAABAgAAABxBbW91bnQgbXVzdCBiZSBoaWdoZXIgdGhlbiAwAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABAAAACWF1Y3Rpb25JZAQAAAAKdmFsdWVTdGF0ZQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBAAAAAckbWF0Y2gwBQAAAAp2YWx1ZVN0YXRlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAbQXVjdGlvbiBTdGF0ZSB3YXMgbm90IGZvdW5kAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQAAAAlhdWN0aW9uSWQEAAAADnZhbHVlQ2xpZW50UHViCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA5fQXVjdGlvbkNsaWVudAQAAAAHJG1hdGNoMAUAAAAOdmFsdWVDbGllbnRQdWIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABxBdWN0aW9uIENsaWVudCB3YXMgbm90IGZvdW5kAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAEXZhbHVlQXVjdGlvblN0YXJ0CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fQXVjdGlvblN0YXJ0BAAAAAckbWF0Y2gwBQAAABF2YWx1ZUF1Y3Rpb25TdGFydAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gU3RhcnQgdGltZSB3YXMgbm90IGZvdW5kAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAFHZhbHVlYXVjdGlvbkR1cmF0aW9uCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfQXVjdGlvbkR1cmF0aW9uBAAAAAckbWF0Y2gwBQAAABR2YWx1ZWF1Y3Rpb25EdXJhdGlvbgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gZHVyYXRpb24gdGltZSB3YXMgbm90IGZvdW5kAQAAABxnZXRBdWN0aW9uSm9iUGVyZm9ybWFuY2VUaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAF3ZhbHVlQmxvY2tzRm9yRXhlY3V0aW9uCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA9fSm9iUGVyZm9ybWFuY2UEAAAAByRtYXRjaDAFAAAAF3ZhbHVlQmxvY2tzRm9yRXhlY3V0aW9uAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAqQXVjdGlvbiBqb2IgcGVyZm9ybWFuY2UgdGltZSB3YXMgbm90IGZvdW5kAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAADnZhbHVlQXNzZXROYW1lCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAApfQXNzZXROYW1lBAAAAAckbWF0Y2gwBQAAAA52YWx1ZUFzc2V0TmFtZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gYXNzZXQgbmFtZSB3YXMgbm90IGZvdW5kAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABAAAACWF1Y3Rpb25JZAQAAAAKdmFsdWVQcmljZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1ByaWNlBAAAAAckbWF0Y2gwBQAAAAp2YWx1ZVByaWNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAbQXVjdGlvbiBwcmljZSB3YXMgbm90IGZvdW5kAQAAABdnZXRBdWN0aW9uRnJlZWxhbmNlclB1YgAAAAEAAAAJYXVjdGlvbklkBAAAAAt2YWx1ZUNsaWVudAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0hpcmVkRnJlZWxhbmNlcgQAAAAHJG1hdGNoMAUAAAALdmFsdWVDbGllbnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABxBdWN0aW9uIENsaWVudCB3YXMgbm90IGZvdW5kAQAAABZnZXRBdWN0aW9uTG93ZXN0QmlkZGVyAAAAAQAAAAlhdWN0aW9uSWQEAAAAEXZhbHVlTG93ZXN0QmlkZGVyCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBAAAAAckbWF0Y2gwBQAAABF2YWx1ZUxvd2VzdEJpZGRlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gbG93ZXN0IGJpZGRlciB3YXMgbm90IGZvdW5kAQAAAAZnZXRCaWQAAAACAAAACWF1Y3Rpb25JZAAAABNhdWN0aW9uTG93ZXN0QmlkZGVyBAAAABR2YWx1ZU5ld0F1Y3Rpb25QcmljZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgQAAAAHJG1hdGNoMAUAAAAUdmFsdWVOZXdBdWN0aW9uUHJpY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACBBdWN0aW9uIGxvd2VzdCBiaWQgd2FzIG5vdCBmb3VuZAEAAAAVZGVmaW5lTmV3TG93ZXN0QmlkZGVyAAAABAAAAAlhdWN0aW9uSWQAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgAAAAliaWRBbW91bnQAAAANbmV3RnJlZWxhbmNlcgQAAAAVdmFsdWVDdXJyZW50TG93ZXN0QmlkCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABV9CaWRfBQAAABZjdXJyZW50TG93ZXN0QmlkZGVyUHViBAAAABBjdXJyZW50TG93ZXN0QmlkBAAAAAckbWF0Y2gwBQAAABV2YWx1ZUN1cnJlbnRMb3dlc3RCaWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACBBdWN0aW9uIGxvd2VzdCBiaWQgd2FzIG5vdCBmb3VuZAMJAABmAAAAAgUAAAAQY3VycmVudExvd2VzdEJpZAUAAAAJYmlkQW1vdW50BQAAAA1uZXdGcmVlbGFuY2VyBQAAABZjdXJyZW50TG93ZXN0QmlkZGVyUHViAQAAABZjaG9vc2VkRnJlZWxhbmNlckNoZWNrAAAAAgAAAAlhdWN0aW9uSWQAAAANZnJlZWxhbmNlclB1YgQAAAANbmV3RnJlZWxhbmNlcgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANZnJlZWxhbmNlclB1YgQAAAAHJG1hdGNoMAUAAAANbmV3RnJlZWxhbmNlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAA1mcmVlbGFuY2VyUHViCQAAAgAAAAECAAAAHkVycm9yOiBJbmNvcnJlY3QgZnJlZWxhbmNlclB1YgEAAAAVbmV3RXhlY3V0aW9uVGltZUNoZWNrAAAAAgAAAA1leGVjdXRpb25EYXlzAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24EAAAAHG5ld0F1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAABoAAAAAgUAAAANZXhlY3V0aW9uRGF5cwUAAAADZGF5AwkAAGYAAAACBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQAAAgAAAAECAAAAOE5ldyBleGVjdXRpb24gdGltZSBtdXN0IG1vcmUgdGhhbiBjdXJyZW50IGV4ZWN1dGlvbiB0aW1lAQAAAAlnZXRSYXRpbmcAAAABAAAAEWF1Y3Rpb25GcmVlbGFuY2VyBAAAAAt2YWx1ZVJhdGluZwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAAAdfUmF0aW5nBAAAAAckbWF0Y2gwBQAAAAt2YWx1ZVJhdGluZwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABJjYWxsZXJJc0FtYmFzc2Fkb3IAAAABAAAACWNhbGxlclB1YgMDAwMDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjEGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjIGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjMGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjQGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjUFAAAACWNhbGxlclB1YgkAAAIAAAABAgAAAC1Pbmx5IGRlZmluZWQgYW1iYXNzYWRvcnMgY2FuIHZvdGUgaW4gZGlzcHV0ZXMBAAAAE2FtYmFzc2Fkb3JWb3RlQ2hlY2sAAAADAAAACWF1Y3Rpb25JZAAAAA1hbWJhc3NhZG9yUHViAAAABHZvdGUEAAAACGtleVZvdGVyCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfRGlwdXRlVm90ZV8FAAAADWFtYmFzc2Fkb3JQdWIEAAAACnZhbHVlVm90ZXIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Vm90ZXIEAAAAD2FtYmFzc2Fkb3JWb3RlZAQAAAAHJG1hdGNoMAUAAAAKdmFsdWVWb3RlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBgcDBQAAAA9hbWJhc3NhZG9yVm90ZWQJAAACAAAAAQIAAAAZQW1iYXNzYWRvciB2b3RlZCBhbHJlYWR5IAMDCQAAAAAAAAIFAAAABHZvdGUFAAAABmNsaWVudAYJAAAAAAAAAgUAAAAEdm90ZQUAAAAKZnJlZWxhbmNlcgUAAAAEdm90ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABxWb3RlIGlzIGluY29ycmVjdC4gTXVzdCBiZTogBQAAAAZjbGllbnQCAAAABCBvciAFAAAACmZyZWVsYW5jZXIBAAAADmdldFZvdGVzTnVtYmVyAAAAAQAAAAlhdWN0aW9uSWQEAAAAEHZhbHVlVm90ZXNOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9EaXNwdXRlVm90ZXMEAAAAByRtYXRjaDAFAAAAEHZhbHVlVm90ZXNOdW1iZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABlWb3Rlc051bWJlciB3YXMgbm90IGZvdW5kAQAAABNkZWZpbmVEaXNwdXRlV2lubmVyAAAABAAAAAlhdWN0aW9uSWQAAAAHbmV3Vm90ZQAAAA1hdWN0aW9uQ2xpZW50AAAAEWF1Y3Rpb25GcmVlbGFuY2VyBAAAAA9hbWJhc3NhZG9yMVZvdGUJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAAAthbWJhc3NhZG9yMQQAAAAPYW1iYXNzYWRvcjJWb3RlCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADF9EaXB1dGVWb3RlXwUAAAALYW1iYXNzYWRvcjIEAAAAD2FtYmFzc2Fkb3IzVm90ZQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfRGlwdXRlVm90ZV8FAAAAC2FtYmFzc2Fkb3IzBAAAAA9hbWJhc3NhZG9yNFZvdGUJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAAAthbWJhc3NhZG9yNAQAAAAPYW1iYXNzYWRvcjVWb3RlCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADF9EaXB1dGVWb3RlXwUAAAALYW1iYXNzYWRvcjUEAAAAAnYxAwkAAAAAAAACBQAAAA9hbWJhc3NhZG9yMVZvdGUFAAAABmNsaWVudAAAAAAAAAAAAQAAAAAAAAAAAAQAAAACdjIDCQAAAAAAAAIFAAAAD2FtYmFzc2Fkb3IyVm90ZQUAAAAGY2xpZW50AAAAAAAAAAABAAAAAAAAAAAABAAAAAJ2MwMJAAAAAAAAAgUAAAAPYW1iYXNzYWRvcjNWb3RlBQAAAAZjbGllbnQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAnY0AwkAAAAAAAACBQAAAA9hbWJhc3NhZG9yNFZvdGUFAAAABmNsaWVudAAAAAAAAAAAAQAAAAAAAAAAAAQAAAACdjUDCQAAAAAAAAIFAAAAD2FtYmFzc2Fkb3I1Vm90ZQUAAAAGY2xpZW50AAAAAAAAAAABAAAAAAAAAAAABAAAAAtjdXJyZW50Vm90ZQMJAAAAAAAAAgUAAAAHbmV3Vm90ZQUAAAAGY2xpZW50AAAAAAAAAAABAAAAAAAAAAAABAAAAA52b3Rlc0ZvckNsaWVudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAAnYxBQAAAAJ2MgUAAAACdjMFAAAAAnY0BQAAAAJ2NQUAAAALY3VycmVudFZvdGUDCQAAZgAAAAIFAAAADnZvdGVzRm9yQ2xpZW50AAAAAAAAAAACBQAAAA1hdWN0aW9uQ2xpZW50BQAAABFhdWN0aW9uRnJlZWxhbmNlcgAAAAsAAAABaQEAAAAQZnJlZWxhbmNlclNpZ25VcAAAAAEAAAAEaW5mbwQAAAANdXNlclB1YmxpY0tleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAEWFscmVhZHlSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAALX0ZyZWVsYW5jZXIDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAARYWxyZWFkeVJlZ2lzdGVyZWQJAAACAAAAAQIAAAAXVXNlciBhbHJlYWR5IHJlZ2lzdGVyZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAALX0ZyZWVsYW5jZXIFAAAABGluZm8JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAAQX1BlbmRpbmdFYXJuaW5ncwAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAA1fUGFpZEVhcm5pbmdzAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADXVzZXJQdWJsaWNLZXkCAAAADl9Ub3RhbEVhcm5pbmdzAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADXVzZXJQdWJsaWNLZXkCAAAADF9Kb2JzUGVuZGluZwAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAA5fSm9ic0NvbXBsZXRlZAAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAApfSm9ic1RvdGFsAAAAAAAAAAAABQAAAANuaWwAAAABaQEAAAAMY2xpZW50U2lnblVwAAAAAQAAAARpbmZvBAAAAA11c2VyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAARYWxyZWFkeVJlZ2lzdGVyZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAdfQ2xpZW50AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAEWFscmVhZHlSZWdpc3RlcmVkCQAAAgAAAAECAAAAF1VzZXIgYWxyZWFkeSByZWdpc3RlcmVkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADXVzZXJQdWJsaWNLZXkCAAAAB19DbGllbnQFAAAABGluZm8JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAAMX0pvYnNDcmVhdGVkAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADXVzZXJQdWJsaWNLZXkCAAAADF9Kb2JzT25Hb2luZwAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAA1fSm9iSW5EaXNwdXRlAAAAAAAAAAAABQAAAANuaWwAAAABaQEAAAANY3JlYXRlQXVjdGlvbgAAAAMAAAAQam9iRXhlY3V0aW9uRGF5cwAAABNhdWN0aW9uRHVyYXRpb25EYXlzAAAAC2F1Y3Rpb25JbmZvBAAAAAljYWxsZXJQdWIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAlhdWN0aW9uSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAEGNsaWVudFJlZ2lzdGVyZWQAAAABBQAAAAljYWxsZXJQdWIEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAlwbXRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50BAAAAAxhdWN0aW9uUHJpY2UJAQAAABdjcmVhdGVBdWN0aW9uUHJpY2VDaGVjawAAAAEFAAAACXBtdEFtb3VudAQAAAAMYXVjdGlvblN0YXJ0BQAAAAZoZWlnaHQEAAAAFWF1Y3Rpb25EdXJhdGlvbkJsb2NrcwkAAGgAAAACBQAAABNhdWN0aW9uRHVyYXRpb25EYXlzBQAAAANkYXkEAAAAEmJsb2Nrc0ZvckV4ZWN1dGlvbgkAAGgAAAACBQAAABBqb2JFeGVjdXRpb25EYXlzBQAAAANkYXkEAAAADHBtdEFzc2V0TmFtZQkBAAAAEkFzc2V0SWRUb0Fzc2V0TmFtZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAALam9ic0NyZWF0ZWQJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzQ3JlYXRlZAQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZpbmNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAMcG10QXNzZXROYW1lBQAAAAxhdWN0aW9uUHJpY2UJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAACXN0YXRlT3BlbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABV9JbmZvBQAAAAthdWN0aW9uSW5mbwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADl9BdWN0aW9uQ2xpZW50BQAAAA1hdWN0aW9uQ2xpZW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0F1Y3Rpb25TdGFydAUAAAAMYXVjdGlvblN0YXJ0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0F1Y3Rpb25EdXJhdGlvbgUAAAAVYXVjdGlvbkR1cmF0aW9uQmxvY2tzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAPX0pvYlBlcmZvcm1hbmNlBQAAABJibG9ja3NGb3JFeGVjdXRpb24JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAApfQXNzZXROYW1lBQAAAAxwbXRBc3NldE5hbWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UFAAAADGF1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAxwbXRBc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1hdWN0aW9uQ2xpZW50AgAAAAxfSm9ic0NyZWF0ZWQJAABkAAAAAgUAAAALam9ic0NyZWF0ZWQAAAAAAAAAAAEFAAAAA25pbAAAAAFpAQAAAAdtYWtlQmlkAAAAAgAAAAlhdWN0aW9uSWQAAAAGYW1vdW50BAAAAAljYWxsZXJQdWIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uU3RhcnQJAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAAcZ2V0QXVjdGlvbkpvYlBlcmZvcm1hbmNlVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0TmFtZQkBAAAAE2dldEF1Y3Rpb25Bc3NldE5hbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25QcmljZQkBAAAAD2dldEF1Y3Rpb25QcmljZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0SWQ1OAkBAAAAEkFzc2V0TmFtZVRvQXNzZXRJZAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAADW5ld0ZyZWVsYW5jZXIJAQAAABRmcmVlbGFuY2VyUmVnaXN0ZXJlZAAAAAEFAAAACWNhbGxlclB1YgQAAAAOZEFwcENvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQEAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAADGF1Y3Rpb25QcmljZQQAAAAJYmlkQW1vdW50CQEAAAAOYmlkQW1vdW50Q2hlY2sAAAACBQAAAAZhbW91bnQFAAAADGF1Y3Rpb25QcmljZQQAAAARYXVjdGlvblRpbWVpc092ZXIJAQAAAAl0aW1lQ2hlY2sAAAADBQAAAAZoZWlnaHQFAAAADGF1Y3Rpb25TdGFydAUAAAAPYXVjdGlvbkR1cmF0aW9uAwUAAAARYXVjdGlvblRpbWVpc092ZXIDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAALc3RhdGVDYW5jZWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAAA1hdWN0aW9uQ2xpZW50CQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAQAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgkBAAAAFmdldEF1Y3Rpb25Mb3dlc3RCaWRkZXIAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Mb3dlc3RCaWQJAQAAAAZnZXRCaWQAAAACBQAAAAlhdWN0aW9uSWQFAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIEAAAAEGFtb3VudERpZmZlcmVuY2UJAABlAAAAAgkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAAEGF1Y3Rpb25Mb3dlc3RCaWQFAAAADmRBcHBDb21taXNzaW9uCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0hpcmVkRnJlZWxhbmNlcgUAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9QcmljZQUAAAAQYXVjdGlvbkxvd2VzdEJpZAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAANYXVjdGlvbkNsaWVudAUAAAAQYW1vdW50RGlmZmVyZW5jZQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAAF0luY29ycmVjdCBhdWN0aW9uIHN0YXRlAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAADW5ld0ZyZWVsYW5jZXIFAAAACWJpZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBQAAAAljYWxsZXJQdWIFAAAAA25pbAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAQAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgkBAAAAFmdldEF1Y3Rpb25Mb3dlc3RCaWRkZXIAAAABBQAAAAlhdWN0aW9uSWQEAAAAEm5ld0xvd2VzdEJpZGRlclB1YgkBAAAAFWRlZmluZU5ld0xvd2VzdEJpZGRlcgAAAAQFAAAACWF1Y3Rpb25JZAUAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgUAAAAJYmlkQW1vdW50BQAAAA1uZXdGcmVlbGFuY2VyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0xvd2VzdEJpZGRlclB1YgUAAAASbmV3TG93ZXN0QmlkZGVyUHViCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANbmV3RnJlZWxhbmNlcgUAAAAJYmlkQW1vdW50BQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAHEluY29ycmVjdCBqb2JJZCBzdGF0ZS4gTm93OiAFAAAADGF1Y3Rpb25TdGF0ZQIAAAALLCBtdXN0IGJlOiAFAAAACXN0YXRlT3BlbgIAAAAEIG9yIAUAAAAOc3RhdGVTdWdnZXN0ZWQAAAABaQEAAAAQY2hvb3NlRnJlZWxhbmNlcgAAAAIAAAAJYXVjdGlvbklkAAAADWZyZWVsYW5jZXJQdWIEAAAACWNhbGxlclB1YgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25TdGFydAkBAAAAE2dldEF1Y3Rpb25TdGFydFRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAAFmdldEF1Y3Rpb25EdXJhdGlvblRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABJBc3NldE5hbWVUb0Fzc2V0SWQAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAAA1uZXdGcmVlbGFuY2VyCQEAAAAWY2hvb3NlZEZyZWVsYW5jZXJDaGVjawAAAAIFAAAACWF1Y3Rpb25JZAUAAAANZnJlZWxhbmNlclB1YgQAAAATZnJlZWxhbmNlckJpZEFtb3VudAkBAAAABmdldEJpZAAAAAIFAAAACWF1Y3Rpb25JZAUAAAANbmV3RnJlZWxhbmNlcgQAAAARYXVjdGlvblRpbWVpc092ZXIJAQAAAAl0aW1lQ2hlY2sAAAADBQAAAAZoZWlnaHQFAAAADGF1Y3Rpb25TdGFydAUAAAAPYXVjdGlvbkR1cmF0aW9uBAAAAAtqb2JzT25Hb2luZwkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNPbkdvaW5nBAAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAABBfUGVuZGluZ0Vhcm5pbmdzBAAAABdmcmVlbGFuY2VyVG90YWxFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAOX1RvdGFsRWFybmluZ3MDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAANYXVjdGlvbkNsaWVudAMFAAAAEWF1Y3Rpb25UaW1laXNPdmVyAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAC3N0YXRlQ2FuY2VsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAANYXVjdGlvbkNsaWVudAkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAADmRBcHBDb21taXNzaW9uBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQEAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIJAQAAABZnZXRBdWN0aW9uTG93ZXN0QmlkZGVyAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uTG93ZXN0QmlkCQEAAAAGZ2V0QmlkAAAAAgUAAAAJYXVjdGlvbklkBQAAABNhdWN0aW9uTG93ZXN0QmlkZGVyBAAAABBhbW91bnREaWZmZXJlbmNlCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAQYXVjdGlvbkxvd2VzdEJpZAQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAQYW1vdW50RGlmZmVyZW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9IaXJlZEZyZWVsYW5jZXIFAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UFAAAAEGF1Y3Rpb25Mb3dlc3RCaWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwkAAGQAAAACBQAAAAtqb2JzT25Hb2luZwAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAABBfUGVuZGluZ0Vhcm5pbmdzCQAAZAAAAAIFAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MFAAAAEGF1Y3Rpb25Mb3dlc3RCaWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAOX1RvdGFsRWFybmluZ3MJAABkAAAAAgUAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MFAAAAEGF1Y3Rpb25Mb3dlc3RCaWQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADWF1Y3Rpb25DbGllbnQFAAAAEGFtb3VudERpZmZlcmVuY2UFAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkAAAIAAAABAgAAABdJbmNvcnJlY3QgYXVjdGlvbiBzdGF0ZQMDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuBgkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAADnN0YXRlU3VnZ2VzdGVkBAAAABBhbW91bnREaWZmZXJlbmNlCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAATZnJlZWxhbmNlckJpZEFtb3VudAQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAQYW1vdW50RGlmZmVyZW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9IaXJlZEZyZWVsYW5jZXIFAAAADW5ld0ZyZWVsYW5jZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UFAAAAE2ZyZWVsYW5jZXJCaWRBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwkAAGQAAAACBQAAAAtqb2JzT25Hb2luZwAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAABBfUGVuZGluZ0Vhcm5pbmdzCQAAZAAAAAIFAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MFAAAAE2ZyZWVsYW5jZXJCaWRBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAOX1RvdGFsRWFybmluZ3MJAABkAAAAAgUAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MFAAAAE2ZyZWVsYW5jZXJCaWRBbW91bnQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADWF1Y3Rpb25DbGllbnQJAABkAAAAAgUAAAAQYW1vdW50RGlmZmVyZW5jZQAAAAAAAAAAAQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAAF0luY29ycmVjdCBhdWN0aW9uIHN0YXRlCQAAAgAAAAECAAAALU9ubHkgYXVjdGlvbiBjdXN0b21lciBjYW4gY2hvb3NlIGEgZnJlZWxhbmNlcgAAAAFpAQAAABVpbmNyZWFzZUV4ZWN1dGlvblRpbWUAAAACAAAACWF1Y3Rpb25JZAAAAA1leGVjdXRpb25EYXlzBAAAAAZjYWxsZXIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAAcZ2V0QXVjdGlvbkpvYlBlcmZvcm1hbmNlVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAXbmV3QXVjdGlvbkV4ZWN1dGlvblRpbWUJAQAAABVuZXdFeGVjdXRpb25UaW1lQ2hlY2sAAAACBQAAAA1leGVjdXRpb25EYXlzBQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAADWF1Y3Rpb25DbGllbnQDAwMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4GCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQGCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAPX0pvYlBlcmZvcm1hbmNlBQAAABduZXdBdWN0aW9uRXhlY3V0aW9uVGltZQUAAAADbmlsCQAAAgAAAAECAAAAD0luY29ycmVjdCBzdGF0ZQkAAAIAAAABAgAAACdPbmx5IENsaWVudCBjYW4gaW5jcmVhc2UgZXhlY3V0aW9uIHRpbWUAAAABaQEAAAANY2FuY2VsQXVjdGlvbgAAAAEAAAAJYXVjdGlvbklkBAAAAAljYWxsZXJQdWIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXROYW1lCQEAAAATZ2V0QXVjdGlvbkFzc2V0TmFtZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblByaWNlCQEAAAAPZ2V0QXVjdGlvblByaWNlAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAASQXNzZXROYW1lVG9Bc3NldElkAAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQQAAAAOZEFwcENvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQEAAAAEWFtb3VudFdpdGhvdXRDb21tCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24EAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAADGF1Y3Rpb25QcmljZQMJAAAAAAAAAgUAAAAJY2FsbGVyUHViBQAAAA1hdWN0aW9uQ2xpZW50AwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAC3N0YXRlQ2FuY2VsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAANYXVjdGlvbkNsaWVudAUAAAARYW1vdW50V2l0aG91dENvbW0FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkAAAIAAAABAgAAAC5BdWN0aW9uIGNhbiBiZSBjYW5jZWxlZCBvbmx5IGJ5IGF1Y3Rpb24gb3duZXIuCQAAAgAAAAECAAAAHk9ubHkgQ2xpZW50IGNhbiBjYW5jZWwgYXVjdGlvbgAAAAFpAQAAAAtvcGVuRGlzcHV0ZQAAAAEAAAAJYXVjdGlvbklkBAAAAAZjYWxsZXIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAAF2dldEF1Y3Rpb25GcmVlbGFuY2VyUHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABNjbGllbnRKb2JzSW5EaXNwdXRlCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA5fSm9ic0luRGlzcHV0ZQMDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzBgkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAAEXN0YXRlV2FpdDRDb25maXJtAwMJAAAAAAAAAgUAAAAGY2FsbGVyBQAAAA1hdWN0aW9uQ2xpZW50BgkAAAAAAAACBQAAAAZjYWxsZXIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAAxzdGF0ZURpc3B1dGUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fRGlzcHV0ZVZvdGVzAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADl9Kb2JzSW5EaXNwdXRlCQAAZAAAAAIFAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACtPbmx5IENsaWVudCBhbmQgRnJlZWxhbmNlciBjYW4gb3BlbiBkaXNwdXRlCQAAAgAAAAECAAAAK0luY29ycmVjdCBhdWN0aW9uIHN0YXRlIGZvciBkaXNwdXRlIG9wZW5pbmcAAAABaQEAAAALdm90ZURpc3B1dGUAAAACAAAACWF1Y3Rpb25JZAAAAAR2b3RlBAAAAAljYWxsZXJQdWIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXROYW1lCQEAAAATZ2V0QXVjdGlvbkFzc2V0TmFtZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblByaWNlCQEAAAAPZ2V0QXVjdGlvblByaWNlAAAAAQUAAAAJYXVjdGlvbklkBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAAF2dldEF1Y3Rpb25GcmVlbGFuY2VyUHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAApjb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAASQXNzZXROYW1lVG9Bc3NldElkAAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQQAAAANYW1iYXNzYWRvclB1YgkBAAAAEmNhbGxlcklzQW1iYXNzYWRvcgAAAAEFAAAACWNhbGxlclB1YgQAAAAOYW1iYXNzYWRvclZvdGUJAQAAABNhbWJhc3NhZG9yVm90ZUNoZWNrAAAAAwUAAAAJYXVjdGlvbklkBQAAAA1hbWJhc3NhZG9yUHViBQAAAAR2b3RlBAAAAAt2b3Rlc051bWJlcgkBAAAADmdldFZvdGVzTnVtYmVyAAAAAQUAAAAJYXVjdGlvbklkBAAAABNjbGllbnRKb2JzSW5EaXNwdXRlCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA5fSm9ic0luRGlzcHV0ZQQAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAEF9QZW5kaW5nRWFybmluZ3MEAAAAF2ZyZWVsYW5jZXJUb3RhbEVhcm5pbmdzCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAOX1RvdGFsRWFybmluZ3MDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAMc3RhdGVEaXNwdXRlAwkAAAAAAAACBQAAAAt2b3Rlc051bWJlcgAAAAAAAAAABAQAAAAQZGlzcHV0ZVdpbm5lclB1YgkBAAAAE2RlZmluZURpc3B1dGVXaW5uZXIAAAAEBQAAAAlhdWN0aW9uSWQFAAAADmFtYmFzc2Fkb3JWb3RlBQAAAA1hdWN0aW9uQ2xpZW50BQAAABFhdWN0aW9uRnJlZWxhbmNlcgQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlAwkAAAAAAAACBQAAABBkaXNwdXRlV2lubmVyUHViBQAAAA1hdWN0aW9uQ2xpZW50BAAAABJwYXltZW50V2l0aG91dENvbW0JAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAApjb21taXNzaW9uCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9EaXNwdXRlVm90ZXMJAABkAAAAAgUAAAALdm90ZXNOdW1iZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAFHN0YXRlRGlzcHV0ZVJlc29sdmVkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfRGlwdXRlVm90ZV8FAAAADWFtYmFzc2Fkb3JQdWIFAAAADmFtYmFzc2Fkb3JWb3RlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA5fSm9ic0luRGlzcHV0ZQkAAGUAAAACBQAAABNjbGllbnRKb2JzSW5EaXNwdXRlAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAABBfUGVuZGluZ0Vhcm5pbmdzCQAAZQAAAAIFAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MFAAAADGF1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAOX1RvdGFsRWFybmluZ3MJAABlAAAAAgUAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MFAAAADGF1Y3Rpb25QcmljZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAQZGlzcHV0ZVdpbm5lclB1YgUAAAAScGF5bWVudFdpdGhvdXRDb21tBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwEAAAAEnBheW1lbnRXaXRob3V0Q29tbQkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UJAABoAAAAAgUAAAAKY29tbWlzc2lvbgAAAAAAAAAAAgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fRGlzcHV0ZVZvdGVzCQAAZAAAAAIFAAAAC3ZvdGVzTnVtYmVyAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAABRzdGF0ZURpc3B1dGVSZXNvbHZlZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAAA1hbWJhc3NhZG9yUHViBQAAAA5hbWJhc3NhZG9yVm90ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANYXVjdGlvbkNsaWVudAIAAAAOX0pvYnNJbkRpc3B1dGUJAABlAAAAAgUAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAQX1BlbmRpbmdFYXJuaW5ncwkAAGUAAAACBQAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzBQAAAAxhdWN0aW9uUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEGRpc3B1dGVXaW5uZXJQdWIFAAAAEnBheW1lbnRXaXRob3V0Q29tbQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0Rpc3B1dGVWb3RlcwkAAGQAAAACBQAAAAt2b3Rlc051bWJlcgAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAAA1hbWJhc3NhZG9yUHViBQAAAA5hbWJhc3NhZG9yVm90ZQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAaSW5jb3JyZWN0IHN0YXRlLiBNdXN0IGJlOiAFAAAADHN0YXRlRGlzcHV0ZQAAAAFpAQAAAAx3b3JrSGFuZE92ZXIAAAABAAAACWF1Y3Rpb25JZAQAAAAJY2FsbGVyUHViCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMYXVjdGlvblN0YXRlCQEAAAAPZ2V0QXVjdGlvblN0YXRlAAAAAQUAAAAJYXVjdGlvbklkBAAAAA1hdWN0aW9uQ2xpZW50CQEAAAATZ2V0QXVjdGlvbkNsaWVudFB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblN0YXJ0CQEAAAATZ2V0QXVjdGlvblN0YXJ0VGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAWZ2V0QXVjdGlvbkR1cmF0aW9uVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAAHGdldEF1Y3Rpb25Kb2JQZXJmb3JtYW5jZVRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAXZ2V0QXVjdGlvbkZyZWVsYW5jZXJQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAACnRpbWVJc092ZXIJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADGF1Y3Rpb25TdGFydAUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgQAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAANYXVjdGlvbkNsaWVudAIAAAAOX0pvYnNJbkRpc3B1dGUDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAARYXVjdGlvbkZyZWVsYW5jZXIDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzAwUAAAAKdGltZUlzT3ZlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAMc3RhdGVEaXNwdXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0Rpc3B1dGVWb3RlcwIAAAABMAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA1fSm9iSW5EaXNwdXRlCQAAZAAAAAIFAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUAAAAAAAAAAAEFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAARc3RhdGVXYWl0NENvbmZpcm0FAAAAA25pbAkAAAIAAAABAgAAABpBdWN0aW9uIHN0YXRlIGlzIGluY29ycmVjdAkAAAIAAAABAgAAADRPbmx5IGEgZnJlZWxhbmNlciBjYW4gaW5kaWNhdGUgdGhhdCB0aGUgd29yayBpcyBkb25lAAAAAWkBAAAACmFjY2VwdFdvcmsAAAABAAAACWF1Y3Rpb25JZAQAAAAJY2FsbGVyUHViCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMYXVjdGlvblN0YXRlCQEAAAAPZ2V0QXVjdGlvblN0YXRlAAAAAQUAAAAJYXVjdGlvbklkBAAAAA1hdWN0aW9uQ2xpZW50CQEAAAATZ2V0QXVjdGlvbkNsaWVudFB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblN0YXJ0CQEAAAATZ2V0QXVjdGlvblN0YXJ0VGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAWZ2V0QXVjdGlvbkR1cmF0aW9uVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0TmFtZQkBAAAAE2dldEF1Y3Rpb25Bc3NldE5hbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25QcmljZQkBAAAAD2dldEF1Y3Rpb25QcmljZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAARYXVjdGlvbkZyZWVsYW5jZXIJAQAAABdnZXRBdWN0aW9uRnJlZWxhbmNlclB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAALam9ic09uR29pbmcJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwQAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAEF9QZW5kaW5nRWFybmluZ3MEAAAAFmZyZWVsYW5jZXJQYWlkRWFybmluZ3MJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAAA1fUGFpZEVhcm5pbmdzBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAARYW1vdW50V2l0aG91dENvbW0JAABlAAAAAgUAAAAMYXVjdGlvblByaWNlCQAAaAAAAAIFAAAADmRBcHBDb21taXNzaW9uAAAAAAAAAAACBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAASQXNzZXROYW1lVG9Bc3NldElkAAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlBAAAABBmcmVlbGFuY2VyUmF0aW5nCQEAAAAJZ2V0UmF0aW5nAAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXIDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAANYXVjdGlvbkNsaWVudAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAABFzdGF0ZVdhaXQ0Q29uZmlybQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAADXN0YXRlQ29tcGxldGUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAB19SYXRpbmcJAABkAAAAAgUAAAAQZnJlZWxhbmNlclJhdGluZwAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNPbkdvaW5nCQAAZQAAAAIFAAAAC2pvYnNPbkdvaW5nAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAABBfUGVuZGluZ0Vhcm5pbmdzCQAAZQAAAAIFAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MFAAAADGF1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAANX1BhaWRFYXJuaW5ncwkAAGQAAAACBQAAABZmcmVlbGFuY2VyUGFpZEVhcm5pbmdzBQAAAAxhdWN0aW9uUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyBQAAABFhbW91bnRXaXRob3V0Q29tbQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAaSW5jb3JyZWN0IHN0YXRlLiBNdXN0IGJlOiAFAAAAEXN0YXRlV2FpdDRDb25maXJtCQAAAgAAAAECAAAAK09ubHkgYXVjdGlvbiBjdXN0b21lciBjYW4gdXNlIHRoaXMgZnVuY3Rpb24AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAEAAAACWFzc2V0TmFtZQkBAAAAEkFzc2V0SWRUb0Fzc2V0TmFtZQAAAAEIBQAAAAN0dHgAAAAHYXNzZXRJZAQAAAAUdmFsdWVSZXNlcnZlZEJhbGFuY2UJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhc3NldE5hbWUCAAAACV9SZXNlcnZlZAQAAAAPcmVzZXJ2ZWRCYWxhbmNlBAAAAAckbWF0Y2gxBQAAABR2YWx1ZVJlc2VydmVkQmFsYW5jZQMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gxBQAAAAFhAAAAAAAAAAAABAAAABBhdmFpbGFibGVCYWxhbmNlCQAAZQAAAAIJAAPrAAAAAgUAAAAEdGhpcwgFAAAAA3R0eAAAAAdhc3NldElkBQAAAA9yZXNlcnZlZEJhbGFuY2UJAABnAAAAAgUAAAAQYXZhaWxhYmxlQmFsYW5jZQgFAAAAA3R0eAAAAAZhbW91bnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAANzdHgFAAAAByRtYXRjaDAGBwcT2gjf", "chainId": 84, "height": 719679, "spentComplexity": 0 } View: original | compacted Prev: 59JRXajgPL2a7ZCqxiKBRmfTaAfXNV539Acg4N1qWgGH Next: 2WqmjJ82SYj4UuVv2SVpWHxdqBRpZJYnLdF3We2WaWpB Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let day = 1440
55
66 let WAVES = unit
77
88 let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
99
1010 let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
1111
1212 let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
1313
1414 let auctToken = base58'1'
1515
1616 let stateOpen = "Opened"
1717
1818 let stateSuggested = "Suggested"
1919
2020 let stateCancel = "Canceled"
2121
2222 let stateInProgress = "InProgress"
2323
2424 let stateWait4Confirm = "WaitForConfirmation"
2525
2626 let stateComplete = "Completed"
2727
2828 let stateDispute = "Dispute"
2929
3030 let stateDisputeResolved = "DisputeResolved"
3131
3232 let client = "CL"
3333
3434 let freelancer = "FL"
3535
3636 let ambassador1 = "FneCJqM5BP2eAuyteMiuEEHYALrE4axhEfcpHVGbdr5s"
3737
3838 let ambassador2 = "6QAMdssb1GJjpQVQQcnx8fKU8WhtcF9ZsQhifdThAEK8"
3939
4040 let ambassador3 = "2ituwW7DSRsLP3Vcbnpr98QUQMGFRWKmyYPFqsUKRDoP"
4141
4242 let ambassador4 = "ANsPQocEESyLb3yQqk2pwCdoK7PJQxLoZVpYvsm3SxUG"
4343
4444 let ambassador5 = "13VixwQin1MzZCyY69NSWMSBNEV27Rzc159o7uZXR9VS"
4545
4646 func getInt (key) = {
4747 let valueJobsOnGoing = getInteger(this, key)
4848 match valueJobsOnGoing {
4949 case a: Int =>
5050 a
5151 case _ =>
5252 0
5353 }
5454 }
5555
5656
5757 func AssetIdToAssetName (pmtAssetId) = if (!(isDefined(pmtAssetId)))
5858 then "WAVES"
5959 else if ((pmtAssetId == wBTC))
6060 then "BTC"
6161 else if ((pmtAssetId == wEUR))
6262 then "EUR"
6363 else if ((pmtAssetId == wUSD))
6464 then "USD"
6565 else if ((pmtAssetId == auctToken))
6666 then "AUCT"
6767 else throw("AssetId is incorrect")
6868
6969
7070 func AssetNameToAssetId (auctionAssetName) = if ((auctionAssetName == "WAVES"))
7171 then WAVES
7272 else if ((auctionAssetName == "BTC"))
7373 then wBTC
7474 else if ((auctionAssetName == "EUR"))
7575 then wEUR
7676 else if ((auctionAssetName == "USD"))
7777 then wUSD
7878 else if ((auctionAssetName == "AUCT"))
7979 then auctToken
8080 else throw("Incorrect Asset Id")
8181
8282
8383 func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
8484
8585
8686 func bidAmountCheck (amount,auctionPrice) = if ((amount > auctionPrice))
8787 then throw("Bid amount must be lower or equal than auctionPrice")
8888 else amount
8989
9090
9191 func increaseFreezedBalance (pmtAssetName,auctionPrice) = {
9292 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
9393 let currentFreezedBalance = match keyFreezedFunds {
9494 case a: Int =>
9595 a
9696 case _ =>
9797 0
9898 }
9999 (currentFreezedBalance + auctionPrice)
100100 }
101101
102102
103103 func decreaseFreezedBalance (pmtAssetName,auctionPrice) = {
104104 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
105105 let currentFreezedBalance = match keyFreezedFunds {
106106 case a: Int =>
107107 a
108108 case _ =>
109109 0
110110 }
111111 let a = (currentFreezedBalance - auctionPrice)
112112 if ((a >= 0))
113113 then a
114114 else throw("Freezed amount couldn't be less than 0")
115115 }
116116
117117
118118 func clientRegistered (callerPub) = {
119119 let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
120120 match freelancerIsRegistered {
121121 case a: String =>
122122 callerPub
123123 case _ =>
124124 throw("Only registered users can make bets")
125125 }
126126 }
127127
128128
129129 func freelancerRegistered (callerPub) = {
130130 let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
131131 match freelancerIsRegistered {
132132 case a: String =>
133133 callerPub
134134 case _ =>
135135 throw("Only registered users can make bets")
136136 }
137137 }
138138
139139
140140 func createAuctionPriceCheck (pmtAmount) = if ((pmtAmount > 0))
141141 then pmtAmount
142142 else throw("Amount must be higher then 0")
143143
144144
145145 func getAuctionState (auctionId) = {
146146 let valueState = getString(this, (auctionId + "_State"))
147147 match valueState {
148148 case a: String =>
149149 a
150150 case _ =>
151151 throw("Auction State was not found")
152152 }
153153 }
154154
155155
156156 func getAuctionClientPub (auctionId) = {
157157 let valueClientPub = getString(this, (auctionId + "_AuctionClient"))
158158 match valueClientPub {
159159 case a: String =>
160160 a
161161 case _ =>
162162 throw("Auction Client was not found")
163163 }
164164 }
165165
166166
167167 func getAuctionStartTime (auctionId) = {
168168 let valueAuctionStart = getInteger(this, (auctionId + "_AuctionStart"))
169169 match valueAuctionStart {
170170 case a: Int =>
171171 a
172172 case _ =>
173173 throw("Auction Start time was not found")
174174 }
175175 }
176176
177177
178178 func getAuctionDurationTime (auctionId) = {
179179 let valueauctionDuration = getInteger(this, (auctionId + "_AuctionDuration"))
180180 match valueauctionDuration {
181181 case a: Int =>
182182 a
183183 case _ =>
184184 throw("Auction duration time was not found")
185185 }
186186 }
187187
188188
189189 func getAuctionJobPerformanceTime (auctionId) = {
190190 let valueBlocksForExecution = getInteger(this, (auctionId + "_JobPerformance"))
191191 match valueBlocksForExecution {
192192 case a: Int =>
193193 a
194194 case _ =>
195195 throw("Auction job performance time was not found")
196196 }
197197 }
198198
199199
200200 func getAuctionAssetName (auctionId) = {
201201 let valueAssetName = getString(this, (auctionId + "_AssetName"))
202202 match valueAssetName {
203203 case a: String =>
204204 a
205205 case _ =>
206206 throw("Auction asset name was not found")
207207 }
208208 }
209209
210210
211211 func getAuctionPrice (auctionId) = {
212212 let valuePrice = getInteger(this, (auctionId + "_Price"))
213213 match valuePrice {
214214 case a: Int =>
215215 a
216216 case _ =>
217217 throw("Auction price was not found")
218218 }
219219 }
220220
221221
222222 func getAuctionFreelancerPub (auctionId) = {
223223 let valueClient = getString(this, (auctionId + "_HiredFreelancer"))
224224 match valueClient {
225225 case a: String =>
226226 a
227227 case _ =>
228228 throw("Auction Client was not found")
229229 }
230230 }
231231
232232
233233 func getAuctionLowestBidder (auctionId) = {
234234 let valueLowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
235235 match valueLowestBidder {
236236 case a: String =>
237237 a
238238 case _ =>
239239 throw("Auction lowest bidder was not found")
240240 }
241241 }
242242
243243
244244 func getBid (auctionId,auctionLowestBidder) = {
245245 let valueNewAuctionPrice = getInteger(this, ((auctionId + "_Bid_") + auctionLowestBidder))
246246 match valueNewAuctionPrice {
247247 case a: Int =>
248248 a
249249 case _ =>
250250 throw("Auction lowest bid was not found")
251251 }
252252 }
253253
254254
255255 func defineNewLowestBidder (auctionId,currentLowestBidderPub,bidAmount,newFreelancer) = {
256256 let valueCurrentLowestBid = getInteger(this, ((auctionId + "_Bid_") + currentLowestBidderPub))
257257 let currentLowestBid = match valueCurrentLowestBid {
258258 case a: Int =>
259259 a
260260 case _ =>
261261 throw("Auction lowest bid was not found")
262262 }
263263 if ((currentLowestBid > bidAmount))
264264 then newFreelancer
265265 else currentLowestBidderPub
266266 }
267267
268268
269269 func choosedFreelancerCheck (auctionId,freelancerPub) = {
270270 let newFreelancer = getInteger(this, ((auctionId + "_Bid_") + freelancerPub))
271271 match newFreelancer {
272272 case a: Int =>
273273 freelancerPub
274274 case _ =>
275275 throw("Error: Incorrect freelancerPub")
276276 }
277277 }
278278
279279
280280 func newExecutionTimeCheck (executionDays,auctionBlocksForExecution) = {
281281 let newAuctionBlocksForExecution = (executionDays * day)
282282 if ((newAuctionBlocksForExecution > auctionBlocksForExecution))
283283 then newAuctionBlocksForExecution
284284 else throw("New execution time must more than current execution time")
285285 }
286286
287287
288288 func getRating (auctionFreelancer) = {
289289 let valueRating = getInteger(this, (auctionFreelancer + "_Rating"))
290290 match valueRating {
291291 case a: Int =>
292292 a
293293 case _ =>
294294 0
295295 }
296296 }
297297
298298
299299 func callerIsAmbassador (callerPub) = if (if (if (if (if ((callerPub == ambassador1))
300300 then true
301301 else (callerPub == ambassador2))
302302 then true
303303 else (callerPub == ambassador3))
304304 then true
305305 else (callerPub == ambassador4))
306306 then true
307307 else (callerPub == ambassador5))
308308 then callerPub
309309 else throw("Only defined ambassadors can vote in disputes")
310310
311311
312312 func ambassadorVoteCheck (auctionId,ambassadorPub,vote) = {
313313 let keyVoter = ((auctionId + "_DiputeVote_") + ambassadorPub)
314314 let valueVoter = getString(this, keyVoter)
315315 let ambassadorVoted = match valueVoter {
316316 case a: String =>
317317 true
318318 case _ =>
319319 false
320320 }
321321 if (ambassadorVoted)
322322 then throw("Ambassador voted already ")
323323 else if (if ((vote == client))
324324 then true
325325 else (vote == freelancer))
326326 then vote
327327 else throw(((("Vote is incorrect. Must be: " + client) + " or ") + freelancer))
328328 }
329329
330330
331331 func getVotesNumber (auctionId) = {
332332 let valueVotesNumber = getInteger(this, (auctionId + "_DisputeVotes"))
333333 match valueVotesNumber {
334334 case a: Int =>
335335 a
336336 case _ =>
337337 throw("VotesNumber was not found")
338338 }
339339 }
340340
341341
342342 func defineDisputeWinner (auctionId,newVote,auctionClient,auctionFreelancer) = {
343343 let ambassador1Vote = getString(this, ((auctionId + "_DiputeVote_") + ambassador1))
344344 let ambassador2Vote = getString(this, ((auctionId + "_DiputeVote_") + ambassador2))
345345 let ambassador3Vote = getString(this, ((auctionId + "_DiputeVote_") + ambassador3))
346346 let ambassador4Vote = getString(this, ((auctionId + "_DiputeVote_") + ambassador4))
347347 let ambassador5Vote = getString(this, ((auctionId + "_DiputeVote_") + ambassador5))
348348 let v1 = if ((ambassador1Vote == client))
349349 then 1
350350 else 0
351351 let v2 = if ((ambassador2Vote == client))
352352 then 1
353353 else 0
354354 let v3 = if ((ambassador3Vote == client))
355355 then 1
356356 else 0
357357 let v4 = if ((ambassador4Vote == client))
358358 then 1
359359 else 0
360360 let v5 = if ((ambassador5Vote == client))
361361 then 1
362362 else 0
363363 let currentVote = if ((newVote == client))
364364 then 1
365365 else 0
366366 let votesForClient = (((((v1 + v2) + v3) + v4) + v5) + currentVote)
367367 if ((votesForClient > 2))
368368 then auctionClient
369369 else auctionFreelancer
370370 }
371371
372372
373373 @Callable(i)
374374 func freelancerSignUp (info) = {
375375 let userPublicKey = toBase58String(i.callerPublicKey)
376376 let alreadyRegistered = getString(this, (userPublicKey + "_Freelancer"))
377377 if (isDefined(alreadyRegistered))
378378 then throw("User already registered")
379379 else WriteSet([DataEntry((userPublicKey + "_Freelancer"), info), DataEntry((userPublicKey + "_PendingEarnings"), 0), DataEntry((userPublicKey + "_PaidEarnings"), 0), DataEntry((userPublicKey + "_TotalEarnings"), 0), DataEntry((userPublicKey + "_JobsPending"), 0), DataEntry((userPublicKey + "_JobsCompleted"), 0), DataEntry((userPublicKey + "_JobsTotal"), 0)])
380380 }
381381
382382
383383
384384 @Callable(i)
385385 func clientSignUp (info) = {
386386 let userPublicKey = toBase58String(i.callerPublicKey)
387387 let alreadyRegistered = getString(this, (userPublicKey + "_Client"))
388388 if (isDefined(alreadyRegistered))
389389 then throw("User already registered")
390390 else WriteSet([DataEntry((userPublicKey + "_Client"), info), DataEntry((userPublicKey + "_JobsCreated"), 0), DataEntry((userPublicKey + "_JobsOnGoing"), 0), DataEntry((userPublicKey + "_JobInDispute"), 0)])
391391 }
392392
393393
394394
395395 @Callable(i)
396396 func createAuction (jobExecutionDays,auctionDurationDays,auctionInfo) = {
397397 let callerPub = toBase58String(i.callerPublicKey)
398398 let auctionId = toBase58String(i.transactionId)
399399 let auctionClient = clientRegistered(callerPub)
400400 let pmt = extract(i.payment)
401401 let pmtAmount = pmt.amount
402402 let auctionPrice = createAuctionPriceCheck(pmtAmount)
403403 let auctionStart = height
404404 let auctionDurationBlocks = (auctionDurationDays * day)
405405 let blocksForExecution = (jobExecutionDays * day)
406406 let pmtAssetName = AssetIdToAssetName(pmt.assetId)
407407 let jobsCreated = getInt((auctionClient + "_JobsCreated"))
408408 let newFreezedBalance = increaseFreezedBalance(pmtAssetName, auctionPrice)
409409 WriteSet([DataEntry((auctionId + "_State"), stateOpen), DataEntry((auctionId + "_Info"), auctionInfo), DataEntry((auctionId + "_AuctionClient"), auctionClient), DataEntry((auctionId + "_AuctionStart"), auctionStart), DataEntry((auctionId + "_AuctionDuration"), auctionDurationBlocks), DataEntry((auctionId + "_JobPerformance"), blocksForExecution), DataEntry((auctionId + "_AssetName"), pmtAssetName), DataEntry((auctionId + "_Price"), auctionPrice), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsCreated"), (jobsCreated + 1))])
410410 }
411411
412412
413413
414414 @Callable(i)
415415 func makeBid (auctionId,amount) = {
416416 let callerPub = toBase58String(i.callerPublicKey)
417417 let auctionState = getAuctionState(auctionId)
418418 let auctionClient = getAuctionClientPub(auctionId)
419419 let auctionStart = getAuctionStartTime(auctionId)
420420 let auctionDuration = getAuctionDurationTime(auctionId)
421421 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
422422 let auctionAssetName = getAuctionAssetName(auctionId)
423423 let auctionPrice = getAuctionPrice(auctionId)
424424 let auctionAssetId58 = AssetNameToAssetId(auctionAssetName)
425425 let newFreelancer = freelancerRegistered(callerPub)
426426 let dAppCommission = ((auctionPrice * 3) / 100)
427427 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
428428 let bidAmount = bidAmountCheck(amount, auctionPrice)
429429 let auctionTimeisOver = timeCheck(height, auctionStart, auctionDuration)
430430 if (auctionTimeisOver)
431431 then if ((auctionState == stateOpen))
432432 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), (auctionPrice - dAppCommission), auctionAssetId58)]))
433433 else if ((auctionState == stateSuggested))
434434 then {
435435 let auctionLowestBidder = getAuctionLowestBidder(auctionId)
436436 let auctionLowestBid = getBid(auctionId, auctionLowestBidder)
437437 let amountDifference = ((auctionPrice - auctionLowestBid) - dAppCommission)
438438 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), auctionLowestBid)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), amountDifference, auctionAssetId58)]))
439439 }
440440 else throw("Incorrect auction state")
441441 else if ((auctionState == stateOpen))
442442 then WriteSet([DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount), DataEntry((auctionId + "_State"), stateSuggested), DataEntry((auctionId + "_LowestBidderPub"), callerPub)])
443443 else if ((auctionState == stateSuggested))
444444 then {
445445 let currentLowestBidderPub = getAuctionLowestBidder(auctionId)
446446 let newLowestBidderPub = defineNewLowestBidder(auctionId, currentLowestBidderPub, bidAmount, newFreelancer)
447447 WriteSet([DataEntry((auctionId + "_LowestBidderPub"), newLowestBidderPub), DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount)])
448448 }
449449 else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
450450 }
451451
452452
453453
454454 @Callable(i)
455455 func chooseFreelancer (auctionId,freelancerPub) = {
456456 let callerPub = toBase58String(i.callerPublicKey)
457457 let auctionState = getAuctionState(auctionId)
458458 let auctionClient = getAuctionClientPub(auctionId)
459459 let auctionStart = getAuctionStartTime(auctionId)
460460 let auctionDuration = getAuctionDurationTime(auctionId)
461461 let auctionAssetName = getAuctionAssetName(auctionId)
462462 let auctionPrice = getAuctionPrice(auctionId)
463463 let auctionAssetId58 = AssetNameToAssetId(auctionAssetName)
464464 let newFreelancer = choosedFreelancerCheck(auctionId, freelancerPub)
465465 let freelancerBidAmount = getBid(auctionId, newFreelancer)
466466 let auctionTimeisOver = timeCheck(height, auctionStart, auctionDuration)
467467 let jobsOnGoing = getInt((auctionClient + "_JobsOnGoing"))
468468 let freelancerPendingEarnings = getInt((freelancerPub + "_PendingEarnings"))
469469 let freelancerTotalEarnings = getInt((freelancerPub + "_TotalEarnings"))
470470 if ((callerPub == auctionClient))
471471 then if (auctionTimeisOver)
472472 then if ((auctionState == stateOpen))
473473 then {
474474 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
475475 let dAppCommission = ((auctionPrice * 3) / 100)
476476 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), (auctionPrice - dAppCommission), auctionAssetId58)]))
477477 }
478478 else if ((auctionState == stateSuggested))
479479 then {
480480 let auctionLowestBidder = getAuctionLowestBidder(auctionId)
481481 let auctionLowestBid = getBid(auctionId, auctionLowestBidder)
482482 let amountDifference = (auctionPrice - auctionLowestBid)
483483 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
484484 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), auctionLowestBid), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + auctionLowestBid)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + auctionLowestBid))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), amountDifference, auctionAssetId58)]))
485485 }
486486 else throw("Incorrect auction state")
487487 else if (if ((auctionState == stateOpen))
488488 then true
489489 else (auctionState == stateSuggested))
490490 then {
491491 let amountDifference = (auctionPrice - freelancerBidAmount)
492492 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
493493 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), newFreelancer), DataEntry((auctionId + "_Price"), freelancerBidAmount), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + freelancerBidAmount)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + freelancerBidAmount))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), (amountDifference + 1), auctionAssetId58)]))
494494 }
495495 else throw("Incorrect auction state")
496496 else throw("Only auction customer can choose a freelancer")
497497 }
498498
499499
500500
501501 @Callable(i)
502502 func increaseExecutionTime (auctionId,executionDays) = {
503503 let caller = toBase58String(i.callerPublicKey)
504504 let auctionState = getAuctionState(auctionId)
505505 let auctionClient = getAuctionClientPub(auctionId)
506506 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
507507 let newAuctionExecutionTime = newExecutionTimeCheck(executionDays, auctionBlocksForExecution)
508508 if ((caller == auctionClient))
509509 then if (if (if ((auctionState == stateOpen))
510510 then true
511511 else (auctionState == stateSuggested))
512512 then true
513513 else (auctionState == stateInProgress))
514514 then WriteSet([DataEntry((auctionId + "_JobPerformance"), newAuctionExecutionTime)])
515515 else throw("Incorrect state")
516516 else throw("Only Client can increase execution time")
517517 }
518518
519519
520520
521521 @Callable(i)
522522 func cancelAuction (auctionId) = {
523523 let callerPub = toBase58String(i.callerPublicKey)
524524 let auctionState = getAuctionState(auctionId)
525525 let auctionClient = getAuctionClientPub(auctionId)
526526 let auctionAssetName = getAuctionAssetName(auctionId)
527527 let auctionPrice = getAuctionPrice(auctionId)
528528 let auctionAssetId58 = AssetNameToAssetId(auctionAssetName)
529529 let dAppCommission = ((auctionPrice * 3) / 100)
530530 let amountWithoutComm = (auctionPrice - dAppCommission)
531531 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
532532 if ((callerPub == auctionClient))
533533 then if ((auctionState == stateOpen))
534534 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionClient)), amountWithoutComm, auctionAssetId58)]))
535535 else throw("Auction can be canceled only by auction owner.")
536536 else throw("Only Client can cancel auction")
537537 }
538538
539539
540540
541541 @Callable(i)
542542 func openDispute (auctionId) = {
543543 let caller = toBase58String(i.callerPublicKey)
544544 let auctionState = getAuctionState(auctionId)
545545 let auctionClient = getAuctionClientPub(auctionId)
546546 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
547547 let clientJobsInDispute = getInt((auctionClient + "_JobsInDispute"))
548548 if (if ((auctionState == stateInProgress))
549549 then true
550550 else (auctionState == stateWait4Confirm))
551551 then if (if ((caller == auctionClient))
552552 then true
553553 else (caller == auctionFreelancer))
554554 then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), 0), DataEntry((auctionClient + "_JobsInDispute"), (clientJobsInDispute + 1))])
555555 else throw("Only Client and Freelancer can open dispute")
556556 else throw("Incorrect auction state for dispute opening")
557557 }
558558
559559
560560
561561 @Callable(i)
562562 func voteDispute (auctionId,vote) = {
563563 let callerPub = toBase58String(i.callerPublicKey)
564564 let auctionState = getAuctionState(auctionId)
565565 let auctionClient = getAuctionClientPub(auctionId)
566566 let auctionAssetName = getAuctionAssetName(auctionId)
567567 let auctionPrice = getAuctionPrice(auctionId)
568568 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
569569 let commission = ((auctionPrice * 3) / 100)
570570 let auctionAssetId58 = AssetNameToAssetId(auctionAssetName)
571571 let ambassadorPub = callerIsAmbassador(callerPub)
572572 let ambassadorVote = ambassadorVoteCheck(auctionId, ambassadorPub, vote)
573573 let votesNumber = getVotesNumber(auctionId)
574574 let clientJobsInDispute = getInt((auctionClient + "_JobsInDispute"))
575575 let freelancerPendingEarnings = getInt((auctionFreelancer + "_PendingEarnings"))
576576 let freelancerTotalEarnings = getInt((auctionFreelancer + "_TotalEarnings"))
577577 if ((auctionState == stateDispute))
578578 then if ((votesNumber == 4))
579579 then {
580580 let disputeWinnerPub = defineDisputeWinner(auctionId, ambassadorVote, auctionClient, auctionFreelancer)
581581 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
582582 if ((disputeWinnerPub == auctionClient))
583583 then {
584584 let paymentWithoutComm = (auctionPrice - commission)
585585 ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + ambassadorPub), ambassadorVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsInDispute"), (clientJobsInDispute - 1)), DataEntry((auctionFreelancer + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice)), DataEntry((auctionFreelancer + "_TotalEarnings"), (freelancerTotalEarnings - auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(disputeWinnerPub)), paymentWithoutComm, auctionAssetId58)]))
586586 }
587587 else {
588588 let paymentWithoutComm = (auctionPrice - (commission * 2))
589589 ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + ambassadorPub), ambassadorVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsInDispute"), (clientJobsInDispute - 1)), DataEntry((auctionFreelancer + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(disputeWinnerPub)), paymentWithoutComm, auctionAssetId58)]))
590590 }
591591 }
592592 else WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry(((auctionId + "_DiputeVote_") + ambassadorPub), ambassadorVote)])
593593 else throw(("Incorrect state. Must be: " + stateDispute))
594594 }
595595
596596
597597
598598 @Callable(i)
599599 func workHandOver (auctionId) = {
600600 let callerPub = toBase58String(i.callerPublicKey)
601601 let auctionState = getAuctionState(auctionId)
602602 let auctionClient = getAuctionClientPub(auctionId)
603603 let auctionStart = getAuctionStartTime(auctionId)
604604 let auctionDuration = getAuctionDurationTime(auctionId)
605605 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
606606 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
607607 let timeIsOver = ((height - auctionStart) > auctionBlocksForExecution)
608608 let clientJobsInDispute = getInt((auctionClient + "_JobsInDispute"))
609609 if ((callerPub == auctionFreelancer))
610610 then if ((auctionState == stateInProgress))
611611 then if (timeIsOver)
612612 then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), "0"), DataEntry((auctionClient + "_JobInDispute"), (clientJobsInDispute + 1))])
613613 else WriteSet([DataEntry((auctionId + "_State"), stateWait4Confirm)])
614614 else throw("Auction state is incorrect")
615615 else throw("Only a freelancer can indicate that the work is done")
616616 }
617617
618618
619619
620620 @Callable(i)
621621 func acceptWork (auctionId) = {
622622 let callerPub = toBase58String(i.callerPublicKey)
623623 let auctionState = getAuctionState(auctionId)
624624 let auctionClient = getAuctionClientPub(auctionId)
625625 let auctionStart = getAuctionStartTime(auctionId)
626626 let auctionDuration = getAuctionDurationTime(auctionId)
627627 let auctionAssetName = getAuctionAssetName(auctionId)
628628 let auctionPrice = getAuctionPrice(auctionId)
629629 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
630630 let jobsOnGoing = getInt((auctionClient + "_JobsOnGoing"))
631631 let freelancerPendingEarnings = getInt((auctionFreelancer + "_PendingEarnings"))
632632 let freelancerPaidEarnings = getInt((auctionFreelancer + "_PaidEarnings"))
633633 let dAppCommission = ((auctionPrice * 3) / 100)
634634 let amountWithoutComm = (auctionPrice - (dAppCommission * 2))
635635 let auctionAssetId58 = AssetNameToAssetId(auctionAssetName)
636636 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
637637 let freelancerRating = getRating(auctionFreelancer)
638638 if ((callerPub == auctionClient))
639639 then if ((auctionState == stateWait4Confirm))
640640 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateComplete), DataEntry((auctionFreelancer + "_Rating"), (freelancerRating + 1)), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsOnGoing"), (jobsOnGoing - 1)), DataEntry((auctionFreelancer + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice)), DataEntry((auctionFreelancer + "_PaidEarnings"), (freelancerPaidEarnings + auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionFreelancer)), amountWithoutComm, auctionAssetId58)]))
641641 else throw(("Incorrect state. Must be: " + stateWait4Confirm))
642642 else throw("Only auction customer can use this function")
643643 }
644644
645645
646646 @Verifier(tx)
647647 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
648648 then match tx {
649649 case ttx: TransferTransaction =>
650650 let assetName = AssetIdToAssetName(ttx.assetId)
651651 let valueReservedBalance = getInteger(this, (assetName + "_Reserved"))
652652 let reservedBalance = match valueReservedBalance {
653653 case a: Int =>
654654 a
655655 case _ =>
656656 0
657657 }
658658 let availableBalance = (assetBalance(this, ttx.assetId) - reservedBalance)
659659 (availableBalance >= ttx.amount)
660660 case stx: SetScriptTransaction =>
661661 true
662662 case _ =>
663663 false
664664 }
665665 else false
666666

github/deemru/w8io/3ef1775 
107.48 ms