tx · BWanVJgckQAFf94eBLJXHrZqRWdDhe5zJq7uqeLchx2L

3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk:  -0.01700000 Waves

2022.11.02 01:17 [2298643] smart account 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk > SELF 0.00000000 Waves

{ "type": 13, "id": "BWanVJgckQAFf94eBLJXHrZqRWdDhe5zJq7uqeLchx2L", "fee": 1700000, "feeAssetId": null, "timestamp": 1667341066976, "version": 2, "chainId": 84, "sender": "3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk", "senderPublicKey": "AR4BeE6hYADMvKxgRQs4ADN3krEqb2j8WE3WfJxzL3zE", "proofs": [ "4HCHUwYm445eJcdE4WTtKbc2qMKs9KiWAzxEcjUpHPipGWnyYKn1qsUcs3gkZDzLZFmVwYzWW1zYHK4nFciSx8RM" ], "script": "base64:BgJECAISAwoBCBIAEgMKAQgSAwoBCBIDCgEIEgcKBQgIAQEIEgMKAQgSBAoCCAgSBQoDCAgBEgMKAQgSAwoBCBIFCgMICAguAAV3YXZlcwCAwtcvAA50aWNrZXRQcmljZUludADAhD0AC3RpY2tldFByaWNlBQ50aWNrZXRQcmljZUludAAGaW52RmVlAKDCHgASd2l0aGRyYXdGZWVQZXJjZW50AAUAFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkCE2ZlZUNvbGxlY3RvckFkZHJlc3MAGXRvdXJuYW1lbnRCdXlJbkZlZVBlcmNlbnQACgAOZGVwb3NpdEFzc2V0SWQCLDV1ZTFmaXVWNmo2VUJyNlhmMjhRbXM2eTVGcXpLdHF2YXh4aHd1N2hUUTU4AB9hbGxvd2VkU3BlY2lhbFRvdXJuYW1lbnRDcmVhdG9yAiMzTkFlQldDWkZiQkRGTFlvOUdOSk5vRTVoUTNhTXNWNUtzTgENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAESZ2V0VGlja2V0c0NvdW50S2V5AQ1hZGRyZXNzU3RyaW5nCQCsAgIFDWFkZHJlc3NTdHJpbmcCDV90aWNrZXRzQ291bnQBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCDHRvdXJuYW1lbnRJZAdhY2NvdW50CQCsAgIJAKwCAgUMdG91cm5hbWVudElkAhdfYnV5SW5BbW91bnRGb3JBY2NvdW50XwUHYWNjb3VudAEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCDHRvdXJuYW1lbnRJZAdhY2NvdW50CQCsAgIJAKwCAgUMdG91cm5hbWVudElkAhhfYnV5SW5Bc3NldElkRm9yQWNjb3VudF8FB2FjY291bnQBHXRpY2tldEZvclRvdXJuYW1lbnRGb3JBY2NvdW50Agx0b3VybmFtZW50SWQHYWNjb3VudAkArAICCQCsAgIFDHRvdXJuYW1lbnRJZAISX3RpY2tldEZvckFjY291bnRfBQdhY2NvdW50ASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIkX3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50AS90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAItX3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50TWludXNGZWVzARR0b3VybmFtZW50Q3JlYXRvcktleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAISX3RvdXJuYW1lbnRDcmVhdG9yARF0b3VybmFtZW50TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIPX3RvdXJuYW1lbnROYW1lARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCFl90b3VybmFtZW50UHJpemVBbW91bnQBHHRvdXJuYW1lbnRNYXhQbGF5ZXJzQ291bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCGl90b3VybmFtZW50TWF4UGxheWVyc0NvdW50ARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudFBsYXllcnNDb3VudAEZdG91cm5hbWVudFByaXplQXNzZXRJZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIXX3RvdXJuYW1lbnRQcml6ZUFzc2V0SWQBG3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIZX3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZQEYdG91cm5hbWVudEJ1eUluQW1vdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhZfdG91cm5hbWVudEJ1eUluQW1vdW50ARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudEJ1eUluQXNzZXRJZAEbdG91cm5hbWVudEJ1eUluQXNzZXROYW1lS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhlfdG91cm5hbWVudEJ1eUluQXNzZXROYW1lAR90b3VybmFtZW50QnV5SW5Bc3NldERlY2ltYWxzS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAh1fdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFscwEfdG91cm5hbWVudFByaXplQXNzZXREZWNpbWFsc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIdX3RvdXJuYW1lbnRQcml6ZUFzc2V0RGVjaW1hbHMBE3RvdXJuYW1lbnRTdGF0dXNLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCEV90b3VybmFtZW50U3RhdHVzAR50b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCHF90b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWQBIHRvdXJuYW1lbnRTZXJ2aWNlRmVlQ29sbGVjdGVkS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAh5fdG91cm5hbWVudFNlcnZpY2VGZWVDb2xsZWN0ZWQBIXRvdXJuYW1lbnRXaW5uaW5nVHJhbnNhY3Rpb25JZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIfX3RvdXJuYW1lbnRXaW5uaW5nVHJhbnNhY3Rpb25JZAENZ2FtZVdpbm5lcktleQEGZ2FtZUlkCQCsAgIFBmdhbWVJZAIHX3dpbm5lcgEYYWRkcmVzc0F2YWlsYWJsZUZ1bmRzS2V5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCD19hdmFpbGFibGVGdW5kcwEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIRX3RvdGFsTG9ja2VkRnVuZHMBIWFkZHJlc3NMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeUtleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhhfbG9ja2VkRnVuZHNUb3RhbEhpc3RvcnkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCB2FkZHJlc3MGZ2FtZUlkCQCsAgIJAKwCAgUHYWRkcmVzcwINX2xvY2tlZEZ1bmRzXwUGZ2FtZUlkARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhFfYXZhaWxhYmxlUmV3YXJkcwEXdmlkZW9Qb2tlckJldEZvckFjY291bnQCBmdhbWVJZAdhY2NvdW50CQCsAgIJAKwCAgUGZ2FtZUlkAhJfdmlkZW9Qb2tlckJldEZvcl8FB2FjY291bnQBF3ZpZGVvUG9rZXJDYXJkc0RyYXduS2V5AQZnYW1lSWQJAKwCAgUGZ2FtZUlkAhVfdmlkZW9Qb2tlckNhcmRzRHJhd24BE3ZpZGVvUG9rZXJSZXN1bHRLZXkBBmdhbWVJZAkArAICBQZnYW1lSWQCEV92aWRlb1Bva2VyUmVzdWx0ARl2aWRlb1Bva2VyUmVzdWx0UHJvZml0S2V5AQZnYW1lSWQJAKwCAgUGZ2FtZUlkAhdfdmlkZW9Qb2tlclJlc3VsdFByb2ZpdAETdmlkZW9Qb2tlclN0YXR1c0tleQEGZ2FtZUlkCQCsAgIFBmdhbWVJZAIRX3ZpZGVvUG9rZXJTdGF0dXMBGnZpZGVvUG9rZXJQbGF5ZXJBZGRyZXNzS2V5AQZnYW1lSWQJAKwCAgUGZ2FtZUlkAhhfdmlkZW9Qb2tlclBsYXllckFkZHJlc3MBD2dldFRpY2tldHNDb3VudAENYWRkcmVzc1N0cmluZwkBDXRyeUdldEludGVnZXIBCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNYWRkcmVzc1N0cmluZwENY29uc3VtZVRpY2tldAEKcGxheWVyQWRkcgQSY3VycmVudFRpY2tldENvdW50CQEPZ2V0VGlja2V0c0NvdW50AQUKcGxheWVyQWRkcgQVbmV3Q3VycmVudFRpY2tldENvdW50CQBlAgUSY3VycmVudFRpY2tldENvdW50AAEDCQBmAgAABRVuZXdDdXJyZW50VGlja2V0Q291bnQAAAUVbmV3Q3VycmVudFRpY2tldENvdW50DAFpARZzZXRGZWVDb2xsZWN0b3JBZGRyZXNzAQ1jb2xsZWN0b3JBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQkAzAgCCQELU3RyaW5nRW50cnkCBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BQ1jb2xsZWN0b3JBZGRyBQNuaWwBaQEMZGVwb3NpdEZ1bmRzAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50AwkBAiE9AggFA3BtdAdhc3NldElkCQDZBAEFDmRlcG9zaXRBc3NldElkCQACAQIZWW91IGNhbiBvbmx5IGRlcG9zaXQgVVNETgQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAGQCBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMIBQNwbXQGYW1vdW50BQNuaWwAAQFpARhjYW5jZWxTaWduVXBUb1RvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAQQdG91cm5hbWVudFN0YXR1cwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQDCQECIT0CBRB0b3VybmFtZW50U3RhdHVzAgxyZWdpc3RyYXRpb24JAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMED3BhaWRCdXlJbkFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIEEHBhaWRCdXlJbkFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJASNidXlJbkFzc2V0SWRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgQdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQEGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQJAGUCCQENdHJ5R2V0SW50ZWdlcgEJASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAUPcGFpZEJ1eUluQW1vdW50BAlmZWVzVGFrZW4JAGsDBRl0b3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50BRl0b3VybmFtZW50QnV5SW5GZWVQZXJjZW50AGQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1jYWxsZXJBZGRyU3RyBQ9wYWlkQnV5SW5BbW91bnQJANkEAQUQcGFpZEJ1eUluQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEddGlja2V0Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBI2J1eUluQXNzZXRJZEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAZQIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBL3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50TWludXNGZWVzS2V5AQUMdG91cm5hbWVudElkCQBlAgUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAUJZmVlc1Rha2VuBQNuaWwAAQFpARJzaWduVXBUb1RvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAQPbWF4UGxheWVyc0NvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAQdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQEEHRvdXJuYW1lbnRTdGF0dXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAwMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgkBAiE9AgUQdG91cm5hbWVudFN0YXR1cwIHc3RhcnRlZAcJAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhAwkAAAIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50BQ9tYXhQbGF5ZXJzQ291bnQJAAIBAjVUb3VybmFtZW50IGlzIGN1cnJlbnRseSBmdWxsLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIQQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50BAxidXlJbkFzc2V0aWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEE2J1eUluUmVxdWlyZWRBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFGJ1eUluUmVxdWlyZWRBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAMJAQIhPQIFE2J1eUluUmVxdWlyZWRBbW91bnQIBQNwbXQGYW1vdW50CQACAQkArAICAixBdHRhY2hlZCBwYXltZW50IGFtb3VudCBpcyBpbnZhbGlkLCBtdXN0IGJlIAkApAMBBRNidXlJblJlcXVpcmVkQW1vdW50AwkBAiE9AgUUYnV5SW5SZXF1aXJlZEFzc2V0SWQFDGJ1eUluQXNzZXRpZAkAAgEJAKwCAgIuQXR0YWNoZWQgcGF5bWVudCBhc3NldCBpZCBpcyBpbnZhbGlkLCBtdXN0IGJlIAUUYnV5SW5SZXF1aXJlZEFzc2V0SWQEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkCAUDcG10BmFtb3VudAQJZmVlc1Rha2VuCQBrAwUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAUZdG91cm5hbWVudEJ1eUluRmVlUGVyY2VudABkCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAR10aWNrZXRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgYJAMwIAgkBDEludGVnZXJFbnRyeQIJASJidXlJbkFtb3VudEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyCAUDcG10BmFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIFDGJ1eUluQXNzZXRpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQJAGQCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEmdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRLZXkBBQx0b3VybmFtZW50SWQFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAS90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlc0tleQEFDHRvdXJuYW1lbnRJZAkAZQIFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQFCWZlZXNUYWtlbgUDbmlsAAEBaQEQY2FuY2VsVG91cm5hbWVudAEMdG91cm5hbWVudElkBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEXRvdXJuYW1lbnRDcmVhdG9yCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUdG91cm5hbWVudENyZWF0b3JLZXkBBQx0b3VybmFtZW50SWQEDGNyZWF0b3JDaGVjawMJAAACBRF0b3VybmFtZW50Q3JlYXRvcgUNY2FsbGVyQWRkclN0cgYDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECJk9ubHkgdG91cm5hbWVudCBjcmVhdG9yIGNhbiBjYW5jZWwgaXQhAwkAAAIFDGNyZWF0b3JDaGVjawUMY3JlYXRvckNoZWNrBBB0b3VybmFtZW50U3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgcJAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhBB1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAkBDXRyeUdldEludGVnZXIBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAMJAGYCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAAACQACAQJFQ2Fubm90IGNhbmNlbCBhIHRvdXJuYW1lbnQgd2hlbiBwbGF5ZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgdG8gaXQhBBV0b3VybmFtZW50UHJpemVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFnRvdXJuYW1lbnRQcml6ZUFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARl0b3VybmFtZW50UHJpemVBc3NldElkS2V5AQUMdG91cm5hbWVudElkCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGHRvdXJuYW1lbnRQcml6ZUFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudFByaXplQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEbdG91cm5hbWVudFByaXplQXNzZXROYW1lS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAR90b3VybmFtZW50UHJpemVBc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBG3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEfdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFsc0tleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQERdG91cm5hbWVudE5hbWVLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEXRvdXJuYW1lbnRDcmVhdG9yBRV0b3VybmFtZW50UHJpemVBbW91bnQJANkEAQUWdG91cm5hbWVudFByaXplQXNzZXRJZAUDbmlsAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY3JlYXRlVG91cm5hbWVudAUMdG91cm5hbWVudElkBG5hbWUMcGxheWVyc0NvdW50C2J1eUluQW1vdW50DGJ1eUluQXNzZXRJZAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAABA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQAAAgUNY2FsbGVyQWRkclN0cgUfYWxsb3dlZFNwZWNpYWxUb3VybmFtZW50Q3JlYXRvcgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQRdG91cm5hbWVudENyZWF0b3IEByRtYXRjaDAJAKIIAQkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQHY3JlYXRvcgUHJG1hdGNoMAkAAgEJAKwCAgInVG91cm5hbWVudCBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoaXMgaWQgBQx0b3VybmFtZW50SWQFBHVuaXQDCQAAAgURdG91cm5hbWVudENyZWF0b3IFEXRvdXJuYW1lbnRDcmVhdG9yBAxwcml6ZUFzc2V0SWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEDGFzc2V0RGV0YWlscwQHJG1hdGNoMAgFA3BtdAdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQEAWIFByRtYXRjaDAJAMwIAgIFV2F2ZXMJAMwIAgAIBQNuaWwDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAQHJG1hdGNoMQkA7AcBBQFiAwkAAQIFByRtYXRjaDECBUFzc2V0BAVhc3NldAUHJG1hdGNoMQkAzAgCCAUFYXNzZXQEbmFtZQkAzAgCCAUFYXNzZXQIZGVjaW1hbHMFA25pbAkAAgECEENhbid0IGZpbmQgYXNzZXQJAAIBAgtNYXRjaCBlcnJvcgQKYnV5SW5Bc3NldAQHJG1hdGNoMAkA7AcBCQDZBAEFDGJ1eUluQXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAJAMwIAggFBWFzc2V0BG5hbWUJAMwIAggFBWFzc2V0CGRlY2ltYWxzBQNuaWwJAMwIAgIACQDMCAIAAAUDbmlsBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGHRvdXJuYW1lbnRQcml6ZUFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARx0b3VybmFtZW50TWF4UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkBQxwbGF5ZXJzQ291bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXRvdXJuYW1lbnRQcml6ZUFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQFDHByaXplQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEbdG91cm5hbWVudFByaXplQXNzZXROYW1lS2V5AQUMdG91cm5hbWVudElkCgABQAkAkQMCBQxhc3NldERldGFpbHMAAAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJAMwIAgkBDEludGVnZXJFbnRyeQIJAR90b3VybmFtZW50UHJpemVBc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCgABQAkAkQMCBQxhc3NldERldGFpbHMAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQCDHJlZ2lzdHJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGHRvdXJuYW1lbnRCdXlJbkFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAULYnV5SW5BbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBG3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUKYnV5SW5Bc3NldAAAAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBH3RvdXJuYW1lbnRCdXlJbkFzc2V0RGVjaW1hbHNLZXkBBQx0b3VybmFtZW50SWQKAAFACQCRAwIFCmJ1eUluQXNzZXQAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQFDGJ1eUluQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQERdG91cm5hbWVudE5hbWVLZXkBBQx0b3VybmFtZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyBQNuaWwAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9zdGFydFRvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAIHc3RhcnRlZAUDbmlsAAEBaQEQZmluaXNoVG91cm5hbWVudAIMdG91cm5hbWVudElkHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQQRdG91cm5hbWVudENyZWF0b3IJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARR0b3VybmFtZW50Q3JlYXRvcktleQEFDHRvdXJuYW1lbnRJZAQadG91cm5hbWVudFRvdGFsQnV5SW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkBBV0b3VybmFtZW50QnV5SW5BbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFnRvdXJuYW1lbnRCdXlJbkFzc2V0SWQEByRtYXRjaDAJAKIIAQkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJpZAUHJG1hdGNoMAMJAAACBQJpZAIABQR1bml0CQDZBAEFAmlkBQR1bml0BBJ0b3VybmFtZW50QnV5SW5GZWUJAGsDBRp0b3VybmFtZW50VG90YWxCdXlJbkFtb3VudAUZdG91cm5hbWVudEJ1eUluRmVlUGVyY2VudABkBBV0b3VybmFtZW50UHJpemVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQDCQBmAgUVdG91cm5hbWVudFByaXplQW1vdW50AAAJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEhdG91cm5hbWVudFdpbm5pbmdUcmFuc2FjdGlvbklkS2V5AQUMdG91cm5hbWVudElkBR13aW5uaW5nVHJhbnNmZXJ0VHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAIIZmluaXNoZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAR50b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWRLZXkBBQx0b3VybmFtZW50SWQFEnRvdXJuYW1lbnRCdXlJbkZlZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBRF0b3VybmFtZW50Q3JlYXRvcgkAZQIFGnRvdXJuYW1lbnRUb3RhbEJ1eUluQW1vdW50BRJ0b3VybmFtZW50QnV5SW5GZWUFFnRvdXJuYW1lbnRCdXlJbkFzc2V0SWQFA25pbAABBApzZXJ2aWNlRmVlCQBrAwUSdG91cm5hbWVudEJ1eUluRmVlABQAZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBBQx0b3VybmFtZW50SWQFHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAghmaW5pc2hlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHnRvdXJuYW1lbnRCdXlJbkZlZUNvbGxlY3RlZEtleQEFDHRvdXJuYW1lbnRJZAUSdG91cm5hbWVudEJ1eUluRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEgdG91cm5hbWVudFNlcnZpY2VGZWVDb2xsZWN0ZWRLZXkBBQx0b3VybmFtZW50SWQFCnNlcnZpY2VGZWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQURdG91cm5hbWVudENyZWF0b3IJAGUCBRJ0b3VybmFtZW50QnV5SW5GZWUFCnNlcnZpY2VGZWUFFnRvdXJuYW1lbnRCdXlJbkFzc2V0SWQFA25pbAABAWkBDnBsYXllckV4aXRHYW1lAwZnYW1lSWQKcGxheWVyQWRkcg9leGl0U3RhY2tBbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpBZG1pbiBPbmx5BBdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwkBDXRyeUdldEludGVnZXIBCQEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBBQpwbGF5ZXJBZGRyBCBjdXJyZW50R2FtZUxvY2tlZEFtb3VudEZvclBsYXllcgkBDXRyeUdldEludGVnZXIBCQEcYWRkcmVzc0xvY2tlZEZ1bmRzRm9yR2FtZUtleQIFCnBsYXllckFkZHIFBmdhbWVJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBBQpwbGF5ZXJBZGRyCQBlAgUXY3VycmVudFRvdGFsTG9ja2VkRnVuZHMFIGN1cnJlbnRHYW1lTG9ja2VkQW1vdW50Rm9yUGxheWVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEcYWRkcmVzc0xvY2tlZEZ1bmRzRm9yR2FtZUtleQIFCnBsYXllckFkZHIFBmdhbWVJZAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCnBsYXllckFkZHIFD2V4aXRTdGFja0Ftb3VudAkA2QQBBQ5kZXBvc2l0QXNzZXRJZAUDbmlsAAEBaQEQbG9ja0Z1bmRzRm9yR2FtZQEGZ2FtZUlkBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQDCQECIT0CCAUDcG10B2Fzc2V0SWQJANkEAQUOZGVwb3NpdEFzc2V0SWQJAAIBAhlZb3UgY2FuIG9ubHkgZGVwb3NpdCBVU0ROBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEF2N1cnJlbnRUb3RhbExvY2tlZEZ1bmRzCQENdHJ5R2V0SW50ZWdlcgEJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIEHmN1cnJlbnRMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeQkBDXRyeUdldEludGVnZXIBCQEhYWRkcmVzc0xvY2tlZEZ1bmRzVG90YWxIaXN0b3J5S2V5AQUNY2FsbGVyQWRkclN0cgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBBQ1jYWxsZXJBZGRyU3RyCQBkAgUXY3VycmVudFRvdGFsTG9ja2VkRnVuZHMIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEhYWRkcmVzc0xvY2tlZEZ1bmRzVG90YWxIaXN0b3J5S2V5AQUNY2FsbGVyQWRkclN0cgkAZAIFHmN1cnJlbnRMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeQgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgUNY2FsbGVyQWRkclN0cgUGZ2FtZUlkCAUDcG10BmFtb3VudAUDbmlsAAEBaQETYmV0T25WaWRlb1Bva2VyR2FtZQEGZ2FtZUlkBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQDCQECIT0CCAUDcG10B2Fzc2V0SWQJANkEAQUOZGVwb3NpdEFzc2V0SWQJAAIBAhlZb3UgY2FuIG9ubHkgZGVwb3NpdCBVU0ROBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF3ZpZGVvUG9rZXJCZXRGb3JBY2NvdW50AgUGZ2FtZUlkBQ1jYWxsZXJBZGRyU3RyCAUDcG10BmFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEadmlkZW9Qb2tlclBsYXllckFkZHJlc3NLZXkBBQZnYW1lSWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE3ZpZGVvUG9rZXJTdGF0dXNLZXkBBQZnYW1lSWQCB2NyZWF0ZWQFA25pbAABAWkBFGZpbmlzaFZpZGVvUG9rZXJHYW1lAwZnYW1lSWQGcmVzdWx0CmNhcmRzRHJhd24DCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpBZG1pbiBPbmx5BApwbGF5ZXJBZGRyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEadmlkZW9Qb2tlclBsYXllckFkZHJlc3NLZXkBBQZnYW1lSWQECWJldEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBF3ZpZGVvUG9rZXJCZXRGb3JBY2NvdW50AgUGZ2FtZUlkBQpwbGF5ZXJBZGRyBBFjdXJyZW50R2FtZVN0YXR1cwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBE3ZpZGVvUG9rZXJTdGF0dXNLZXkBBQZnYW1lSWQEC2NoZWNrU3RhdHVzAwkAAAIFEWN1cnJlbnRHYW1lU3RhdHVzAgdjcmVhdGVkBgkAAgECIkdhbWUgaXMgbm90IGluIHRoZSBjb3JyZWN0IHN0YXR1cyEDCQAAAgULY2hlY2tTdGF0dXMFC2NoZWNrU3RhdHVzBA1iZXRNdWx0aXBsaWVyAwkAAAIFBnJlc3VsdAIJUGFpciwgSidzAAEDCQAAAgUGcmVzdWx0AglQYWlyLCBRJ3MAAQMJAAACBQZyZXN1bHQCCVBhaXIsIEsncwABAwkAAAIFBnJlc3VsdAIJUGFpciwgQSdzAAEDCQAAAgUGcmVzdWx0AghUd28gUGFpcgACAwkAAAIFBnJlc3VsdAIPVGhyZWUgb2YgYSBLaW5kAAMDCQAAAgUGcmVzdWx0AghTdHJhaWdodAAEAwkAAAIFBnJlc3VsdAIFRmx1c2gABgMJAAACBQZyZXN1bHQCCkZ1bGwgSG91c2UACQMJAAACBQZyZXN1bHQCDkZvdXIgb2YgYSBLaW5kABkDCQAAAgUGcmVzdWx0Ag5TdHJhaWdodCBGbHVzaAAyAwkAAAIFBnJlc3VsdAILUm95YWwgRmx1c2gAoAYAAAMJAAACBQ1iZXRNdWx0aXBsaWVyBQ1iZXRNdWx0aXBsaWVyBAlhbW91bnRXb24JAGgCBQliZXRBbW91bnQFDWJldE11bHRpcGxpZXIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEXdmlkZW9Qb2tlckNhcmRzRHJhd25LZXkBBQZnYW1lSWQFCmNhcmRzRHJhd24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE3ZpZGVvUG9rZXJSZXN1bHRLZXkBBQZnYW1lSWQFBnJlc3VsdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGXZpZGVvUG9rZXJSZXN1bHRQcm9maXRLZXkBBQZnYW1lSWQFCWFtb3VudFdvbgkAzAgCCQELU3RyaW5nRW50cnkCCQETdmlkZW9Qb2tlclN0YXR1c0tleQEFBmdhbWVJZAIIZmluaXNoZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcGxheWVyQWRkcgUJYW1vdW50V29uCQDZBAEFDmRlcG9zaXRBc3NldElkBQNuaWwAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmK6Iyn", "height": 2298643, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E4yBdPdMeMLNQjxQuP6isYfmmN63S2LEkLXDeJADG82M Next: B5sq4stVy35RAGNeZjbrCmegG5vTHHgktZDLj8edfdwD Diff:
OldNewDifferences
416416 else throw("Game is not in the correct status!")
417417 if ((checkStatus == checkStatus))
418418 then {
419- let betMultiplier = if ((result == "Pair"))
419+ let betMultiplier = if ((result == "Pair, J's"))
420420 then 1
421- else if ((result == "Two Pair"))
422- then 2
423- else if ((result == "Three of a Kind"))
424- then 3
425- else if ((result == "Straight"))
426- then 4
427- else if ((result == "Flush"))
428- then 6
429- else if ((result == "Full House"))
430- then 9
431- else if ((result == "Four of a Kind"))
432- then 25
433- else if ((result == "Straight Flush"))
434- then 50
435- else if ((result == "Royal Flush"))
436- then 800
437- else 0
421+ else if ((result == "Pair, Q's"))
422+ then 1
423+ else if ((result == "Pair, K's"))
424+ then 1
425+ else if ((result == "Pair, A's"))
426+ then 1
427+ else if ((result == "Two Pair"))
428+ then 2
429+ else if ((result == "Three of a Kind"))
430+ then 3
431+ else if ((result == "Straight"))
432+ then 4
433+ else if ((result == "Flush"))
434+ then 6
435+ else if ((result == "Full House"))
436+ then 9
437+ else if ((result == "Four of a Kind"))
438+ then 25
439+ else if ((result == "Straight Flush"))
440+ then 50
441+ else if ((result == "Royal Flush"))
442+ then 800
443+ else 0
438444 if ((betMultiplier == betMultiplier))
439445 then {
440446 let amountWon = (betAmount * betMultiplier)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let waves = 100000000
55
66 let ticketPriceInt = 1000000
77
88 let ticketPrice = ticketPriceInt
99
1010 let invFee = 500000
1111
1212 let withdrawFeePercent = 5
1313
1414 let feeCollectorAddressKey = "feeCollectorAddress"
1515
1616 let tournamentBuyInFeePercent = 10
1717
1818 let depositAssetId = "5ue1fiuV6j6UBr6Xf28Qms6y5FqzKtqvaxxhwu7hTQ58"
1919
2020 let allowedSpecialTournamentCreator = "3NAeBWCZFbBDFLYo9GNJNoE5hQ3aMsV5KsN"
2121
2222 func tryGetInteger (key) = match getInteger(this, key) {
2323 case b: Int =>
2424 b
2525 case _ =>
2626 0
2727 }
2828
2929
3030 func getTicketsCountKey (addressString) = (addressString + "_ticketsCount")
3131
3232
3333 func buyInAmountForTournamentForAccount (tournamentId,account) = ((tournamentId + "_buyInAmountForAccount_") + account)
3434
3535
3636 func buyInAssetIdForTournamentForAccount (tournamentId,account) = ((tournamentId + "_buyInAssetIdForAccount_") + account)
3737
3838
3939 func ticketForTournamentForAccount (tournamentId,account) = ((tournamentId + "_ticketForAccount_") + account)
4040
4141
4242 func tournamentTotalBuyInCollectedAmountKey (tournamentId) = (tournamentId + "_tournamentTotalBuyInCollectedAmount")
4343
4444
4545 func tournamentTotalBuyInCollectedAmountMinusFeesKey (tournamentId) = (tournamentId + "_tournamentTotalBuyInCollectedAmountMinusFees")
4646
4747
4848 func tournamentCreatorKey (tournamentId) = (tournamentId + "_tournamentCreator")
4949
5050
5151 func tournamentNameKey (tournamentId) = (tournamentId + "_tournamentName")
5252
5353
5454 func tournamentPrizeAmountKey (tournamentId) = (tournamentId + "_tournamentPrizeAmount")
5555
5656
5757 func tournamentMaxPlayersCountKey (tournamentId) = (tournamentId + "_tournamentMaxPlayersCount")
5858
5959
6060 func tournamentPlayersCountKey (tournamentId) = (tournamentId + "_tournamentPlayersCount")
6161
6262
6363 func tournamentPrizeAssetIdKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetId")
6464
6565
6666 func tournamentPrizeAssetNameKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetName")
6767
6868
6969 func tournamentBuyInAmountKey (tournamentId) = (tournamentId + "_tournamentBuyInAmount")
7070
7171
7272 func tournamentBuyInAssetIdKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetId")
7373
7474
7575 func tournamentBuyInAssetNameKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetName")
7676
7777
7878 func tournamentBuyInAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetDecimals")
7979
8080
8181 func tournamentPrizeAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetDecimals")
8282
8383
8484 func tournamentStatusKey (tournamentId) = (tournamentId + "_tournamentStatus")
8585
8686
8787 func tournamentBuyInFeeCollectedKey (tournamentId) = (tournamentId + "_tournamentBuyInFeeCollected")
8888
8989
9090 func tournamentServiceFeeCollectedKey (tournamentId) = (tournamentId + "_tournamentServiceFeeCollected")
9191
9292
9393 func tournamentWinningTransactionIdKey (tournamentId) = (tournamentId + "_tournamentWinningTransactionId")
9494
9595
9696 func gameWinnerKey (gameId) = (gameId + "_winner")
9797
9898
9999 func addressAvailableFundsKey (address) = (address + "_availableFunds")
100100
101101
102102 func addressTotalLockedFundsKey (address) = (address + "_totalLockedFunds")
103103
104104
105105 func addressLockedFundsTotalHistoryKey (address) = (address + "_lockedFundsTotalHistory")
106106
107107
108108 func addressLockedFundsForGameKey (address,gameId) = ((address + "_lockedFunds_") + gameId)
109109
110110
111111 func addressAvailableRewardsKey (address) = (address + "_availableRewards")
112112
113113
114114 func videoPokerBetForAccount (gameId,account) = ((gameId + "_videoPokerBetFor_") + account)
115115
116116
117117 func videoPokerCardsDrawnKey (gameId) = (gameId + "_videoPokerCardsDrawn")
118118
119119
120120 func videoPokerResultKey (gameId) = (gameId + "_videoPokerResult")
121121
122122
123123 func videoPokerResultProfitKey (gameId) = (gameId + "_videoPokerResultProfit")
124124
125125
126126 func videoPokerStatusKey (gameId) = (gameId + "_videoPokerStatus")
127127
128128
129129 func videoPokerPlayerAddressKey (gameId) = (gameId + "_videoPokerPlayerAddress")
130130
131131
132132 func getTicketsCount (addressString) = tryGetInteger(getTicketsCountKey(addressString))
133133
134134
135135 func consumeTicket (playerAddr) = {
136136 let currentTicketCount = getTicketsCount(playerAddr)
137137 let newCurrentTicketCount = (currentTicketCount - 1)
138138 if ((0 > newCurrentTicketCount))
139139 then 0
140140 else newCurrentTicketCount
141141 }
142142
143143
144144 @Callable(i)
145145 func setFeeCollectorAddress (collectorAddr) = if ((i.caller != this))
146146 then throw("Admin Only")
147147 else [StringEntry(feeCollectorAddressKey, collectorAddr)]
148148
149149
150150
151151 @Callable(i)
152152 func depositFunds () = {
153153 let pmt = if ((size(i.payments) == 1))
154154 then i.payments[0]
155155 else throw("Please attach exactly one payment")
156156 if ((pmt.assetId != fromBase58String(depositAssetId)))
157157 then throw("You can only deposit USDN")
158158 else {
159159 let callerAddrStr = toBase58String(i.caller.bytes)
160160 let currentAvailableFunds = tryGetInteger(addressAvailableFundsKey(callerAddrStr))
161161 $Tuple2([IntegerEntry(addressAvailableFundsKey(callerAddrStr), (currentAvailableFunds + pmt.amount))], 1)
162162 }
163163 }
164164
165165
166166
167167 @Callable(i)
168168 func cancelSignUpToTournament (tournamentId) = {
169169 let tournamentStatus = getStringValue(tournamentStatusKey(tournamentId))
170170 if ((tournamentStatus != "registration"))
171171 then throw("Tournament is not in registration phase!")
172172 else {
173173 let callerAddrStr = toBase58String(i.caller.bytes)
174174 let paidBuyInAmount = getIntegerValue(buyInAmountForTournamentForAccount(tournamentId, callerAddrStr))
175175 let paidBuyInAssetId = getStringValue(buyInAssetIdForTournamentForAccount(tournamentId, callerAddrStr))
176176 let alreadyRegisteredPlayersCount = tryGetInteger(tournamentPlayersCountKey(tournamentId))
177177 let totalBuyInCollectedAmount = (tryGetInteger(tournamentTotalBuyInCollectedAmountKey(tournamentId)) - paidBuyInAmount)
178178 let feesTaken = fraction(totalBuyInCollectedAmount, tournamentBuyInFeePercent, 100)
179179 $Tuple2([ScriptTransfer(addressFromStringValue(callerAddrStr), paidBuyInAmount, fromBase58String(paidBuyInAssetId)), DeleteEntry(ticketForTournamentForAccount(tournamentId, callerAddrStr)), DeleteEntry(buyInAmountForTournamentForAccount(tournamentId, callerAddrStr)), DeleteEntry(buyInAssetIdForTournamentForAccount(tournamentId, callerAddrStr)), IntegerEntry(tournamentPlayersCountKey(tournamentId), (alreadyRegisteredPlayersCount - 1)), IntegerEntry(tournamentTotalBuyInCollectedAmountKey(tournamentId), totalBuyInCollectedAmount), IntegerEntry(tournamentTotalBuyInCollectedAmountMinusFeesKey(tournamentId), (totalBuyInCollectedAmount - feesTaken))], 1)
180180 }
181181 }
182182
183183
184184
185185 @Callable(i)
186186 func signUpToTournament (tournamentId) = {
187187 let maxPlayersCount = getIntegerValue(this, tournamentMaxPlayersCountKey(tournamentId))
188188 let alreadyRegisteredPlayersCount = tryGetInteger(tournamentPlayersCountKey(tournamentId))
189189 let tournamentStatus = getStringValue(tournamentStatusKey(tournamentId))
190190 if (if ((tournamentStatus != "registration"))
191191 then (tournamentStatus != "started")
192192 else false)
193193 then throw("Tournament is not in registration phase!")
194194 else if ((alreadyRegisteredPlayersCount == maxPlayersCount))
195195 then throw("Tournament is currently full, please try again later!")
196196 else {
197197 let pmt = if ((size(i.payments) == 1))
198198 then i.payments[0]
199199 else throw("Please attach exactly one payment")
200200 let buyInAssetid = match pmt.assetId {
201201 case b: Unit =>
202202 ""
203203 case b: ByteVector =>
204204 toBase58String(b)
205205 case _ =>
206206 throw("Match error")
207207 }
208208 let buyInRequiredAmount = getIntegerValue(this, tournamentBuyInAmountKey(tournamentId))
209209 let buyInRequiredAssetId = getStringValue(this, tournamentBuyInAssetIdKey(tournamentId))
210210 if ((buyInRequiredAmount != pmt.amount))
211211 then throw(("Attached payment amount is invalid, must be " + toString(buyInRequiredAmount)))
212212 else if ((buyInRequiredAssetId != buyInAssetid))
213213 then throw(("Attached payment asset id is invalid, must be " + buyInRequiredAssetId))
214214 else {
215215 let callerAddrStr = toBase58String(i.caller.bytes)
216216 let totalBuyInCollectedAmount = (tryGetInteger(tournamentTotalBuyInCollectedAmountKey(tournamentId)) + pmt.amount)
217217 let feesTaken = fraction(totalBuyInCollectedAmount, tournamentBuyInFeePercent, 100)
218218 $Tuple2([BooleanEntry(ticketForTournamentForAccount(tournamentId, callerAddrStr), true), IntegerEntry(buyInAmountForTournamentForAccount(tournamentId, callerAddrStr), pmt.amount), StringEntry(buyInAssetIdForTournamentForAccount(tournamentId, callerAddrStr), buyInAssetid), IntegerEntry(tournamentPlayersCountKey(tournamentId), (alreadyRegisteredPlayersCount + 1)), IntegerEntry(tournamentTotalBuyInCollectedAmountKey(tournamentId), totalBuyInCollectedAmount), IntegerEntry(tournamentTotalBuyInCollectedAmountMinusFeesKey(tournamentId), (totalBuyInCollectedAmount - feesTaken))], 1)
219219 }
220220 }
221221 }
222222
223223
224224
225225 @Callable(i)
226226 func cancelTournament (tournamentId) = {
227227 let callerAddrStr = toBase58String(i.caller.bytes)
228228 let tournamentCreator = getStringValue(tournamentCreatorKey(tournamentId))
229229 let creatorCheck = if ((tournamentCreator == callerAddrStr))
230230 then true
231231 else if ((i.caller == this))
232232 then true
233233 else throw("Only tournament creator can cancel it!")
234234 if ((creatorCheck == creatorCheck))
235235 then {
236236 let tournamentStatus = getStringValue(tournamentStatusKey(tournamentId))
237237 if (if ((i.caller != this))
238238 then (tournamentStatus != "registration")
239239 else false)
240240 then throw("Tournament is not in registration phase!")
241241 else {
242242 let alreadyRegisteredPlayersCount = tryGetInteger(tournamentPlayersCountKey(tournamentId))
243243 if ((alreadyRegisteredPlayersCount > 0))
244244 then throw("Cannot cancel a tournament when players are already registered to it!")
245245 else {
246246 let tournamentPrizeAmount = getIntegerValue(tournamentPrizeAmountKey(tournamentId))
247247 let tournamentPrizeAssetId = getStringValue(tournamentPrizeAssetIdKey(tournamentId))
248248 $Tuple2([DeleteEntry(tournamentPrizeAmountKey(tournamentId)), DeleteEntry(tournamentPlayersCountKey(tournamentId)), DeleteEntry(tournamentMaxPlayersCountKey(tournamentId)), DeleteEntry(tournamentPrizeAssetIdKey(tournamentId)), DeleteEntry(tournamentPrizeAssetNameKey(tournamentId)), DeleteEntry(tournamentPrizeAssetDecimalsKey(tournamentId)), DeleteEntry(tournamentStatusKey(tournamentId)), DeleteEntry(tournamentBuyInAmountKey(tournamentId)), DeleteEntry(tournamentBuyInAssetNameKey(tournamentId)), DeleteEntry(tournamentBuyInAssetDecimalsKey(tournamentId)), DeleteEntry(tournamentBuyInAssetIdKey(tournamentId)), DeleteEntry(tournamentNameKey(tournamentId)), DeleteEntry(tournamentCreatorKey(tournamentId)), ScriptTransfer(addressFromStringValue(tournamentCreator), tournamentPrizeAmount, fromBase58String(tournamentPrizeAssetId))], 1)
249249 }
250250 }
251251 }
252252 else throw("Strict value is not equal to itself.")
253253 }
254254
255255
256256
257257 @Callable(i)
258258 func createTournament (tournamentId,name,playersCount,buyInAmount,buyInAssetId) = {
259259 let pmt = if ((size(i.payments) == 1))
260260 then i.payments[0]
261261 else {
262262 let callerAddrStr = toBase58String(i.caller.bytes)
263263 if ((callerAddrStr == allowedSpecialTournamentCreator))
264264 then AttachedPayment(unit, 0)
265265 else throw("Please attach exactly one payment")
266266 }
267267 let tournamentCreator = match getString(tournamentCreatorKey(tournamentId)) {
268268 case creator: String =>
269269 throw(("Tournament already exists with this id " + tournamentId))
270270 case _ =>
271271 unit
272272 }
273273 if ((tournamentCreator == tournamentCreator))
274274 then {
275275 let prizeAssetId = match pmt.assetId {
276276 case b: Unit =>
277277 ""
278278 case b: ByteVector =>
279279 toBase58String(b)
280280 case _ =>
281281 throw("Match error")
282282 }
283283 let assetDetails = match pmt.assetId {
284284 case b: Unit =>
285285 ["Waves", 8]
286286 case b: ByteVector =>
287287 match assetInfo(b) {
288288 case asset: Asset =>
289289 [asset.name, asset.decimals]
290290 case _ =>
291291 throw("Can't find asset")
292292 }
293293 case _ =>
294294 throw("Match error")
295295 }
296296 let buyInAsset = match assetInfo(fromBase58String(buyInAssetId)) {
297297 case asset: Asset =>
298298 [asset.name, asset.decimals]
299299 case _ =>
300300 ["", 0]
301301 }
302302 let callerAddrStr = toBase58String(i.caller.bytes)
303303 $Tuple2([IntegerEntry(tournamentPrizeAmountKey(tournamentId), pmt.amount), IntegerEntry(tournamentPlayersCountKey(tournamentId), 0), IntegerEntry(tournamentMaxPlayersCountKey(tournamentId), playersCount), StringEntry(tournamentPrizeAssetIdKey(tournamentId), prizeAssetId), StringEntry(tournamentPrizeAssetNameKey(tournamentId), {
304304 let @ = assetDetails[0]
305305 if ($isInstanceOf(@, "String"))
306306 then @
307307 else throw(($getType(@) + " couldn't be cast to String"))
308308 }), IntegerEntry(tournamentPrizeAssetDecimalsKey(tournamentId), {
309309 let @ = assetDetails[1]
310310 if ($isInstanceOf(@, "Int"))
311311 then @
312312 else throw(($getType(@) + " couldn't be cast to Int"))
313313 }), StringEntry(tournamentStatusKey(tournamentId), "registration"), IntegerEntry(tournamentBuyInAmountKey(tournamentId), buyInAmount), StringEntry(tournamentBuyInAssetNameKey(tournamentId), {
314314 let @ = buyInAsset[0]
315315 if ($isInstanceOf(@, "String"))
316316 then @
317317 else throw(($getType(@) + " couldn't be cast to String"))
318318 }), IntegerEntry(tournamentBuyInAssetDecimalsKey(tournamentId), {
319319 let @ = buyInAsset[1]
320320 if ($isInstanceOf(@, "Int"))
321321 then @
322322 else throw(($getType(@) + " couldn't be cast to Int"))
323323 }), StringEntry(tournamentBuyInAssetIdKey(tournamentId), buyInAssetId), StringEntry(tournamentNameKey(tournamentId), name), StringEntry(tournamentCreatorKey(tournamentId), callerAddrStr)], 1)
324324 }
325325 else throw("Strict value is not equal to itself.")
326326 }
327327
328328
329329
330330 @Callable(i)
331331 func startTournament (tournamentId) = if ((i.caller != this))
332332 then throw("Admin Only")
333333 else $Tuple2([StringEntry(tournamentStatusKey(tournamentId), "started")], 1)
334334
335335
336336
337337 @Callable(i)
338338 func finishTournament (tournamentId,winningTransfertTransactionId) = if ((i.caller != this))
339339 then throw("Admin Only")
340340 else {
341341 let tournamentCreator = getStringValue(tournamentCreatorKey(tournamentId))
342342 let tournamentTotalBuyInAmount = tryGetInteger(tournamentTotalBuyInCollectedAmountKey(tournamentId))
343343 let tournamentBuyInAmount = getIntegerValue(tournamentBuyInAmountKey(tournamentId))
344344 let tournamentBuyInAssetId = match getString(tournamentBuyInAssetIdKey(tournamentId)) {
345345 case id: String =>
346346 if ((id == ""))
347347 then unit
348348 else fromBase58String(id)
349349 case _ =>
350350 unit
351351 }
352352 let tournamentBuyInFee = fraction(tournamentTotalBuyInAmount, tournamentBuyInFeePercent, 100)
353353 let tournamentPrizeAmount = getIntegerValue(tournamentPrizeAmountKey(tournamentId))
354354 if ((tournamentPrizeAmount > 0))
355355 then $Tuple2([StringEntry(tournamentWinningTransactionIdKey(tournamentId), winningTransfertTransactionId), StringEntry(tournamentStatusKey(tournamentId), "finished"), IntegerEntry(tournamentBuyInFeeCollectedKey(tournamentId), tournamentBuyInFee), ScriptTransfer(addressFromStringValue(tournamentCreator), (tournamentTotalBuyInAmount - tournamentBuyInFee), tournamentBuyInAssetId)], 1)
356356 else {
357357 let serviceFee = fraction(tournamentBuyInFee, 20, 100)
358358 $Tuple2([StringEntry(tournamentWinningTransactionIdKey(tournamentId), winningTransfertTransactionId), StringEntry(tournamentStatusKey(tournamentId), "finished"), IntegerEntry(tournamentBuyInFeeCollectedKey(tournamentId), tournamentBuyInFee), IntegerEntry(tournamentServiceFeeCollectedKey(tournamentId), serviceFee), ScriptTransfer(addressFromStringValue(tournamentCreator), (tournamentBuyInFee - serviceFee), tournamentBuyInAssetId)], 1)
359359 }
360360 }
361361
362362
363363
364364 @Callable(i)
365365 func playerExitGame (gameId,playerAddr,exitStackAmount) = if ((i.caller != this))
366366 then throw("Admin Only")
367367 else {
368368 let currentTotalLockedFunds = tryGetInteger(addressTotalLockedFundsKey(playerAddr))
369369 let currentGameLockedAmountForPlayer = tryGetInteger(addressLockedFundsForGameKey(playerAddr, gameId))
370370 $Tuple2([IntegerEntry(addressTotalLockedFundsKey(playerAddr), (currentTotalLockedFunds - currentGameLockedAmountForPlayer)), IntegerEntry(addressLockedFundsForGameKey(playerAddr, gameId), 0), ScriptTransfer(addressFromStringValue(playerAddr), exitStackAmount, fromBase58String(depositAssetId))], 1)
371371 }
372372
373373
374374
375375 @Callable(i)
376376 func lockFundsForGame (gameId) = {
377377 let pmt = if ((size(i.payments) == 1))
378378 then i.payments[0]
379379 else throw("Please attach exactly one payment")
380380 if ((pmt.assetId != fromBase58String(depositAssetId)))
381381 then throw("You can only deposit USDN")
382382 else {
383383 let callerAddrStr = toBase58String(i.caller.bytes)
384384 let currentTotalLockedFunds = tryGetInteger(addressTotalLockedFundsKey(callerAddrStr))
385385 let currentLockedFundsTotalHistory = tryGetInteger(addressLockedFundsTotalHistoryKey(callerAddrStr))
386386 $Tuple2([IntegerEntry(addressTotalLockedFundsKey(callerAddrStr), (currentTotalLockedFunds + pmt.amount)), IntegerEntry(addressLockedFundsTotalHistoryKey(callerAddrStr), (currentLockedFundsTotalHistory + pmt.amount)), IntegerEntry(addressLockedFundsForGameKey(callerAddrStr, gameId), pmt.amount)], 1)
387387 }
388388 }
389389
390390
391391
392392 @Callable(i)
393393 func betOnVideoPokerGame (gameId) = {
394394 let pmt = if ((size(i.payments) == 1))
395395 then i.payments[0]
396396 else throw("Please attach exactly one payment")
397397 if ((pmt.assetId != fromBase58String(depositAssetId)))
398398 then throw("You can only deposit USDN")
399399 else {
400400 let callerAddrStr = toBase58String(i.caller.bytes)
401401 $Tuple2([IntegerEntry(videoPokerBetForAccount(gameId, callerAddrStr), pmt.amount), StringEntry(videoPokerPlayerAddressKey(gameId), callerAddrStr), StringEntry(videoPokerStatusKey(gameId), "created")], 1)
402402 }
403403 }
404404
405405
406406
407407 @Callable(i)
408408 func finishVideoPokerGame (gameId,result,cardsDrawn) = if ((i.caller != this))
409409 then throw("Admin Only")
410410 else {
411411 let playerAddr = getStringValue(videoPokerPlayerAddressKey(gameId))
412412 let betAmount = getIntegerValue(videoPokerBetForAccount(gameId, playerAddr))
413413 let currentGameStatus = getStringValue(videoPokerStatusKey(gameId))
414414 let checkStatus = if ((currentGameStatus == "created"))
415415 then true
416416 else throw("Game is not in the correct status!")
417417 if ((checkStatus == checkStatus))
418418 then {
419- let betMultiplier = if ((result == "Pair"))
419+ let betMultiplier = if ((result == "Pair, J's"))
420420 then 1
421- else if ((result == "Two Pair"))
422- then 2
423- else if ((result == "Three of a Kind"))
424- then 3
425- else if ((result == "Straight"))
426- then 4
427- else if ((result == "Flush"))
428- then 6
429- else if ((result == "Full House"))
430- then 9
431- else if ((result == "Four of a Kind"))
432- then 25
433- else if ((result == "Straight Flush"))
434- then 50
435- else if ((result == "Royal Flush"))
436- then 800
437- else 0
421+ else if ((result == "Pair, Q's"))
422+ then 1
423+ else if ((result == "Pair, K's"))
424+ then 1
425+ else if ((result == "Pair, A's"))
426+ then 1
427+ else if ((result == "Two Pair"))
428+ then 2
429+ else if ((result == "Three of a Kind"))
430+ then 3
431+ else if ((result == "Straight"))
432+ then 4
433+ else if ((result == "Flush"))
434+ then 6
435+ else if ((result == "Full House"))
436+ then 9
437+ else if ((result == "Four of a Kind"))
438+ then 25
439+ else if ((result == "Straight Flush"))
440+ then 50
441+ else if ((result == "Royal Flush"))
442+ then 800
443+ else 0
438444 if ((betMultiplier == betMultiplier))
439445 then {
440446 let amountWon = (betAmount * betMultiplier)
441447 $Tuple2([StringEntry(videoPokerCardsDrawnKey(gameId), cardsDrawn), StringEntry(videoPokerResultKey(gameId), result), IntegerEntry(videoPokerResultProfitKey(gameId), amountWon), StringEntry(videoPokerStatusKey(gameId), "finished"), ScriptTransfer(addressFromStringValue(playerAddr), amountWon, fromBase58String(depositAssetId))], 1)
442448 }
443449 else throw("Strict value is not equal to itself.")
444450 }
445451 else throw("Strict value is not equal to itself.")
446452 }
447453
448454
449455 @Verifier(tx)
450456 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
451457

github/deemru/w8io/873ac7e 
53.08 ms