tx · 9P4H8FZLxZU9UhBoQdkujkNBfGZvQMBGbgqFk5mvuS5X

3P9rSTp5FGbdeYyaoELbp7p3AhZxoagcuVK:  -0.02900000 Waves

2022.07.25 19:38 [3221123] smart account 3P9rSTp5FGbdeYyaoELbp7p3AhZxoagcuVK > SELF 0.00000000 Waves

{ "type": 13, "id": "9P4H8FZLxZU9UhBoQdkujkNBfGZvQMBGbgqFk5mvuS5X", "fee": 2900000, "feeAssetId": null, "timestamp": 1658767125000, "version": 2, "chainId": 87, "sender": "3P9rSTp5FGbdeYyaoELbp7p3AhZxoagcuVK", "senderPublicKey": "EBE2tTCR3NLELRwWQGuNMNeTBMchjjGdABfvqFyjS9Y8", "proofs": [ "3JfhRn6dTJXzKw9hd2B5o7npwcTrPFWT9YpndaCPDKdERWGdT86X44fFwxyjmiUkZDcpfSM1WQiwkQbvTjo7kFWb" ], "script": "base64:AAIFAAAAAAAAAEAIAhIDCgEIEgYKBAgIAQESABIDCgEIEgMKAQgSAwoBCBIFCgMBCAgSAwoBCBIHCgUBCAgICBIAEgcKBQEICAgIAAAANAAAAAATZ2FtZU1hc3RlclB1YmxpY0tleQEAAAAgvt5Nux0DZl+0SE2XgwrqZnT0ET0wdYAOtUpkKCr290UAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF6SUMyb2J0SG5kTkNaWExCR2NIVUZPKy9xOHhWMEM4OEhrWnZXekc5Z3ZTbnk0S1NlRkR5QSs3eXRYSUZlV0wvWndnQkswMW1vOWxDZXNNNk9xLysrR2lTNHkyRzNJekpiMVdLTUcxQnR2ZUMrZnZiUDZXRThybUVMWDU5NkFsWTFKRHp3SzJzdWdva1NHTUUvTng0dEVUWFZUbEpRTlhYcFM5NGxCMldHNnV1eCtNMUpTcGU3dDN6N0VQNlNlcFFaVTBzU3JsS0ZXb2ZReE5jZUdQYjdubzhNTWVjSURQMksyeDQyN1ZYaGk0RGxqTjFXcThkOEhPQVkxVFo2c2Juc1J1aWFIOEQ0em01dGthWUYwOWRXOVU2akdJYkZHdGlZL0NpMEdwOXlLM1cvZXpSMzRsc0RlRko5ZFI4RFdPbTJoWEZsaE1YWWdXRUllSE1IODFKclFJREFRQUIAAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwCAAAAE0dfU0VUVVBHQU1FU0NPVU5URVIAAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAIAAAASR19VU0VER0FNRVNDT1VOVEVSAAAAABBkZWFsZXJRdWV1ZUxhYmVsAgAAAA1HX0RFQUxFUlFVRVVFAAAAAA9nYW1lTWF4QmV0TGFiZWwCAAAACEdfTUFYQkVUAQAAAAtnYW1lc01heEJldAAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPZ2FtZU1heEJldExhYmVsAQAAABRnYW1lc1NldHVwR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAWc2V0dXBHYW1lc0NvdW50ZXJMYWJlbAEAAAATZ2FtZXNVc2VkR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAVdXNlZEdhbWVzQ291bnRlckxhYmVsAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAAJAAQdAAAAAgUAAAAEdGhpcwUAAAAQZGVhbGVyUXVldWVMYWJlbAEAAAAaZ2V0R2FtZUNhcmRzU2lnbmF0dXJlTGFiZWwAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAPX0NBUkRTSUdOQVRVUkVfCQABpAAAAAEFAAAABGNhcmQBAAAAEWdldEdhbWVDYXJkc0xhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABl9DQVJEXwkAAaQAAAABBQAAAARjYXJkAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAFfBQAAAAN3aG8CAAAAC19TT1JURURIQU5EAQAAABVnZXRHYW1lSGFuZFNjb3JlTGFiZWwAAAACAAAACmdhbWVOdW1iZXIAAAADd2hvCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAAV8FAAAAA3dobwIAAAAGX1NDT1JFAQAAABZnZXRHYW1lQW50ZUFtb3VudExhYmVsAAAAAQAAAApnYW1lTnVtYmVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAFX0FOVEUBAAAAEmdldEdhbWVQbGF5ZXJMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19QTEFZRVIBAAAAEmdldEdhbWVQYXlvdXRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19QQVlPVVQBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQAAAApnYW1lTnVtYmVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAGX1NUQVRFAQAAABpnZXRHYW1lU2h1ZmZlbE9mZmVzZXRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19PRkZTRVQBAAAAFWdldEdhbWVDYXJkc1NpZ25hdHVyZQAAAAIAAAAKZ2FtZU51bWJlcgAAAARjYXJkCQAEHQAAAAIFAAAABHRoaXMJAQAAABpnZXRHYW1lQ2FyZHNTaWduYXR1cmVMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAABGNhcmQBAAAAFmdldEdhbWVTb3J0ZWRIYW5kQ2FyZHMAAAACAAAACmdhbWVOdW1iZXIAAAADd2hvCQAEHQAAAAIFAAAABHRoaXMJAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAADd2hvAQAAABBnZXRHYW1lSGFuZFNjb3JlAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkABBoAAAACBQAAAAR0aGlzCQEAAAAVZ2V0R2FtZUhhbmRTY29yZUxhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAADd2hvAQAAAAxnZXRHYW1lQ2FyZHMAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkABB0AAAACBQAAAAR0aGlzCQEAAAARZ2V0R2FtZUNhcmRzTGFiZWwAAAACBQAAAApnYW1lTnVtYmVyBQAAAARjYXJkAQAAAA1nZXRHYW1lUGxheWVyAAAAAQAAAApnYW1lTnVtYmVyCQAEHQAAAAIFAAAABHRoaXMJAQAAABJnZXRHYW1lUGxheWVyTGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAAAxnZXRHYW1lU3RhdGUAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAARZ2V0R2FtZUFudGVBbW91bnQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmdldEdhbWVBbnRlQW1vdW50TGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAABVnZXRHYW1lU2h1ZmZlbE9mZmVzZXQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGmdldEdhbWVTaHVmZmVsT2ZmZXNldExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAANZ2V0R2FtZVBheW91dAAAAAEAAAAKZ2FtZU51bWJlcgkABBoAAAACBQAAAAR0aGlzCQEAAAASZ2V0R2FtZVBheW91dExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAZZ2V0UGxheWVyQ3VycmVudEdhbWVMYWJlbAAAAAEAAAAHYWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAAlBfBQAAAAdhZGRyZXNzAgAAAAxfQ1VSUkVOVEdBTUUBAAAAFGdldFBsYXllckN1cnJlbnRHYW1lAAAAAQAAAAdhZGRyZXNzCQAEGgAAAAIFAAAABHRoaXMJAQAAABlnZXRQbGF5ZXJDdXJyZW50R2FtZUxhYmVsAAAAAQUAAAAHYWRkcmVzcwEAAAAKdmVyaWZ5Q2FyZAAAAAMAAAAEY2FyZAAAAApnYW1lTnVtYmVyAAAACmNhcmROdW1iZXIJAAooAAAABAUAAAAGU0hBMjU2CQABmwAAAAEFAAAABGNhcmQJAAJbAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAABVnZXRHYW1lQ2FyZHNTaWduYXR1cmUAAAACBQAAAApnYW1lTnVtYmVyBQAAAApjYXJkTnVtYmVyAgAAAAEgAAAAAAAAAAAABQAAAAlSU0FQVUJMSUMBAAAAD2NoZWNrUGVybWlzc2lvbgAAAAEAAAAPY2FsbGVyUHVibGljS2V5CQEAAAACIT0AAAACBQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAE2dhbWVNYXN0ZXJQdWJsaWNLZXkBAAAAEmNyZWF0ZUdhbWVNZXRhZGF0YQAAAAIAAAAHYWRkcmVzcwAAAARhbnRlBAAAAA1nYW1lVG9SZXNlcnZlCQAAZAAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAABNnYW1lc1VzZWRHZXRDb3VudGVyAAAAAAAAAAAAAAAAAQQAAAALZGVhbGVyUXVldWUJAQAAAAV2YWx1ZQAAAAEJAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWdldFBsYXllckN1cnJlbnRHYW1lTGFiZWwAAAABBQAAAAdhZGRyZXNzBQAAAA1nYW1lVG9SZXNlcnZlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0R2FtZVN0YXRlTGFiZWwAAAABBQAAAA1nYW1lVG9SZXNlcnZlAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWZ2V0R2FtZUFudGVBbW91bnRMYWJlbAAAAAEFAAAADWdhbWVUb1Jlc2VydmUFAAAABGFudGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQZGVhbGVyUXVldWVMYWJlbAkAASwAAAACCQABLAAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAACAAAAASwJAAGkAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0R2FtZVBsYXllckxhYmVsAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQUAAAAHYWRkcmVzcwUAAAADbmlsAQAAAAxnZXRHYW1lU2V0dXAAAAAGAAAACmdhbWVOdW1iZXIAAAAKcmFuZG9taXplcgAAAAZjYXJkczAAAAAGY2FyZHMxAAAABmNhcmRzMgAAAAZjYXJkczMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwFAAAACmdhbWVOdW1iZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRHYW1lU3RhdGVMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRHYW1lU2h1ZmZlbE9mZmVzZXRMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIFAAAACnJhbmRvbWl6ZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmdldEdhbWVDYXJkc1NpZ25hdHVyZUxhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgAAAAAAAAAAAAUAAAAGY2FyZHMwCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABpnZXRHYW1lQ2FyZHNTaWduYXR1cmVMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIAAAAAAAAAAAEFAAAABmNhcmRzMQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaZ2V0R2FtZUNhcmRzU2lnbmF0dXJlTGFiZWwAAAACBQAAAApnYW1lTnVtYmVyAAAAAAAAAAACBQAAAAZjYXJkczIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmdldEdhbWVDYXJkc1NpZ25hdHVyZUxhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgAAAAAAAAAAAwUAAAAGY2FyZHMzBQAAAANuaWwBAAAAB2dldFN1aXQAAAABAAAABGNhcmQJAAGRAAAAAgkABLUAAAACBQAAAARjYXJkAgAAAAEvAAAAAAAAAAABAQAAAAlnZXROdW1iZXIAAAABAAAABGNhcmQJAQAAAAV2YWx1ZQAAAAEJAAS2AAAAAQkAAZEAAAACCQAEtQAAAAIFAAAABGNhcmQCAAAAAS8AAAAAAAAAAAABAAAADWlzRm91ck9mQUtpbmQAAAABAAAABGhhbmQDAwkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAAJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAwYJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQGBwEAAAALaXNGdWxsSG91c2UAAAABAAAABGhhbmQDAwMJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAIJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQHBgMJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQHBgcBAAAAB2lzRmx1c2gAAAABAAAABGhhbmQEAAAACWZpcnN0U3VpdAkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAAAwMDAwkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEFAAAACWZpcnN0U3VpdAkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAIFAAAACWZpcnN0U3VpdAcJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADBQAAAAlmaXJzdFN1aXQHCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAABAUAAAAJZmlyc3RTdWl0BwYHAQAAAAppc1N0cmFpZ2h0AAAAAQAAAARoYW5kBAAAAAdsYXJnZXN0CQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQDAwMDCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAwkAAGUAAAACBQAAAAdsYXJnZXN0AAAAAAAAAAABCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAgkAAGUAAAACBQAAAAdsYXJnZXN0AAAAAAAAAAACBwkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAABlAAAAAgUAAAAHbGFyZ2VzdAAAAAAAAAAAAwcJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQAAZQAAAAIFAAAAB2xhcmdlc3QAAAAAAAAAAAQHBgcBAAAADWlzVGhyZWVPZktpbmQAAAABAAAABGhhbmQDAwMJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAIGCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADBgkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAABAYHAQAAAAlpc1R3b1BhaXIAAAABAAAABGhhbmQEAAAADW51bWJlck9mUGFpcnMAAAAAAAAAAAAEAAAACG1hdGNoaW5nCQAETAAAAAIJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAARMAAAAAgkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAgkABEwAAAACCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQAETAAAAAIJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQFAAAAA25pbAMDAwkBAAAAAiE9AAAAAgkABE8AAAACBQAAAAhtYXRjaGluZwYJAARQAAAAAgUAAAAIbWF0Y2hpbmcGCQEAAAACIT0AAAACCQAETwAAAAIFAAAACG1hdGNoaW5nBgUAAAAEdW5pdAcJAQAAAAIhPQAAAAIJAARQAAAAAgUAAAAIbWF0Y2hpbmcGBQAAAAR1bml0BwYHAQAAAAlpc09uZVBhaXIAAAABAAAABGhhbmQDAwMDCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAAkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABBgkAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAgYJAAAAAAAAAgkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAACCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAMGCQAAAAAAAAIJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAwkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAEBgcBAAAACGdldFNjb3JlAAAAAQAAAARoYW5kBAAAAAphbGxOdW1iZXJzCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAADbmlsCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAACCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAEBAAAAAhhbGxTdWl0cwkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIFAAAAA25pbAkBAAAAB2dldFN1aXQAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAAJAQAAAAdnZXRTdWl0AAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABCQEAAAAHZ2V0U3VpdAAAAAEJAAGRAAAAAgUAAAAEaGFuZAAAAAAAAAAAAgkBAAAAB2dldFN1aXQAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAMJAQAAAAdnZXRTdWl0AAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAEAwkBAAAACmlzU3RyYWlnaHQAAAABBQAAAAphbGxOdW1iZXJzAwkBAAAAB2lzRmx1c2gAAAABBQAAAAhhbGxTdWl0cwMJAAAAAAAAAgkAAZEAAAACBQAAAAphbGxOdW1iZXJzAAAAAAAAAAAEAAAAAAAAAAAOAAAAAAAAAAAJAAAAAAAAAAAIAAAAAAAAAAAEAwkBAAAADWlzRm91ck9mQUtpbmQAAAABBQAAAAphbGxOdW1iZXJzAAAAAAAAAAAHAwkBAAAAC2lzRnVsbEhvdXNlAAAAAQUAAAAKYWxsTnVtYmVycwAAAAAAAAAABgMJAQAAAAdpc0ZsdXNoAAAAAQUAAAAIYWxsU3VpdHMAAAAAAAAAAAUDCQEAAAANaXNUaHJlZU9mS2luZAAAAAEFAAAACmFsbE51bWJlcnMAAAAAAAAAAAMDCQEAAAAJaXNUd29QYWlyAAAAAQUAAAAKYWxsTnVtYmVycwAAAAAAAAAAAgMJAQAAAAlpc09uZVBhaXIAAAABBQAAAAphbGxOdW1iZXJzAAAAAAAAAAABAAAAAAAAAAAAAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQAAAAtwbGF5ZXJTY29yZQMJAAAAAAAAAgUAAAALcGxheWVyU2NvcmUAAAAAAAAAAAkAAAAAAAAAAGUDCQAAAAAAAAIFAAAAC3BsYXllclNjb3JlAAAAAAAAAAAIAAAAAAAAAAAzAwkAAAAAAAACBQAAAAtwbGF5ZXJTY29yZQAAAAAAAAAABwAAAAAAAAAAFQMJAAAAAAAAAgUAAAALcGxheWVyU2NvcmUAAAAAAAAAAAYAAAAAAAAAAAgDCQAAAAAAAAIFAAAAC3BsYXllclNjb3JlAAAAAAAAAAAFAAAAAAAAAAAGAwkAAAAAAAACBQAAAAtwbGF5ZXJTY29yZQAAAAAAAAAABAAAAAAAAAAABQMJAAAAAAAAAgUAAAALcGxheWVyU2NvcmUAAAAAAAAAAAMAAAAAAAAAAAQDCQAAAAAAAAIFAAAAC3BsYXllclNjb3JlAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAACAQAAABF3aG9IYXNIaWdoZXN0Q2FyZAAAAAIAAAAQYWxsUGxheWVyTnVtYmVycwAAABBhbGxEZWFsZXJOdW1iZXJzAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAQJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAABAAAAAAAAAAAAgMJAABmAAAAAgkAAZEAAAACBQAAABBhbGxQbGF5ZXJOdW1iZXJzAAAAAAAAAAAECQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAQAAAAAAAAAAAEDCQAAZgAAAAIJAAGRAAAAAgUAAAAQYWxsRGVhbGVyTnVtYmVycwAAAAAAAAAAAwkAAZEAAAACBQAAABBhbGxQbGF5ZXJOdW1iZXJzAAAAAAAAAAADAAAAAAAAAAACAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMAAAAAAAAAAAMJAAGRAAAAAgUAAAAQYWxsRGVhbGVyTnVtYmVycwAAAAAAAAAAAwAAAAAAAAAAAQMJAABmAAAAAgkAAZEAAAACBQAAABBhbGxEZWFsZXJOdW1iZXJzAAAAAAAAAAACCQABkQAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMAAAAAAAAAAAIAAAAAAAAAAAIDCQAAZgAAAAIJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAAAgkAAZEAAAACBQAAABBhbGxEZWFsZXJOdW1iZXJzAAAAAAAAAAACAAAAAAAAAAABAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAEJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAAAQAAAAAAAAAAAgMJAABmAAAAAgkAAZEAAAACBQAAABBhbGxQbGF5ZXJOdW1iZXJzAAAAAAAAAAABCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAEAAAAAAAAAAAEDCQAAZgAAAAIJAAGRAAAAAgUAAAAQYWxsRGVhbGVyTnVtYmVycwAAAAAAAAAAAAkAAZEAAAACBQAAABBhbGxQbGF5ZXJOdW1iZXJzAAAAAAAAAAAAAAAAAAAAAAACAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMAAAAAAAAAAAAJAAGRAAAAAgUAAAAQYWxsRGVhbGVyTnVtYmVycwAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAARaGlnaGVzdFBhaXJOdW1iZXIAAAABAAAAC2NhcmROdW1iZXJzAwkAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAAECQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAADCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAAEAwkAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAADCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAADAwkAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAABCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAACAwkAAAAAAAACCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAABCQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAAACQABkQAAAAIFAAAAC2NhcmROdW1iZXJzAAAAAAAAAAABAP//////////AQAAABBsb3dlc3RQYWlyTnVtYmVyAAAAAQAAAAtjYXJkTnVtYmVycwMJAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAAkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAQkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAQMJAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAQkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAQMJAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAwkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAgMJAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAwkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAABAkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAwD//////////wEAAAAXZ2V0SGlnaGVzdE5vblBhaXJOdW1iZXIAAAABAAAAC2NhcmROdW1iZXJzAwkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAABAkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAwkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAABAMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAEJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAABAAAAHnNlY29uZEhpZ2hlc3ROb25QYWlyT2ZQYWlySGFuZAAAAAEAAAALY2FyZE51bWJlcnMDCQAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAMJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAEDCQAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAIJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAEJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAMJAAGRAAAAAgUAAAALY2FyZE51bWJlcnMAAAAAAAAAAAIBAAAAHXRoaXJkSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQAAAAtjYXJkTnVtYmVycwMJAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAAkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAQkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAgkAAZEAAAACBQAAAAtjYXJkTnVtYmVycwAAAAAAAAAAAAEAAAAPZ2V0UGxheWVyUGF5b3V0AAAABAAAAApwbGF5ZXJIYW5kAAAACmRlYWxlckhhbmQAAAAEYW50ZQAAAAtwbGF5ZXJTY29yZQQAAAALcGxheWVyQ2FyZHMJAAS1AAAAAgUAAAAKcGxheWVySGFuZAIAAAABKwQAAAALcGxheWVyVmFsdWUFAAAAC3BsYXllclNjb3JlBAAAAAtkZWFsZXJDYXJkcwkABLUAAAACBQAAAApkZWFsZXJIYW5kAgAAAAErBAAAAAtkZWFsZXJWYWx1ZQkBAAAACGdldFNjb3JlAAAAAQUAAAALZGVhbGVyQ2FyZHMEAAAAEGFsbFBsYXllck51bWJlcnMJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACBQAAAANuaWwJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAAC3BsYXllckNhcmRzAAAAAAAAAAAACQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAAtwbGF5ZXJDYXJkcwAAAAAAAAAAAQkBAAAACWdldE51bWJlcgAAAAEJAAGRAAAAAgUAAAALcGxheWVyQ2FyZHMAAAAAAAAAAAIJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAAC3BsYXllckNhcmRzAAAAAAAAAAADCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAAtwbGF5ZXJDYXJkcwAAAAAAAAAABAQAAAAQYWxsRGVhbGVyTnVtYmVycwkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIFAAAAA25pbAkBAAAACWdldE51bWJlcgAAAAEJAAGRAAAAAgUAAAALZGVhbGVyQ2FyZHMAAAAAAAAAAAAJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAAC2RlYWxlckNhcmRzAAAAAAAAAAABCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAAtkZWFsZXJDYXJkcwAAAAAAAAAAAgkBAAAACWdldE51bWJlcgAAAAEJAAGRAAAAAgUAAAALZGVhbGVyQ2FyZHMAAAAAAAAAAAMJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAAC2RlYWxlckNhcmRzAAAAAAAAAAAEAwMDCQEAAAACIT0AAAACCQAEswAAAAIFAAAACmRlYWxlckhhbmQCAAAAAjEzBQAAAAR1bml0CQEAAAACIT0AAAACCQAEswAAAAIFAAAACmRlYWxlckhhbmQCAAAAAjE0BQAAAAR1bml0BwYJAABnAAAAAgUAAAALZGVhbGVyVmFsdWUAAAAAAAAAAAEDCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlBQAAAAtkZWFsZXJWYWx1ZQMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAkJAABkAAAAAgUAAAAEYW50ZQkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAgGCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAAEAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAQJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAABAAAAAAAAAAAAAMJAAAAAAAAAgkAAZEAAAACBQAAABBhbGxEZWFsZXJOdW1iZXJzAAAAAAAAAAAECQABkQAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMAAAAAAAAAAAQJAABkAAAAAgUAAAAEYW50ZQkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIDCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAAHAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAEJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAAAQAAAAAAAAAAAAkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwkAAAAAAAACBQAAAAtwbGF5ZXJWYWx1ZQAAAAAAAAAABgMJAABmAAAAAgkAAZEAAAACBQAAABBhbGxEZWFsZXJOdW1iZXJzAAAAAAAAAAACCQABkQAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMAAAAAAAAAAAIAAAAAAAAAAAAJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAUEAAAAEGhpZ2hlc3RDYXJkVGhlcmUJAQAAABF3aG9IYXNIaWdoZXN0Q2FyZAAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMFAAAAEGFsbERlYWxlck51bWJlcnMDCQAAAAAAAAIFAAAAEGhpZ2hlc3RDYXJkVGhlcmUAAAAAAAAAAAEJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgMJAAAAAAAAAgUAAAAQaGlnaGVzdENhcmRUaGVyZQAAAAAAAAAAAgAAAAAAAAAAAAkAAGQAAAACBQAAAARhbnRlCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIDCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAADAwkAAGYAAAACCQABkQAAAAIFAAAAEGFsbERlYWxlck51bWJlcnMAAAAAAAAAAAIJAAGRAAAAAgUAAAAQYWxsUGxheWVyTnVtYmVycwAAAAAAAAAAAgAAAAAAAAAAAAkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAIGCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAABBAAAABJwbGF5ZXJzSGlnaGVzdFBhaXIJAQAAABFoaWdoZXN0UGFpck51bWJlcgAAAAEFAAAAEGFsbFBsYXllck51bWJlcnMEAAAAEmRlYWxlcnNIaWdoZXN0UGFpcgkBAAAAEWhpZ2hlc3RQYWlyTnVtYmVyAAAAAQUAAAAQYWxsRGVhbGVyTnVtYmVycwMJAABmAAAAAgUAAAASZGVhbGVyc0hpZ2hlc3RQYWlyBQAAABJwbGF5ZXJzSGlnaGVzdFBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAEnBsYXllcnNIaWdoZXN0UGFpcgUAAAASZGVhbGVyc0hpZ2hlc3RQYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIEAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkBAAAAF2dldEhpZ2hlc3ROb25QYWlyTnVtYmVyAAAAAQUAAAAQYWxsRGVhbGVyTnVtYmVycwQAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgkBAAAAF2dldEhpZ2hlc3ROb25QYWlyTnVtYmVyAAAAAQUAAAAQYWxsUGxheWVyTnVtYmVycwMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAIEAAAAEXBsYXllcnNMb3dlc3RQYWlyCQEAAAAQbG93ZXN0UGFpck51bWJlcgAAAAEFAAAAEGFsbFBsYXllck51bWJlcnMEAAAAEWRlYWxlcnNMb3dlc3RQYWlyCQEAAAAQbG93ZXN0UGFpck51bWJlcgAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMDCQAAZgAAAAIFAAAAEWRlYWxlcnNMb3dlc3RQYWlyBQAAABFwbGF5ZXJzTG93ZXN0UGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAARcGxheWVyc0xvd2VzdFBhaXIFAAAAEWRlYWxlcnNMb3dlc3RQYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIDCQAAZgAAAAIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgUAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgUAAAAVZGVhbGVyc0hpZ2hlc3ROb25QYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIJAABkAAAAAgUAAAAEYW50ZQkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwkAAGYAAAACBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACBAAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAQAAAB5zZWNvbmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzBAAAABtwbGF5ZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAQAAAB5zZWNvbmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxQbGF5ZXJOdW1iZXJzAwkAAGYAAAACBQAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIFAAAAG3BsYXllcnNzZWNvbmRIaWdoZXN0Tm9uUGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAAbcGxheWVyc3NlY29uZEhpZ2hlc3ROb25QYWlyBQAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgQAAAAaZGVhbGVyc3RoaXJkSGlnaGVzdE5vblBhaXIJAQAAAB10aGlyZEhpZ2hlc3ROb25QYWlyT2ZQYWlySGFuZAAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMEAAAAGnBsYXllcnN0aGlyZEhpZ2hlc3ROb25QYWlyCQEAAAAddGhpcmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBh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AAAFdmFsdWUAAAABCQEAAAARZ2V0R2FtZUFudGVBbW91bnQAAAABBQAAAAtjdXJyZW50R2FtZQQAAAAHYWRkcmVzcwkBAAAABXZhbHVlAAAAAQkABCYAAAABCQEAAAAFdmFsdWUAAAABCQEAAAANZ2V0R2FtZVBsYXllcgAAAAEFAAAAC2N1cnJlbnRHYW1lBAAAABNwbGF5ZXJzT3JkZXJlZENhcmRzCQEAAAAFdmFsdWUAAAABCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRDYXJkcwAAAAIFAAAAC2N1cnJlbnRHYW1lAgAAAAZQTEFZRVIEAAAABnBheW91dAkBAAAAD2dldFBsYXllclBheW91dAAAAAQFAAAAE3BsYXllcnNPcmRlcmVkQ2FyZHMFAAAAEmRlYWxlck9yZGVyZWRDYXJkcwUAAAAEYW50ZQkBAAAABXZhbHVlAAAAAQkBAAAAEGdldEdhbWVIYW5kU2NvcmUAAAACBQAAAAtjdXJyZW50R2FtZQIAAAAGUExBWUVSCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0R2FtZVN0YXRlTGFiZWwAAAABBQAAAAtjdXJyZW50R2FtZQAAAAAAAAAABAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABBkZWFsZXJRdWV1ZUxhYmVsCQEAAAAJdGFrZVJpZ2h0AAAAAgUAAAALZGVhbGVyUXVldWUJAABlAAAAAgkAATEAAAABBQAAAAtkZWFsZXJRdWV1ZQkAAGQAAAACAAAAAAAAAAABCQABMQAAAAEJAAGkAAAAAQUAAAALY3VycmVudEdhbWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJnZXRHYW1lUGF5b3V0TGFiZWwAAAABBQAAAAtjdXJyZW50R2FtZQUAAAAGcGF5b3V0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgUAAAALY3VycmVudEdhbWUCAAAABkRFQUxFUgUAAAASZGVhbGVyT3JkZXJlZENhcmRzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAB2FkZHJlc3MFAAAABnBheW91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", "height": 3221123, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CtumbDaD4ELicZLBj2BQ4CSMUbP2qRKbAvos46UwMFsa Next: 4dNhTyBAVrLUXkrGSFQGWVCXz5JW9Qrv4PXhePscpcuF Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gameMasterPublicKey = base58'Dr551F4aRULHaAPnAvGgR9xaM4oZR2f9s9CyvMaemxhi'
55
66 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzIC2obtHndNCZXLBGcHUFO+/q8xV0C88HkZvWzG9gvSny4KSeFDyA+7ytXIFeWL/ZwgBK01mo9lCesM6Oq/++GiS4y2G3IzJb1WKMG1BtveC+fvbP6WE8rmELX596AlY1JDzwK2sugokSGME/Nx4tETXVTlJQNXXpS94lB2WG6uux+M1JSpe7t3z7EP6SepQZU0sSrlKFWofQxNceGPb7no8MMecIDP2K2x427VXhi4DljN1Wq8d8HOAY1TZ6sbnsRuiaH8D4zm5tkaYF09dW9U6jGIbFGtiY/Ci0Gp9yK3W/ezR34lsDeFJ9dR8DWOm2hXFlhMXYgWEIeHMH81JrQIDAQAB")
77
88 let setupGamesCounterLabel = "G_SETUPGAMESCOUNTER"
99
1010 let usedGamesCounterLabel = "G_USEDGAMESCOUNTER"
1111
1212 let dealerQueueLabel = "G_DEALERQUEUE"
1313
1414 let gameMaxBetLabel = "G_MAXBET"
1515
1616 func gamesMaxBet () = getInteger(this, gameMaxBetLabel)
1717
1818
1919 func gamesSetupGetCounter () = getInteger(this, setupGamesCounterLabel)
2020
2121
2222 func gamesUsedGetCounter () = getInteger(this, usedGamesCounterLabel)
2323
2424
2525 func getDealerQueue () = getString(this, dealerQueueLabel)
2626
2727
2828 func getGameCardsSignatureLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARDSIGNATURE_") + toString(card))
2929
3030
3131 func getGameCardsLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARD_") + toString(card))
3232
3333
3434 func getGameSortedHandLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SORTEDHAND")
3535
3636
3737 func getGameHandScoreLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SCORE")
3838
3939
4040 func getGameAnteAmountLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_ANTE")
4141
4242
4343 func getGamePlayerLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PLAYER")
4444
4545
4646 func getGamePayoutLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PAYOUT")
4747
4848
4949 func getGameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STATE")
5050
5151
5252 func getGameShuffelOffesetLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_OFFSET")
5353
5454
5555 func getGameCardsSignature (gameNumber,card) = getString(this, getGameCardsSignatureLabel(gameNumber, card))
5656
5757
5858 func getGameSortedHandCards (gameNumber,who) = getString(this, getGameSortedHandLabel(gameNumber, who))
5959
6060
6161 func getGameHandScore (gameNumber,who) = getInteger(this, getGameHandScoreLabel(gameNumber, who))
6262
6363
6464 func getGameCards (gameNumber,card) = getString(this, getGameCardsLabel(gameNumber, card))
6565
6666
6767 func getGamePlayer (gameNumber) = getString(this, getGamePlayerLabel(gameNumber))
6868
6969
7070 func getGameState (gameNumber) = getInteger(this, getGameStateLabel(gameNumber))
7171
7272
7373 func getGameAnteAmount (gameNumber) = getInteger(this, getGameAnteAmountLabel(gameNumber))
7474
7575
7676 func getGameShuffelOffeset (gameNumber) = getInteger(this, getGameShuffelOffesetLabel(gameNumber))
7777
7878
7979 func getGamePayout (gameNumber) = getInteger(this, getGamePayoutLabel(gameNumber))
8080
8181
8282 func getPlayerCurrentGameLabel (address) = (("P_" + address) + "_CURRENTGAME")
8383
8484
8585 func getPlayerCurrentGame (address) = getInteger(this, getPlayerCurrentGameLabel(address))
8686
8787
8888 func verifyCard (card,gameNumber,cardNumber) = rsaVerify_16Kb(SHA256, toBytes(card), fromBase64String(split(value(getGameCardsSignature(gameNumber, cardNumber)), " ")[0]), RSAPUBLIC)
8989
9090
9191 func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
9292
9393
9494 func createGameMetadata (address,ante) = {
9595 let gameToReserve = (value(gamesUsedGetCounter()) + 1)
9696 let dealerQueue = value(getDealerQueue())
9797 [IntegerEntry(usedGamesCounterLabel, gameToReserve), IntegerEntry(getPlayerCurrentGameLabel(address), gameToReserve), IntegerEntry(getGameStateLabel(gameToReserve), 1), IntegerEntry(getGameAnteAmountLabel(gameToReserve), ante), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(gameToReserve))), StringEntry(getGamePlayerLabel(gameToReserve), address)]
9898 }
9999
100100
101101 func getGameSetup (gameNumber,randomizer,cards0,cards1,cards2,cards3) = [IntegerEntry(setupGamesCounterLabel, gameNumber), IntegerEntry(getGameStateLabel(gameNumber), 0), IntegerEntry(getGameShuffelOffesetLabel(gameNumber), randomizer), StringEntry(getGameCardsSignatureLabel(gameNumber, 0), cards0), StringEntry(getGameCardsSignatureLabel(gameNumber, 1), cards1), StringEntry(getGameCardsSignatureLabel(gameNumber, 2), cards2), StringEntry(getGameCardsSignatureLabel(gameNumber, 3), cards3)]
102102
103103
104104 func getSuit (card) = split(card, "/")[1]
105105
106106
107107 func getNumber (card) = value(parseInt(split(card, "/")[0]))
108108
109109
110110 func isFourOfAKind (hand) = if (if ((hand[0] == hand[3]))
111111 then true
112112 else (hand[1] == hand[4]))
113113 then true
114114 else false
115115
116116
117117 func isFullHouse (hand) = if (if (if ((hand[0] == hand[2]))
118118 then (hand[3] == hand[4])
119119 else false)
120120 then true
121121 else if ((hand[0] == hand[1]))
122122 then (hand[2] == hand[4])
123123 else false)
124124 then true
125125 else false
126126
127127
128128 func isFlush (hand) = {
129129 let firstSuit = hand[0]
130130 if (if (if (if ((hand[1] == firstSuit))
131131 then (hand[2] == firstSuit)
132132 else false)
133133 then (hand[3] == firstSuit)
134134 else false)
135135 then (hand[4] == firstSuit)
136136 else false)
137137 then true
138138 else false
139139 }
140140
141141
142142 func isStraight (hand) = {
143143 let largest = hand[4]
144144 if (if (if (if ((hand[3] == (largest - 1)))
145145 then (hand[2] == (largest - 2))
146146 else false)
147147 then (hand[1] == (largest - 3))
148148 else false)
149149 then (hand[0] == (largest - 4))
150150 else false)
151151 then true
152152 else false
153153 }
154154
155155
156156 func isThreeOfKind (hand) = if (if (if ((hand[0] == hand[2]))
157157 then true
158158 else (hand[1] == hand[3]))
159159 then true
160160 else (hand[2] == hand[4]))
161161 then true
162162 else false
163163
164164
165165 func isTwoPair (hand) = {
166166 let numberOfPairs = 0
167167 let matching = [(hand[0] == hand[1]), (hand[1] == hand[2]), (hand[2] == hand[3]), (hand[3] == hand[4])]
168168 if (if (if ((indexOf(matching, true) != lastIndexOf(matching, true)))
169169 then (indexOf(matching, true) != unit)
170170 else false)
171171 then (lastIndexOf(matching, true) != unit)
172172 else false)
173173 then true
174174 else false
175175 }
176176
177177
178178 func isOnePair (hand) = if (if (if (if ((hand[0] == hand[1]))
179179 then true
180180 else (hand[1] == hand[2]))
181181 then true
182182 else (hand[2] == hand[3]))
183183 then true
184184 else (hand[3] == hand[4]))
185185 then true
186186 else false
187187
188188
189189 func getScore (hand) = {
190190 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
191191 let allSuits = (((((nil :+ getSuit(hand[0])) :+ getSuit(hand[1])) :+ getSuit(hand[2])) :+ getSuit(hand[3])) :+ getSuit(hand[4]))
192192 if (isStraight(allNumbers))
193193 then if (isFlush(allSuits))
194194 then if ((allNumbers[4] == 14))
195195 then 9
196196 else 8
197197 else 4
198198 else if (isFourOfAKind(allNumbers))
199199 then 7
200200 else if (isFullHouse(allNumbers))
201201 then 6
202202 else if (isFlush(allSuits))
203203 then 5
204204 else if (isThreeOfKind(allNumbers))
205205 then 3
206206 else if (isTwoPair(allNumbers))
207207 then 2
208208 else if (isOnePair(allNumbers))
209209 then 1
210210 else 0
211211 }
212212
213213
214214 func payoutMultiplier (playerScore) = if ((playerScore == 9))
215215 then 101
216216 else if ((playerScore == 8))
217217 then 51
218218 else if ((playerScore == 7))
219219 then 21
220220 else if ((playerScore == 6))
221221 then 8
222222 else if ((playerScore == 5))
223223 then 6
224224 else if ((playerScore == 4))
225225 then 5
226226 else if ((playerScore == 3))
227227 then 4
228228 else if ((playerScore == 2))
229229 then 3
230230 else 2
231231
232232
233233 func whoHasHighestCard (allPlayerNumbers,allDealerNumbers) = if ((allDealerNumbers[4] > allPlayerNumbers[4]))
234234 then 2
235235 else if ((allPlayerNumbers[4] > allDealerNumbers[4]))
236236 then 1
237237 else if ((allDealerNumbers[3] > allPlayerNumbers[3]))
238238 then 2
239239 else if ((allPlayerNumbers[3] > allDealerNumbers[3]))
240240 then 1
241241 else if ((allDealerNumbers[2] > allPlayerNumbers[2]))
242242 then 2
243243 else if ((allPlayerNumbers[2] > allDealerNumbers[2]))
244244 then 1
245245 else if ((allDealerNumbers[1] > allPlayerNumbers[1]))
246246 then 2
247247 else if ((allPlayerNumbers[1] > allDealerNumbers[1]))
248248 then 1
249249 else if ((allDealerNumbers[0] > allPlayerNumbers[0]))
250250 then 2
251251 else if ((allPlayerNumbers[0] > allDealerNumbers[0]))
252252 then 1
253253 else 0
254254
255255
256256 func highestPairNumber (cardNumbers) = if ((cardNumbers[4] == cardNumbers[3]))
257257 then cardNumbers[4]
258258 else if ((cardNumbers[3] == cardNumbers[2]))
259259 then cardNumbers[3]
260260 else if ((cardNumbers[2] == cardNumbers[1]))
261261 then cardNumbers[2]
262262 else if ((cardNumbers[1] == cardNumbers[0]))
263263 then cardNumbers[1]
264264 else -1
265265
266266
267267 func lowestPairNumber (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
268268 then cardNumbers[1]
269269 else if ((cardNumbers[1] == cardNumbers[2]))
270270 then cardNumbers[1]
271271 else if ((cardNumbers[2] == cardNumbers[3]))
272272 then cardNumbers[2]
273273 else if ((cardNumbers[3] == cardNumbers[4]))
274274 then cardNumbers[3]
275275 else -1
276276
277277
278278 func getHighestNonPairNumber (cardNumbers) = if ((cardNumbers[4] != cardNumbers[3]))
279279 then cardNumbers[4]
280280 else if ((cardNumbers[2] != cardNumbers[1]))
281281 then cardNumbers[2]
282282 else cardNumbers[0]
283283
284284
285285 func secondHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[3] == cardNumbers[2]))
286286 then cardNumbers[1]
287287 else if ((cardNumbers[2] == cardNumbers[1]))
288288 then cardNumbers[3]
289289 else cardNumbers[2]
290290
291291
292292 func thirdHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
293293 then cardNumbers[2]
294294 else cardNumbers[0]
295295
296296
297297 func getPlayerPayout (playerHand,dealerHand,ante,playerScore) = {
298298 let playerCards = split(playerHand, "+")
299299 let playerValue = playerScore
300300 let dealerCards = split(dealerHand, "+")
301301 let dealerValue = getScore(dealerCards)
302302 let allPlayerNumbers = (((((nil :+ getNumber(playerCards[0])) :+ getNumber(playerCards[1])) :+ getNumber(playerCards[2])) :+ getNumber(playerCards[3])) :+ getNumber(playerCards[4]))
303303 let allDealerNumbers = (((((nil :+ getNumber(dealerCards[0])) :+ getNumber(dealerCards[1])) :+ getNumber(dealerCards[2])) :+ getNumber(dealerCards[3])) :+ getNumber(dealerCards[4]))
304304 if (if (if ((indexOf(dealerHand, "13") != unit))
305305 then (indexOf(dealerHand, "14") != unit)
306306 else false)
307307 then true
308308 else (dealerValue >= 1))
309309 then if ((playerValue == dealerValue))
310310 then if ((playerValue == 9))
311311 then (ante + (ante * 2))
312312 else if (if ((playerValue == 8))
313313 then true
314314 else (playerValue == 4))
315315 then if ((allDealerNumbers[4] > allPlayerNumbers[4]))
316316 then 0
317317 else if ((allDealerNumbers[4] == allPlayerNumbers[4]))
318318 then (ante + (ante * 2))
319319 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
320320 else if ((playerValue == 7))
321321 then if ((allDealerNumbers[1] > allPlayerNumbers[1]))
322322 then 0
323323 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
324324 else if ((playerValue == 6))
325325 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
326326 then 0
327327 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
328328 else if ((playerValue == 5))
329329 then {
330330 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
331331 if ((highestCardThere == 1))
332332 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
333333 else if ((highestCardThere == 2))
334334 then 0
335335 else (ante + (ante * 2))
336336 }
337337 else if ((playerValue == 3))
338338 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
339339 then 0
340340 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
341341 else if (if ((playerValue == 2))
342342 then true
343343 else (playerValue == 1))
344344 then {
345345 let playersHighestPair = highestPairNumber(allPlayerNumbers)
346346 let dealersHighestPair = highestPairNumber(allDealerNumbers)
347347 if ((dealersHighestPair > playersHighestPair))
348348 then 0
349349 else if ((playersHighestPair > dealersHighestPair))
350350 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
351351 else {
352352 let dealersHighestNonPair = getHighestNonPairNumber(allDealerNumbers)
353353 let playerssHighestNonPair = getHighestNonPairNumber(allPlayerNumbers)
354354 if ((playerValue == 2))
355355 then {
356356 let playersLowestPair = lowestPairNumber(allPlayerNumbers)
357357 let dealersLowestPair = lowestPairNumber(allDealerNumbers)
358358 if ((dealersLowestPair > playersLowestPair))
359359 then 0
360360 else if ((playersLowestPair > dealersLowestPair))
361361 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
362362 else if ((dealersHighestNonPair > playerssHighestNonPair))
363363 then 0
364364 else if ((playerssHighestNonPair > dealersHighestNonPair))
365365 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
366366 else (ante + (ante * 2))
367367 }
368368 else if ((dealersHighestNonPair > playerssHighestNonPair))
369369 then 0
370370 else if ((playerssHighestNonPair > dealersHighestNonPair))
371371 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
372372 else {
373373 let dealerssecondHighestNonPair = secondHighestNonPairOfPairHand(allDealerNumbers)
374374 let playerssecondHighestNonPair = secondHighestNonPairOfPairHand(allPlayerNumbers)
375375 if ((dealerssecondHighestNonPair > playerssecondHighestNonPair))
376376 then 0
377377 else if ((playerssecondHighestNonPair > dealerssecondHighestNonPair))
378378 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
379379 else {
380380 let dealersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allDealerNumbers)
381381 let playersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allPlayerNumbers)
382382 if ((dealersthirdHighestNonPair > playersthirdHighestNonPair))
383383 then 0
384384 else if ((playersthirdHighestNonPair > dealersthirdHighestNonPair))
385385 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
386386 else (ante + (ante * 2))
387387 }
388388 }
389389 }
390390 }
391391 else {
392392 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
393393 if ((highestCardThere == 1))
394394 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
395395 else if ((highestCardThere == 2))
396396 then 0
397397 else (ante + (ante * 2))
398398 }
399399 else if ((playerValue > dealerValue))
400400 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
401401 else 0
402402 else (ante * 4)
403403 }
404404
405405
406406 @Callable(i)
407407 func testPairSingleCards (orderedCards) = {
408408 let hand = split(orderedCards, "+")
409409 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
410410 throw(((((toString(getHighestNonPairNumber(allNumbers)) + "-") + toString(secondHighestNonPairOfPairHand(allNumbers))) + "-") + toString(thirdHighestNonPairOfPairHand(allNumbers))))
411411 }
412412
413413
414414
415415 @Callable(i)
416416 func testPayout (playerHand,dealerHand,ante,playerScore) = throw(toString(getPlayerPayout(playerHand, dealerHand, ante, playerScore)))
417417
418418
419419
420420 @Callable(i)
421421 func initGame () = if (checkPermission(i.callerPublicKey))
422422 then throw("initGame_FORBBIDEN")
423423 else match gamesSetupGetCounter() {
424424 case GAMESCOUNTER: Int =>
425425 throw("INIT_ALREADY_DONE")
426426 case _ =>
427427 [IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 300000000), StringEntry(dealerQueueLabel, "")]
428428 }
429429
430430
431431
432432 @Callable(i)
433433 func testScore (orderedCards) = throw((("Score is " + toString(getScore(split(orderedCards, "+")))) + "."))
434434
435435
436436
437437 @Callable(i)
438438 func testHighestPair (orderedCards) = {
439439 let hand = split(orderedCards, "+")
440440 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
441441 throw((("Highest Pairs is " + toString(highestPairNumber(allNumbers))) + "."))
442442 }
443443
444444
445445
446446 @Callable(i)
447447 func testLowestPair (orderedCards) = {
448448 let hand = split(orderedCards, "+")
449449 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
450450 throw((("Highest Pairs is " + toString(lowestPairNumber(allNumbers))) + "."))
451451 }
452452
453453
454454
455455 @Callable(i)
456456 func revealResults (currentGame,card3,dealerOrderedCards) = if (checkPermission(i.callerPublicKey))
457457 then throw("setupGame_FORBBIDEN")
458458 else {
459459 let dealerQueue = value(getDealerQueue())
460460 let nextGameToProcess = split(dealerQueue, ",")[1]
461461 if ((nextGameToProcess == toString(currentGame)))
462462 then if (verifyCard(card3, currentGame, 3))
463463 then {
464464 let ante = value(getGameAnteAmount(currentGame))
465465 let address = value(addressFromString(value(getGamePlayer(currentGame))))
466466 let playersOrderedCards = value(getGameSortedHandCards(currentGame, "PLAYER"))
467467 let payout = getPlayerPayout(playersOrderedCards, dealerOrderedCards, ante, value(getGameHandScore(currentGame, "PLAYER")))
468468 [IntegerEntry(getGameStateLabel(currentGame), 4), StringEntry(dealerQueueLabel, takeRight(dealerQueue, (size(dealerQueue) - (1 + size(toString(currentGame)))))), IntegerEntry(getGamePayoutLabel(currentGame), payout), StringEntry(getGameSortedHandLabel(currentGame, "DEALER"), dealerOrderedCards), ScriptTransfer(address, payout, unit)]
469469 }
470470 else throw("One of the cards failed to be verified.")
471471 else throw(("The next game to process is " + nextGameToProcess))
472472 }
473473
474474
475475
476476 @Callable(i)
477477 func foldOrRaise (action) = {
478478 let address = toBase58String(i.caller.bytes)
479479 if (if ((action != "fold"))
480480 then (action != "raise")
481481 else false)
482482 then throw("Invalid action.")
483483 else {
484484 let currentGame = value(getPlayerCurrentGame(address))
485485 if (value((getGameState(currentGame) != 2)))
486486 then throw("Game is not in correct state.")
487487 else if ((action == "raise"))
488488 then {
489489 let ante = value(getGameAnteAmount(currentGame))
490490 let pay = i.payments[0].amount
491491 if (if ((size(i.payments) != 1))
492492 then true
493493 else (pay != (ante * 2)))
494494 then throw((("Payment must be 2x the ante (" + toString((ante * 2))) + ")"))
495495 else [IntegerEntry(getGameStateLabel(currentGame), 3), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(currentGame)))]
496496 }
497497 else [IntegerEntry(getGameStateLabel(currentGame), 6)]
498498 }
499499 }
500500
501501
502502
503503 @Callable(i)
504504 func revealCards (currentGame,card0,card1,card2,playerOrderedCards) = if (checkPermission(i.callerPublicKey))
505505 then throw("setupGame_FORBBIDEN")
506506 else {
507507 let dealerQueue = value(getDealerQueue())
508508 let nextGameToProcess = split(dealerQueue, ",")[1]
509509 if ((nextGameToProcess == toString(currentGame)))
510510 then {
511511 let allPlayersCards = (card0 + card1)
512512 let orderedCards = split(playerOrderedCards, "+")
513513 if (true)
514514 then if (if (if (if ((value(getGameState(currentGame)) == 1))
515515 then verifyCard(card0, currentGame, 0)
516516 else false)
517517 then verifyCard(card1, currentGame, 1)
518518 else false)
519519 then verifyCard(card2, currentGame, 2)
520520 else false)
521521 then [StringEntry(getGameCardsLabel(currentGame, 2), card2), IntegerEntry(value(getGameStateLabel(currentGame)), 2), StringEntry(dealerQueueLabel, takeRight(dealerQueue, (size(dealerQueue) - (1 + size(toString(currentGame)))))), StringEntry(getGameSortedHandLabel(currentGame, "PLAYER"), playerOrderedCards), IntegerEntry(getGameHandScoreLabel(currentGame, "PLAYER"), getScore(orderedCards))]
522522 else throw("One of the cards failed to be verified or game is not in state 1.")
523523 else throw("Ordered cards should be sorted from smallest to largest.")
524524 }
525525 else throw(("The next game to process is " + nextGameToProcess))
526526 }
527527
528528
529529
530530 @Callable(i)
531531 func startGame () = if ((size(i.payments) != 1))
532532 then throw("Only one mayment allowed")
533533 else {
534534 let p = i.payments[0]
535535 let ante = p.amount
536536 let address = toBase58String(i.caller.bytes)
537537 if ((value(gamesUsedGetCounter()) >= value(gamesSetupGetCounter())))
538538 then throw("No available set up games to use.")
539539 else match getPlayerCurrentGame(address) {
540540 case CURRENTGAME: Int =>
541541 if ((4 > value(getGameState(CURRENTGAME))))
542542 then throw((("Game " + toString(CURRENTGAME)) + " is still in progress."))
543543 else createGameMetadata(address, ante)
544544 case _: Unit =>
545545 createGameMetadata(address, ante)
546546 case _ =>
547547 throw("Match error")
548548 }
549549 }
550550
551551
552552
553553 @Callable(i)
554554 func setupGame (gameNumber,cards0,cards1,cards2,cards3) = if (checkPermission(i.callerPublicKey))
555555 then throw("setupGame_FORBBIDEN")
556556 else match gamesSetupGetCounter() {
557557 case SETUPGAMESCOUNTER: Int =>
558558 let randomizer = (toInt(sha256((take(lastBlock.generationSignature, 16) + take(i.transactionId, 16)))) % 2)
559559 let currentGame = (SETUPGAMESCOUNTER + 1)
560560 if ((gameNumber != currentGame))
561561 then throw("Wrong game number.")
562562 else if (((randomizer % 2) == 1))
563563 then getGameSetup(currentGame, randomizer, cards3, cards2, cards1, cards0)
564564 else getGameSetup(currentGame, randomizer, cards0, cards1, cards2, cards3)
565565 case _ =>
566566 throw("InitGame Required")
567567 }
568568
569569
570570 @Verifier(tx)
571571 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
572572

github/deemru/w8io/3ef1775 
58.87 ms