tx · 3XnnHeREGbmunZGQWgmqroBHdCKQbLquQc7PgHvqWun3

3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a:  -0.02000000 Waves

2022.11.15 11:17 [2317983] smart account 3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a > SELF 0.00000000 Waves

{ "type": 13, "id": "3XnnHeREGbmunZGQWgmqroBHdCKQbLquQc7PgHvqWun3", "fee": 2000000, "feeAssetId": null, "timestamp": 1668500280005, "version": 2, "chainId": 84, "sender": "3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a", "senderPublicKey": "FdBAJSP4WaWUkAzitoyP9FLTP1CP4GNeToRb7L8DcZq", "proofs": [ "U5VHGdR4Bky8vyAN3n1V95BHL73gkYWtiyMJ5eDLZANQUkqSyDJVZAxxouxP3K26y7a6W6ToBcGp8puKQDMYS41" ], "script": "base64:BgJkCAISBAoCCAgSCAoGCAgICAgIEgkKBwgICAgICAgSAwoBCBIECgIICBIGCgQICAgIEgoKCAgICAEBAQEBEgsKCQgICAgBAQEBARIFCgMICAQSBAoCCAgSBQoDCAgIEgASAwoBCDYAB1ZFUlNJT04CBTEuMC4wAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1c2VyRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX3VzZXJzX2RhcHAAC2ZlZVJlY2VpdmVyCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX2ZlZV9yZWNlaXZlcgALc2lnbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUIdXNlckRhcHACFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHACFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcAB3NpZ25DdXQAAgENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyARZrZXlFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQCsAgICEGdldF9ldmVudF9vd25lcl8FB2V2ZW50SWQBEWtleUV2ZW50QWRkZWREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIQZXZlbnRfYWRkZWREYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERhdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5hbWUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9uYW1lXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERlc2MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyARJrZXlFdmVudERpc3BsYXlDaWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9kaXNwbGF5Q2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudFRhZ3MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF90YWdzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudEZsYWcCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9mbGFnXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5vdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9ub3RlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQ9rZXlFdmVudENyYXdsZXICBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9jcmF3bGVyQ2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhdldmVudF90b3RhbFRpY2tldFR5cGVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEmV2ZW50X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARBrZXlFdmVudENhbmNlbGVkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIPZXZlbnRfY2FuY2VsZWRfBQdldmVudElkAgFfBQZjYWxsZXIBFmtleUV2ZW50Q2FuY2VsZWRSZWFzb24CBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhVldmVudF9jYW5jZWxlZFJlYXNvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgEVa2V5RXZlbnRTdGFydGluZ1ByaWNlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIUZXZlbnRfc3RhcnRpbmdQcmljZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgENa2V5VGlja2V0TmFtZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldERlc2MDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X2Rlc2NfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ5rZXlUaWNrZXRQcmljZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg10aWNrZXRfcHJpY2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREYXRlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEZa2V5VGlja2V0UmVzZWxsTGltaXRhdGlvbgMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhh0aWNrZXRfcmVzZWxsTGltaXRhdGlvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBFWtleVRpY2tldE1heEF2YWlsYWJsZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhR0aWNrZXRfbWF4QXZhaWxhYmxlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkBAZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAVuZnRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJ0aWNrZXRfYW1vdW50VXNlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQCAV8FBW5mdElkARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQFbmZ0SWQKdXNhZ2VJbmRleAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X2hpc3RvcnlVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAIBXwUFbmZ0SWQCAV8FCnVzYWdlSW5kZXgBD2tleVRpY2tldE1heFVzZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg50aWNrZXRfbWF4VXNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEQa2V5VGlja2V0Um95YWx0eQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhF0aWNrZXRfcm95YWx0aWVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBC3ZhbGlkYXRlSW50AQNudW0JAGYCAAAFA251bQEWZ2V0RXZlbnRPd25lckJ5RXZlbnRJZAEHZXZlbnRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQCAAEMdmFsaWRhdGVVc2VyAQZjYWxsZXIECnVzZXJTdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBRB1c2VyVW5yZWdpc3RlcmVkAwkAAAIFCnVzZXJTdGF0dXMFEHVzZXJVbnJlZ2lzdGVyZWQCLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUKdXNlclN0YXR1cwUNdXNlclN1c3BlbmRlZAIRQWNjb3VudCBzdXNwZW5kZWQCAAERdmFsaWRhdGVFdmVudERhdGEGBmNhbGxlcgpjaWREaXNwbGF5BG5hbWULZGVzY3JpcHRpb24EdGFncwRkYXRlBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAAACCQCxAgEFCmNpZERpc3BsYXkAAAkAAgECG0Rpc3BsYXkgQ0lEIGNhbm5vdCBiZSBlbXB0eQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUArAIJAAIBAhIzMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uALgXCQACAQIaMzAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBGRhdGUA6AcJAAIBAhMxMDAwIENoYXIuIG1heCBkYXRlAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAARJ2YWxpZGF0ZVRpY2tldERhdGEIB2V2ZW50SWQGY2FsbGVyBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZRByZXNlbGxMaW1pdGF0aW9uBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQDIAQkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDAwMJAQt2YWxpZGF0ZUludAEFBXByaWNlBgkBC3ZhbGlkYXRlSW50AQUGbWF4VXNlBgkBC3ZhbGlkYXRlSW50AQUMbWF4QXZhaWxhYmxlBgkBC3ZhbGlkYXRlSW50AQUQcmVzZWxsTGltaXRhdGlvbgkAAgECFFBvc2l0aXZlIGFtb3VudCBvbmx5AwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAgABDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEUdmFsaWRhdGVQcmljZUFzc2V0SWQDAWkMcHJpY2VBc3NldElkDGFydHdvcmtQcmljZQQLJHQwNzAxMzcwNDkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwNzAxMzcwNDkCXzEEBmFtb3VudAgFCyR0MDcwMTM3MDQ5Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAdhc3NldElkAwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECGlBheW1lbnQgYW1vdW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEMaXNFdmVudE93bmVyAgdldmVudElkBmNhbGxlcgQKZXZlbnRPd25lcgkBFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAwkAAAIFCmV2ZW50T3duZXICAAkAAgECD0V2ZW50IG5vdCBmb3VuZAkAAAIFCmV2ZW50T3duZXIFBmNhbGxlcgELdGlja2V0RXhpc3QDBmNhbGxlcgdldmVudElkCHRpY2tldElkBAZ0aWNrZXQJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkBAiE9AgkAsQIBBQZ0aWNrZXQAAAEPZXZlbnRJc0NhbmNlbGVkAgZpc3N1ZXIHZXZlbnRJZAkBD2dldEJvb2xlYW5CeUtleQEJARBrZXlFdmVudENhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkDQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEIYWRkRXZlbnQGBG5hbWULZGVzY3JpcHRpb24EdGFncwpjaWREaXNwbGF5B2NyYXdsZXIEZGF0ZQQLJHQwODM3ODg0MjcJAQxpZENhbGxlckRhdGUBBQFpBAdldmVudElkCAULJHQwODM3ODg0MjcCXzEEBmNhbGxlcggFCyR0MDgzNzg4NDI3Al8yBAlhZGRlZERhdGUIBQskdDA4Mzc4ODQyNwJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIEDXZhbGlkYXRlRXZlbnQJARF2YWxpZGF0ZUV2ZW50RGF0YQYFBmNhbGxlcgUKY2lkRGlzcGxheQUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFBGRhdGUDCQECIT0CBQ12YWxpZGF0ZUV2ZW50AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEJAMwIAgkBDEludGVnZXJFbnRyeQIJARFrZXlFdmVudEFkZGVkRGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUJYWRkZWREYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFRhZ3MCBQZjYWxsZXIFB2V2ZW50SWQFBHRhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQFBmNhbGxlcgUDbmlsAWkBCWVkaXRFdmVudAcHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MKY2lkRGlzcGxheQdjcmF3bGVyBGRhdGUDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBgUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudEZsYWcCBQZjYWxsZXIFB2V2ZW50SWQDCQAAAgUEZmxhZwIHSUxMRUdBTAkAAgECG0Nhbm5vdCB1cGRhdGUgSUxMRUdBTCBFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIFA25pbAFpAQtkZWxldGVFdmVudAEHZXZlbnRJZAQNJHQwMTA3MTkxMDc2MwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTA3MTkxMDc2MwJfMQQGY2FsbGVyCAUNJHQwMTA3MTkxMDc2MwJfMgQJYWRkZWREYXRlCAUNJHQwMTA3MTkxMDc2MwJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAMJAQIhPQIFDWV2ZW50VG90YWxORlQAAAkAAgECLUNhbm5vdCBkZWxldGUgZXZlbnQgd2l0aCBhbHJlYWR5IHNvbGQgdGlja2V0cwQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkAwkAZgIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAAJAAIBAhhEZWxldGUgYWxsIHRpY2tldHMgZmlyc3QJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAUDbmlsAWkBC2NhbmNlbEV2ZW50AgdldmVudElkBnJlYXNvbgQNJHQwMTIxMDQxMjE0OAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTIxMDQxMjE0OAJfMQQGY2FsbGVyCAUNJHQwMTIxMDQxMjE0OAJfMgQJYWRkZWREYXRlCAUNJHQwMTIxMDQxMjE0OAJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgUGY2FsbGVyBQdldmVudElkBQZyZWFzb24FA25pbAFpAQlmbGFnRXZlbnQEB2V2ZW50SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDEyNTgzMTI2MTYJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyNTgzMTI2MTYCXzEEBmNhbGxlcggFDSR0MDEyNTgzMTI2MTYCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRGbGFnAgUEYWRkcgUHZXZlbnRJZAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROb3RlAgUEYWRkcgUHZXZlbnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQEJYWRkVGlja2V0CAdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBk1heFVzZQlSb3lhbHRpZXMQcmVzZWxsTGltaXRhdGlvbgQNJHQwMTMxNTYxMzE5NgkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTMxNTYxMzE5NgJfMQQGY2FsbGVyCAUNJHQwMTMxNTYxMzE5NgJfMgQEZGF0ZQgFDSR0MDEzMTU2MTMxOTYCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBD2V2ZW50SXNDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAAgECGEV2ZW50IGhhdmUgYmVlbiBjYW5jZWxlZAMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50BA52YWxpZGF0ZVRpY2tldAkBEnZhbGlkYXRlVGlja2V0RGF0YQgFB2V2ZW50SWQFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXByaWNlBQxtYXhBdmFpbGFibGUFBk1heFVzZQUQcmVzZWxsTGltaXRhdGlvbgMJAQIhPQIFDnZhbGlkYXRlVGlja2V0AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBG5hbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlUaWNrZXREYXRlAwUGY2FsbGVyBQdldmVudElkBQJpZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFDG1heEF2YWlsYWJsZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUGTWF4VXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAGQCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VGlja2V0Um95YWx0eQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFCVJveWFsdGllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleVRpY2tldFJlc2VsbExpbWl0YXRpb24DBQZjYWxsZXIFB2V2ZW50SWQFAmlkBRByZXNlbGxMaW1pdGF0aW9uBQNuaWwBaQEKZWRpdFRpY2tldAkIdGlja2V0SWQHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UJUm95YWx0aWVzEHJlc2VsbExpbWl0YXRpb24EDSR0MDE0OTIwMTQ5NjAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE0OTIwMTQ5NjACXzEEBmNhbGxlcggFDSR0MDE0OTIwMTQ5NjACXzIEBGRhdGUIBQ0kdDAxNDkyMDE0OTYwAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEIBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZtYXhVc2UFEHJlc2VsbExpbWl0YXRpb24DCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAp0aWNrZXRTb2xkCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQAAAMJAGYCBQp0aWNrZXRTb2xkBQxtYXhBdmFpbGFibGUJAAIBAj5NYXggdGlja2V0cyBhdmFpbGFibGUgY2Fubm90IGJlIGxvd2VyIHRoYW4gYW1vdW50IGFscmVhZHkgc29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQZtYXhVc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlUaWNrZXRSb3lhbHR5AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUJUm95YWx0aWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZa2V5VGlja2V0UmVzZWxsTGltaXRhdGlvbgMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFEHJlc2VsbExpbWl0YXRpb24FA25pbAFpAQ9wYXVzZVRpY2tldFNhbGUDB2V2ZW50SWQIdGlja2V0SWQGc3RhdHVzBA0kdDAxNjI5MTE2MzMxCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNjI5MTE2MzMxAl8xBAZjYWxsZXIIBQ0kdDAxNjI5MTE2MzMxAl8yBARkYXRlCAUNJHQwMTYyOTExNjMzMQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQZzdGF0dXMFA25pbAFpAQxkZWxldGVUaWNrZXQCCHRpY2tldElkB2V2ZW50SWQEDSR0MDE2Nzk0MTY4MzQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE2Nzk0MTY4MzQCXzEEBmNhbGxlcggFDSR0MDE2Nzk0MTY4MzQCXzIEBGRhdGUIBQ0kdDAxNjc5NDE2ODM0Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQECIT0CBQphbW91bnRTb2xkAAAJAAIBAiZDYW5ub3QgZGVsZXRlIHRpY2tldCB0aGF0IHNvbGQgYWxyZWFkeQQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0RGF0ZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5VGlja2V0Um95YWx0eQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGWtleVRpY2tldFJlc2VsbExpbWl0YXRpb24DBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBlAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQUDbmlsAWkBCWJ1eVRpY2tldAMIdGlja2V0SWQHZXZlbnRJZAZpc3N1ZXIEDSR0MDE4MjAyMTgyNDAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE4MjAyMTgyNDACXzEEBmNhbGxlcggFDSR0MDE4MjAyMTgyNDACXzIEBGRhdGUIBQ0kdDAxODIwMjE4MjQwAl8zBAh0b3RhbE5GVAkBC3ZhbHVlT3JFbHNlAgkBD2dldEludGVnZXJCeUtleQECFHRvdGFsX3RpY2tldHNfaXNzdWVkAAADCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZpc3N1ZXIJAAIBAh9FdmVudCBJRCBhbmQgSXNzdWVyIGRvbid0IG1hdGNoAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQJZXZlbnROYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGaXNzdWVyBQdldmVudElkAwkAAAIFCWV2ZW50TmFtZQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QDCQEPZXZlbnRJc0NhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkBAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBASEBBQhpc09uU2FsZQkAAgECFFRpY2tldHMgbm90IGZvciBzYWxlBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQLdGlja2V0UHJpY2UJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEOa2V5VGlja2V0UHJpY2UDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAxwcmljZUFzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQEDSR0MDE5MDkzMTkxNjcJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAULdGlja2V0UHJpY2UEBmFtb3VudAgFDSR0MDE5MDkzMTkxNjcCXzEEB2Fzc2V0SWQIBQ0kdDAxOTA5MzE5MTY3Al8yBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFB3NpZ25DdXQAZAQSYW1vdW50Rm9yT3JnYW5pemVyCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICC09yZ2FuaXplcjogBQZpc3N1ZXICDCwKIEV2ZW50SUQ6IAUHZXZlbnRJZAINLAogVGlja2V0SUQ6IAUIdGlja2V0SWQCDiwKIEV2ZW50TmFtZTogBQlldmVudE5hbWUCCiwKIElzc3VlOiAJAKQDAQUNbmV3QW1vdW50U29sZAIBLwkApAMBBQptYXhDYW5TZWxsBAhpc3N1ZU5GVAkAwggFCQCsAgICA1NUXwkApAMBCQBkAgUIdG90YWxORlQAAQUJaXNzdWVNZXRhAAEAAAcEBWlkTkZUCQC4CAEFCGlzc3VlTkZUBApzZWxsU3RhdHVzAwkAAAIFDW5ld0Ftb3VudFNvbGQFCm1heENhblNlbGwHBgQKcmVjZWl2ZU5GVAgFAWkGY2FsbGVyBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUIdGlja2V0SWQCAV8FB2V2ZW50SWQCAV8FBmlzc3VlcgIBXwkA2AQBBQVpZE5GVAQJc29sZFZhbHVlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAQOdGlja2V0VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAZidXlSZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFBWlkTkZUBQdzb2xkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhR0b3RhbF90aWNrZXRzX2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAkAZAIFDWV2ZW50VG90YWxORlQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIDU1RfCQCkAwEJAGQCBQh0b3RhbE5GVAABAghfYXNzZXRJZAkArAICCQCsAgIFCHRpY2tldElkAgFfCQDYBAEFBWlkTkZUCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQEBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEFBWlkTkZUAAAJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUSYW1vdW50Rm9yT3JnYW5pemVyBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwFpAQl1c2VUaWNrZXQABA0kdDAyMTMyNzIxMzY1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMTMyNzIxMzY1Al8xBAZjYWxsZXIIBQ0kdDAyMTMyNzIxMzY1Al8yBARkYXRlCAUNJHQwMjEzMjcyMTM2NQJfMwQNJHQwMjEzNzEyMTQwNwkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAyMTM3MTIxNDA3Al8xBAZhbW91bnQIBQ0kdDAyMTM3MTIxNDA3Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAlldmVudERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgIEbmZ0XwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkAAAIJALECAQUJZXZlbnREYXRhAAAJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQMZXZlbnREYXRhQXJyCQC1CQIFCWV2ZW50RGF0YQIBXwQGaXNzdWVyCQCRAwIFDGV2ZW50RGF0YUFycgAHBAdldmVudElkCQCRAwIFDGV2ZW50RGF0YUFycgAGBAh0aWNrZXRJZAkAkQMCBQxldmVudERhdGFBcnIABQMJAQEhAQkBC3RpY2tldEV4aXN0AwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFVzZWQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQETa2V5VGlja2V0QW1vdW50VXNlZAQFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAQMbWF4VXNpbmdUaW1lCQEPZ2V0SW50ZWdlckJ5S2V5AQkBD2tleVRpY2tldE1heFVzZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQAAAgUMbWF4VXNpbmdUaW1lBQphbW91bnRVc2VkCQACAQkArAICCQCsAgICDFRpY2tldCB1c2VkIAkApAMBBQphbW91bnRVc2VkAg4gdGltZXMgYWxyZWFkeQQLaW5pdFVzZURhdGEJAQ5nZXRTdHJpbmdCeUtleQEJARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAIBMQQMZmlyc3RVc2VBZGRyAwMDCQBmAgUMbWF4VXNpbmdUaW1lAAEJAGcCBQphbW91bnRVc2VkAAEHCQECIT0CBQtpbml0VXNlRGF0YQIABwkAkQMCCQC1CQIFC2luaXRVc2VEYXRhAgFfAAEFBmNhbGxlcgMJAQIhPQIFDGZpcnN0VXNlQWRkcgUGY2FsbGVyCQACAQItWW91IGFyZSBub3QgdGhlIGluaXRpYWwgdXNlciBvZiB0aGlzIHRpY2tldC4gCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5VGlja2V0QW1vdW50VXNlZAQFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkAZAIFCmFtb3VudFVzZWQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5VGlja2V0SGlzdG9yeVVzZWQFBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAKQDAQkAZAIFCmFtb3VudFVzZWQAAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUCaWQCAV8FBmNhbGxlcgIBXwkApAMBBQRkYXRlAgFfCQCkAwEJAGQCBQphbW91bnRVc2VkAAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgABCAUHcGF5bWVudAdhc3NldElkBQNuaWwBaQELZGVsZXRlRW50cnkBBWVudHJ5BAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkAAAIFBmNhbGxlcgUFY2hyaXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQUFZW50cnkFA25pbAkAAgECAm5vAEpk+Ec=", "height": 2317983, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8aLJx5ZwZpSvtNmjK5BH9AYFibUKt2bCiYwFweSX5X6a Next: 61aJ2Bnc23ZpFD4MrqreeD5nm4foeQtb4kPV4Z43CxFG Diff:
OldNewDifferences
9999 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102+func keyTicketResellLimitation (caller,eventId,ticketId) = ((((("ticket_resellLimitation_" + eventId) + "_") + caller) + "_") + ticketId)
103+
104+
102105 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
103106
104107
163166 }
164167
165168
166-func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
169+func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse,resellLimitation) = {
167170 let checkUser = validateUser(caller)
168171 if ((checkUser != ""))
169172 then throw(checkUser)
171174 then throw("100 Char. max name")
172175 else if (!(validateString(description, 1000)))
173176 then throw("1000 Char. max description")
174- else if (if (if (validateInt(price))
177+ else if (if (if (if (validateInt(price))
175178 then true
176179 else validateInt(maxUse))
177180 then true
178181 else validateInt(maxAvailable))
182+ then true
183+ else validateInt(resellLimitation))
179184 then throw("Positive amount only")
180185 else if (!(validateString(description, 1000)))
181186 then throw("1000 Char. max description")
198203
199204
200205 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
201- let $t068126848 = isPayment(i)
202- let payment = $t068126848._1
203- let amount = $t068126848._2
206+ let $t070137049 = isPayment(i)
207+ let payment = $t070137049._1
208+ let amount = $t070137049._2
204209 if (!(isDefined(payment.assetId)))
205210 then throw("Wrong asset attached")
206211 else {
247252
248253 @Callable(i)
249254 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
250- let $t081778226 = idCallerDate(i)
251- let eventId = $t081778226._1
252- let caller = $t081778226._2
253- let addedDate = $t081778226._3
255+ let $t083788427 = idCallerDate(i)
256+ let eventId = $t083788427._1
257+ let caller = $t083788427._2
258+ let addedDate = $t083788427._3
254259 let checkUser = validateUser(caller)
255260 if ((checkUser != ""))
256261 then throw(checkUser)
284289 let flag = getStringByKey(keyEventFlag(caller, eventId))
285290 if ((flag == "ILLEGAL"))
286291 then throw("Cannot update ILLEGAL Event")
287- else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler)]
292+ else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventCrawler(caller, eventId), crawler)]
288293 }
289294 }
290295 }
294299
295300 @Callable(i)
296301 func deleteEvent (eventId) = {
297- let $t01044610490 = idCallerDate(i)
298- let id = $t01044610490._1
299- let caller = $t01044610490._2
300- let addedDate = $t01044610490._3
302+ let $t01071910763 = idCallerDate(i)
303+ let id = $t01071910763._1
304+ let caller = $t01071910763._2
305+ let addedDate = $t01071910763._3
301306 let checkUser = validateUser(caller)
302307 if ((checkUser != ""))
303308 then throw(checkUser)
320325
321326 @Callable(i)
322327 func cancelEvent (eventId,reason) = {
323- let $t01183111875 = idCallerDate(i)
324- let id = $t01183111875._1
325- let caller = $t01183111875._2
326- let addedDate = $t01183111875._3
328+ let $t01210412148 = idCallerDate(i)
329+ let id = $t01210412148._1
330+ let caller = $t01210412148._2
331+ let addedDate = $t01210412148._3
327332 let checkUser = validateUser(caller)
328333 if ((checkUser != ""))
329334 then throw(checkUser)
336341
337342 @Callable(i)
338343 func flagEvent (eventId,addr,flag,note) = {
339- let $t01231012343 = idCallerDate(i)
340- let id = $t01231012343._1
341- let caller = $t01231012343._2
344+ let $t01258312616 = idCallerDate(i)
345+ let id = $t01258312616._1
346+ let caller = $t01258312616._2
342347 if (containsElement([chris, toString(this)], caller))
343348 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
344349 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
349354
350355
351356 @Callable(i)
352-func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
353- let $t01286012900 = idCallerDate(i)
354- let id = $t01286012900._1
355- let caller = $t01286012900._2
356- let date = $t01286012900._3
357+func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties,resellLimitation) = {
358+ let $t01315613196 = idCallerDate(i)
359+ let id = $t01315613196._1
360+ let caller = $t01315613196._2
361+ let date = $t01315613196._3
357362 let checkUser = validateUser(caller)
358363 if ((checkUser != ""))
359364 then throw(checkUser)
362367 else if (!(isEventOwner(eventId, caller)))
363368 then throw("You are not the owner of this event")
364369 else {
365- let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
370+ let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse, resellLimitation)
366371 if ((validateTicket != ""))
367372 then throw("Something went wrong!")
368373 else {
369374 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
370-[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
375+[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties), IntegerEntry(keyTicketResellLimitation(caller, eventId, id), resellLimitation)]
371376 }
372377 }
373378 }
375380
376381
377382 @Callable(i)
378-func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
379- let $t01449714537 = idCallerDate(i)
380- let id = $t01449714537._1
381- let caller = $t01449714537._2
382- let date = $t01449714537._3
383+func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties,resellLimitation) = {
384+ let $t01492014960 = idCallerDate(i)
385+ let id = $t01492014960._1
386+ let caller = $t01492014960._2
387+ let date = $t01492014960._3
383388 let checkUser = validateUser(caller)
384389 if ((checkUser != ""))
385390 then throw(checkUser)
388393 else if (!(ticketExist(caller, eventId, ticketId)))
389394 then throw("Ticket not found")
390395 else {
391- let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
396+ let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse, resellLimitation)
392397 if ((validateTicket != ""))
393398 then throw("Something went wrong!")
394399 else {
395400 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
396401 if ((ticketSold > maxAvailable))
397402 then throw("Max tickets available cannot be lower than amount already sold")
398- else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, ticketId), Royalties)]
403+ else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, ticketId), Royalties), IntegerEntry(keyTicketResellLimitation(caller, eventId, ticketId), resellLimitation)]
399404 }
400405 }
401406 }
404409
405410 @Callable(i)
406411 func pauseTicketSale (eventId,ticketId,status) = {
407- let $t01575815798 = idCallerDate(i)
408- let id = $t01575815798._1
409- let caller = $t01575815798._2
410- let date = $t01575815798._3
412+ let $t01629116331 = idCallerDate(i)
413+ let id = $t01629116331._1
414+ let caller = $t01629116331._2
415+ let date = $t01629116331._3
411416 let checkUser = validateUser(caller)
412417 if ((checkUser != ""))
413418 then throw(checkUser)
422427
423428 @Callable(i)
424429 func deleteTicket (ticketId,eventId) = {
425- let $t01626116301 = idCallerDate(i)
426- let id = $t01626116301._1
427- let caller = $t01626116301._2
428- let date = $t01626116301._3
430+ let $t01679416834 = idCallerDate(i)
431+ let id = $t01679416834._1
432+ let caller = $t01679416834._2
433+ let date = $t01679416834._3
429434 let checkUser = validateUser(caller)
430435 if ((checkUser != ""))
431436 then throw(checkUser)
439444 then throw("Cannot delete ticket that sold already")
440445 else {
441446 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
442-[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
447+[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), DeleteEntry(keyTicketResellLimitation(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
443448 }
444449 }
445450 }
448453
449454 @Callable(i)
450455 func buyTicket (ticketId,eventId,issuer) = {
451- let $t01760217640 = idCallerDate(i)
452- let id = $t01760217640._1
453- let caller = $t01760217640._2
454- let date = $t01760217640._3
456+ let $t01820218240 = idCallerDate(i)
457+ let id = $t01820218240._1
458+ let caller = $t01820218240._2
459+ let date = $t01820218240._3
455460 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
456461 if (!(isEventOwner(eventId, issuer)))
457462 then throw("Event ID and Issuer don't match")
471476 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
472477 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
473478 let priceAssetId = toBase58String(signAssetId)
474- let $t01849318567 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475- let amount = $t01849318567._1
476- let assetId = $t01849318567._2
479+ let $t01909319167 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480+ let amount = $t01909319167._1
481+ let assetId = $t01909319167._2
477482 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
478483 let amountForSign = fraction(amount, signCut, 100)
479484 let amountForOrganizer = (amount - amountForSign)
509514
510515 @Callable(i)
511516 func useTicket () = {
512- let $t02072720765 = idCallerDate(i)
513- let id = $t02072720765._1
514- let caller = $t02072720765._2
515- let date = $t02072720765._3
516- let $t02077120807 = isPayment(i)
517- let payment = $t02077120807._1
518- let amount = $t02077120807._2
517+ let $t02132721365 = idCallerDate(i)
518+ let id = $t02132721365._1
519+ let caller = $t02132721365._2
520+ let date = $t02132721365._3
521+ let $t02137121407 = isPayment(i)
522+ let payment = $t02137121407._1
523+ let amount = $t02137121407._2
519524 if (!(isDefined(payment.assetId)))
520525 then throw("Wrong asset attached")
521526 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 let userDapp = value(addressFromString(getStringByKey("conf_users_dapp")))
1010
1111 let feeReceiver = getStringByKey("conf_fee_receiver")
1212
1313 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1414
1515 let chris = getStringByKey("conf_admin_1")
1616
1717 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
1818
1919
2020 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
2121
2222
2323 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2424
2525 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2626
2727 let userSuspended = "SUSPENDED"
2828
2929 let userUnregistered = "UNREGISTERED"
3030
3131 func validateCID (cid) = if (contains(cid, "/"))
3232 then if (if ((76 > size(cid)))
3333 then (size(split(cid, "/")[0]) == 59)
3434 else false)
3535 then (16 > size(split(cid, "/")[1]))
3636 else false
3737 else false
3838
3939
4040 let signCut = 2
4141
4242 func keyUserStatus (caller) = ("user_status_" + caller)
4343
4444
4545 func keyEventOwnerByEventId (eventId) = ("get_event_owner_" + eventId)
4646
4747
4848 func keyEventAddedDate (caller,eventId) = ((("event_addedDate_" + eventId) + "_") + caller)
4949
5050
5151 func keyEventDate (caller,eventId) = ((("event_date_" + eventId) + "_") + caller)
5252
5353
5454 func keyEventName (caller,eventId) = ((("event_name_" + eventId) + "_") + caller)
5555
5656
5757 func keyEventDesc (caller,eventId) = ((("event_desc_" + eventId) + "_") + caller)
5858
5959
6060 func keyEventDisplayCid (caller,eventId) = ((("event_displayCid_" + eventId) + "_") + caller)
6161
6262
6363 func keyEventTags (caller,eventId) = ((("event_tags_" + eventId) + "_") + caller)
6464
6565
6666 func keyEventFlag (caller,eventId) = ((("event_flag_" + eventId) + "_") + caller)
6767
6868
6969 func keyEventNote (caller,eventId) = ((("event_note_" + eventId) + "_") + caller)
7070
7171
7272 func keyEventCrawler (caller,eventId) = ((("event_crawlerCid_" + eventId) + "_") + caller)
7373
7474
7575 func keyEventTotalTicketTypes (caller,eventId) = ((("event_totalTicketTypes_" + eventId) + "_") + caller)
7676
7777
7878 func keyEventTotalTicketsIssued (caller,eventId) = ((("event_totalIssued_" + eventId) + "_") + caller)
7979
8080
8181 func keyEventCanceled (caller,eventId) = ((("event_canceled_" + eventId) + "_") + caller)
8282
8383
8484 func keyEventCanceledReason (caller,eventId) = ((("event_canceledReason_" + eventId) + "_") + caller)
8585
8686
8787 func keyEventStartingPrice (caller,eventId) = ((("event_startingPrice_" + eventId) + "_") + caller)
8888
8989
9090 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102+func keyTicketResellLimitation (caller,eventId,ticketId) = ((((("ticket_resellLimitation_" + eventId) + "_") + caller) + "_") + ticketId)
103+
104+
102105 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
103106
104107
105108 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
106109
107110
108111 func keyTicketAmountUsed (caller,eventId,ticketId,nftId) = ((((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId)
109112
110113
111114 func keyTicketHistoryUsed (caller,eventId,ticketId,nftId,usageIndex) = ((((((((("ticket_historyUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId) + "_") + usageIndex)
112115
113116
114117 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
115118
116119
117120 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
118121
119122
120123 func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalties_" + eventId) + "_") + caller) + "_") + ticketId)
121124
122125
123126 func validateString (str,max) = if ((size(str) == 0))
124127 then throw("Field cannot be is empty")
125128 else if ((size(str) > max))
126129 then throw((str + " is too long"))
127130 else true
128131
129132
130133 func validateInt (num) = (0 > num)
131134
132135
133136 func getEventOwnerByEventId (eventId) = valueOrElse(getString(this, keyEventOwnerByEventId(eventId)), "")
134137
135138
136139 func validateUser (caller) = {
137140 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
138141 if ((userStatus == userUnregistered))
139142 then "Register this account first with \"Account\" tab"
140143 else if ((userStatus == userSuspended))
141144 then "Account suspended"
142145 else ""
143146 }
144147
145148
146149 func validateEventData (caller,cidDisplay,name,description,tags,date) = {
147150 let checkUser = validateUser(caller)
148151 if ((checkUser != ""))
149152 then throw(checkUser)
150153 else if ((size(cidDisplay) == 0))
151154 then throw("Display CID cannot be empty")
152155 else if (!(validateCID(cidDisplay)))
153156 then throw("Problem with CID")
154157 else if (!(validateString(name, 300)))
155158 then throw("300 Char. max name")
156159 else if (!(validateString(description, 3000)))
157160 then throw("3000 Char. max description")
158161 else if (!(validateString(date, 1000)))
159162 then throw("1000 Char. max date")
160163 else if ((size(split(tags, ",")) > 5))
161164 then throw("5 tags max.")
162165 else ""
163166 }
164167
165168
166-func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
169+func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse,resellLimitation) = {
167170 let checkUser = validateUser(caller)
168171 if ((checkUser != ""))
169172 then throw(checkUser)
170173 else if (!(validateString(name, 200)))
171174 then throw("100 Char. max name")
172175 else if (!(validateString(description, 1000)))
173176 then throw("1000 Char. max description")
174- else if (if (if (validateInt(price))
177+ else if (if (if (if (validateInt(price))
175178 then true
176179 else validateInt(maxUse))
177180 then true
178181 else validateInt(maxAvailable))
182+ then true
183+ else validateInt(resellLimitation))
179184 then throw("Positive amount only")
180185 else if (!(validateString(description, 1000)))
181186 then throw("1000 Char. max description")
182187 else ""
183188 }
184189
185190
186191 func idCallerDate (i) = if (!(dappRunning))
187192 then throw(maintenanceMSG)
188193 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
189194
190195
191196 func isPayment (i) = if ((size(i.payments) == 0))
192197 then throw("No payment attached")
193198 else {
194199 let payment = value(i.payments[0])
195200 let amount = value(payment.amount)
196201 $Tuple2(payment, amount)
197202 }
198203
199204
200205 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
201- let $t068126848 = isPayment(i)
202- let payment = $t068126848._1
203- let amount = $t068126848._2
206+ let $t070137049 = isPayment(i)
207+ let payment = $t070137049._1
208+ let amount = $t070137049._2
204209 if (!(isDefined(payment.assetId)))
205210 then throw("Wrong asset attached")
206211 else {
207212 let assetId = if (if ((size(priceAssetId) > 0))
208213 then (toBase58String(value(payment.assetId)) == priceAssetId)
209214 else false)
210215 then payment.assetId
211216 else throw("Wrong asset attached")
212217 if ((artworkPrice != amount))
213218 then throw("Payment amount don't match")
214219 else $Tuple2(amount, assetId)
215220 }
216221 }
217222
218223
219224 func isEventOwner (eventId,caller) = {
220225 let eventOwner = getEventOwnerByEventId(eventId)
221226 if ((eventOwner == ""))
222227 then throw("Event not found")
223228 else (eventOwner == caller)
224229 }
225230
226231
227232 func ticketExist (caller,eventId,ticketId) = {
228233 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
229234 (size(ticket) != 0)
230235 }
231236
232237
233238 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
234239
235240
236241 @Callable(invoke)
237242 func setConf (key,val) = {
238243 let caller = toString(invoke.caller)
239244 if (containsElement([chris, toString(this)], caller))
240245 then if (contains(key, "conf_"))
241246 then [StringEntry(key, val)]
242247 else throw("Entries starting with conf_ only")
243248 else throw("You are not allowed to change this")
244249 }
245250
246251
247252
248253 @Callable(i)
249254 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
250- let $t081778226 = idCallerDate(i)
251- let eventId = $t081778226._1
252- let caller = $t081778226._2
253- let addedDate = $t081778226._3
255+ let $t083788427 = idCallerDate(i)
256+ let eventId = $t083788427._1
257+ let caller = $t083788427._2
258+ let addedDate = $t083788427._3
254259 let checkUser = validateUser(caller)
255260 if ((checkUser != ""))
256261 then throw(checkUser)
257262 else {
258263 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
259264 if ((validateEvent != ""))
260265 then throw("Something went wrong!")
261266 else [IntegerEntry(keyEventAddedDate(caller, eventId), addedDate), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
262267 }
263268 }
264269
265270
266271
267272 @Callable(i)
268273 func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
269274 then throw(maintenanceMSG)
270275 else {
271276 let caller = toBase58String(i.caller.bytes)
272277 let checkUser = validateUser(caller)
273278 if ((checkUser != ""))
274279 then throw(checkUser)
275280 else {
276281 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
277282 if ((validateEvent != ""))
278283 then throw("Something went wrong!")
279284 else {
280285 let entryExist = getStringByKey(keyEventName(caller, eventId))
281286 if ((entryExist == ""))
282287 then throw("Entry not found")
283288 else {
284289 let flag = getStringByKey(keyEventFlag(caller, eventId))
285290 if ((flag == "ILLEGAL"))
286291 then throw("Cannot update ILLEGAL Event")
287- else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler)]
292+ else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventCrawler(caller, eventId), crawler)]
288293 }
289294 }
290295 }
291296 }
292297
293298
294299
295300 @Callable(i)
296301 func deleteEvent (eventId) = {
297- let $t01044610490 = idCallerDate(i)
298- let id = $t01044610490._1
299- let caller = $t01044610490._2
300- let addedDate = $t01044610490._3
302+ let $t01071910763 = idCallerDate(i)
303+ let id = $t01071910763._1
304+ let caller = $t01071910763._2
305+ let addedDate = $t01071910763._3
301306 let checkUser = validateUser(caller)
302307 if ((checkUser != ""))
303308 then throw(checkUser)
304309 else if (!(isEventOwner(eventId, caller)))
305310 then throw("You are not the owner of this event")
306311 else {
307312 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
308313 if ((eventTotalNFT != 0))
309314 then throw("Cannot delete event with already sold tickets")
310315 else {
311316 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
312317 if ((totalTicketTypeForEvent > 0))
313318 then throw("Delete all tickets first")
314319 else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
315320 }
316321 }
317322 }
318323
319324
320325
321326 @Callable(i)
322327 func cancelEvent (eventId,reason) = {
323- let $t01183111875 = idCallerDate(i)
324- let id = $t01183111875._1
325- let caller = $t01183111875._2
326- let addedDate = $t01183111875._3
328+ let $t01210412148 = idCallerDate(i)
329+ let id = $t01210412148._1
330+ let caller = $t01210412148._2
331+ let addedDate = $t01210412148._3
327332 let checkUser = validateUser(caller)
328333 if ((checkUser != ""))
329334 then throw(checkUser)
330335 else if (!(isEventOwner(eventId, caller)))
331336 then throw("You are not the owner of this event")
332337 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
333338 }
334339
335340
336341
337342 @Callable(i)
338343 func flagEvent (eventId,addr,flag,note) = {
339- let $t01231012343 = idCallerDate(i)
340- let id = $t01231012343._1
341- let caller = $t01231012343._2
344+ let $t01258312616 = idCallerDate(i)
345+ let id = $t01258312616._1
346+ let caller = $t01258312616._2
342347 if (containsElement([chris, toString(this)], caller))
343348 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
344349 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
345350 else throw(("Unknow status " + flag))
346351 else throw("You are not allowed")
347352 }
348353
349354
350355
351356 @Callable(i)
352-func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
353- let $t01286012900 = idCallerDate(i)
354- let id = $t01286012900._1
355- let caller = $t01286012900._2
356- let date = $t01286012900._3
357+func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties,resellLimitation) = {
358+ let $t01315613196 = idCallerDate(i)
359+ let id = $t01315613196._1
360+ let caller = $t01315613196._2
361+ let date = $t01315613196._3
357362 let checkUser = validateUser(caller)
358363 if ((checkUser != ""))
359364 then throw(checkUser)
360365 else if (eventIsCanceled(caller, eventId))
361366 then throw("Event have been canceled")
362367 else if (!(isEventOwner(eventId, caller)))
363368 then throw("You are not the owner of this event")
364369 else {
365- let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
370+ let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse, resellLimitation)
366371 if ((validateTicket != ""))
367372 then throw("Something went wrong!")
368373 else {
369374 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
370-[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
375+[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties), IntegerEntry(keyTicketResellLimitation(caller, eventId, id), resellLimitation)]
371376 }
372377 }
373378 }
374379
375380
376381
377382 @Callable(i)
378-func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
379- let $t01449714537 = idCallerDate(i)
380- let id = $t01449714537._1
381- let caller = $t01449714537._2
382- let date = $t01449714537._3
383+func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties,resellLimitation) = {
384+ let $t01492014960 = idCallerDate(i)
385+ let id = $t01492014960._1
386+ let caller = $t01492014960._2
387+ let date = $t01492014960._3
383388 let checkUser = validateUser(caller)
384389 if ((checkUser != ""))
385390 then throw(checkUser)
386391 else if (!(isEventOwner(eventId, caller)))
387392 then throw("You are not the owner of this event")
388393 else if (!(ticketExist(caller, eventId, ticketId)))
389394 then throw("Ticket not found")
390395 else {
391- let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
396+ let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse, resellLimitation)
392397 if ((validateTicket != ""))
393398 then throw("Something went wrong!")
394399 else {
395400 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
396401 if ((ticketSold > maxAvailable))
397402 then throw("Max tickets available cannot be lower than amount already sold")
398- else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, ticketId), Royalties)]
403+ else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, ticketId), Royalties), IntegerEntry(keyTicketResellLimitation(caller, eventId, ticketId), resellLimitation)]
399404 }
400405 }
401406 }
402407
403408
404409
405410 @Callable(i)
406411 func pauseTicketSale (eventId,ticketId,status) = {
407- let $t01575815798 = idCallerDate(i)
408- let id = $t01575815798._1
409- let caller = $t01575815798._2
410- let date = $t01575815798._3
412+ let $t01629116331 = idCallerDate(i)
413+ let id = $t01629116331._1
414+ let caller = $t01629116331._2
415+ let date = $t01629116331._3
411416 let checkUser = validateUser(caller)
412417 if ((checkUser != ""))
413418 then throw(checkUser)
414419 else if (!(isEventOwner(eventId, caller)))
415420 then throw("You are not the owner of this event")
416421 else if (!(ticketExist(caller, eventId, ticketId)))
417422 then throw("Ticket not found")
418423 else [BooleanEntry(keyTicketOnSale(caller, eventId, ticketId), status)]
419424 }
420425
421426
422427
423428 @Callable(i)
424429 func deleteTicket (ticketId,eventId) = {
425- let $t01626116301 = idCallerDate(i)
426- let id = $t01626116301._1
427- let caller = $t01626116301._2
428- let date = $t01626116301._3
430+ let $t01679416834 = idCallerDate(i)
431+ let id = $t01679416834._1
432+ let caller = $t01679416834._2
433+ let date = $t01679416834._3
429434 let checkUser = validateUser(caller)
430435 if ((checkUser != ""))
431436 then throw(checkUser)
432437 else if (!(isEventOwner(eventId, caller)))
433438 then throw("You are not the owner of this event")
434439 else if (!(ticketExist(caller, eventId, ticketId)))
435440 then throw("Ticket not found")
436441 else {
437442 let amountSold = getIntegerByKey(keyTicketTotalIssued(caller, eventId, ticketId))
438443 if ((amountSold != 0))
439444 then throw("Cannot delete ticket that sold already")
440445 else {
441446 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
442-[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
447+[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), DeleteEntry(keyTicketResellLimitation(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
443448 }
444449 }
445450 }
446451
447452
448453
449454 @Callable(i)
450455 func buyTicket (ticketId,eventId,issuer) = {
451- let $t01760217640 = idCallerDate(i)
452- let id = $t01760217640._1
453- let caller = $t01760217640._2
454- let date = $t01760217640._3
456+ let $t01820218240 = idCallerDate(i)
457+ let id = $t01820218240._1
458+ let caller = $t01820218240._2
459+ let date = $t01820218240._3
455460 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
456461 if (!(isEventOwner(eventId, issuer)))
457462 then throw("Event ID and Issuer don't match")
458463 else if (!(ticketExist(issuer, eventId, ticketId)))
459464 then throw("Ticket not found")
460465 else {
461466 let eventName = getStringByKey(keyEventName(issuer, eventId))
462467 if ((eventName == ""))
463468 then throw("Art doesn't exist")
464469 else if (eventIsCanceled(issuer, eventId))
465470 then throw("Event have been canceled")
466471 else {
467472 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
468473 if (!(isOnSale))
469474 then throw("Tickets not for sale")
470475 else {
471476 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
472477 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
473478 let priceAssetId = toBase58String(signAssetId)
474- let $t01849318567 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475- let amount = $t01849318567._1
476- let assetId = $t01849318567._2
479+ let $t01909319167 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480+ let amount = $t01909319167._1
481+ let assetId = $t01909319167._2
477482 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
478483 let amountForSign = fraction(amount, signCut, 100)
479484 let amountForOrganizer = (amount - amountForSign)
480485 if ((amountSold == maxCanSell))
481486 then throw("Art sold out")
482487 else {
483488 let newAmountSold = (amountSold + 1)
484489 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
485490 EventID: ") + eventId) + ",
486491 TicketID: ") + ticketId) + ",
487492 EventName: ") + eventName) + ",
488493 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
489494 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
490495 let idNFT = calculateAssetId(issueNFT)
491496 let sellStatus = if ((newAmountSold == maxCanSell))
492497 then false
493498 else true
494499 let receiveNFT = i.caller
495500 let soldKey = ((((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + ticketId) + "_") + eventId) + "_") + issuer) + "_") + toBase58String(idNFT))
496501 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
497502 let soldData = StringEntry(soldKey, soldValue)
498503 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
499504 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
500505 let buyRes = [StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_tickets_issued", (totalNFT + 1)), IntegerEntry(keyEventTotalTicketsIssued(issuer, eventId), (eventTotalNFT + 1)), IntegerEntry(keyTicketTotalIssued(issuer, eventId, ticketId), newAmountSold), StringEntry((("ST_" + toString((totalNFT + 1))) + "_assetId"), ((ticketId + "_") + toBase58String(idNFT))), BooleanEntry(keyTicketOnSale(issuer, eventId, ticketId), sellStatus), IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(idNFT)), 0), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForOrganizer, assetId), ScriptTransfer(receiveNFT, 1, idNFT), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
501506 soldData :: buyRes
502507 }
503508 }
504509 }
505510 }
506511 }
507512
508513
509514
510515 @Callable(i)
511516 func useTicket () = {
512- let $t02072720765 = idCallerDate(i)
513- let id = $t02072720765._1
514- let caller = $t02072720765._2
515- let date = $t02072720765._3
516- let $t02077120807 = isPayment(i)
517- let payment = $t02077120807._1
518- let amount = $t02077120807._2
517+ let $t02132721365 = idCallerDate(i)
518+ let id = $t02132721365._1
519+ let caller = $t02132721365._2
520+ let date = $t02132721365._3
521+ let $t02137121407 = isPayment(i)
522+ let payment = $t02137121407._1
523+ let amount = $t02137121407._2
519524 if (!(isDefined(payment.assetId)))
520525 then throw("Wrong asset attached")
521526 else {
522527 let eventData = getStringByKey(("nft_" + toBase58String(value(payment.assetId))))
523528 if ((size(eventData) == 0))
524529 then throw("Something went wrong")
525530 else {
526531 let eventDataArr = split(eventData, "_")
527532 let issuer = eventDataArr[7]
528533 let eventId = eventDataArr[6]
529534 let ticketId = eventDataArr[5]
530535 if (!(ticketExist(issuer, eventId, ticketId)))
531536 then throw("Ticket not found")
532537 else {
533538 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))))
534539 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
535540 if ((maxUsingTime == amountUsed))
536541 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
537542 else {
538543 let initUseData = getStringByKey(keyTicketHistoryUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId)), "1"))
539544 let firstUseAddr = if (if (if ((maxUsingTime > 1))
540545 then (amountUsed >= 1)
541546 else false)
542547 then (initUseData != "")
543548 else false)
544549 then split(initUseData, "_")[1]
545550 else caller
546551 if ((firstUseAddr != caller))
547552 then throw("You are not the initial user of this ticket. ")
548553 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))), (amountUsed + 1)), StringEntry(keyTicketHistoryUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId)), toString((amountUsed + 1))), ((((((id + "_") + caller) + "_") + toString(date)) + "_") + toString((amountUsed + 1)))), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
549554 }
550555 }
551556 }
552557 }
553558 }
554559
555560
556561
557562 @Callable(i)
558563 func deleteEntry (entry) = {
559564 let caller = toString(i.caller)
560565 if ((caller == chris))
561566 then [DeleteEntry(entry)]
562567 else throw("no")
563568 }
564569
565570

github/deemru/w8io/169f3d6 
105.25 ms