tx · 2Lt9XTqmK62tLhMwRwXrXxvMvCPGqqyLGMBZX1v1aSnj

3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx:  -0.01600000 Waves

2023.09.09 15:01 [2747822] smart account 3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx > SELF 0.00000000 Waves

{ "type": 13, "id": "2Lt9XTqmK62tLhMwRwXrXxvMvCPGqqyLGMBZX1v1aSnj", "fee": 1600000, "feeAssetId": null, "timestamp": 1694260893466, "version": 2, "chainId": 84, "sender": "3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx", "senderPublicKey": "UGqkWsCpv7xRVXkQRXyLd6pWPDtYGXmPip7FxSd1pAu", "proofs": [ "FnJezJoTHz9JGvS5aRZ9WrUFwm3tkA1QuUbeZ7VHficJniSV9xkUAHaQ5r23kYNJWRm4tRShWS2xYyzHR1R1dZv" ], "script": "base64:BgIkCAISBwoFAQEBAQESABIAEgQKAggBEgMKAQESAwoBARIDCgEBOgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAETa2V5U2NvcmVCb2FyZEJ5VG91cgEDdElkCQCsAgICEiVzJWRfX3Njb3JlQm9hcmRfXwkApAMBBQN0SWQBEmtleVN1bVNjb3Jlc0J5VG91cgEDdElkCQCsAgICESVzJWRfX3N1bVNjb3Jlc19fCQCkAwEFA3RJZAEWa2V5VW5wYWlkUmV3YXJkc0J5VG91cgEDdElkCQCsAgICFSVzJWRfX3VucGFpZFJld2FyZHNfXwkApAMBBQN0SWQBG2tleUxhc3RSZWdpc3RlcmVkVG91ckJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIgJXMlc19fbGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrX18FC2R1Y2tBc3NldElkARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiElcyVkJXNfX2lzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BGWtleUlzQXdhcmRlZEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHiVzJWQlc19faXNBd2FyZGVkQnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEba2V5TGFzdEF0dGVtcHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiAlcyVkJXNfX2xhc3RBdHRlbXB0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BFmtleUJlc3RUeEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICGyVzJWQlc19fYmVzdFR4QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQATdFN0YXRpY1JlZ2lzdGVyQ29zdAACABJ0U3RhdGljQXR0ZW1wdENvc3QAAwAMdFN0YXRpY1N0YXJ0AAUACnRTdGF0aWNFbmQABgAQdFN0YXRpY051bUdyYW5kcwAHAA50RHluYW1pY1N0YXR1cwABAA90RHluYW1pY0xlYWRlcnMAAgARdER5bmFtaWNXaW5SZXN1bHQAAwAVdER5bmFtaWNUb3RhbFJlZ0NvdW50AAQAFXREeW5hbWljVG90YWxBdHRlbXB0cwAFAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQITTm90IGluaXRpYWxpemVkIHlldAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQRwYWRMAgN2YWwDbGVuBAR2YWxTCQCkAwEFA3ZhbAQGemVyb2VzCQCwAgIJAKQDAQkAbAYACgAACQBlAgUDbGVuCQCxAgEFBHZhbFMAAAAABQRET1dOAAEJAKwCAgUGemVyb2VzBQR2YWxTABNNQVhUT1VSTkFNRU5UTEVOR1RIAICY/80BAARIT1VSAIDd2wEACmFkbWluc0xpc3QJAMwIAgkApQgBBQR0aGlzCQDMCAIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRWUyUkVMVUhDRkNCc21TQ05jQko4TjNVUkxWUWVuZGU3AwkAAAIBAVQFByRtYXRjaDACIzNNdEJnSlRhTHhQQjNDN1VKRDFVRThxamtIdGhmS3ZGUVlZCQACAQINVW5rbm93biBjaGFpbgUDbmlsAQpzdGF0aWNEYXRhBwR0eElkDHJlZ2lzdGVyQ29zdAthdHRlbXB0Q29zdAxjcmVhdGlvblRpbWUJc3RhcnRUaW1lB2VuZFRpbWUJbnVtR3JhbmRzCQC5CQIJAMwIAgIOJXMlZCVkJWQlZCVkJWQJAMwIAgUEdHhJZAkAzAgCCQCkAwEFDHJlZ2lzdGVyQ29zdAkAzAgCCQCkAwEFC2F0dGVtcHRDb3N0CQDMCAIJAKQDAQUMY3JlYXRpb25UaW1lCQDMCAIJAKQDAQUJc3RhcnRUaW1lCQDMCAIJAKQDAQUHZW5kVGltZQkAzAgCCQCkAwEFCW51bUdyYW5kcwUDbmlsBQNTRVABC2R5bmFtaWNEYXRhBQZzdGF0dXMHbGVhZGVycwl3aW5SZXN1bHQJdG90YWxSZWdzDXRvdGFsQXR0ZW1wdHMJALoJAgkAzAgCAgolcyVzJWQlZCVkCQDMCAIFBnN0YXR1cwkAzAgCBQdsZWFkZXJzCQDMCAIJAKQDAQUJd2luUmVzdWx0CQDMCAIJAKQDAQUJdG90YWxSZWdzCQDMCAIJAKQDAQUNdG90YWxBdHRlbXB0cwUDbmlsBQNTRVABBnByb2xvZwAJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAEMZHVja0J5Q2FsbGVyAQZjYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQUGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBwFpARBjcmVhdGVUb3VybmFtZW50BQlzdGFydFRpbWUHZW5kVGltZQxyZWdpc3RlckNvc3QLYXR0ZW1wdENvc3QJbnVtR3JhbmRzBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEBmxhc3RJZAkAnwgBBQ1sYXN0VG91cklkS2V5BAN0SWQDCQEJaXNEZWZpbmVkAQUGbGFzdElkBApsYXN0VG91cklkCQEFdmFsdWUBBQZsYXN0SWQEB2R5bmFtaWMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFCmxhc3RUb3VySWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFCmxhc3RUb3VySWQCBSBkYXRhBAZzdGF0dXMJAJEDAgkAtQkCBQdkeW5hbWljBQNTRVAFDnREeW5hbWljU3RhdHVzAwkBAiE9AgUGc3RhdHVzAghBUkNISVZFRAkAAgEJAKwCAgIsQ3VycmVudCB0b3VybmVtZW50IGlzIG5vdCBjb21wbGV0ZWQsIHN0YXR1cz0FBnN0YXR1cwkAZAIFCmxhc3RUb3VySWQAAQABBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFA25vdwUJc3RhcnRUaW1lCQACAQkArAICCQCsAgIJAKwCAgIKc3RhcnRUaW1lPQkApAMBBQlzdGFydFRpbWUCECA8IGNyZWF0aW9uVGltZT0JAKQDAQUDbm93AwkAZgIFCXN0YXJ0VGltZQUHZW5kVGltZQkAAgEJAKwCAgkArAICCQCsAgICCGVuZFRpbWU9CQCkAwEFB2VuZFRpbWUCDSA8IHN0YXJ0VGltZT0JAKQDAQUJc3RhcnRUaW1lAwkAZgIJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUFE01BWFRPVVJOQU1FTlRMRU5HVEgJAAIBCQCsAgIJAKwCAgkArAICAh9Ub3VybmFtZW50IHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUCAyA+IAkApAMBBRNNQVhUT1VSTkFNRU5UTEVOR1RIAwMJAGcCAAAFDHJlZ2lzdGVyQ29zdAYJAGcCAAAFC2F0dGVtcHRDb3N0CQACAQkArAICCQCsAgIJAKwCAgIkQ29zdCBzaG91bGQgYmUgcG9zaXRpdmUsIGJ1dCBwYXNzZWQgCQCkAwEFDHJlZ2lzdGVyQ29zdAIFIGFuZCAJAKQDAQULYXR0ZW1wdENvc3QDCQBmAgAABQludW1HcmFuZHMJAAIBAi1OdW1iZXIgb2YgR3JhbmQgUHJpemVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbGFzdFRvdXJJZEtleQUDdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAQpzdGF0aWNEYXRhBwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQxyZWdpc3RlckNvc3QFC2F0dGVtcHRDb3N0BQNub3cFCXN0YXJ0VGltZQUHZW5kVGltZQUJbnVtR3JhbmRzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQELZHluYW1pY0RhdGEFAgdDUkVBVEVEAgEgAAAAAAAABQNuaWwFA3RJZAFpAQhyZWdpc3RlcgAEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCFVdMR09MRCBwYXltZW50cyBvbmx5IQMJAQIhPQIFCnBtdEFzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEEBmxhc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFDWxhc3RUb3VySWRLZXkCFU5vIGFjdGl2ZSB0b3VybmFtZW50cwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAQEhAQMDAwkAAAIFBnN0YXR1cwIHQ1JFQVRFRAkAZgIFA25vdwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUMdFN0YXRpY1N0YXJ0BwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHBgMJAAACBQZzdGF0dXMCCklOUFJPR1JFU1MJAGYCCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUESE9VUgUDbm93BwkAAgECE0Nhbm5vdCByZWdpc3RlciBub3cEB3JlZ0Nvc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFE3RTdGF0aWNSZWdpc3RlckNvc3QDCQECIT0CBQZ3bGdBbXQFB3JlZ0Nvc3QJAAIBCQCsAgIJAKwCAgIQTmVlZCBwYXltZW50IG9mIAkBCmZpeGVkUG9pbnQCBQdyZWdDb3N0AAgCByBXTEdPTEQEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBAhzY29yZUtleQkBE2tleVNjb3JlQm9hcmRCeVRvdXIBBQZsYXN0SWQEDW9sZFNjb3JlQm9hcmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIc2NvcmVLZXkCAAMDCQELdmFsdWVPckVsc2UCCQCgCAEJARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAcGCQEIY29udGFpbnMCBQ1vbGRTY29yZUJvYXJkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICCllvdXIgZHVjayAFC2R1Y2tBc3NldElkAiUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGF0IHRvdXJuYW1lbnQgCQCkAwEFBmxhc3RJZAQSdXBkYXRlZER5bmFtaWNEYXRhCQELZHluYW1pY0RhdGEFAgpJTlBST0dSRVNTCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlMYXN0UmVnaXN0ZXJlZFRvdXJCeUR1Y2sBBQtkdWNrQXNzZXRJZAUGbGFzdElkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHNjb3JlS2V5AwkAAAIFDW9sZFNjb3JlQm9hcmQCAAkArAICBQtkdWNrQXNzZXRJZAIEOjAwMAkArAICCQCsAgIJAKwCAgUNb2xkU2NvcmVCb2FyZAIBXwULZHVja0Fzc2V0SWQCBDowMDAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQZsYXN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsBQxwcm9sb2dSZXN1bHQBaQEKbmV3QXR0ZW1wdAAEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBAZsYXN0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQ1sYXN0VG91cklkS2V5AhVObyBhY3RpdmUgdG91cm5hbWVudHMEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMDCQEBIQEDCQAAAgUGc3RhdHVzAgpJTlBST0dSRVNTCQBmAgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFBEhPVVIFA25vdwcJAAIBAhdBdHRlbXB0IGlzIG5vdCBwb3NzaWJsZQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQHCQACAQkArAICCQCsAgIJAKwCAgIKWW91ciBkdWNrIAULZHVja0Fzc2V0SWQCISBpcyBub3QgcmVnaXN0ZXJlZCBhdCB0b3VybmFtZW50IAkApAMBBQZsYXN0SWQEE2F0dGVtcHRzSXRlcmF0b3JLZXkJARtrZXlMYXN0QXR0ZW1wdEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBAtsYXN0QXR0ZW1wdAkAnwgBBRNhdHRlbXB0c0l0ZXJhdG9yS2V5BAskdDA2MTExNjc0MwMJAQEhAQkBCWlzRGVmaW5lZAEFC2xhc3RBdHRlbXB0CQCUCgIAAAAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAhVXTEdPTEQgcGF5bWVudHMgb25seSEDCQECIT0CBQpwbXRBc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAdhdHRDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRJ0U3RhdGljQXR0ZW1wdENvc3QDCQECIT0CBQZ3bGdBbXQFB2F0dENvc3QJAAIBCQCsAgIJAKwCAgIQTmVlZCBwYXltZW50IG9mIAkBCmZpeGVkUG9pbnQCBQdhdHRDb3N0AAgCByBXTEdPTEQJAJQKAgkAZAIJAQV2YWx1ZQEFC2xhc3RBdHRlbXB0AAEAAQQNcGF5ZWRBdHRlbXB0cwgFCyR0MDYxMTE2NzQzAl8xBAlpbmNyZW1lbnQIBQskdDA2MTExNjc0MwJfMgQSdXBkYXRlZER5bmFtaWNEYXRhCQELZHluYW1pY0RhdGEFAgpJTlBST0dSRVNTCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbFJlZ0NvdW50CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwUJaW5jcmVtZW50BAd0b3VyTG9jCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAITaW5pdER1Y2tUb3VyQXR0ZW1wdAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTYXR0ZW1wdHNJdGVyYXRvcktleQUNcGF5ZWRBdHRlbXB0cwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFBmxhc3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwJAMwIAgUMcHJvbG9nUmVzdWx0CQDMCAIFDXBheWVkQXR0ZW1wdHMJAMwIAgUHdG91ckxvYwUDbmlsAWkBDnNhdmVEdWNrUmVzdWx0AgtkdWNrQXNzZXRJZAtkdWNrTmV3QmVzdAMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQGbGFzdElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUNbGFzdFRvdXJJZEtleQIVTm8gYWN0aXZlIHRvdXJuYW1lbnRzBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQNYmVzdFJlc3VsdEtleQkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAQMc3VtU2NvcmVzS2V5CQESa2V5U3VtU2NvcmVzQnlUb3VyAQUGbGFzdElkBAxvbGRTdW1TY29yZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUMc3VtU2NvcmVzS2V5AAADCQEOaXNJblRvdXJuYW1lbnQCBQR0aGlzBQtjdXJMb2NhdGlvbgQLZHVja09sZEJlc3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYmVzdFJlc3VsdEtleQAABAhzY29yZUtleQkBE2tleVNjb3JlQm9hcmRCeVRvdXIBBQZsYXN0SWQEDW9sZFNjb3JlQm9hcmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIc2NvcmVLZXkCAAQLJHQwODIzNjkzOTcDCQBmAgULZHVja05ld0Jlc3QFC2R1Y2tPbGRCZXN0AwkBASEBCQEIY29udGFpbnMCBQ1vbGRTY29yZUJvYXJkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgIcc2NvcmVCb2FyZCBkb2VzIG5vdCBjb250YWluIAULZHVja0Fzc2V0SWQEB29sZEJlc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAQHbGVhZGVycwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMEDm9sZExlYWRlcnNMaXN0AwMJAAACBQdsZWFkZXJzAgAGCQAAAgUHbGVhZGVycwIBIAUDbmlsCQC8CQIFB2xlYWRlcnMCASwEDm5ld0xlYWRlcnNMaXN0AwkAZgIFC2R1Y2tOZXdCZXN0BQdvbGRCZXN0CQDMCAIFC2R1Y2tBc3NldElkBQNuaWwDAwkAZgIFB29sZEJlc3QFC2R1Y2tOZXdCZXN0BgkBD2NvbnRhaW5zRWxlbWVudAIFDm9sZExlYWRlcnNMaXN0BQtkdWNrQXNzZXRJZAUOb2xkTGVhZGVyc0xpc3QJAM0IAgUOb2xkTGVhZGVyc0xpc3QFC2R1Y2tBc3NldElkBBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCCklOUFJPR1JFU1MJALoJAgUObmV3TGVhZGVyc0xpc3QCASwJAJYDAQkAzAgCBQtkdWNrTmV3QmVzdAkAzAgCBQdvbGRCZXN0BQNuaWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMEBXBhcnRzCQC9CQIFDW9sZFNjb3JlQm9hcmQFC2R1Y2tBc3NldElkCQCVCgMJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQVwYXJ0cwAABQtkdWNrQXNzZXRJZAIBOgkBBHBhZEwCBQtkdWNrTmV3QmVzdAADCQCwAgIJAJEDAgUFcGFydHMAAQAECQBlAgkAZAIFDG9sZFN1bVNjb3JlcwULZHVja05ld0Jlc3QFC2R1Y2tPbGRCZXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUGbGFzdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAkAlQoDBQ1vbGRTY29yZUJvYXJkBQxvbGRTdW1TY29yZXMFA25pbAQNbmV3U2NvcmVCb2FyZAgFCyR0MDgyMzY5Mzk3Al8xBAxuZXdTdW1TY29yZXMIBQskdDA4MjM2OTM5NwJfMgQNZ2xvYmFsQWN0aW9ucwgFCyR0MDgyMzY5Mzk3Al8zCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNYmVzdFJlc3VsdEtleQkAlgMBCQDMCAIFC2R1Y2tPbGRCZXN0CQDMCAIFC2R1Y2tOZXdCZXN0BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDHN1bVNjb3Jlc0tleQUMbmV3U3VtU2NvcmVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlCZXN0VHhCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHNjb3JlS2V5BQ1uZXdTY29yZUJvYXJkBQNuaWwFDWdsb2JhbEFjdGlvbnMAAAkAlAoCBQNuaWwAAAFpARFwcm9jZXNzVG91cm5hbWVudAEDdElkBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMEDXJlZ2lzdHJhdGlvbnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQEDHBhaWRBdHRlbXB0cwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwQHcmVnQ29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUTdFN0YXRpY1JlZ2lzdGVyQ29zdAQHYXR0Q29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUSdFN0YXRpY0F0dGVtcHRDb3N0AwkAAAIFBnN0YXR1cwIIQVJDSElWRUQJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhQgaXMgYWxyZWFkeSBBUkNISVZFRAMDCQAAAgUGc3RhdHVzAgpJTlBST0dSRVNTCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgEJAKwCAgkArAICAgtUb3VybmFtZW50IAkApAMBBQN0SWQCECBpcyBub3Qgb3ZlciB5ZXQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKUFJPQ0VTU0lORwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAUNcmVnaXN0cmF0aW9ucwUMcGFpZEF0dGVtcHRzCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVVucGFpZFJld2FyZHNCeVRvdXIBBQN0SWQJAGkCCQBkAgkAaAIFDXJlZ2lzdHJhdGlvbnMFB3JlZ0Nvc3QJAGgCBQxwYWlkQXR0ZW1wdHMFB2F0dENvc3QAAgUDbmlsAAABaQEQZmluaXNoVG91cm5hbWVudAEDdElkBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQN0SWQEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAAACBQZzdGF0dXMCCEFSQ0hJVkVECQACAQkArAICCQCsAgICC1RvdXJuYW1lbnQgCQCkAwEFA3RJZAIUIGlzIGFscmVhZHkgQVJDSElWRUQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIIQVJDSElWRUQJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwURdER5bmFtaWNXaW5SZXN1bHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwAAAFpAQpjbGFpbVByaXplAQN0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFA3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAQIhPQIFBnN0YXR1cwIKUFJPQ0VTU0lORwkAAgEJAKwCAgkArAICAgtUb3VybmFtZW50IAkApAMBBQN0SWQCEiBpcyBub3QgUFJPQ0VTU0lORwQNcmVnaXN0cmF0aW9ucwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAQMcGFpZEF0dGVtcHRzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzBAdyZWdDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRN0U3RhdGljUmVnaXN0ZXJDb3N0BAdhdHRDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRJ0U3RhdGljQXR0ZW1wdENvc3QECmF3YXJkRnVuZHMJAGkCCQBkAgkAaAIFDXJlZ2lzdHJhdGlvbnMFB3JlZ0Nvc3QJAGgCBQxwYWlkQXR0ZW1wdHMFB2F0dENvc3QAAgQJdW5wYWlkS2V5CQEWa2V5VW5wYWlkUmV3YXJkc0J5VG91cgEFA3RJZAQLdW5wYWlkRnVuZHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJdW5wYWlkS2V5AAAEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyAwkBASEBCQELdmFsdWVPckVsc2UCCQCgCAEJARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAcJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIhIGlzIG5vdCByZWdpc3RlcmVkIGF0IHRvdXJuYW1lbnQgCQCkAwEFA3RJZAQNYmVzdFJlc3VsdEtleQkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAQIZHVja0Jlc3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYmVzdFJlc3VsdEtleQAAAwkAAAIFCGR1Y2tCZXN0AAAJAAIBAhhZb3VyIGR1Y2sgZ290IHplcm8gc2NvcmUECmF3YXJkZWRLZXkJARlrZXlJc0F3YXJkZWRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAMJAQt2YWx1ZU9yRWxzZQIJAKAIAQUKYXdhcmRlZEtleQcJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIiIGlzIGFscmVhZHkgYXdhcmRlZCBhdCB0b3VybmFtZW50IAkApAMBBQN0SWQEDHN1bVNjb3Jlc0tleQkBEmtleVN1bVNjb3Jlc0J5VG91cgEFA3RJZAQJc3VtU2NvcmVzCQELdmFsdWVPckVsc2UCCQCfCAEFDHN1bVNjb3Jlc0tleQAABAdsZWFkZXJzCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwQLbGVhZGVyc0xpc3QDAwkAAAIFB2xlYWRlcnMCAAYJAAACBQdsZWFkZXJzAgEgBQNuaWwJALwJAgUHbGVhZGVycwIBLAQKbnVtTGVhZGVycwkAkAMBBQtsZWFkZXJzTGlzdAMJAAACBQpudW1MZWFkZXJzAAAJAAIBCQCsAgICGU5vIGxlYWRlcnMgYXQgdG91cm5hbWVudCAJAKQDAQUDdElkBAludW1HcmFuZHMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFEHRTdGF0aWNOdW1HcmFuZHMECXdpblJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0BA9zdW1MZWFkZXJTY29yZXMDCQBmAgUKbnVtTGVhZGVycwUJbnVtR3JhbmRzAAADCQEPY29udGFpbnNFbGVtZW50AgULbGVhZGVyc0xpc3QFC2R1Y2tBc3NldElkCQACAQIwQXMgb25lIG9mIHdpbm5lcnMsIHlvdSB3aWxsIGJlIGF3YXJkZWQgYnkgYWRtaW5zCQBoAgUKbnVtTGVhZGVycwUJd2luUmVzdWx0BAp5b3VyQW1vdW50CQCXAwEJAMwIAgkAawMFCGR1Y2tCZXN0BQphd2FyZEZ1bmRzCQBlAgUJc3VtU2NvcmVzBQ9zdW1MZWFkZXJTY29yZXMJAMwIAgULdW5wYWlkRnVuZHMFA25pbAQPbmV3VW5wYWlkQW1vdW50CQBlAgULdW5wYWlkRnVuZHMFCnlvdXJBbW91bnQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIIQVJDSElWRUQJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzBQl3aW5SZXN1bHQFDXJlZ2lzdHJhdGlvbnMFDHBhaWRBdHRlbXB0cwQNYXJjaGl2ZUFjdGlvbgMJAGcCAAAFD25ld1VucGFpZEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp5b3VyQW1vdW50BQp3bGdBc3NldElkCQDMCAIJAQxCb29sZWFuRW50cnkCBQphd2FyZGVkS2V5BgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJdW5wYWlkS2V5BQ9uZXdVbnBhaWRBbW91bnQFA25pbAUNYXJjaGl2ZUFjdGlvbgAAAKn1K5I=", "height": 2747822, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 96Bmj119hwHbRa5eShmBtahyEDE4gF8wAHN4T1eJP8WE Next: EZ4kBb9K3CutSR6FmBJFZp21GaMA279xL5CNfgBgHKYe Diff:
OldNewDifferences
272272 then throw((("Need payment of " + aq(aZ, 8)) + " WLGOLD"))
273273 else {
274274 let g = aR(aT.originCaller)
275- let ba = valueOrElse(getString(l(M)), "")
275+ let ba = l(M)
276+ let bb = valueOrElse(getString(ba), "")
276277 if (if (valueOrElse(getBoolean(p(M, g)), false))
277278 then true
278- else contains(ba, g))
279+ else contains(bb, g))
279280 then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(M)))
280281 else {
281- let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
282- $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(l(M), if ((ba == ""))
282+ let bc = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
283+ $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(ba, if ((bb == ""))
283284 then (g + ":000")
284- else (((ba + "_") + g) + ":000")), StringEntry(k(M), bb)], aV)
285+ else (((bb + "_") + g) + ":000")), StringEntry(k(M), bc)], aV)
285286 }
286287 }
287288 }
308309 else if (!(valueOrElse(getBoolean(p(M, g)), false)))
309310 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(M)))
310311 else {
311- let bc = r(M, g)
312- let bd = getInteger(bc)
313- let be = if (!(isDefined(bd)))
312+ let bd = r(M, g)
313+ let be = getInteger(bd)
314+ let bf = if (!(isDefined(be)))
314315 then $Tuple2(0, 0)
315316 else if ((size(aT.payments) != 1))
316317 then throw("exactly 1 payment must be attached")
321322 if ((aY != ak))
322323 then throw("WLGOLD payments only!")
323324 else {
324- let bf = parseIntValue(I[x])
325- if ((aX != bf))
326- then throw((("Need payment of " + aq(bf, 8)) + " WLGOLD"))
327- else $Tuple2((value(bd) + 1), 1)
325+ let bg = parseIntValue(I[x])
326+ if ((aX != bg))
327+ then throw((("Need payment of " + aq(bg, 8)) + " WLGOLD"))
328+ else $Tuple2((value(be) + 1), 1)
328329 }
329330 }
330- let bg = be._1
331- let bh = be._2
332- let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bh))
333- let bi = al(invoke(ah, "initDuckTourAttempt", [g], nil))
334- $Tuple2([IntegerEntry(bc, bg), StringEntry(k(M), bb)], [aV, bg, bi])
331+ let bh = bf._1
332+ let bi = bf._2
333+ let bc = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bi))
334+ let bj = al(invoke(ah, "initDuckTourAttempt", [g], nil))
335+ $Tuple2([IntegerEntry(bd, bh), StringEntry(k(M), bc)], [aV, bh, bj])
335336 }
336337 }
337338
338339
339340
340341 @Callable(aT)
341-func saveDuckResult (g,bj) = if ((aT.caller != ah))
342+func saveDuckResult (g,bk) = if ((aT.caller != ah))
342343 then throw("Access denied")
343344 else {
344345 let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
345346 let P = G(this, M)
346347 let I = P[u]
347348 let J = P[v]
348- let bk = valueOrElse(getString(ah, f(g)), a)
349- let bl = s(M, g)
350- let bm = m(M)
351- let bn = valueOrElse(getInteger(bm), 0)
352- if (K(this, bk))
349+ let bl = valueOrElse(getString(ah, f(g)), a)
350+ let bm = s(M, g)
351+ let bn = m(M)
352+ let bo = valueOrElse(getInteger(bn), 0)
353+ if (K(this, bl))
353354 then {
354- let bo = valueOrElse(getInteger(bl), 0)
355- let bp = l(M)
356- let ba = valueOrElse(getString(bp), "")
357- let bq = if ((bj > bo))
358- then if (!(contains(ba, g)))
355+ let bp = valueOrElse(getInteger(bm), 0)
356+ let ba = l(M)
357+ let bb = valueOrElse(getString(ba), "")
358+ let bq = if ((bk > bp))
359+ then if (!(contains(bb, g)))
359360 then throw(("scoreBoard does not contain " + g))
360361 else {
361362 let br = parseIntValue(J[D])
365366 else (aM == " "))
366367 then nil
367368 else split_4C(aM, ",")
368- let bt = if ((bj > br))
369+ let bt = if ((bk > br))
369370 then [g]
370- else if (if ((br > bj))
371+ else if (if ((br > bk))
371372 then true
372373 else containsElement(bs, g))
373374 then bs
374375 else (bs :+ g)
375- let bb = aK("INPROGRESS", makeString_2C(bt, ","), max([bj, br]), parseIntValue(J[E]), parseIntValue(J[F]))
376- let bu = split_51C(ba, g)
377- $Tuple3(((((bu[0] + g) + ":") + aw(bj, 3)) + drop(bu[1], 4)), ((bn + bj) - bo), [StringEntry(k(M), bb)])
376+ let bc = aK("INPROGRESS", makeString_2C(bt, ","), max([bk, br]), parseIntValue(J[E]), parseIntValue(J[F]))
377+ let bu = split_51C(bb, g)
378+ $Tuple3(((((bu[0] + g) + ":") + aw(bk, 3)) + drop(bu[1], 4)), ((bo + bk) - bp), [StringEntry(k(M), bc)])
378379 }
379- else $Tuple3(ba, bn, nil)
380+ else $Tuple3(bb, bo, nil)
380381 let bv = bq._1
381382 let bw = bq._2
382383 let bx = bq._3
383- $Tuple2(([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(bp, bv)] ++ bx), 0)
384+ $Tuple2(([IntegerEntry(bm, max([bp, bk])), IntegerEntry(bn, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(ba, bv)] ++ bx), 0)
384385 }
385386 else $Tuple2(nil, 0)
386387 }
401402 let by = parseIntValue(J[E])
402403 let bz = parseIntValue(J[F])
403404 let aZ = parseIntValue(I[w])
404- let bf = parseIntValue(I[x])
405+ let bg = parseIntValue(I[x])
405406 if ((aL == "ARCHIVED"))
406407 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
407408 else if (if ((aL == "INPROGRESS"))
409410 else false)
410411 then throw((("Tournament " + toString(j)) + " is not over yet"))
411412 else {
412- let bb = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
413- $Tuple2([StringEntry(k(j), bb), IntegerEntry(n(j), (((by * aZ) + (bz * bf)) / 2))], 0)
413+ let bc = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
414+ $Tuple2([StringEntry(k(j), bc), IntegerEntry(n(j), (((by * aZ) + (bz * bg)) / 2))], 0)
414415 }
415416 }
416417 }
429430 if ((aL == "ARCHIVED"))
430431 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
431432 else {
432- let bb = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
433- $Tuple2([StringEntry(k(j), bb)], 0)
433+ let bc = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
434+ $Tuple2([StringEntry(k(j), bc)], 0)
434435 }
435436 }
436437 }
453454 let by = parseIntValue(J[E])
454455 let bz = parseIntValue(J[F])
455456 let aZ = parseIntValue(I[w])
456- let bf = parseIntValue(I[x])
457- let bA = (((by * aZ) + (bz * bf)) / 2)
457+ let bg = parseIntValue(I[x])
458+ let bA = (((by * aZ) + (bz * bg)) / 2)
458459 let bB = n(j)
459460 let bC = valueOrElse(getInteger(bB), 0)
460461 let g = aR(aT.originCaller)
461- let bD = valueOrElse(getString(l(j)), "")
462462 if (!(valueOrElse(getBoolean(p(j, g)), false)))
463463 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
464464 else {
465- let bl = s(j, g)
466- let bE = valueOrElse(getInteger(bl), 0)
467- if ((bE == 0))
465+ let bm = s(j, g)
466+ let bD = valueOrElse(getInteger(bm), 0)
467+ if ((bD == 0))
468468 then throw("Your duck got zero score")
469469 else {
470- let bF = q(j, g)
471- if (valueOrElse(getBoolean(bF), false))
470+ let bE = q(j, g)
471+ if (valueOrElse(getBoolean(bE), false))
472472 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
473473 else {
474- let bm = m(j)
475- let bG = valueOrElse(getInteger(bm), 0)
474+ let bn = m(j)
475+ let bF = valueOrElse(getInteger(bn), 0)
476476 let aM = J[C]
477- let bH = if (if ((aM == ""))
477+ let bG = if (if ((aM == ""))
478478 then true
479479 else (aM == " "))
480480 then nil
481481 else split_4C(aM, ",")
482- let bI = size(bH)
483- if ((bI == 0))
482+ let bH = size(bG)
483+ if ((bH == 0))
484484 then throw(("No leaders at tournament " + toString(j)))
485485 else {
486486 let aJ = parseIntValue(I[A])
487487 let aN = parseIntValue(J[D])
488- let bJ = if ((bI > aJ))
488+ let bI = if ((bH > aJ))
489489 then 0
490- else if (containsElement(bH, g))
490+ else if (containsElement(bG, g))
491491 then throw("As one of winners, you will be awarded by admins")
492- else (bI * aN)
493- let bK = min([fraction(bE, bA, (bG - bJ)), bC])
494- let bL = (bC - bK)
495- let bb = aK("ARCHIVED", J[C], aN, by, bz)
496- let bM = if ((0 >= bL))
497- then [StringEntry(k(j), bb)]
492+ else (bH * aN)
493+ let bJ = min([fraction(bD, bA, (bF - bI)), bC])
494+ let bK = (bC - bJ)
495+ let bc = aK("ARCHIVED", J[C], aN, by, bz)
496+ let bL = if ((0 >= bK))
497+ then [StringEntry(k(j), bc)]
498498 else nil
499- $Tuple2(([ScriptTransfer(aT.caller, bK, ak), BooleanEntry(bF, true), IntegerEntry(bB, bL)] ++ bM), 0)
499+ $Tuple2(([ScriptTransfer(aT.caller, bJ, ak), BooleanEntry(bE, true), IntegerEntry(bB, bK)] ++ bL), 0)
500500 }
501501 }
502502 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "Africa_F_Africa"
55
66 let b = 0
77
88 let c = 1
99
1010 func d (e) = ("stakedDuckByOwner_" + e)
1111
1212
1313 func f (g) = ("duckLocation_" + g)
1414
1515
1616 let h = "%s__lastTourId"
1717
1818 func i (j) = ("%s%d__tourStaticData__" + toString(j))
1919
2020
2121 func k (j) = ("%s%d__tourDynamicData__" + toString(j))
2222
2323
2424 func l (j) = ("%s%d__scoreBoard__" + toString(j))
2525
2626
2727 func m (j) = ("%s%d__sumScores__" + toString(j))
2828
2929
3030 func n (j) = ("%s%d__unpaidRewards__" + toString(j))
3131
3232
3333 func o (g) = ("%s%s__lastRegisteredTourByDuck__" + g)
3434
3535
3636 func p (j,g) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(j), g], "__")
3737
3838
3939 func q (j,g) = makeString(["%s%d%s__isAwardedByTourAndDuck", toString(j), g], "__")
4040
4141
4242 func r (j,g) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(j), g], "__")
4343
4444
4545 func s (j,g) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(j), g], "__")
4646
4747
4848 func t (j,g) = makeString(["%s%d%s__bestTxByTourAndDuck", toString(j), g], "__")
4949
5050
5151 let u = 0
5252
5353 let v = 1
5454
5555 let w = 2
5656
5757 let x = 3
5858
5959 let y = 5
6060
6161 let z = 6
6262
6363 let A = 7
6464
6565 let B = 1
6666
6767 let C = 2
6868
6969 let D = 3
7070
7171 let E = 4
7272
7373 let F = 5
7474
7575 func G (H,j) = {
7676 let I = split(valueOrErrorMessage(getString(H, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
7777 let J = split_4C(valueOrErrorMessage(getString(H, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
7878 [I, J]
7979 }
8080
8181
8282 func K (H,L) = {
8383 let M = valueOrElse(getInteger(H, h), 0)
8484 let N = split(L, "_")
8585 let O = lastBlock.timestamp
8686 let P = G(H, M)
8787 let I = P[u]
8888 let J = P[v]
8989 if (if (if ((N[c] == "T"))
9090 then (parseIntValue(N[b]) == M)
9191 else false)
9292 then (J[B] == "INPROGRESS")
9393 else false)
9494 then (parseIntValue(I[z]) > O)
9595 else false
9696 }
9797
9898
9999 let Q = take(drop(this.bytes, 1), 1)
100100
101101 let R = {
102102 let S = Q
103103 if ((base58'2W' == S))
104104 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
105105 else if ((base58'2T' == S))
106106 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
107107 else throw("Unknown chain")
108108 }
109109
110110 let T = "__"
111111
112112 func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], ""))
113113
114114
115115 let X = 1
116116
117117 let Y = 4
118118
119119 func Z () = "%s__restConfig"
120120
121121
122122 func aa () = "%s__restAddr"
123123
124124
125125 func ab (ac) = split_4C(U(ac, Z()), T)
126126
127127
128128 func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af)))
129129
130130
131131 let ag = addressFromStringValue(valueOrElse(getString(this, aa()), R))
132132
133133 let ae = ab(ag)
134134
135135 let ah = ad(ae, X)
136136
137137 let ai = ad(ae, Y)
138138
139139 let aj = "wlg_assetId"
140140
141141 let ak = valueOrErrorMessage(getBinary(ai, aj), "Not initialized yet")
142142
143143 func al (am) = {
144144 let S = am
145145 if ($isInstanceOf(S, "String"))
146146 then {
147147 let an = S
148148 an
149149 }
150150 else throw("fail to cast into String")
151151 }
152152
153153
154154 func ao (am) = {
155155 let S = am
156156 if ($isInstanceOf(S, "Int"))
157157 then {
158158 let ap = S
159159 ap
160160 }
161161 else throw("fail to cast into Int")
162162 }
163163
164164
165165 func aq (ar,as) = {
166166 let at = pow(10, 0, as, 0, 0, DOWN)
167167 let au = toString((ar % at))
168168 let av = drop(toString(at), (1 + size(au)))
169169 (((toString((ar / at)) + ".") + av) + au)
170170 }
171171
172172
173173 func aw (ar,ax) = {
174174 let ay = toString(ar)
175175 let av = drop(toString(pow(10, 0, (ax - size(ay)), 0, 0, DOWN)), 1)
176176 (av + ay)
177177 }
178178
179179
180180 let az = 432000000
181181
182182 let aA = 3600000
183183
184184 let aB = [toString(this), {
185185 let S = Q
186186 if ((base58'2W' == S))
187187 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
188188 else if ((base58'2T' == S))
189189 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
190190 else throw("Unknown chain")
191191 }]
192192
193193 func aC (aD,aE,aF,aG,aH,aI,aJ) = makeString(["%s%d%d%d%d%d%d", aD, toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], T)
194194
195195
196196 func aK (aL,aM,aN,aO,aP) = makeString_2C(["%s%s%d%d%d", aL, aM, toString(aN), toString(aO), toString(aP)], T)
197197
198198
199199 func aQ () = ao(invoke(ah, "saveLastTx", nil, nil))
200200
201201
202202 func aR (aS) = valueOrErrorMessage(getString(ah, d(toString(aS))), "You don't have a duck staked")
203203
204204
205205 @Callable(aT)
206206 func createTournament (aH,aI,aE,aF,aJ) = {
207207 let aS = toString(aT.caller)
208208 if (!(containsElement(aB, aS)))
209209 then throw("Permission denied")
210210 else {
211211 let M = getInteger(h)
212212 let j = if (isDefined(M))
213213 then {
214214 let aU = value(M)
215215 let J = valueOrErrorMessage(getString(k(aU)), (("Error reading tournament " + toString(aU)) + " data"))
216216 let aL = split(J, T)[B]
217217 if ((aL != "ARCHIVED"))
218218 then throw(("Current tournement is not completed, status=" + aL))
219219 else (aU + 1)
220220 }
221221 else 1
222222 let O = lastBlock.timestamp
223223 if ((O > aH))
224224 then throw(((("startTime=" + toString(aH)) + " < creationTime=") + toString(O)))
225225 else if ((aH > aI))
226226 then throw(((("endTime=" + toString(aI)) + " < startTime=") + toString(aH)))
227227 else if (((aI - aH) > az))
228228 then throw(((("Tournament period exceeds max: " + toString((aI - aH))) + " > ") + toString(az)))
229229 else if (if ((0 >= aE))
230230 then true
231231 else (0 >= aF))
232232 then throw(((("Cost should be positive, but passed " + toString(aE)) + " and ") + toString(aF)))
233233 else if ((0 > aJ))
234234 then throw("Number of Grand Prizes should be non-negative")
235235 else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aC(toBase58String(aT.transactionId), aE, aF, O, aH, aI, aJ)), StringEntry(k(j), aK("CREATED", " ", 0, 0, 0))], j)
236236 }
237237 }
238238
239239
240240
241241 @Callable(aT)
242242 func register () = {
243243 let aV = aQ()
244244 if ((size(aT.payments) != 1))
245245 then throw("exactly 1 payment must be attached")
246246 else {
247247 let aW = aT.payments[0]
248248 let aX = aW.amount
249249 let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
250250 if ((aY != ak))
251251 then throw("WLGOLD payments only!")
252252 else {
253253 let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
254254 let O = lastBlock.timestamp
255255 let P = G(this, M)
256256 let I = P[u]
257257 let J = P[v]
258258 let aL = J[B]
259259 if (!(if (if (if ((aL == "CREATED"))
260260 then (O > parseIntValue(I[y]))
261261 else false)
262262 then ((parseIntValue(I[z]) - aA) > O)
263263 else false)
264264 then true
265265 else if ((aL == "INPROGRESS"))
266266 then ((parseIntValue(I[z]) - aA) > O)
267267 else false))
268268 then throw("Cannot register now")
269269 else {
270270 let aZ = parseIntValue(I[w])
271271 if ((aX != aZ))
272272 then throw((("Need payment of " + aq(aZ, 8)) + " WLGOLD"))
273273 else {
274274 let g = aR(aT.originCaller)
275- let ba = valueOrElse(getString(l(M)), "")
275+ let ba = l(M)
276+ let bb = valueOrElse(getString(ba), "")
276277 if (if (valueOrElse(getBoolean(p(M, g)), false))
277278 then true
278- else contains(ba, g))
279+ else contains(bb, g))
279280 then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(M)))
280281 else {
281- let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
282- $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(l(M), if ((ba == ""))
282+ let bc = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
283+ $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(ba, if ((bb == ""))
283284 then (g + ":000")
284- else (((ba + "_") + g) + ":000")), StringEntry(k(M), bb)], aV)
285+ else (((bb + "_") + g) + ":000")), StringEntry(k(M), bc)], aV)
285286 }
286287 }
287288 }
288289 }
289290 }
290291 }
291292
292293
293294
294295 @Callable(aT)
295296 func newAttempt () = {
296297 let aV = aQ()
297298 let g = aR(aT.originCaller)
298299 let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
299300 let O = lastBlock.timestamp
300301 let P = G(this, M)
301302 let I = P[u]
302303 let J = P[v]
303304 let aL = J[B]
304305 if (!(if ((aL == "INPROGRESS"))
305306 then ((parseIntValue(I[z]) - aA) > O)
306307 else false))
307308 then throw("Attempt is not possible")
308309 else if (!(valueOrElse(getBoolean(p(M, g)), false)))
309310 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(M)))
310311 else {
311- let bc = r(M, g)
312- let bd = getInteger(bc)
313- let be = if (!(isDefined(bd)))
312+ let bd = r(M, g)
313+ let be = getInteger(bd)
314+ let bf = if (!(isDefined(be)))
314315 then $Tuple2(0, 0)
315316 else if ((size(aT.payments) != 1))
316317 then throw("exactly 1 payment must be attached")
317318 else {
318319 let aW = aT.payments[0]
319320 let aX = aW.amount
320321 let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
321322 if ((aY != ak))
322323 then throw("WLGOLD payments only!")
323324 else {
324- let bf = parseIntValue(I[x])
325- if ((aX != bf))
326- then throw((("Need payment of " + aq(bf, 8)) + " WLGOLD"))
327- else $Tuple2((value(bd) + 1), 1)
325+ let bg = parseIntValue(I[x])
326+ if ((aX != bg))
327+ then throw((("Need payment of " + aq(bg, 8)) + " WLGOLD"))
328+ else $Tuple2((value(be) + 1), 1)
328329 }
329330 }
330- let bg = be._1
331- let bh = be._2
332- let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bh))
333- let bi = al(invoke(ah, "initDuckTourAttempt", [g], nil))
334- $Tuple2([IntegerEntry(bc, bg), StringEntry(k(M), bb)], [aV, bg, bi])
331+ let bh = bf._1
332+ let bi = bf._2
333+ let bc = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bi))
334+ let bj = al(invoke(ah, "initDuckTourAttempt", [g], nil))
335+ $Tuple2([IntegerEntry(bd, bh), StringEntry(k(M), bc)], [aV, bh, bj])
335336 }
336337 }
337338
338339
339340
340341 @Callable(aT)
341-func saveDuckResult (g,bj) = if ((aT.caller != ah))
342+func saveDuckResult (g,bk) = if ((aT.caller != ah))
342343 then throw("Access denied")
343344 else {
344345 let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
345346 let P = G(this, M)
346347 let I = P[u]
347348 let J = P[v]
348- let bk = valueOrElse(getString(ah, f(g)), a)
349- let bl = s(M, g)
350- let bm = m(M)
351- let bn = valueOrElse(getInteger(bm), 0)
352- if (K(this, bk))
349+ let bl = valueOrElse(getString(ah, f(g)), a)
350+ let bm = s(M, g)
351+ let bn = m(M)
352+ let bo = valueOrElse(getInteger(bn), 0)
353+ if (K(this, bl))
353354 then {
354- let bo = valueOrElse(getInteger(bl), 0)
355- let bp = l(M)
356- let ba = valueOrElse(getString(bp), "")
357- let bq = if ((bj > bo))
358- then if (!(contains(ba, g)))
355+ let bp = valueOrElse(getInteger(bm), 0)
356+ let ba = l(M)
357+ let bb = valueOrElse(getString(ba), "")
358+ let bq = if ((bk > bp))
359+ then if (!(contains(bb, g)))
359360 then throw(("scoreBoard does not contain " + g))
360361 else {
361362 let br = parseIntValue(J[D])
362363 let aM = J[C]
363364 let bs = if (if ((aM == ""))
364365 then true
365366 else (aM == " "))
366367 then nil
367368 else split_4C(aM, ",")
368- let bt = if ((bj > br))
369+ let bt = if ((bk > br))
369370 then [g]
370- else if (if ((br > bj))
371+ else if (if ((br > bk))
371372 then true
372373 else containsElement(bs, g))
373374 then bs
374375 else (bs :+ g)
375- let bb = aK("INPROGRESS", makeString_2C(bt, ","), max([bj, br]), parseIntValue(J[E]), parseIntValue(J[F]))
376- let bu = split_51C(ba, g)
377- $Tuple3(((((bu[0] + g) + ":") + aw(bj, 3)) + drop(bu[1], 4)), ((bn + bj) - bo), [StringEntry(k(M), bb)])
376+ let bc = aK("INPROGRESS", makeString_2C(bt, ","), max([bk, br]), parseIntValue(J[E]), parseIntValue(J[F]))
377+ let bu = split_51C(bb, g)
378+ $Tuple3(((((bu[0] + g) + ":") + aw(bk, 3)) + drop(bu[1], 4)), ((bo + bk) - bp), [StringEntry(k(M), bc)])
378379 }
379- else $Tuple3(ba, bn, nil)
380+ else $Tuple3(bb, bo, nil)
380381 let bv = bq._1
381382 let bw = bq._2
382383 let bx = bq._3
383- $Tuple2(([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(bp, bv)] ++ bx), 0)
384+ $Tuple2(([IntegerEntry(bm, max([bp, bk])), IntegerEntry(bn, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(ba, bv)] ++ bx), 0)
384385 }
385386 else $Tuple2(nil, 0)
386387 }
387388
388389
389390
390391 @Callable(aT)
391392 func processTournament (j) = {
392393 let aS = toString(aT.caller)
393394 if (!(containsElement(aB, aS)))
394395 then throw("Permission denied")
395396 else {
396397 let O = lastBlock.timestamp
397398 let P = G(this, j)
398399 let I = P[u]
399400 let J = P[v]
400401 let aL = J[B]
401402 let by = parseIntValue(J[E])
402403 let bz = parseIntValue(J[F])
403404 let aZ = parseIntValue(I[w])
404- let bf = parseIntValue(I[x])
405+ let bg = parseIntValue(I[x])
405406 if ((aL == "ARCHIVED"))
406407 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
407408 else if (if ((aL == "INPROGRESS"))
408409 then (parseIntValue(I[z]) > O)
409410 else false)
410411 then throw((("Tournament " + toString(j)) + " is not over yet"))
411412 else {
412- let bb = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
413- $Tuple2([StringEntry(k(j), bb), IntegerEntry(n(j), (((by * aZ) + (bz * bf)) / 2))], 0)
413+ let bc = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
414+ $Tuple2([StringEntry(k(j), bc), IntegerEntry(n(j), (((by * aZ) + (bz * bg)) / 2))], 0)
414415 }
415416 }
416417 }
417418
418419
419420
420421 @Callable(aT)
421422 func finishTournament (j) = {
422423 let aS = toString(aT.caller)
423424 if (!(containsElement(aB, aS)))
424425 then throw("Permission denied")
425426 else {
426427 let P = G(this, j)
427428 let J = P[v]
428429 let aL = J[B]
429430 if ((aL == "ARCHIVED"))
430431 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
431432 else {
432- let bb = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
433- $Tuple2([StringEntry(k(j), bb)], 0)
433+ let bc = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
434+ $Tuple2([StringEntry(k(j), bc)], 0)
434435 }
435436 }
436437 }
437438
438439
439440
440441 @Callable(aT)
441442 func claimPrize (j) = {
442443 let aV = aQ()
443444 if ((size(aT.payments) != 0))
444445 then throw("No payments required")
445446 else {
446447 let P = G(this, j)
447448 let I = P[u]
448449 let J = P[v]
449450 let aL = J[B]
450451 if ((aL != "PROCESSING"))
451452 then throw((("Tournament " + toString(j)) + " is not PROCESSING"))
452453 else {
453454 let by = parseIntValue(J[E])
454455 let bz = parseIntValue(J[F])
455456 let aZ = parseIntValue(I[w])
456- let bf = parseIntValue(I[x])
457- let bA = (((by * aZ) + (bz * bf)) / 2)
457+ let bg = parseIntValue(I[x])
458+ let bA = (((by * aZ) + (bz * bg)) / 2)
458459 let bB = n(j)
459460 let bC = valueOrElse(getInteger(bB), 0)
460461 let g = aR(aT.originCaller)
461- let bD = valueOrElse(getString(l(j)), "")
462462 if (!(valueOrElse(getBoolean(p(j, g)), false)))
463463 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
464464 else {
465- let bl = s(j, g)
466- let bE = valueOrElse(getInteger(bl), 0)
467- if ((bE == 0))
465+ let bm = s(j, g)
466+ let bD = valueOrElse(getInteger(bm), 0)
467+ if ((bD == 0))
468468 then throw("Your duck got zero score")
469469 else {
470- let bF = q(j, g)
471- if (valueOrElse(getBoolean(bF), false))
470+ let bE = q(j, g)
471+ if (valueOrElse(getBoolean(bE), false))
472472 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
473473 else {
474- let bm = m(j)
475- let bG = valueOrElse(getInteger(bm), 0)
474+ let bn = m(j)
475+ let bF = valueOrElse(getInteger(bn), 0)
476476 let aM = J[C]
477- let bH = if (if ((aM == ""))
477+ let bG = if (if ((aM == ""))
478478 then true
479479 else (aM == " "))
480480 then nil
481481 else split_4C(aM, ",")
482- let bI = size(bH)
483- if ((bI == 0))
482+ let bH = size(bG)
483+ if ((bH == 0))
484484 then throw(("No leaders at tournament " + toString(j)))
485485 else {
486486 let aJ = parseIntValue(I[A])
487487 let aN = parseIntValue(J[D])
488- let bJ = if ((bI > aJ))
488+ let bI = if ((bH > aJ))
489489 then 0
490- else if (containsElement(bH, g))
490+ else if (containsElement(bG, g))
491491 then throw("As one of winners, you will be awarded by admins")
492- else (bI * aN)
493- let bK = min([fraction(bE, bA, (bG - bJ)), bC])
494- let bL = (bC - bK)
495- let bb = aK("ARCHIVED", J[C], aN, by, bz)
496- let bM = if ((0 >= bL))
497- then [StringEntry(k(j), bb)]
492+ else (bH * aN)
493+ let bJ = min([fraction(bD, bA, (bF - bI)), bC])
494+ let bK = (bC - bJ)
495+ let bc = aK("ARCHIVED", J[C], aN, by, bz)
496+ let bL = if ((0 >= bK))
497+ then [StringEntry(k(j), bc)]
498498 else nil
499- $Tuple2(([ScriptTransfer(aT.caller, bK, ak), BooleanEntry(bF, true), IntegerEntry(bB, bL)] ++ bM), 0)
499+ $Tuple2(([ScriptTransfer(aT.caller, bJ, ak), BooleanEntry(bE, true), IntegerEntry(bB, bK)] ++ bL), 0)
500500 }
501501 }
502502 }
503503 }
504504 }
505505 }
506506 }
507507
508508

github/deemru/w8io/169f3d6 
212.29 ms