tx · BPKzkz8jbY8vaShrYrbZo7UW6fxZkXjgyNid5B9xbCC2

3N33NL4BGxFEEiXKgnENVRDiE3RwkYmaNmS:  -0.02900000 Waves

2023.03.19 16:36 [2496963] smart account 3N33NL4BGxFEEiXKgnENVRDiE3RwkYmaNmS > SELF 0.00000000 Waves

{ "type": 13, "id": "BPKzkz8jbY8vaShrYrbZo7UW6fxZkXjgyNid5B9xbCC2", "fee": 2900000, "feeAssetId": null, "timestamp": 1679232909016, "version": 2, "chainId": 84, "sender": "3N33NL4BGxFEEiXKgnENVRDiE3RwkYmaNmS", "senderPublicKey": "FeKA4QnfyZ9Q6eep2FDJEZxFr8cn1tbStnN5SJeEnPaB", "proofs": [ "59YoGGpVyJPjcyBfxMp2uv3Saq6jYutZVMPMrFfXusCHfXuHdHZz5kbthEfCHABEjcQK9SyYNr2uPHBK9WgVHKWG" ], "script": "base64:BgJTCAISBQoDAQgBEgQKAgEYEgoKCAEBAQgIGAgBEgkKBwEBAQgICAESBAoCAQESBAoCAQESAwoBCBIDCgEBEgQKAgEIEgQKAgEBEgQKAgEBEgMKAQh0AAlTRVBBUkFUT1ICAl9fAA5BUkdTX1NFUEFSQVRPUgIEIyMjIwAIS0VZX0lOSVQCBElOSVQADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwASS0VZX1BST1hZX1NFQ19ERVBPAhZQUk9YWV9TRUNVUklUWV9ERVBPU0lUABxLRVlfUFJPWFlfU0VDX0RFUE9fUEVSX0VWRU5UAiBQUk9YWV9TRUNVUklUWV9ERVBPU0lUX1BFUl9FVkVOVAAOS0VZX0VWRU5UX1RZUEUCCkVWRU5UX1RZUEUAD0tFWV9XQVZFU19FVkVOVAILV0FWRVNfRVZFTlQADUtFWV9FVk1fRVZFTlQCCUVWTV9FVkVOVAAUS0VZX1dBVkVTX0VWRU5UX1NJWkUCEFdBVkVTX0VWRU5UX1NJWkUAEktFWV9FVk1fRVZFTlRfU0laRQIORVZNX0VWRU5UX1NJWkUAFktFWV9XQVZFU19FVkVOVF9TVEFUVVMCEldBVkVTX0VWRU5UX1NUQVRVUwAUS0VZX0VWTV9FVkVOVF9TVEFUVVMCEEVWTV9FVkVOVF9TVEFUVVMAGUtFWV9XQVZFU19FVkVOVF9QVUJMSVNIRUQCFVdBVkVTX0VWRU5UX1BVQkxJU0hFRAAXS0VZX0VWTV9FVkVOVF9QVUJMSVNIRUQCE0VWTV9FVkVOVF9QVUJMSVNIRUQAEUtFWV9DVVJSRU5UX0VQT0NIAg1DVVJSRU5UX0VQT0NIAAhLRVlfU0laRQIEU0laRQAWS0VZX1dBVkVTX0VWRU5UX0NBTExFUgISV0FWRVNfRVZFTlRfQ0FMTEVSABRLRVlfRVZNX0VWRU5UX0NBTExFUgIQRVZNX0VWRU5UX0NBTExFUgAXS0VZX1dJVE5FU1NFU19QRVJfRVBPQ0gCE1dJVE5FU1NFU19QRVJfRVBPQ0gAGEtFWV9XQVZFU19FVkVOVF9FWEVDVVRPUgIUV0FWRVNfRVZFTlRfRVhFQ1VUT1IAFktFWV9FVk1fRVZFTlRfRVhFQ1VUT1ICEkVWTV9FVkVOVF9FWEVDVVRPUgAYS0VZX1JFV0FSRF9UT0tFTl9BRERSRVNTAhRSRVdBUkRfVE9LRU5fQUREUkVTUwARS0VZX1JFV0FSRF9BTU9VTlQCDVJFV0FSRF9BTU9VTlQADkZVTkNfTUlOVF9NQU5ZAghtaW50TWFueQAQRVZFTlRfVFlQRV9XQVZFUwIFV0FWRVMADkVWRU5UX1RZUEVfRVZNAgNFVk0AF0VWRU5UX1NUQVRVU19QUk9DRVNTSU5HAAEAFkVWRU5UX1NUQVRVU19DT05GSVJNRUQAAgAVRVZFTlRfU1RBVFVTX1JFSkVDVEVEAAMAB01BWF9JTlQA//////////9/ARBfdmFsaWRhdGVBZGRyZXNzAghhZGRyZXNzXwRlcnJfBAckbWF0Y2gwCQCmCAEFCGFkZHJlc3NfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGCQACAQUEZXJyXwEOX3ZhbGlkYXRlQXNzZXQCCGFzc2V0SWRfBGVycl8EByRtYXRjaDAJAOwHAQkA2QQBBQhhc3NldElkXwMJAAECBQckbWF0Y2gwAgVBc3NldAQBYQUHJG1hdGNoMAYJAAIBBQRlcnJfAQxfdmFsaWRhdGVJbnQEBHZhbF8ObG93ZXJCb3VuZGFyeV8OdXBwZXJCb3VuZGFyeV8EZXJyXwMDCQBmAgUObG93ZXJCb3VuZGFyeV8FBHZhbF8GCQBmAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEPX3ZhbGlkYXRlU3RyaW5nAgR2YWxfBGVycl8DAwkAZwIAAAkAsQIBBQR2YWxfBgkBCGNvbnRhaW5zAgUEdmFsXwUJU0VQQVJBVE9SCQACAQUEZXJyXwYBEl92YWxpZGF0ZUFyZ1N0cmluZwIEdmFsXwRlcnJfAwMJAQhjb250YWlucwIFBHZhbF8FDkFSR1NfU0VQQVJBVE9SBgkBCGNvbnRhaW5zAgUEdmFsXwUJU0VQQVJBVE9SCQACAQUEZXJyXwYBDV92YWxpZGF0ZUFyZ3MCBWFyZ3NfBGVycl8DCQBmAgkAkAMBBQVhcmdzXwAWCQACAQUEZXJyXwoBCGZvbGRGdW5jAgNhY2MEZWxlbQkAlAoCAwgFA2FjYwJfMQkBEl92YWxpZGF0ZUFyZ1N0cmluZwIFBGVsZW0I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X0RFUE8JAMwIAgkApQgBBQhhY2NvdW50XwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABEV9zYXZlUHJveHlTZWNEZXBvAghhY2NvdW50XwR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUSS0VZX1BST1hZX1NFQ19ERVBPCQDMCAIJAKUIAQUIYWNjb3VudF8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBGV9sb2FkUHJveHlTZWNEZXBvUGVyRXZlbnQABAckbWF0Y2gwCQCfCAEFHEtFWV9QUk9YWV9TRUNfREVQT19QRVJfRVZFTlQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABGV9zYXZlUHJveHlTZWNEZXBvUGVyRXZlbnQBBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIFHEtFWV9QUk9YWV9TRUNfREVQT19QRVJfRVZFTlQFBHZhbF8FA25pbAETX2xvYWRXYXZlc0V2ZW50U2l6ZQAEByRtYXRjaDAJAJ8IAQUUS0VZX1dBVkVTX0VWRU5UX1NJWkUDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABE19zYXZlV2F2ZXNFdmVudFNpemUBBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIFFEtFWV9XQVZFU19FVkVOVF9TSVpFBQR2YWxfBQNuaWwBEV9sb2FkRVZNRXZlbnRTaXplAAQHJG1hdGNoMAkAnwgBBRJLRVlfRVZNX0VWRU5UX1NJWkUDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABEV9zYXZlRVZNRXZlbnRTaXplAQR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJLRVlfRVZNX0VWRU5UX1NJWkUFBHZhbF8FA25pbAEPX2xvYWRXYXZlc0V2ZW50AQZpbmRleF8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFD0tFWV9XQVZFU19FVkVOVAkAzAgCCQCkAwEFBmluZGV4XwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBAZzdHJ1Y3QJALUJ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AMwIAgUOS0VZX0VWRU5UX1RZUEUJAMwIAgkApAMBBQxleGVjQ2hhaW5JZF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQ5fc2F2ZUV2ZW50VHlwZQIMZXhlY0NoYWluSWRfBHZhbF8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFDktFWV9FVkVOVF9UWVBFCQDMCAIJAKQDAQUMZXhlY0NoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARVfbG9hZFdhdmVzRXZlbnRTdGF0dXMBCmV2ZW50SGFzaF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFFktFWV9XQVZFU19FVkVOVF9TVEFUVVMJAMwIAgUKZXZlbnRIYXNoXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABFV9zYXZlV2F2ZXNFdmVudFN0YXR1cwIKZXZlbnRIYXNoXwdzdGF0dXNfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUWS0VZX1dBVkVTX0VWRU5UX1NUQVRVUwkAzAgCBQpldmVudEhhc2hfBQNuaWwFCVNFUEFSQVRPUgUHc3RhdHVzXwUDbmlsARNfbG9hZEVWTUV2ZW50U3RhdHVzAQpldmVudEhhc2hfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRRLRVlfRVZNX0VWRU5UX1NUQVRVUwkAzAgCBQpldmVudEhhc2hfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAETX3NhdmVFVk1FdmVudFN0YXR1cwIKZXZlbnRIYXNoXwdzdGF0dXNfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUUS0VZX0VWTV9FVkVOVF9TVEFUVVMJAMwIAgUKZXZlbnRIYXNoXwUDbmlsBQlTRVBBUkFUT1IFB3N0YXR1c18FA25pbAEhX2xvYWRQdWJsaXNoZWRXYXZlc0V2ZW50QnlXaXRuZXNzAgpwdWJsaWNLZXlfCGV2ZW50SWRfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRlLRVlfV0FWRVNfRVZFTlRfUFVCTElTSEVECQDMCAIFCnB1YmxpY0tleV8JAMwIAgkApAMBBQhldmVudElkXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABIV9zYXZlUHVibGlzaGVkV2F2ZXNFdmVudEJ5V2l0bmVzcwMKcHVibGljS2V5XwhldmVudElkXwR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUZS0VZX1dBVkVTX0VWRU5UX1BVQkxJU0hFRAkAzAgCBQpwdWJsaWNLZXlfCQDMCAIJAKQDAQUIZXZlbnRJZF8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBH19sb2FkUHVibGlzaGVkRVZNRXZlbnRCeVdpdG5lc3MCCnB1YmxpY0tleV8IZXZlbnRJZF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFF0tFWV9FVk1fRVZFTlRfUFVCTElTSEVECQDMCAIFCnB1YmxpY0tleV8JAMwIAgkApAMBBQhldmVudElkXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABH19zYXZlUHVibGlzaGVkRVZNRXZlbnRCeVdpdG5lc3MDCnB1YmxpY0tleV8IZXZlbnRJZF8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFF0tFWV9FVk1fRVZFTlRfUFVCTElTSEVECQDMCAIFCnB1YmxpY0tleV8JAMwIAgkApAMBBQhldmVudElkXwUDbmlsBQlTRVBBUkFUT1IFBHZhbF8FA25pbAERX2xvYWRDdXJyZW50RXBvY2gBDmNhbGxlckNoYWluSWRfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRFLRVlfQ1VSUkVOVF9FUE9DSAkAzAgCCQCkAwEFDmNhbGxlckNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAERX3NhdmVDdXJyZW50RXBvY2gCDmNhbGxlckNoYWluSWRfBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIJALkJAgkAzAgCBRFLRVlfQ1VSUkVOVF9FUE9DSAkAzAgCCQCkAwEFDmNhbGxlckNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARxfbG9hZFdhdmVzRXZlbnRDYWxsZXJJZHhTaXplAQ5jYWxsZXJDaGFpbklkXwQHJG1hdGNoMAkAnwgBCQC5CQIJAMwIAgUWS0VZX1dBVkVTX0VWRU5UX0NBTExFUgkAzAgCCQCkAwEFDmNhbGxlckNoYWluSWRfCQDMCAIFCEtFWV9TSVpFBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEcX3NhdmVXYXZlc0V2ZW50Q2FsbGVySWR4U2l6ZQIOY2FsbGVyQ2hhaW5JZF8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFFktFWV9XQVZFU19FVkVOVF9DQUxMRVIJAMwIAgkApAMBBQ5jYWxsZXJDaGFpbklkXwkAzAgCBQhLRVlfU0laRQUDbmlsBQlTRVBBUkFUT1IFBHZhbF8FA25pbAEYX2xvYWRXYXZlc0V2ZW50Q2FsbGVySWR4Ag5jYWxsZXJDaGFpbklkXwRpZHhfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRZLRVlfV0FWRVNfRVZFTlRfQ0FMTEVSCQDMCAIJAKQDAQUOY2FsbGVyQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEYX3NhdmVXYXZlc0V2ZW50Q2FsbGVySWR4Aw5jYWxsZXJDaGFpbklkXwRpZHhfBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIJALkJAgkAzAgCBRZLRVlfV0FWRVNfRVZFTlRfQ0FMTEVSCQDMCAIJAKQDAQUOY2FsbGVyQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARpfbG9hZEVWTUV2ZW50Q2FsbGVySWR4U2l6ZQEOY2FsbGVyQ2hhaW5JZF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFFEtFWV9FVk1fRVZFTlRfQ0FMTEVSCQDMCAIJAKQDAQUOY2FsbGVyQ2hhaW5JZF8JAMwIAgUIS0VZX1NJWkUFA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAARpfc2F2ZUVWTUV2ZW50Q2FsbGVySWR4U2l6ZQIOY2FsbGVyQ2hhaW5JZF8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFFEtFWV9FVk1fRVZFTlRfQ0FMTEVSCQDMCAIJAKQDAQUOY2FsbGVyQ2hhaW5JZF8JAMwIAgUIS0VZX1NJWkUFA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBFl9sb2FkRVZNRXZlbnRDYWxsZXJJZHgCDmNhbGxlckNoYWluSWRfBGlkeF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFFEtFWV9FVk1fRVZFTlRfQ0FMTEVSCQDMCAIJAKQDAQUOY2FsbGVyQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEWX3NhdmVFVk1FdmVudENhbGxlcklkeAMOY2FsbGVyQ2hhaW5JZF8EaWR4XwR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUUS0VZX0VWTV9FVkVOVF9DQUxMRVIJAMwIAgkApAMBBQ5jYWxsZXJDaGFpbklkXwkAzAgCCQCkAwEFBGlkeF8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBHl9sb2FkV2F2ZXNFdmVudEV4ZWN1dG9ySWR4U2l6ZQERZXhlY3V0aW9uQ2hhaW5JZF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFGEtFWV9XQVZFU19FVkVOVF9FWEVDVVRPUgkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIFCEtFWV9TSVpFBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEeX3NhdmVXYXZlc0V2ZW50RXhlY3V0b3JJZHhTaXplAhFleGVjdXRpb25DaGFpbklkXwR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUYS0VZX1dBVkVTX0VWRU5UX0VYRUNVVE9SCQDMCAIJAKQDAQURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgUIS0VZX1NJWkUFA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBGl9sb2FkV2F2ZXNFdmVudEV4ZWN1dG9ySWR4AhFleGVjdXRpb25DaGFpbklkXwRpZHhfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRhLRVlfV0FWRVNfRVZFTlRfRVhFQ1VUT1IJAMwIAgkApAMBBRFleGVjdXRpb25DaGFpbklkXwkAzAgCCQCkAwEFBGlkeF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAARpfc2F2ZVdhdmVzRXZlbnRFeGVjdXRvcklkeAMRZXhlY3V0aW9uQ2hhaW5JZF8EaWR4XwR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUYS0VZX1dBVkVTX0VWRU5UX0VYRUNVVE9SCQDMCAIJAKQDAQURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARxfbG9hZEVWTUV2ZW50RXhlY3V0b3JJZHhTaXplARFleGVjdXRpb25DaGFpbklkXwQHJG1hdGNoMAkAnwgBCQC5CQIJAMwIAgUWS0VZX0VWTV9FVkVOVF9FWEVDVVRPUgkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIFCEtFWV9TSVpFBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEcX3NhdmVFVk1FdmVudEV4ZWN1dG9ySWR4U2l6ZQIRZXhlY3V0aW9uQ2hhaW5JZF8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFFktFWV9FVk1fRVZFTlRfRVhFQ1VUT1IJAMwIAgkApAMBBRFleGVjdXRpb25DaGFpbklkXwkAzAgCBQhLRVlfU0laRQUDbmlsBQlTRVBBUkFUT1IFBHZhbF8FA25pbAEYX2xvYWRFVk1FdmVudEV4ZWN1dG9ySWR4AhFleGVjdXRpb25DaGFpbklkXwRpZHhfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRZLRVlfRVZNX0VWRU5UX0VYRUNVVE9SCQDMCAIJAKQDAQURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEYX3NhdmVFVk1FdmVudEV4ZWN1dG9ySWR4AxFleGVjdXRpb25DaGFpbklkXwRpZHhfBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIJALkJAgkAzAgCBRZLRVlfRVZNX0VWRU5UX0VYRUNVVE9SCQDMCAIJAKQDAQURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgkApAMBBQRpZHhfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsAQ5fbG9hZFdpdG5lc3NlcwIOY2FsbGVyQ2hhaW5JZF8GZXBvY2hfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBRdLRVlfV0lUTkVTU0VTX1BFUl9FUE9DSAkAzAgCCQCkAwEFDmNhbGxlckNoYWluSWRfCQDMCAIJAKQDAQUGZXBvY2hfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDADCQBmAgkAsQIBBQFhAAAJALUJAgUBYQUJU0VQQVJBVE9SBQNuaWwFA25pbAEOX3NhdmVXaXRuZXNzZXMDDmNhbGxlckNoYWluSWRfBmVwb2NoXwp3aXRuZXNzZXNfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBRdLRVlfV0lUTkVTU0VTX1BFUl9FUE9DSAkAzAgCCQCkAwEFDmNhbGxlckNoYWluSWRfCQDMCAIJAKQDAQUGZXBvY2hfBQNuaWwFCVNFUEFSQVRPUgkAuQkCBQp3aXRuZXNzZXNfBQlTRVBBUkFUT1IFA25pbAEXX2xvYWRSZXdhcmRUb2tlbkFkZHJlc3MABAckbWF0Y2gwCQCiCAEFGEtFWV9SRVdBUkRfVE9LRU5fQUREUkVTUwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAARdfc2F2ZVJld2FyZFRva2VuQWRkcmVzcwEEdmFsXwkAzAgCCQELU3RyaW5nRW50cnkCBRhLRVlfUkVXQVJEX1RPS0VOX0FERFJFU1MJAKUIAQUEdmFsXwUDbmlsARFfbG9hZFJld2FyZEFtb3VudAAEByRtYXRjaDAJAJ8IAQURS0VZX1JFV0FSRF9BTU9VTlQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABEV9zYXZlUmV3YXJkQW1vdW50AQR2YWxfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFLRVlfUkVXQVJEX0FNT1VOVAUEdmFsXwUDbmlsARFfb25seVRoaXNDb250cmFjdAEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8FBHRoaXMJAAIBAhlfb25seVRoaXNDb250cmFjdDogcmV2ZXJ0BgEQX3doZW5NdWx0aXNpZ1NldAADCQAAAgkBDV9sb2FkTXVsdGlzaWcACQEHQWRkcmVzcwEBAAkAAgECGF93aGVuTXVsdGlzaWdTZXQ6IHJldmVydAYBE193aGVuTm90SW5pdGlhbGl6ZWQAAwkBCV9sb2FkSW5pdAAJAAIBAhtfd2hlbk5vdEluaXRpYWxpemVkOiByZXZlcnQGARBfd2hlbkluaXRpYWxpemVkAAMJAQEhAQkBCV9sb2FkSW5pdAAJAAIBAhhfd2hlbkluaXRpYWxpemVkOiByZXZlcnQGARBfaXNBY3RpdmVXaXRuZXNzAwpwdWJsaWNLZXlfC3B1YmxpY0tleXNfBGVycl8DCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQtwdWJsaWNLZXlzXwUKcHVibGljS2V5XwkAAgEFBGVycl8GARdfbm90Q29uZmlybWVkV2F2ZXNFdmVudAIKZXZlbnRIYXNoXwRlcnJfAwkAZgIJARVfbG9hZFdhdmVzRXZlbnRTdGF0dXMBBQpldmVudEhhc2hfBRdFVkVOVF9TVEFUVVNfUFJPQ0VTU0lORwkAAgEFBGVycl8GARVfbm90Q29uZmlybWVkRVZNRXZlbnQCCmV2ZW50SGFzaF8EZXJyXwMJAGYCCQETX2xvYWRFVk1FdmVudFN0YXR1cwEFCmV2ZW50SGFzaF8FF0VWRU5UX1NUQVRVU19QUk9DRVNTSU5HCQACAQUEZXJyXwYBE193YXZlc0V2ZW50Tm90RXhpc3QCCmV2ZW50SGFzaF8EZXJyXwMJAQIhPQIJARVfbG9hZFdhdmVzRXZlbnRTdGF0dXMBBQpldmVudEhhc2hfAAAJAAIBBQRlcnJfBgERX2V2bUV2ZW50Tm90RXhpc3QCCmV2ZW50SGFzaF8EZXJyXwMJAQIhPQIJARNfbG9hZEVWTUV2ZW50U3RhdHVzAQUKZXZlbnRIYXNoXwAACQACAQUEZXJyXwYBIF9ub3RQdWJsaXNoZWRXYXZlc0V2ZW50QnlXaXRuZXNzAwpwdWJsaWNLZXlfCGV2ZW50SWRfBGVycl8DCQECIT0CCQEhX2xvYWRQdWJsaXNoZWRXYXZlc0V2ZW50QnlXaXRuZXNzAgUKcHVibGljS2V5XwUIZXZlbnRJZF8AAAkAAgEFBGVycl8GAR5fbm90UHVibGlzaGVkRVZNRXZlbnRCeVdpdG5lc3MDCnB1YmxpY0tleV8IZXZlbnRJZF8EZXJyXwMJAGYCCQEfX2xvYWRQdWJsaXNoZWRFVk1FdmVudEJ5V2l0bmVzcwIFCnB1YmxpY0tleV8FCGV2ZW50SWRfAAAJAAIBBQRlcnJfBgEQX2lzUXVvcnVtUmVhY2hlZAMOY29uZmlybWF0aW9uc18GdG90YWxfDHdpdG5lc3NTaXplXwMDCQBmAgUOY29uZmlybWF0aW9uc18JAGkCBQx3aXRuZXNzU2l6ZV8AAgYJAGYCCQBlAgUGdG90YWxfBQ5jb25maXJtYXRpb25zXwkAaQIFDHdpdG5lc3NTaXplXwACBgcBD19nZXRFdmVudFN0YXR1cwMOY29uZmlybWF0aW9uc18GdG90YWxfDHdpdG5lc3NTaXplXwMJAGYCBQ5jb25maXJtYXRpb25zXwkAaQIFDHdpdG5lc3NTaXplXwACBRZFVkVOVF9TVEFUVVNfQ09ORklSTUVEAwkAZgIJAGUCBQZ0b3RhbF8FDmNvbmZpcm1hdGlvbnNfCQBpAgUMd2l0bmVzc1NpemVfAAIFFUVWRU5UX1NUQVRVU19SRUpFQ1RFRAUXRVZFTlRfU1RBVFVTX1BST0NFU1NJTkcBD19jaGVja0V2ZW50VHlwZQMRZXhlY3V0aW9uQ2hhaW5JZF8FdHlwZV8EZXJyXwMJAQIhPQIJAQ5fbG9hZEV2ZW50VHlwZQEFEWV4ZWN1dGlvbkNoYWluSWRfBQV0eXBlXwkAAgEFBGVycl8GARNfY2FsY1dhdmVzRXZlbnRIYXNoAQZldmVudF8ECmV2ZW50Qnl0ZXMJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAmgMBCAUGZXZlbnRfAl8xCQCaAwEIBQZldmVudF8CXzIJAJoDAQgFBmV2ZW50XwJfMwkAmwMBCAUGZXZlbnRfAl80CQCbAwEIBQZldmVudF8CXzUJAJsDAQkAuQkCCAUGZXZlbnRfAl82BQ5BUkdTX1NFUEFSQVRPUgkAmwMBCAUGZXZlbnRfAl83CQCaAwEIBQZldmVudF8CXzgJANgEAQkAjBUBBQpldmVudEJ5dGVzARFfY2FsY0VWTUV2ZW50SGFzaAEGZXZlbnRfBApldmVudEJ5dGVzCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQCaAwEIBQZldmVudF8CXzEJAJoDAQgFBmV2ZW50XwJfMgkAmgMBCAUGZXZlbnRfAl8zCQCbAwEIBQZldmVudF8CXzQJAJsDAQgFBmV2ZW50XwJfNQkAmwMBCAUGZXZlbnRfAl82CQCaAwEIBQZldmVudF8CXzcJANgEAQkAjBUBBQpldmVudEJ5dGVzARJfc2V0V2F2ZXNFdmVudEhhc2gCBmV2ZW50XwVoYXNoXwkAnwoNCAUGZXZlbnRfAl8xCAUGZXZlbnRfAl8yCAUGZXZlbnRfAl8zCAUGZXZlbnRfAl80CAUGZXZlbnRfAl81CAUGZXZlbnRfAl82CAUGZXZlbnRfAl83CAUGZXZlbnRfAl84BQVoYXNoXwgFBmV2ZW50XwNfMTAIBQZldmVudF8DXzExCAUGZXZlbnRfA18xMggFBmV2ZW50XwNfMTMBEF9zZXRFVk1FdmVudEhhc2gCBmV2ZW50XwVoYXNoXwkAngoMCAUGZXZlbnRfAl8xCAUGZXZlbnRfAl8yCAUGZXZlbnRfAl8zCAUGZXZlbnRfAl80CAUGZXZlbnRfAl81CAUGZXZlbnRfAl82CAUGZXZlbnRfAl83BQVoYXNoXwgFBmV2ZW50XwJfOQgFBmV2ZW50XwNfMTAIBQZldmVudF8DXzExCAUGZXZlbnRfA18xMgEbX3NldFdhdmVzRXZlbnRDb25maXJtYXRpb25zAwZldmVudF8OY29uZmlybWF0aW9uc18GdG90YWxfCQCfCg0IBQZldmVudF8CXzEIBQZldmVudF8CXzIIBQZldmVudF8CXzMIBQZldmVudF8CXzQIBQZldmVudF8CXzUIBQZldmVudF8CXzYIBQZldmVudF8CXzcIBQZldmVudF8CXzgIBQZldmVudF8CXzkFDmNvbmZpcm1hdGlvbnNfBQZ0b3RhbF8IBQZldmVudF8DXzEyCAUGZXZlbnRfA18xMwEZX3NldEVWTUV2ZW50Q29uZmlybWF0aW9ucwMGZXZlbnRfDmNvbmZpcm1hdGlvbnNfBnRvdGFsXwkAngoMCAUGZXZlbnRfAl8xCAUGZXZlbnRfAl8yCAUGZXZlbnRfAl8zCAUGZXZlbnRfAl80CAUGZXZlbnRfAl81CAUGZXZlbnRfAl82CAUGZXZlbnRfAl83CAUGZXZlbnRfAl84BQ5jb25maXJtYXRpb25zXwUGdG90YWxfCAUGZXZlbnRfA18xMQgFBmV2ZW50XwNfMTIMAWkBBGluaXQDFXByb3h5U2VjRGVwb1BlckV2ZW50XxNyZXdhcmRUb2tlbkFkZHJlc3NfDXJld2FyZEFtb3VudF8EA2VycgMDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARNfd2hlbk5vdEluaXRpYWxpemVkAAcJARBfd2hlbk11bHRpc2lnU2V0AAcJAQxfdmFsaWRhdGVJbnQEBRVwcm94eVNlY0RlcG9QZXJFdmVudF8AAAUHTUFYX0lOVAIiaW5pdDogaW52YWxpZCBwcm94eVNlY0RlcG9QZXJFdmVudAcJARBfdmFsaWRhdGVBZGRyZXNzAgUTcmV3YXJkVG9rZW5BZGRyZXNzXwIgaW5pdDogaW52YWxpZCByZXdhcmRUb2tlbkFkZHJlc3MHCQEMX3ZhbGlkYXRlSW50BAUNcmV3YXJkQW1vdW50XwAABQdNQVhfSU5UAhppbml0OiBpbnZhbGlkIHJld2FyZEFtb3VudAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzggCCQDOCAIJAM4IAgkBCV9zYXZlSW5pdAEGCQEZX3NhdmVQcm94eVNlY0RlcG9QZXJFdmVudAEFFXByb3h5U2VjRGVwb1BlckV2ZW50XwkBF19zYXZlUmV3YXJkVG9rZW5BZGRyZXNzAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUTcmV3YXJkVG9rZW5BZGRyZXNzXwkBEV9zYXZlUmV3YXJkQW1vdW50AQUNcmV3YXJkQW1vdW50XwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJzZXRBY3RpdmVXaXRuZXNzZXMCDmNhbGxlckNoYWluSWRfCndpdG5lc3Nlc18EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARNfdmFsaWRhdGVQdWJsaWNLZXlzAgUKd2l0bmVzc2VzXwIlc2V0QWN0aXZlV2l0bmVzc2VzOiBpbnZhbGlkIHdpdG5lc3NlcwcDCQAAAgUDZXJyBQNlcnIEBWVwb2NoCQERX2xvYWRDdXJyZW50RXBvY2gBBQ5jYWxsZXJDaGFpbklkXwkAlAoCCQDOCAIJARFfc2F2ZUN1cnJlbnRFcG9jaAIFDmNhbGxlckNoYWluSWRfCQBkAgUFZXBvY2gAAQkBDl9zYXZlV2l0bmVzc2VzAwUOY2FsbGVyQ2hhaW5JZF8JAGQCBQVlcG9jaAABBQp3aXRuZXNzZXNfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFHN1Ym1pdFdhdmVzQ2FsbEV2ZW50CA5jYWxsZXJDaGFpbklkXxFleGVjdXRpb25DaGFpbklkXwZub25jZV8SZXhlY3V0aW9uQ29udHJhY3RfDWZ1bmN0aW9uTmFtZV8FYXJnc18HdHhIYXNoXwxibG9ja051bWJlcl8EA2VycgMDAwMDAwMDCQEMX3ZhbGlkYXRlSW50BAUOY2FsbGVyQ2hhaW5JZF8AAAUHTUFYX0lOVAIrc3VibWl0V2F2ZXNDYWxsRXZlbnQ6IGludmFsaWQgY2FsbGVyQ2hhaW5JZAkBDF92YWxpZGF0ZUludAQFEWV4ZWN1dGlvbkNoYWluSWRfAAAFB01BWF9JTlQCLnN1Ym1pdFdhdmVzQ2FsbEV2ZW50OiBpbnZhbGlkIGV4ZWN1dGlvbkNoYWluSWQHCQEMX3ZhbGlkYXRlSW50BAUGbm9uY2VfAAAFB01BWF9JTlQCI3N1Ym1pdFdhdmVzQ2FsbEV2ZW50OiBpbnZhbGlkIG5vbmNlBwkBD192YWxpZGF0ZVN0cmluZwIFEmV4ZWN1dGlvbkNvbnRyYWN0XwIvc3VibWl0V2F2ZXNDYWxsRXZlbnQ6IGludmFsaWQgZXhlY3V0aW9uQ29udHJhY3QHCQEPX3ZhbGlkYXRlU3RyaW5nAgUNZnVuY3Rpb25OYW1lXwIqc3VibWl0V2F2ZXNDYWxsRXZlbnQ6IGludmFsaWQgZnVuY3Rpb25OYW1lBwkBDV92YWxpZGF0ZUFyZ3MCBQVhcmdzXwIic3VibWl0V2F2ZXNDYWxsRXZlbnQ6IGludmFsaWQgYXJncwcJAQ9fdmFsaWRhdGVTdHJpbmcCBQd0eEhhc2hfAiRzdWJtaXRXYXZlc0NhbGxFdmVudDogaW52YWxpZCB0eEhhc2gHCQEMX3ZhbGlkYXRlSW50BAUMYmxvY2tOdW1iZXJfAAAFB01BWF9JTlQCKXN1Ym1pdFdhdmVzQ2FsbEV2ZW50OiBpbnZhbGlkIGJsb2NrTnVtYmVyBwkBD19jaGVja0V2ZW50VHlwZQMFEWV4ZWN1dGlvbkNoYWluSWRfBRBFVkVOVF9UWVBFX1dBVkVTAiJzdWJtaXRXYXZlc0NhbGxFdmVudDogaW52YWxpZCB0eXBlBwMJAAACBQNlcnIFA2VycgQMcHJveHlTZWNEZXBvCQERX2xvYWRQcm94eVNlY0RlcG8BCAUBaQZjYWxsZXIEFHByb3h5U2VjRGVwb1BlckV2ZW50CQEZX2xvYWRQcm94eVNlY0RlcG9QZXJFdmVudAAEE3Byb3h5U2VjRGVwb1VwZGF0ZWQJAGUCBQxwcm94eVNlY0RlcG8FFHByb3h5U2VjRGVwb1BlckV2ZW50BAVldmVudAkAnwoNBQ5jYWxsZXJDaGFpbklkXwURZXhlY3V0aW9uQ2hhaW5JZF8FBm5vbmNlXwUSZXhlY3V0aW9uQ29udHJhY3RfBQ1mdW5jdGlvbk5hbWVfBQVhcmdzXwUHdHhIYXNoXwUMYmxvY2tOdW1iZXJfAgAAAAAABRRwcm94eVNlY0RlcG9QZXJFdmVudAgFAWkGY2FsbGVyBAlldmVudFNpemUJARNfbG9hZFdhdmVzRXZlbnRTaXplAAQJZXZlbnRIYXNoCQETX2NhbGNXYXZlc0V2ZW50SGFzaAEFBWV2ZW50BAxldmVudFVwZGF0ZWQJARJfc2V0V2F2ZXNFdmVudEhhc2gCBQVldmVudAUJZXZlbnRIYXNoBARlcnIxAwkBE193YXZlc0V2ZW50Tm90RXhpc3QCBQlldmVudEhhc2gCJHN1Ym1pdFdhdmVzQ2FsbEV2ZW50OiBhbHJlYWR5IGV4aXN0cwkBDF92YWxpZGF0ZUludAQFE3Byb3h5U2VjRGVwb1VwZGF0ZWQAAAUHTUFYX0lOVAIpc3VibWl0V2F2ZXNDYWxsRXZlbnQ6IG5vIHNlY3VyaXR5IGRlcG9zaXQHAwkAAAIFBGVycjEFBGVycjEEDWNhbGxlcklkeFNpemUJARxfbG9hZFdhdmVzRXZlbnRDYWxsZXJJZHhTaXplAQUOY2FsbGVyQ2hhaW5JZF8JAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJARFfc2F2ZVByb3h5U2VjRGVwbwIIBQFpBmNhbGxlcgUTcHJveHlTZWNEZXBvVXBkYXRlZAkBD19zYXZlV2F2ZXNFdmVudAIFCWV2ZW50U2l6ZQUMZXZlbnRVcGRhdGVkCQEVX3NhdmVXYXZlc0V2ZW50U3RhdHVzAgUJZXZlbnRIYXNoBRdFVkVOVF9TVEFUVVNfUFJPQ0VTU0lORwkBE19zYXZlV2F2ZXNFdmVudFNpemUBCQBkAgUJZXZlbnRTaXplAAEJARhfc2F2ZVdhdmVzRXZlbnRDYWxsZXJJZHgDBQ5jYWxsZXJDaGFpbklkXwUNY2FsbGVySWR4U2l6ZQUJZXZlbnRTaXplCQEcX3NhdmVXYXZlc0V2ZW50Q2FsbGVySWR4U2l6ZQIFDmNhbGxlckNoYWluSWRfCQBkAgUNY2FsbGVySWR4U2l6ZQABBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnN1Ym1pdEVWTUNhbGxFdmVudAcOY2FsbGVyQ2hhaW5JZF8RZXhlY3V0aW9uQ2hhaW5JZF8Gbm9uY2VfEmV4ZWN1dGlvbkNvbnRyYWN0XwljYWxsZGF0YV8HdHhIYXNoXwxibG9ja051bWJlcl8EA2VycgMDAwMDAwMJAQxfdmFsaWRhdGVJbnQEBQ5jYWxsZXJDaGFpbklkXwAABQdNQVhfSU5UAilzdWJtaXRFVk1DYWxsRXZlbnQ6IGludmFsaWQgY2FsbGVyQ2hhaW5JZAkBDF92YWxpZGF0ZUludAQFEWV4ZWN1dGlvbkNoYWluSWRfAAAFB01BWF9JTlQCLHN1Ym1pdEVWTUNhbGxFdmVudDogaW52YWxpZCBleGVjdXRpb25DaGFpbklkBwkBDF92YWxpZGF0ZUludAQFBm5vbmNlXwAABQdNQVhfSU5UAiFzdWJtaXRFVk1DYWxsRXZlbnQ6IGludmFsaWQgbm9uY2UHCQEPX3ZhbGlkYXRlU3RyaW5nAgUSZXhlY3V0aW9uQ29udHJhY3RfAi1zdWJtaXRFVk1DYWxsRXZlbnQ6IGludmFsaWQgZXhlY3V0aW9uQ29udHJhY3QHCQEPX3ZhbGlkYXRlU3RyaW5nAgUJY2FsbGRhdGFfAiRzdWJtaXRFVk1DYWxsRXZlbnQ6IGludmFsaWQgY2FsbGRhdGEHCQEPX3ZhbGlkYXRlU3RyaW5nAgUHdHhIYXNoXwIic3VibWl0RVZNQ2FsbEV2ZW50OiBpbnZhbGlkIHR4SGFzaAcJAQxfdmFsaWRhdGVJbnQEBQxibG9ja051bWJlcl8AAAUHTUFYX0lOVAInc3VibWl0RVZNQ2FsbEV2ZW50OiBpbnZhbGlkIGJsb2NrTnVtYmVyBwkBD19jaGVja0V2ZW50VHlwZQMFEWV4ZWN1dGlvbkNoYWluSWRfBQ5FVkVOVF9UWVBFX0VWTQIgc3VibWl0RVZNQ2FsbEV2ZW50OiBpbnZhbGlkIHR5cGUHAwkAAAIFA2VycgUDZXJyBAxwcm94eVNlY0RlcG8JARFfbG9hZFByb3h5U2VjRGVwbwEIBQFpBmNhbGxlcgQUcHJveHlTZWNEZXBvUGVyRXZlbnQJARlfbG9hZFByb3h5U2VjRGVwb1BlckV2ZW50AAQTcHJveHlTZWNEZXBvVXBkYXRlZAkAZQIFDHByb3h5U2VjRGVwbwUUcHJveHlTZWNEZXBvUGVyRXZlbnQEBWV2ZW50CQCeCgwFDmNhbGxlckNoYWluSWRfBRFleGVjdXRpb25DaGFpbklkXwUGbm9uY2VfBRJleGVjdXRpb25Db250cmFjdF8FCWNhbGxkYXRhXwUHdHhIYXNoXwUMYmxvY2tOdW1iZXJfAgAAAAAABRRwcm94eVNlY0RlcG9QZXJFdmVudAgFAWkGY2FsbGVyBAlldmVudFNpemUJARFfbG9hZEVWTUV2ZW50U2l6ZQAECWV2ZW50SGFzaAkBEV9jYWxjRVZNRXZlbnRIYXNoAQUFZXZlbnQEDGV2ZW50VXBkYXRlZAkBEF9zZXRFVk1FdmVudEhhc2gCBQVldmVudAUJZXZlbnRIYXNoBARlcnIxAwkBEV9ldm1FdmVudE5vdEV4aXN0AgUJZXZlbnRIYXNoAiJzdWJtaXRFVk1DYWxsRXZlbnQ6IGFscmVhZHkgZXhpc3RzCQEMX3ZhbGlkYXRlSW50BAUTcHJveHlTZWNEZXBvVXBkYXRlZAAABQdNQVhfSU5UAidzdWJtaXRFVk1DYWxsRXZlbnQ6IG5vIHNlY3VyaXR5IGRlcG9zaXQHAwkAAAIFBGVycjEFBGVycjEEDWNhbGxlcklkeFNpemUJARpfbG9hZEVWTUV2ZW50Q2FsbGVySWR4U2l6ZQEFDmNhbGxlckNoYWluSWRfCQCUCgIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQERX3NhdmVQcm94eVNlY0RlcG8CCAUBaQZjYWxsZXIFE3Byb3h5U2VjRGVwb1VwZGF0ZWQJAQ1fc2F2ZUVWTUV2ZW50AgUJZXZlbnRTaXplBQxldmVudFVwZGF0ZWQJARNfc2F2ZUVWTUV2ZW50U3RhdHVzAgUJZXZlbnRIYXNoBRdFVkVOVF9TVEFUVVNfUFJPQ0VTU0lORwkBEV9zYXZlRVZNRXZlbnRTaXplAQkAZAIFCWV2ZW50U2l6ZQABCQEWX3NhdmVFVk1FdmVudENhbGxlcklkeAMFDmNhbGxlckNoYWluSWRfBQ1jYWxsZXJJZHhTaXplBQlldmVudFNpemUJARpfc2F2ZUVWTUV2ZW50Q2FsbGVySWR4U2l6ZQIFDmNhbGxlckNoYWluSWRfCQBkAgUNY2FsbGVySWR4U2l6ZQABBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF3B1Ymxpc2hXYXZlc0V2ZW50U3RhdHVzAglldmVudElkeF8Hc3RhdHVzXwQJZXZlbnRTaXplCQETX2xvYWRXYXZlc0V2ZW50U2l6ZQAED2NhbGxlclB1YmxpY0tleQkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEA2VycgMJARFfdmFsaWRhdGVFdmVudElkeAMFCWV2ZW50SWR4XwUJZXZlbnRTaXplAipwdWJsaXNoV2F2ZXNFdmVudFN0YXR1czogaW52YWxpZCBldmVudCBpZHgJARRfdmFsaWRhdGVFdmVudFN0YXR1cwIFB3N0YXR1c18CJ3B1Ymxpc2hXYXZlc0V2ZW50U3RhdHVzOiBpbnZhbGlkIHN0YXR1cwcDCQAAAgUDZXJyBQNlcnIEBWV2ZW50CQEPX2xvYWRXYXZlc0V2ZW50AQUJZXZlbnRJZHhfBA1jYWxsZXJDaGFpbklkCAUFZXZlbnQCXzEEEGV4ZWN1dGlvbkNoYWluSWQIBQVldmVudAJfMgQJZXZlbnRIYXNoCAUFZXZlbnQCXzkEEmV2ZW50Q29uZmlybWF0aW9ucwgFBWV2ZW50A18xMAQKZXZlbnRUb3RhbAgFBWV2ZW50A18xMQQMcHJveHlTZWNEZXBvCAUFZXZlbnQDXzEyBAVwcm94eQgFBWV2ZW50A18xMwQFZXBvY2gJARFfbG9hZEN1cnJlbnRFcG9jaAEFDWNhbGxlckNoYWluSWQED2FjdGl2ZVdpdG5lc3NlcwkBDl9sb2FkV2l0bmVzc2VzAgUNY2FsbGVyQ2hhaW5JZAUFZXBvY2gEBGVycjEDAwkBEF9pc0FjdGl2ZVdpdG5lc3MDCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQUPYWN0aXZlV2l0bmVzc2VzAidwdWJsaXNoV2F2ZXNFdmVudFN0YXR1czogaW52YWxpZCBjYWxsZXIJARdfbm90Q29uZmlybWVkV2F2ZXNFdmVudAIFCWV2ZW50SGFzaAIwcHVibGlzaFdhdmVzRXZlbnRTdGF0dXM6IGV2ZW50IGFscmVhZHkgY29uZmlybWVkBwkBIF9ub3RQdWJsaXNoZWRXYXZlc0V2ZW50QnlXaXRuZXNzAwUPY2FsbGVyUHVibGljS2V5BQlldmVudElkeF8CKnB1Ymxpc2hXYXZlc0V2ZW50U3RhdHVzOiBhbHJlYWR5IHB1Ymxpc2hlZAcDCQAAAgUEZXJyMQUEZXJyMQQMZXZlbnRVcGRhdGVkAwkAAAIFB3N0YXR1c18FFkVWRU5UX1NUQVRVU19DT05GSVJNRUQJARtfc2V0V2F2ZXNFdmVudENvbmZpcm1hdGlvbnMDBQVldmVudAkAZAIFEmV2ZW50Q29uZmlybWF0aW9ucwABCQBkAgUKZXZlbnRUb3RhbAABAwkAAAIFB3N0YXR1c18FFUVWRU5UX1NUQVRVU19SRUpFQ1RFRAkBG19zZXRXYXZlc0V2ZW50Q29uZmlybWF0aW9ucwMFBWV2ZW50BRJldmVudENvbmZpcm1hdGlvbnMJAGQCBQpldmVudFRvdGFsAAEJAAIBAilwdWJsaXNoV2F2ZXNFdmVudFN0YXR1czogaW5jb3JyZWN0IHN0YXR1cwQPZXhlY3V0b3JJZHhTaXplCQEeX2xvYWRXYXZlc0V2ZW50RXhlY3V0b3JJZHhTaXplAQUQZXhlY3V0aW9uQ2hhaW5JZAQMZmluYWxpemF0aW9uAwkBEF9pc1F1b3J1bVJlYWNoZWQDCAUMZXZlbnRVcGRhdGVkA18xMAgFDGV2ZW50VXBkYXRlZANfMTEJAJADAQUPYWN0aXZlV2l0bmVzc2VzBAZzdGF0dXMJAQ9fZ2V0RXZlbnRTdGF0dXMDCAUMZXZlbnRVcGRhdGVkA18xMAgFDGV2ZW50VXBkYXRlZANfMTEJAJADAQUPYWN0aXZlV2l0bmVzc2VzBA9yZXdhcmRBZGRyZXNzZXMJAMwIAgkApQgBBQVwcm94eQkBFV9wdWJsaWNLZXlzVG9BZGRyc1N0cgEFD2FjdGl2ZVdpdG5lc3NlcwQQd2l0bmVzc2VzUmV3YXJkcwkA/AcECQEXX2xvYWRSZXdhcmRUb2tlbkFkZHJlc3MABQ5GVU5DX01JTlRfTUFOWQkAzAgCCQERX2xvYWRSZXdhcmRBbW91bnQACQDMCAIFD3Jld2FyZEFkZHJlc3NlcwUDbmlsBQNuaWwDCQAAAgUQd2l0bmVzc2VzUmV3YXJkcwUQd2l0bmVzc2VzUmV3YXJkcwMJAAACBQZzdGF0dXMFFkVWRU5UX1NUQVRVU19DT05GSVJNRUQJAM4IAgkAzggCCQDOCAIJARFfc2F2ZVByb3h5U2VjRGVwbwIFBXByb3h5CQBkAgkBEV9sb2FkUHJveHlTZWNEZXBvAQUFcHJveHkFDHByb3h5U2VjRGVwbwkBFV9zYXZlV2F2ZXNFdmVudFN0YXR1cwIFCWV2ZW50SGFzaAUGc3RhdHVzCQEaX3NhdmVXYXZlc0V2ZW50RXhlY3V0b3JJZHgDBRBleGVjdXRpb25DaGFpbklkBQ9leGVjdXRvcklkeFNpemUFCWV2ZW50SWR4XwkBHl9zYXZlV2F2ZXNFdmVudEV4ZWN1dG9ySWR4U2l6ZQIFEGV4ZWN1dGlvbkNoYWluSWQJAGQCBQ9leGVjdXRvcklkeFNpemUAAQMJAAACBQZzdGF0dXMFFUVWRU5UX1NUQVRVU19SRUpFQ1RFRAkAzggCCQEVX3NhdmVXYXZlc0V2ZW50U3RhdHVzAgUJZXZlbnRIYXNoBQZzdGF0dXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDV9sb2FkTXVsdGlzaWcABQxwcm94eVNlY0RlcG8FBHVuaXQFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAJQKAgkAzggCCQDOCAIJAQ9fc2F2ZVdhdmVzRXZlbnQCBQlldmVudElkeF8FDGV2ZW50VXBkYXRlZAkBIV9zYXZlUHVibGlzaGVkV2F2ZXNFdmVudEJ5V2l0bmVzcwMFD2NhbGxlclB1YmxpY0tleQUJZXZlbnRJZHhfBQdzdGF0dXNfBQxmaW5hbGl6YXRpb24FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVcHVibGlzaEVWTUV2ZW50U3RhdHVzAglldmVudElkeF8Hc3RhdHVzXwQJZXZlbnRTaXplCQERX2xvYWRFVk1FdmVudFNpemUABA9jYWxsZXJQdWJsaWNLZXkJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BANlcnIDCQERX3ZhbGlkYXRlRXZlbnRJZHgDBQlldmVudElkeF8FCWV2ZW50U2l6ZQIocHVibGlzaEVWTUV2ZW50U3RhdHVzOiBpbnZhbGlkIGV2ZW50IGlkeAkBFF92YWxpZGF0ZUV2ZW50U3RhdHVzAgUHc3RhdHVzXwIlcHVibGlzaEVWTUV2ZW50U3RhdHVzOiBpbnZhbGlkIHN0YXR1cwcDCQAAAgUDZXJyBQNlcnIEBWV2ZW50CQENX2xvYWRFVk1FdmVudAEFCWV2ZW50SWR4XwQNY2FsbGVyQ2hhaW5JZAgFBWV2ZW50Al8xBBBleGVjdXRpb25DaGFpbklkCAUFZXZlbnQCXzIECWV2ZW50SGFzaAgFBWV2ZW50Al84BBJldmVudENvbmZpcm1hdGlvbnMIBQVldmVudAJfOQQKZXZlbnRUb3RhbAgFBWV2ZW50A18xMAQMcHJveHlTZWNEZXBvCAUFZXZlbnQDXzExBAVwcm94eQgFBWV2ZW50A18xMgQFZXBvY2gJARFfbG9hZEN1cnJlbnRFcG9jaAEFDWNhbGxlckNoYWluSWQED2FjdGl2ZVdpdG5lc3NlcwkBDl9sb2FkV2l0bmVzc2VzAgUNY2FsbGVyQ2hhaW5JZAUFZXBvY2gEBGVycjEDAwkBEF9pc0FjdGl2ZVdpdG5lc3MDCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQUPYWN0aXZlV2l0bmVzc2VzAiVwdWJsaXNoRVZNRXZlbnRTdGF0dXM6IGludmFsaWQgY2FsbGVyCQEVX25vdENvbmZpcm1lZEVWTUV2ZW50AgUJZXZlbnRIYXNoAi5wdWJsaXNoRVZNRXZlbnRTdGF0dXM6IGV2ZW50IGFscmVhZHkgY29uZmlybWVkBwkBHl9ub3RQdWJsaXNoZWRFVk1FdmVudEJ5V2l0bmVzcwMFD2NhbGxlclB1YmxpY0tleQUJZXZlbnRJZHhfAihwdWJsaXNoRVZNRXZlbnRTdGF0dXM6IGFscmVhZHkgcHVibGlzaGVkBwMJAAACBQRlcnIxBQRlcnIxBAxldmVudFVwZGF0ZWQDCQAAAgUHc3RhdHVzXwUWRVZFTlRfU1RBVFVTX0NPTkZJUk1FRAkBGV9zZXRFVk1FdmVudENvbmZpcm1hdGlvbnMDBQVldmVudAkAZAIFEmV2ZW50Q29uZmlybWF0aW9ucwABCQBkAgUKZXZlbnRUb3RhbAABAwkAAAIFB3N0YXR1c18FFUVWRU5UX1NUQVRVU19SRUpFQ1RFRAkBGV9zZXRFVk1FdmVudENvbmZpcm1hdGlvbnMDBQVldmVudAUSZXZlbnRDb25maXJtYXRpb25zCQBkAgUKZXZlbnRUb3RhbAABCQACAQIncHVibGlzaEVWTUV2ZW50U3RhdHVzOiBpbmNvcnJlY3Qgc3RhdHVzBA9leGVjdXRvcklkeFNpemUJARxfbG9hZEVWTUV2ZW50RXhlY3V0b3JJZHhTaXplAQUQZXhlY3V0aW9uQ2hhaW5JZAQMZmluYWxpemF0aW9uAwkBEF9pc1F1b3J1bVJlYWNoZWQDCAUMZXZlbnRVcGRhdGVkAl85CAUMZXZlbnRVcGRhdGVkA18xMAkAkAMBBQ9hY3RpdmVXaXRuZXNzZXMEBnN0YXR1cwkBD19nZXRFdmVudFN0YXR1cwMIBQxldmVudFVwZGF0ZWQCXzkIBQxldmVudFVwZGF0ZWQDXzEwCQCQAwEFD2FjdGl2ZVdpdG5lc3NlcwQPcmV3YXJkQWRkcmVzc2VzCQDMCAIJAKUIAQUFcHJveHkJARVfcHVibGljS2V5c1RvQWRkcnNTdHIBBQ9hY3RpdmVXaXRuZXNzZXMEEHdpdG5lc3Nlc1Jld2FyZHMJAPwHBAkBF19sb2FkUmV3YXJkVG9rZW5BZGRyZXNzAAUORlVOQ19NSU5UX01BTlkJAMwIAgkBEV9sb2FkUmV3YXJkQW1vdW50AAkAzAgCBQ9yZXdhcmRBZGRyZXNzZXMFA25pbAUDbmlsAwkAAAIFEHdpdG5lc3Nlc1Jld2FyZHMFEHdpdG5lc3Nlc1Jld2FyZHMDCQAAAgUGc3RhdHVzBRZFVkVOVF9TVEFUVVNfQ09ORklSTUVECQDOCAIJAM4IAgkAzggCCQERX3NhdmVQcm94eVNlY0RlcG8CBQVwcm94eQkAZAIJARFfbG9hZFByb3h5U2VjRGVwbwEFBXByb3h5BQxwcm94eVNlY0RlcG8JARNfc2F2ZUVWTUV2ZW50U3RhdHVzAgUJZXZlbnRIYXNoBQZzdGF0dXMJARhfc2F2ZUVWTUV2ZW50RXhlY3V0b3JJZHgDBRBleGVjdXRpb25DaGFpbklkBQ9leGVjdXRvcklkeFNpemUFCWV2ZW50SWR4XwkBHF9zYXZlRVZNRXZlbnRFeGVjdXRvcklkeFNpemUCBRBleGVjdXRpb25DaGFpbklkCQBkAgUPZXhlY3V0b3JJZHhTaXplAAEDCQAAAgUGc3RhdHVzBRVFVkVOVF9TVEFUVVNfUkVKRUNURUQJAM4IAgkBE19zYXZlRVZNRXZlbnRTdGF0dXMCBQlldmVudEhhc2gFBnN0YXR1cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQENX2xvYWRNdWx0aXNpZwAFDHByb3h5U2VjRGVwbwUEdW5pdAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAlAoCCQDOCAIJAM4IAgkBDV9zYXZlRVZNRXZlbnQCBQlldmVudElkeF8FDGV2ZW50VXBkYXRlZAkBH19zYXZlUHVibGlzaGVkRVZNRXZlbnRCeVdpdG5lc3MDBQ9jYWxsZXJQdWJsaWNLZXkFCWV2ZW50SWR4XwUHc3RhdHVzXwUMZmluYWxpemF0aW9uBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF2FkZFByb3h5U2VjdXJpdHlEZXBvc2l0AQpyZWNpcGllbnRfBAlyZWNpcGllbnQDCQAAAgUKcmVjaXBpZW50XwIACQClCAEIBQFpBmNhbGxlcgUKcmVjaXBpZW50XwQDZXJyAwMJARBfdmFsaWRhdGVBZGRyZXNzAgUJcmVjaXBpZW50AiphZGRQcm94eVNlY3VyaXR5RGVwb3NpdDogaW52YWxpZCByZWNpcGllbnQJARVfdmFsaWRhdGVQYXltZW50c1NpemUDCAUBaQhwYXltZW50cwABAiNhZGRQcm94eVNlY3VyaXR5RGVwb3NpdDogbm8gcGF5bWVudAcJARVfdmFsaWRhdGVQYXltZW50QXNzZXQDCQCRAwIIBQFpCHBheW1lbnRzAAAFBHVuaXQCJmFkZFByb3h5U2VjdXJpdHlEZXBvc2l0OiBpbnZhbGlkIGFzc2V0BwMJAAACBQNlcnIFA2VycgQNcmVjaXBpZW50QWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUJcmVjaXBpZW50BAdiYWxhbmNlCQERX2xvYWRQcm94eVNlY0RlcG8BBQ1yZWNpcGllbnRBZGRyBA51cGRhdGVkQmFsYW5jZQkAZAIFB2JhbGFuY2UICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQCUCgIJARFfc2F2ZVByb3h5U2VjRGVwbwIFDXJlY2lwaWVudEFkZHIFDnVwZGF0ZWRCYWxhbmNlBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF3N1YlByb3h5U2VjdXJpdHlEZXBvc2l0AQdhbW91bnRfBAdiYWxhbmNlCQERX2xvYWRQcm94eVNlY0RlcG8BCAUBaQZjYWxsZXIDCQBmAgUHYW1vdW50XwUHYmFsYW5jZQkAAgECLXN1YlByb3h5U2VjdXJpdHlEZXBvc2l0OiBpbnN1ZmZpY2llbnQgYmFsYW5jZQkAlAoCCQDOCAIJARFfc2F2ZVByb3h5U2VjRGVwbwIIBQFpBmNhbGxlcgkAZQIFB2JhbGFuY2UFB2Ftb3VudF8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdhbW91bnRfBQR1bml0BQNuaWwFBHVuaXQBaQEMc2V0RXZlbnRUeXBlAgxleGVjQ2hhaW5JZF8FdHlwZV8EA2VycgMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEMX3ZhbGlkYXRlSW50BAUMZXhlY0NoYWluSWRfAAAFB01BWF9JTlQCIXNldEV2ZW50VHlwZTogaW52YWxpZCBleGVjQ2hhaW5JZAcJARJfdmFsaWRhdGVFdmVudFR5cGUCBQV0eXBlXwIgc2V0RXZlbnRUeXBlOiBpbnZhbGlkIGV2ZW50IHR5cGUHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ5fc2F2ZUV2ZW50VHlwZQIFDGV4ZWNDaGFpbklkXwUFdHlwZV8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQaXNDb25maXJtZWRFdmVudAIIZXZlbnRJZF8MZXhlY0NoYWluSWRfBAR0eXBlCQEOX2xvYWRFdmVudFR5cGUBBQxleGVjQ2hhaW5JZF8EBnN0YXR1cwMJAAACBQR0eXBlBRBFVkVOVF9UWVBFX1dBVkVTBAVldmVudAkBD19sb2FkV2F2ZXNFdmVudAEFCGV2ZW50SWRfCQEVX2xvYWRXYXZlc0V2ZW50U3RhdHVzAQgFBWV2ZW50Al85AwkAAAIFBHR5cGUFDkVWRU5UX1RZUEVfRVZNBAVldmVudAkBDV9sb2FkRVZNRXZlbnQBBQhldmVudElkXwkBE19sb2FkRVZNRXZlbnRTdGF0dXMBCAUFZXZlbnQCXzgAAAQDZXJyCQEUX3ZhbGlkYXRlRXZlbnRTdGF0dXMCBQZzdGF0dXMCH2lzQ29uZmlybWVkRXZlbnQ6IG5vIHN1Y2ggZXZlbnQDCQAAAgUDZXJyBQNlcnIDCQAAAgUGc3RhdHVzBRZFVkVOVF9TVEFUVVNfQ09ORklSTUVECQCUCgIFA25pbAYJAJQKAgUDbmlsBwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtnZXRSYXdFdmVudAIIZXZlbnRJZF8MZXhlY0NoYWluSWRfBANlcnIDCQERX3ZhbGlkYXRlRXZlbnRJZHgDBQhldmVudElkXwkBE19sb2FkV2F2ZXNFdmVudFNpemUAAh5nZXRSYXdFdmVudDogaW52YWxpZCBldmVudCBpZHgJAQxfdmFsaWRhdGVJbnQEBQxleGVjQ2hhaW5JZF8AAAUHTUFYX0lOVAIgZ2V0UmF3RXZlbnQ6IGludmFsaWQgZXhlY0NoYWluSWQHAwkAAAIFA2VycgUDZXJyBAR0eXBlCQEOX2xvYWRFdmVudFR5cGUBBQxleGVjQ2hhaW5JZF8DCQAAAgUEdHlwZQUQRVZFTlRfVFlQRV9XQVZFUwQFZXZlbnQJAQ9fbG9hZFdhdmVzRXZlbnQBBQhldmVudElkXwQIYXJnc1NpemUJAJADAQgFBWV2ZW50Al82CgEIZm9sZEZ1bmMCA2FjYwRlbGVtCQDLAQIJAMsBAgUDYWNjCQCaAwEJALECAQUEZWxlbQkAmwMBBQRlbGVtBAlhcmdzQnl0ZXMKAAIkbAgFBWV2ZW50Al82CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmb2xkRnVuYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgQEZGF0YQkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAmgMBCAUFZXZlbnQCXzEJAJoDAQgFBWV2ZW50Al8yCQCaAwEIBQVldmVudAJfMwkAmgMBCQCxAgEIBQVldmVudAJfNwkAmwMBCAUFZXZlbnQCXzcJANkEAQgFBWV2ZW50Al80CQCaAwEJALECAQgFBWV2ZW50Al81CQCbAwEIBQVldmVudAJfNQkAmgMBBQhhcmdzU2l6ZQUJYXJnc0J5dGVzCQCUCgIFA25pbAkAlAoCBQR0eXBlBQRkYXRhAwkAAAIFBHR5cGUFDkVWRU5UX1RZUEVfRVZNCQCUCgIFA25pbAkAlAoCBQR0eXBlAQAJAAIBAh9nZXRSYXdFdmVudDogaW52YWxpZCBldmVudCB0eXBlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF92YWxpZGF0ZUFkZHJlc3MCBQltdWx0aXNpZ18CJXNldE11bHRpc2lnOiBpbnZhbGlkIG11bHRpc2lnIGFkZHJlc3MHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ1fc2F2ZU11bHRpc2lnAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbXVsdGlzaWdfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmscC/z", "height": 2496963, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DhpBYuFyvQCLGN2GGy2znExSW2QHwy1jkRTAxJtHqiEn Next: By1bf7X8dB21EbtEhYd3GAN7cFQ1U4mC3dgxQmEZzFWt Diff:
OldNewDifferences
885885
886886
887887 @Callable(i)
888+func getRawEvent (eventId_,execChainId_) = {
889+ let err = if (_validateEventIdx(eventId_, _loadWavesEventSize(), "getRawEvent: invalid event idx"))
890+ then _validateInt(execChainId_, 0, MAX_INT, "getRawEvent: invalid execChainId")
891+ else false
892+ if ((err == err))
893+ then {
894+ let type = _loadEventType(execChainId_)
895+ if ((type == EVENT_TYPE_WAVES))
896+ then {
897+ let event = _loadWavesEvent(eventId_)
898+ let argsSize = size(event._6)
899+ func foldFunc (acc,elem) = ((acc + toBytes(size(elem))) + toBytes(elem))
900+
901+ let argsBytes = {
902+ let $l = event._6
903+ let $s = size($l)
904+ let $acc0 = base58''
905+ func $f0_1 ($a,$i) = if (($i >= $s))
906+ then $a
907+ else foldFunc($a, $l[$i])
908+
909+ func $f0_2 ($a,$i) = if (($i >= $s))
910+ then $a
911+ else throw("List size exceeds 22")
912+
913+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
914+ }
915+ let data = (((((((((toBytes(event._1) + toBytes(event._2)) + toBytes(event._3)) + toBytes(size(event._7))) + toBytes(event._7)) + fromBase58String(event._4)) + toBytes(size(event._5))) + toBytes(event._5)) + toBytes(argsSize)) + argsBytes)
916+ $Tuple2(nil, $Tuple2(type, data))
917+ }
918+ else if ((type == EVENT_TYPE_EVM))
919+ then $Tuple2(nil, $Tuple2(type, base58''))
920+ else throw("getRawEvent: invalid event type")
921+ }
922+ else throw("Strict value is not equal to itself.")
923+ }
924+
925+
926+
927+@Callable(i)
888928 func setMultisig (multisig_) = {
889929 let err = if (_onlyThisContract(i.caller))
890930 then _validateAddress(multisig_, "setMultisig: invalid multisig address")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let ARGS_SEPARATOR = "####"
77
88 let KEY_INIT = "INIT"
99
1010 let KEY_MULTISIG = "MULTISIG"
1111
1212 let KEY_STATUS = "STATUS"
1313
1414 let KEY_PROXY_SEC_DEPO = "PROXY_SECURITY_DEPOSIT"
1515
1616 let KEY_PROXY_SEC_DEPO_PER_EVENT = "PROXY_SECURITY_DEPOSIT_PER_EVENT"
1717
1818 let KEY_EVENT_TYPE = "EVENT_TYPE"
1919
2020 let KEY_WAVES_EVENT = "WAVES_EVENT"
2121
2222 let KEY_EVM_EVENT = "EVM_EVENT"
2323
2424 let KEY_WAVES_EVENT_SIZE = "WAVES_EVENT_SIZE"
2525
2626 let KEY_EVM_EVENT_SIZE = "EVM_EVENT_SIZE"
2727
2828 let KEY_WAVES_EVENT_STATUS = "WAVES_EVENT_STATUS"
2929
3030 let KEY_EVM_EVENT_STATUS = "EVM_EVENT_STATUS"
3131
3232 let KEY_WAVES_EVENT_PUBLISHED = "WAVES_EVENT_PUBLISHED"
3333
3434 let KEY_EVM_EVENT_PUBLISHED = "EVM_EVENT_PUBLISHED"
3535
3636 let KEY_CURRENT_EPOCH = "CURRENT_EPOCH"
3737
3838 let KEY_SIZE = "SIZE"
3939
4040 let KEY_WAVES_EVENT_CALLER = "WAVES_EVENT_CALLER"
4141
4242 let KEY_EVM_EVENT_CALLER = "EVM_EVENT_CALLER"
4343
4444 let KEY_WITNESSES_PER_EPOCH = "WITNESSES_PER_EPOCH"
4545
4646 let KEY_WAVES_EVENT_EXECUTOR = "WAVES_EVENT_EXECUTOR"
4747
4848 let KEY_EVM_EVENT_EXECUTOR = "EVM_EVENT_EXECUTOR"
4949
5050 let KEY_REWARD_TOKEN_ADDRESS = "REWARD_TOKEN_ADDRESS"
5151
5252 let KEY_REWARD_AMOUNT = "REWARD_AMOUNT"
5353
5454 let FUNC_MINT_MANY = "mintMany"
5555
5656 let EVENT_TYPE_WAVES = "WAVES"
5757
5858 let EVENT_TYPE_EVM = "EVM"
5959
6060 let EVENT_STATUS_PROCESSING = 1
6161
6262 let EVENT_STATUS_CONFIRMED = 2
6363
6464 let EVENT_STATUS_REJECTED = 3
6565
6666 let MAX_INT = 9223372036854775807
6767
6868 func _validateAddress (address_,err_) = match addressFromString(address_) {
6969 case a: Address =>
7070 true
7171 case _ =>
7272 throw(err_)
7373 }
7474
7575
7676 func _validateAsset (assetId_,err_) = match assetInfo(fromBase58String(assetId_)) {
7777 case a: Asset =>
7878 true
7979 case _ =>
8080 throw(err_)
8181 }
8282
8383
8484 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
8585 then true
8686 else (val_ > upperBoundary_))
8787 then throw(err_)
8888 else true
8989
9090
9191 func _validateString (val_,err_) = if (if ((0 >= size(val_)))
9292 then true
9393 else contains(val_, SEPARATOR))
9494 then throw(err_)
9595 else true
9696
9797
9898 func _validateArgString (val_,err_) = if (if (contains(val_, ARGS_SEPARATOR))
9999 then true
100100 else contains(val_, SEPARATOR))
101101 then throw(err_)
102102 else true
103103
104104
105105 func _validateArgs (args_,err_) = if ((size(args_) > 22))
106106 then throw(err_)
107107 else {
108108 func foldFunc (acc,elem) = $Tuple2(if (acc._1)
109109 then _validateArgString(elem, acc._2)
110110 else false, acc._2)
111111
112112 let result = {
113113 let $l = args_
114114 let $s = size($l)
115115 let $acc0 = $Tuple2(true, err_)
116116 func $f0_1 ($a,$i) = if (($i >= $s))
117117 then $a
118118 else foldFunc($a, $l[$i])
119119
120120 func $f0_2 ($a,$i) = if (($i >= $s))
121121 then $a
122122 else throw("List size exceeds 22")
123123
124124 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
125125 }
126126 result._1
127127 }
128128
129129
130130 func _validatePaymentsSize (payments_,target_,err_) = if ((size(payments_) != target_))
131131 then throw(err_)
132132 else true
133133
134134
135135 func _validatePaymentAsset (payment_,asset_,err_) = if ((payment_.assetId != asset_))
136136 then throw(err_)
137137 else true
138138
139139
140140 func _validateEventIdx (val_,max_,err_) = if (if ((0 > val_))
141141 then true
142142 else (val_ >= max_))
143143 then throw(err_)
144144 else true
145145
146146
147147 func _validateEventStatus (val_,err_) = if (if ((EVENT_STATUS_PROCESSING > val_))
148148 then true
149149 else (val_ > EVENT_STATUS_REJECTED))
150150 then throw(err_)
151151 else true
152152
153153
154154 func _validatePublicKey (publicKey_,err_) = if ((size(fromBase58String(publicKey_)) != 32))
155155 then throw(err_)
156156 else true
157157
158158
159159 func _validatePublicKeys (publicKeys_,err_) = {
160160 func foldFunc (acc,elem) = $Tuple2(if (acc._1)
161161 then _validatePublicKey(elem, acc._2)
162162 else false, acc._2)
163163
164164 let result = {
165165 let $l = publicKeys_
166166 let $s = size($l)
167167 let $acc0 = $Tuple2(true, err_)
168168 func $f0_1 ($a,$i) = if (($i >= $s))
169169 then $a
170170 else foldFunc($a, $l[$i])
171171
172172 func $f0_2 ($a,$i) = if (($i >= $s))
173173 then $a
174174 else throw("List size exceeds 10")
175175
176176 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
177177 }
178178 result._1
179179 }
180180
181181
182182 func _validateEventType (type_,err_) = if (if ((type_ != EVENT_TYPE_WAVES))
183183 then (type_ != EVENT_TYPE_EVM)
184184 else false)
185185 then throw(err_)
186186 else true
187187
188188
189189 func _publicKeysToAddrsStr (publicKeys_) = {
190190 func foldfunc (acc_,elem_) = (acc_ :+ toString(addressFromPublicKey(fromBase58String(elem_))))
191191
192192 let $l = publicKeys_
193193 let $s = size($l)
194194 let $acc0 = nil
195195 func $f0_1 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else foldfunc($a, $l[$i])
198198
199199 func $f0_2 ($a,$i) = if (($i >= $s))
200200 then $a
201201 else throw("List size exceeds 51")
202202
203203 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51)
204204 }
205205
206206
207207 func _loadInit () = match getBoolean(KEY_INIT) {
208208 case a: Boolean =>
209209 a
210210 case _ =>
211211 false
212212 }
213213
214214
215215 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
216216
217217
218218 func _loadMultisig () = match getString(KEY_MULTISIG) {
219219 case a: String =>
220220 addressFromStringValue(a)
221221 case _ =>
222222 Address(base58'')
223223 }
224224
225225
226226 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
227227
228228
229229 func _loadProxySecDepo (account_) = match getInteger(makeString([KEY_PROXY_SEC_DEPO, toString(account_)], SEPARATOR)) {
230230 case a: Int =>
231231 a
232232 case _ =>
233233 0
234234 }
235235
236236
237237 func _saveProxySecDepo (account_,val_) = [IntegerEntry(makeString([KEY_PROXY_SEC_DEPO, toString(account_)], SEPARATOR), val_)]
238238
239239
240240 func _loadProxySecDepoPerEvent () = match getInteger(KEY_PROXY_SEC_DEPO_PER_EVENT) {
241241 case a: Int =>
242242 a
243243 case _ =>
244244 0
245245 }
246246
247247
248248 func _saveProxySecDepoPerEvent (val_) = [IntegerEntry(KEY_PROXY_SEC_DEPO_PER_EVENT, val_)]
249249
250250
251251 func _loadWavesEventSize () = match getInteger(KEY_WAVES_EVENT_SIZE) {
252252 case a: Int =>
253253 a
254254 case _ =>
255255 0
256256 }
257257
258258
259259 func _saveWavesEventSize (val_) = [IntegerEntry(KEY_WAVES_EVENT_SIZE, val_)]
260260
261261
262262 func _loadEVMEventSize () = match getInteger(KEY_EVM_EVENT_SIZE) {
263263 case a: Int =>
264264 a
265265 case _ =>
266266 0
267267 }
268268
269269
270270 func _saveEVMEventSize (val_) = [IntegerEntry(KEY_EVM_EVENT_SIZE, val_)]
271271
272272
273273 func _loadWavesEvent (index_) = match getString(makeString([KEY_WAVES_EVENT, toString(index_)], SEPARATOR)) {
274274 case a: String =>
275275 let struct = split(a, SEPARATOR)
276276 $Tuple13(parseIntValue(struct[0]), parseIntValue(struct[1]), parseIntValue(struct[2]), struct[3], struct[4], split(struct[5], ARGS_SEPARATOR), struct[6], parseIntValue(struct[7]), struct[8], parseIntValue(struct[9]), parseIntValue(struct[10]), parseIntValue(struct[11]), addressFromStringValue(struct[12]))
277277 case _ =>
278278 $Tuple13(0, 0, 0, "", "", nil, "", 0, "", 0, 0, 0, Address(base58''))
279279 }
280280
281281
282282 func _saveWavesEvent (index_,event_) = [StringEntry(makeString([KEY_WAVES_EVENT, toString(index_)], SEPARATOR), makeString([toString(event_._1), toString(event_._2), toString(event_._3), event_._4, event_._5, makeString(event_._6, ARGS_SEPARATOR), event_._7, toString(event_._8), event_._9, toString(event_._10), toString(event_._11), toString(event_._12), toString(event_._13)], SEPARATOR))]
283283
284284
285285 func _loadEVMEvent (index_) = match getString(makeString([KEY_EVM_EVENT, toString(index_)], SEPARATOR)) {
286286 case a: String =>
287287 let struct = split(a, SEPARATOR)
288288 $Tuple12(parseIntValue(struct[0]), parseIntValue(struct[1]), parseIntValue(struct[2]), struct[3], struct[4], struct[5], parseIntValue(struct[6]), struct[7], parseIntValue(struct[8]), parseIntValue(struct[9]), parseIntValue(struct[10]), addressFromStringValue(struct[11]))
289289 case _ =>
290290 $Tuple12(0, 0, 0, "", "", "", 0, "", 0, 0, 0, Address(base58''))
291291 }
292292
293293
294294 func _saveEVMEvent (index_,event_) = [StringEntry(makeString([KEY_EVM_EVENT, toString(index_)], SEPARATOR), makeString([toString(event_._1), toString(event_._2), toString(event_._3), event_._4, event_._5, event_._6, toString(event_._7), event_._8, toString(event_._9), toString(event_._10), toString(event_._11), toString(event_._12)], SEPARATOR))]
295295
296296
297297 func _loadEventType (execChainId_) = match getString(makeString([KEY_EVENT_TYPE, toString(execChainId_)], SEPARATOR)) {
298298 case a: String =>
299299 a
300300 case _ =>
301301 ""
302302 }
303303
304304
305305 func _saveEventType (execChainId_,val_) = [StringEntry(makeString([KEY_EVENT_TYPE, toString(execChainId_)], SEPARATOR), val_)]
306306
307307
308308 func _loadWavesEventStatus (eventHash_) = match getInteger(makeString([KEY_WAVES_EVENT_STATUS, eventHash_], SEPARATOR)) {
309309 case a: Int =>
310310 a
311311 case _ =>
312312 0
313313 }
314314
315315
316316 func _saveWavesEventStatus (eventHash_,status_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_STATUS, eventHash_], SEPARATOR), status_)]
317317
318318
319319 func _loadEVMEventStatus (eventHash_) = match getInteger(makeString([KEY_EVM_EVENT_STATUS, eventHash_], SEPARATOR)) {
320320 case a: Int =>
321321 a
322322 case _ =>
323323 0
324324 }
325325
326326
327327 func _saveEVMEventStatus (eventHash_,status_) = [IntegerEntry(makeString([KEY_EVM_EVENT_STATUS, eventHash_], SEPARATOR), status_)]
328328
329329
330330 func _loadPublishedWavesEventByWitness (publicKey_,eventId_) = match getInteger(makeString([KEY_WAVES_EVENT_PUBLISHED, publicKey_, toString(eventId_)], SEPARATOR)) {
331331 case a: Int =>
332332 a
333333 case _ =>
334334 0
335335 }
336336
337337
338338 func _savePublishedWavesEventByWitness (publicKey_,eventId_,val_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_PUBLISHED, publicKey_, toString(eventId_)], SEPARATOR), val_)]
339339
340340
341341 func _loadPublishedEVMEventByWitness (publicKey_,eventId_) = match getInteger(makeString([KEY_EVM_EVENT_PUBLISHED, publicKey_, toString(eventId_)], SEPARATOR)) {
342342 case a: Int =>
343343 a
344344 case _ =>
345345 0
346346 }
347347
348348
349349 func _savePublishedEVMEventByWitness (publicKey_,eventId_,val_) = [IntegerEntry(makeString([KEY_EVM_EVENT_PUBLISHED, publicKey_, toString(eventId_)], SEPARATOR), val_)]
350350
351351
352352 func _loadCurrentEpoch (callerChainId_) = match getInteger(makeString([KEY_CURRENT_EPOCH, toString(callerChainId_)], SEPARATOR)) {
353353 case a: Int =>
354354 a
355355 case _ =>
356356 0
357357 }
358358
359359
360360 func _saveCurrentEpoch (callerChainId_,val_) = [IntegerEntry(makeString([KEY_CURRENT_EPOCH, toString(callerChainId_)], SEPARATOR), val_)]
361361
362362
363363 func _loadWavesEventCallerIdxSize (callerChainId_) = match getInteger(makeString([KEY_WAVES_EVENT_CALLER, toString(callerChainId_), KEY_SIZE], SEPARATOR)) {
364364 case a: Int =>
365365 a
366366 case _ =>
367367 0
368368 }
369369
370370
371371 func _saveWavesEventCallerIdxSize (callerChainId_,val_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_CALLER, toString(callerChainId_), KEY_SIZE], SEPARATOR), val_)]
372372
373373
374374 func _loadWavesEventCallerIdx (callerChainId_,idx_) = match getInteger(makeString([KEY_WAVES_EVENT_CALLER, toString(callerChainId_), toString(idx_)], SEPARATOR)) {
375375 case a: Int =>
376376 a
377377 case _ =>
378378 0
379379 }
380380
381381
382382 func _saveWavesEventCallerIdx (callerChainId_,idx_,val_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_CALLER, toString(callerChainId_), toString(idx_)], SEPARATOR), val_)]
383383
384384
385385 func _loadEVMEventCallerIdxSize (callerChainId_) = match getInteger(makeString([KEY_EVM_EVENT_CALLER, toString(callerChainId_), KEY_SIZE], SEPARATOR)) {
386386 case a: Int =>
387387 a
388388 case _ =>
389389 0
390390 }
391391
392392
393393 func _saveEVMEventCallerIdxSize (callerChainId_,val_) = [IntegerEntry(makeString([KEY_EVM_EVENT_CALLER, toString(callerChainId_), KEY_SIZE], SEPARATOR), val_)]
394394
395395
396396 func _loadEVMEventCallerIdx (callerChainId_,idx_) = match getInteger(makeString([KEY_EVM_EVENT_CALLER, toString(callerChainId_), toString(idx_)], SEPARATOR)) {
397397 case a: Int =>
398398 a
399399 case _ =>
400400 0
401401 }
402402
403403
404404 func _saveEVMEventCallerIdx (callerChainId_,idx_,val_) = [IntegerEntry(makeString([KEY_EVM_EVENT_CALLER, toString(callerChainId_), toString(idx_)], SEPARATOR), val_)]
405405
406406
407407 func _loadWavesEventExecutorIdxSize (executionChainId_) = match getInteger(makeString([KEY_WAVES_EVENT_EXECUTOR, toString(executionChainId_), KEY_SIZE], SEPARATOR)) {
408408 case a: Int =>
409409 a
410410 case _ =>
411411 0
412412 }
413413
414414
415415 func _saveWavesEventExecutorIdxSize (executionChainId_,val_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_EXECUTOR, toString(executionChainId_), KEY_SIZE], SEPARATOR), val_)]
416416
417417
418418 func _loadWavesEventExecutorIdx (executionChainId_,idx_) = match getInteger(makeString([KEY_WAVES_EVENT_EXECUTOR, toString(executionChainId_), toString(idx_)], SEPARATOR)) {
419419 case a: Int =>
420420 a
421421 case _ =>
422422 0
423423 }
424424
425425
426426 func _saveWavesEventExecutorIdx (executionChainId_,idx_,val_) = [IntegerEntry(makeString([KEY_WAVES_EVENT_EXECUTOR, toString(executionChainId_), toString(idx_)], SEPARATOR), val_)]
427427
428428
429429 func _loadEVMEventExecutorIdxSize (executionChainId_) = match getInteger(makeString([KEY_EVM_EVENT_EXECUTOR, toString(executionChainId_), KEY_SIZE], SEPARATOR)) {
430430 case a: Int =>
431431 a
432432 case _ =>
433433 0
434434 }
435435
436436
437437 func _saveEVMEventExecutorIdxSize (executionChainId_,val_) = [IntegerEntry(makeString([KEY_EVM_EVENT_EXECUTOR, toString(executionChainId_), KEY_SIZE], SEPARATOR), val_)]
438438
439439
440440 func _loadEVMEventExecutorIdx (executionChainId_,idx_) = match getInteger(makeString([KEY_EVM_EVENT_EXECUTOR, toString(executionChainId_), toString(idx_)], SEPARATOR)) {
441441 case a: Int =>
442442 a
443443 case _ =>
444444 0
445445 }
446446
447447
448448 func _saveEVMEventExecutorIdx (executionChainId_,idx_,val_) = [IntegerEntry(makeString([KEY_EVM_EVENT_EXECUTOR, toString(executionChainId_), toString(idx_)], SEPARATOR), val_)]
449449
450450
451451 func _loadWitnesses (callerChainId_,epoch_) = match getString(makeString([KEY_WITNESSES_PER_EPOCH, toString(callerChainId_), toString(epoch_)], SEPARATOR)) {
452452 case a: String =>
453453 if ((size(a) > 0))
454454 then split(a, SEPARATOR)
455455 else nil
456456 case _ =>
457457 nil
458458 }
459459
460460
461461 func _saveWitnesses (callerChainId_,epoch_,witnesses_) = [StringEntry(makeString([KEY_WITNESSES_PER_EPOCH, toString(callerChainId_), toString(epoch_)], SEPARATOR), makeString(witnesses_, SEPARATOR))]
462462
463463
464464 func _loadRewardTokenAddress () = match getString(KEY_REWARD_TOKEN_ADDRESS) {
465465 case a: String =>
466466 addressFromStringValue(a)
467467 case _ =>
468468 Address(base58'')
469469 }
470470
471471
472472 func _saveRewardTokenAddress (val_) = [StringEntry(KEY_REWARD_TOKEN_ADDRESS, toString(val_))]
473473
474474
475475 func _loadRewardAmount () = match getInteger(KEY_REWARD_AMOUNT) {
476476 case a: Int =>
477477 a
478478 case _ =>
479479 0
480480 }
481481
482482
483483 func _saveRewardAmount (val_) = [IntegerEntry(KEY_REWARD_AMOUNT, val_)]
484484
485485
486486 func _onlyThisContract (caller_) = if ((caller_ != this))
487487 then throw("_onlyThisContract: revert")
488488 else true
489489
490490
491491 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
492492 then throw("_whenMultisigSet: revert")
493493 else true
494494
495495
496496 func _whenNotInitialized () = if (_loadInit())
497497 then throw("_whenNotInitialized: revert")
498498 else true
499499
500500
501501 func _whenInitialized () = if (!(_loadInit()))
502502 then throw("_whenInitialized: revert")
503503 else true
504504
505505
506506 func _isActiveWitness (publicKey_,publicKeys_,err_) = if (!(containsElement(publicKeys_, publicKey_)))
507507 then throw(err_)
508508 else true
509509
510510
511511 func _notConfirmedWavesEvent (eventHash_,err_) = if ((_loadWavesEventStatus(eventHash_) > EVENT_STATUS_PROCESSING))
512512 then throw(err_)
513513 else true
514514
515515
516516 func _notConfirmedEVMEvent (eventHash_,err_) = if ((_loadEVMEventStatus(eventHash_) > EVENT_STATUS_PROCESSING))
517517 then throw(err_)
518518 else true
519519
520520
521521 func _wavesEventNotExist (eventHash_,err_) = if ((_loadWavesEventStatus(eventHash_) != 0))
522522 then throw(err_)
523523 else true
524524
525525
526526 func _evmEventNotExist (eventHash_,err_) = if ((_loadEVMEventStatus(eventHash_) != 0))
527527 then throw(err_)
528528 else true
529529
530530
531531 func _notPublishedWavesEventByWitness (publicKey_,eventId_,err_) = if ((_loadPublishedWavesEventByWitness(publicKey_, eventId_) != 0))
532532 then throw(err_)
533533 else true
534534
535535
536536 func _notPublishedEVMEventByWitness (publicKey_,eventId_,err_) = if ((_loadPublishedEVMEventByWitness(publicKey_, eventId_) > 0))
537537 then throw(err_)
538538 else true
539539
540540
541541 func _isQuorumReached (confirmations_,total_,witnessSize_) = if (if ((confirmations_ > (witnessSize_ / 2)))
542542 then true
543543 else ((total_ - confirmations_) > (witnessSize_ / 2)))
544544 then true
545545 else false
546546
547547
548548 func _getEventStatus (confirmations_,total_,witnessSize_) = if ((confirmations_ > (witnessSize_ / 2)))
549549 then EVENT_STATUS_CONFIRMED
550550 else if (((total_ - confirmations_) > (witnessSize_ / 2)))
551551 then EVENT_STATUS_REJECTED
552552 else EVENT_STATUS_PROCESSING
553553
554554
555555 func _checkEventType (executionChainId_,type_,err_) = if ((_loadEventType(executionChainId_) != type_))
556556 then throw(err_)
557557 else true
558558
559559
560560 func _calcWavesEventHash (event_) = {
561561 let eventBytes = (((((((toBytes(event_._1) + toBytes(event_._2)) + toBytes(event_._3)) + toBytes(event_._4)) + toBytes(event_._5)) + toBytes(makeString(event_._6, ARGS_SEPARATOR))) + toBytes(event_._7)) + toBytes(event_._8))
562562 toBase58String(keccak256_16Kb(eventBytes))
563563 }
564564
565565
566566 func _calcEVMEventHash (event_) = {
567567 let eventBytes = ((((((toBytes(event_._1) + toBytes(event_._2)) + toBytes(event_._3)) + toBytes(event_._4)) + toBytes(event_._5)) + toBytes(event_._6)) + toBytes(event_._7))
568568 toBase58String(keccak256_16Kb(eventBytes))
569569 }
570570
571571
572572 func _setWavesEventHash (event_,hash_) = $Tuple13(event_._1, event_._2, event_._3, event_._4, event_._5, event_._6, event_._7, event_._8, hash_, event_._10, event_._11, event_._12, event_._13)
573573
574574
575575 func _setEVMEventHash (event_,hash_) = $Tuple12(event_._1, event_._2, event_._3, event_._4, event_._5, event_._6, event_._7, hash_, event_._9, event_._10, event_._11, event_._12)
576576
577577
578578 func _setWavesEventConfirmations (event_,confirmations_,total_) = $Tuple13(event_._1, event_._2, event_._3, event_._4, event_._5, event_._6, event_._7, event_._8, event_._9, confirmations_, total_, event_._12, event_._13)
579579
580580
581581 func _setEVMEventConfirmations (event_,confirmations_,total_) = $Tuple12(event_._1, event_._2, event_._3, event_._4, event_._5, event_._6, event_._7, event_._8, confirmations_, total_, event_._11, event_._12)
582582
583583
584584 @Callable(i)
585585 func init (proxySecDepoPerEvent_,rewardTokenAddress_,rewardAmount_) = {
586586 let err = if (if (if (if (if (_onlyThisContract(i.caller))
587587 then _whenNotInitialized()
588588 else false)
589589 then _whenMultisigSet()
590590 else false)
591591 then _validateInt(proxySecDepoPerEvent_, 0, MAX_INT, "init: invalid proxySecDepoPerEvent")
592592 else false)
593593 then _validateAddress(rewardTokenAddress_, "init: invalid rewardTokenAddress")
594594 else false)
595595 then _validateInt(rewardAmount_, 0, MAX_INT, "init: invalid rewardAmount")
596596 else false
597597 if ((err == err))
598598 then $Tuple2((((_saveInit(true) ++ _saveProxySecDepoPerEvent(proxySecDepoPerEvent_)) ++ _saveRewardTokenAddress(addressFromStringValue(rewardTokenAddress_))) ++ _saveRewardAmount(rewardAmount_)), unit)
599599 else throw("Strict value is not equal to itself.")
600600 }
601601
602602
603603
604604 @Callable(i)
605605 func setActiveWitnesses (callerChainId_,witnesses_) = {
606606 let err = if (if (_onlyThisContract(i.caller))
607607 then _whenInitialized()
608608 else false)
609609 then _validatePublicKeys(witnesses_, "setActiveWitnesses: invalid witnesses")
610610 else false
611611 if ((err == err))
612612 then {
613613 let epoch = _loadCurrentEpoch(callerChainId_)
614614 $Tuple2((_saveCurrentEpoch(callerChainId_, (epoch + 1)) ++ _saveWitnesses(callerChainId_, (epoch + 1), witnesses_)), unit)
615615 }
616616 else throw("Strict value is not equal to itself.")
617617 }
618618
619619
620620
621621 @Callable(i)
622622 func submitWavesCallEvent (callerChainId_,executionChainId_,nonce_,executionContract_,functionName_,args_,txHash_,blockNumber_) = {
623623 let err = if (if (if (if (if (if (if (if (_validateInt(callerChainId_, 0, MAX_INT, "submitWavesCallEvent: invalid callerChainId"))
624624 then _validateInt(executionChainId_, 0, MAX_INT, "submitWavesCallEvent: invalid executionChainId")
625625 else false)
626626 then _validateInt(nonce_, 0, MAX_INT, "submitWavesCallEvent: invalid nonce")
627627 else false)
628628 then _validateString(executionContract_, "submitWavesCallEvent: invalid executionContract")
629629 else false)
630630 then _validateString(functionName_, "submitWavesCallEvent: invalid functionName")
631631 else false)
632632 then _validateArgs(args_, "submitWavesCallEvent: invalid args")
633633 else false)
634634 then _validateString(txHash_, "submitWavesCallEvent: invalid txHash")
635635 else false)
636636 then _validateInt(blockNumber_, 0, MAX_INT, "submitWavesCallEvent: invalid blockNumber")
637637 else false)
638638 then _checkEventType(executionChainId_, EVENT_TYPE_WAVES, "submitWavesCallEvent: invalid type")
639639 else false
640640 if ((err == err))
641641 then {
642642 let proxySecDepo = _loadProxySecDepo(i.caller)
643643 let proxySecDepoPerEvent = _loadProxySecDepoPerEvent()
644644 let proxySecDepoUpdated = (proxySecDepo - proxySecDepoPerEvent)
645645 let event = $Tuple13(callerChainId_, executionChainId_, nonce_, executionContract_, functionName_, args_, txHash_, blockNumber_, "", 0, 0, proxySecDepoPerEvent, i.caller)
646646 let eventSize = _loadWavesEventSize()
647647 let eventHash = _calcWavesEventHash(event)
648648 let eventUpdated = _setWavesEventHash(event, eventHash)
649649 let err1 = if (_wavesEventNotExist(eventHash, "submitWavesCallEvent: already exists"))
650650 then _validateInt(proxySecDepoUpdated, 0, MAX_INT, "submitWavesCallEvent: no security deposit")
651651 else false
652652 if ((err1 == err1))
653653 then {
654654 let callerIdxSize = _loadWavesEventCallerIdxSize(callerChainId_)
655655 $Tuple2((((((_saveProxySecDepo(i.caller, proxySecDepoUpdated) ++ _saveWavesEvent(eventSize, eventUpdated)) ++ _saveWavesEventStatus(eventHash, EVENT_STATUS_PROCESSING)) ++ _saveWavesEventSize((eventSize + 1))) ++ _saveWavesEventCallerIdx(callerChainId_, callerIdxSize, eventSize)) ++ _saveWavesEventCallerIdxSize(callerChainId_, (callerIdxSize + 1))), unit)
656656 }
657657 else throw("Strict value is not equal to itself.")
658658 }
659659 else throw("Strict value is not equal to itself.")
660660 }
661661
662662
663663
664664 @Callable(i)
665665 func submitEVMCallEvent (callerChainId_,executionChainId_,nonce_,executionContract_,calldata_,txHash_,blockNumber_) = {
666666 let err = if (if (if (if (if (if (if (_validateInt(callerChainId_, 0, MAX_INT, "submitEVMCallEvent: invalid callerChainId"))
667667 then _validateInt(executionChainId_, 0, MAX_INT, "submitEVMCallEvent: invalid executionChainId")
668668 else false)
669669 then _validateInt(nonce_, 0, MAX_INT, "submitEVMCallEvent: invalid nonce")
670670 else false)
671671 then _validateString(executionContract_, "submitEVMCallEvent: invalid executionContract")
672672 else false)
673673 then _validateString(calldata_, "submitEVMCallEvent: invalid calldata")
674674 else false)
675675 then _validateString(txHash_, "submitEVMCallEvent: invalid txHash")
676676 else false)
677677 then _validateInt(blockNumber_, 0, MAX_INT, "submitEVMCallEvent: invalid blockNumber")
678678 else false)
679679 then _checkEventType(executionChainId_, EVENT_TYPE_EVM, "submitEVMCallEvent: invalid type")
680680 else false
681681 if ((err == err))
682682 then {
683683 let proxySecDepo = _loadProxySecDepo(i.caller)
684684 let proxySecDepoPerEvent = _loadProxySecDepoPerEvent()
685685 let proxySecDepoUpdated = (proxySecDepo - proxySecDepoPerEvent)
686686 let event = $Tuple12(callerChainId_, executionChainId_, nonce_, executionContract_, calldata_, txHash_, blockNumber_, "", 0, 0, proxySecDepoPerEvent, i.caller)
687687 let eventSize = _loadEVMEventSize()
688688 let eventHash = _calcEVMEventHash(event)
689689 let eventUpdated = _setEVMEventHash(event, eventHash)
690690 let err1 = if (_evmEventNotExist(eventHash, "submitEVMCallEvent: already exists"))
691691 then _validateInt(proxySecDepoUpdated, 0, MAX_INT, "submitEVMCallEvent: no security deposit")
692692 else false
693693 if ((err1 == err1))
694694 then {
695695 let callerIdxSize = _loadEVMEventCallerIdxSize(callerChainId_)
696696 $Tuple2((((((_saveProxySecDepo(i.caller, proxySecDepoUpdated) ++ _saveEVMEvent(eventSize, eventUpdated)) ++ _saveEVMEventStatus(eventHash, EVENT_STATUS_PROCESSING)) ++ _saveEVMEventSize((eventSize + 1))) ++ _saveEVMEventCallerIdx(callerChainId_, callerIdxSize, eventSize)) ++ _saveEVMEventCallerIdxSize(callerChainId_, (callerIdxSize + 1))), unit)
697697 }
698698 else throw("Strict value is not equal to itself.")
699699 }
700700 else throw("Strict value is not equal to itself.")
701701 }
702702
703703
704704
705705 @Callable(i)
706706 func publishWavesEventStatus (eventIdx_,status_) = {
707707 let eventSize = _loadWavesEventSize()
708708 let callerPublicKey = toBase58String(i.callerPublicKey)
709709 let err = if (_validateEventIdx(eventIdx_, eventSize, "publishWavesEventStatus: invalid event idx"))
710710 then _validateEventStatus(status_, "publishWavesEventStatus: invalid status")
711711 else false
712712 if ((err == err))
713713 then {
714714 let event = _loadWavesEvent(eventIdx_)
715715 let callerChainId = event._1
716716 let executionChainId = event._2
717717 let eventHash = event._9
718718 let eventConfirmations = event._10
719719 let eventTotal = event._11
720720 let proxySecDepo = event._12
721721 let proxy = event._13
722722 let epoch = _loadCurrentEpoch(callerChainId)
723723 let activeWitnesses = _loadWitnesses(callerChainId, epoch)
724724 let err1 = if (if (_isActiveWitness(toBase58String(i.callerPublicKey), activeWitnesses, "publishWavesEventStatus: invalid caller"))
725725 then _notConfirmedWavesEvent(eventHash, "publishWavesEventStatus: event already confirmed")
726726 else false)
727727 then _notPublishedWavesEventByWitness(callerPublicKey, eventIdx_, "publishWavesEventStatus: already published")
728728 else false
729729 if ((err1 == err1))
730730 then {
731731 let eventUpdated = if ((status_ == EVENT_STATUS_CONFIRMED))
732732 then _setWavesEventConfirmations(event, (eventConfirmations + 1), (eventTotal + 1))
733733 else if ((status_ == EVENT_STATUS_REJECTED))
734734 then _setWavesEventConfirmations(event, eventConfirmations, (eventTotal + 1))
735735 else throw("publishWavesEventStatus: incorrect status")
736736 let executorIdxSize = _loadWavesEventExecutorIdxSize(executionChainId)
737737 let finalization = if (_isQuorumReached(eventUpdated._10, eventUpdated._11, size(activeWitnesses)))
738738 then {
739739 let status = _getEventStatus(eventUpdated._10, eventUpdated._11, size(activeWitnesses))
740740 let rewardAddresses = [toString(proxy), _publicKeysToAddrsStr(activeWitnesses)]
741741 let witnessesRewards = invoke(_loadRewardTokenAddress(), FUNC_MINT_MANY, [_loadRewardAmount(), rewardAddresses], nil)
742742 if ((witnessesRewards == witnessesRewards))
743743 then if ((status == EVENT_STATUS_CONFIRMED))
744744 then (((_saveProxySecDepo(proxy, (_loadProxySecDepo(proxy) + proxySecDepo)) ++ _saveWavesEventStatus(eventHash, status)) ++ _saveWavesEventExecutorIdx(executionChainId, executorIdxSize, eventIdx_)) ++ _saveWavesEventExecutorIdxSize(executionChainId, (executorIdxSize + 1)))
745745 else if ((status == EVENT_STATUS_REJECTED))
746746 then (_saveWavesEventStatus(eventHash, status) ++ [ScriptTransfer(_loadMultisig(), proxySecDepo, unit)])
747747 else nil
748748 else throw("Strict value is not equal to itself.")
749749 }
750750 else nil
751751 $Tuple2(((_saveWavesEvent(eventIdx_, eventUpdated) ++ _savePublishedWavesEventByWitness(callerPublicKey, eventIdx_, status_)) ++ finalization), unit)
752752 }
753753 else throw("Strict value is not equal to itself.")
754754 }
755755 else throw("Strict value is not equal to itself.")
756756 }
757757
758758
759759
760760 @Callable(i)
761761 func publishEVMEventStatus (eventIdx_,status_) = {
762762 let eventSize = _loadEVMEventSize()
763763 let callerPublicKey = toBase58String(i.callerPublicKey)
764764 let err = if (_validateEventIdx(eventIdx_, eventSize, "publishEVMEventStatus: invalid event idx"))
765765 then _validateEventStatus(status_, "publishEVMEventStatus: invalid status")
766766 else false
767767 if ((err == err))
768768 then {
769769 let event = _loadEVMEvent(eventIdx_)
770770 let callerChainId = event._1
771771 let executionChainId = event._2
772772 let eventHash = event._8
773773 let eventConfirmations = event._9
774774 let eventTotal = event._10
775775 let proxySecDepo = event._11
776776 let proxy = event._12
777777 let epoch = _loadCurrentEpoch(callerChainId)
778778 let activeWitnesses = _loadWitnesses(callerChainId, epoch)
779779 let err1 = if (if (_isActiveWitness(toBase58String(i.callerPublicKey), activeWitnesses, "publishEVMEventStatus: invalid caller"))
780780 then _notConfirmedEVMEvent(eventHash, "publishEVMEventStatus: event already confirmed")
781781 else false)
782782 then _notPublishedEVMEventByWitness(callerPublicKey, eventIdx_, "publishEVMEventStatus: already published")
783783 else false
784784 if ((err1 == err1))
785785 then {
786786 let eventUpdated = if ((status_ == EVENT_STATUS_CONFIRMED))
787787 then _setEVMEventConfirmations(event, (eventConfirmations + 1), (eventTotal + 1))
788788 else if ((status_ == EVENT_STATUS_REJECTED))
789789 then _setEVMEventConfirmations(event, eventConfirmations, (eventTotal + 1))
790790 else throw("publishEVMEventStatus: incorrect status")
791791 let executorIdxSize = _loadEVMEventExecutorIdxSize(executionChainId)
792792 let finalization = if (_isQuorumReached(eventUpdated._9, eventUpdated._10, size(activeWitnesses)))
793793 then {
794794 let status = _getEventStatus(eventUpdated._9, eventUpdated._10, size(activeWitnesses))
795795 let rewardAddresses = [toString(proxy), _publicKeysToAddrsStr(activeWitnesses)]
796796 let witnessesRewards = invoke(_loadRewardTokenAddress(), FUNC_MINT_MANY, [_loadRewardAmount(), rewardAddresses], nil)
797797 if ((witnessesRewards == witnessesRewards))
798798 then if ((status == EVENT_STATUS_CONFIRMED))
799799 then (((_saveProxySecDepo(proxy, (_loadProxySecDepo(proxy) + proxySecDepo)) ++ _saveEVMEventStatus(eventHash, status)) ++ _saveEVMEventExecutorIdx(executionChainId, executorIdxSize, eventIdx_)) ++ _saveEVMEventExecutorIdxSize(executionChainId, (executorIdxSize + 1)))
800800 else if ((status == EVENT_STATUS_REJECTED))
801801 then (_saveEVMEventStatus(eventHash, status) ++ [ScriptTransfer(_loadMultisig(), proxySecDepo, unit)])
802802 else nil
803803 else throw("Strict value is not equal to itself.")
804804 }
805805 else nil
806806 $Tuple2(((_saveEVMEvent(eventIdx_, eventUpdated) ++ _savePublishedEVMEventByWitness(callerPublicKey, eventIdx_, status_)) ++ finalization), unit)
807807 }
808808 else throw("Strict value is not equal to itself.")
809809 }
810810 else throw("Strict value is not equal to itself.")
811811 }
812812
813813
814814
815815 @Callable(i)
816816 func addProxySecurityDeposit (recipient_) = {
817817 let recipient = if ((recipient_ == ""))
818818 then toString(i.caller)
819819 else recipient_
820820 let err = if (if (_validateAddress(recipient, "addProxySecurityDeposit: invalid recipient"))
821821 then _validatePaymentsSize(i.payments, 1, "addProxySecurityDeposit: no payment")
822822 else false)
823823 then _validatePaymentAsset(i.payments[0], unit, "addProxySecurityDeposit: invalid asset")
824824 else false
825825 if ((err == err))
826826 then {
827827 let recipientAddr = addressFromStringValue(recipient)
828828 let balance = _loadProxySecDepo(recipientAddr)
829829 let updatedBalance = (balance + i.payments[0].amount)
830830 $Tuple2(_saveProxySecDepo(recipientAddr, updatedBalance), unit)
831831 }
832832 else throw("Strict value is not equal to itself.")
833833 }
834834
835835
836836
837837 @Callable(i)
838838 func subProxySecurityDeposit (amount_) = {
839839 let balance = _loadProxySecDepo(i.caller)
840840 if ((amount_ > balance))
841841 then throw("subProxySecurityDeposit: insufficient balance")
842842 else $Tuple2((_saveProxySecDepo(i.caller, (balance - amount_)) ++ [ScriptTransfer(i.caller, amount_, unit)]), unit)
843843 }
844844
845845
846846
847847 @Callable(i)
848848 func setEventType (execChainId_,type_) = {
849849 let err = if (if (if (_onlyThisContract(i.caller))
850850 then _whenInitialized()
851851 else false)
852852 then _validateInt(execChainId_, 0, MAX_INT, "setEventType: invalid execChainId")
853853 else false)
854854 then _validateEventType(type_, "setEventType: invalid event type")
855855 else false
856856 if ((err == err))
857857 then $Tuple2(_saveEventType(execChainId_, type_), unit)
858858 else throw("Strict value is not equal to itself.")
859859 }
860860
861861
862862
863863 @Callable(i)
864864 func isConfirmedEvent (eventId_,execChainId_) = {
865865 let type = _loadEventType(execChainId_)
866866 let status = if ((type == EVENT_TYPE_WAVES))
867867 then {
868868 let event = _loadWavesEvent(eventId_)
869869 _loadWavesEventStatus(event._9)
870870 }
871871 else if ((type == EVENT_TYPE_EVM))
872872 then {
873873 let event = _loadEVMEvent(eventId_)
874874 _loadEVMEventStatus(event._8)
875875 }
876876 else 0
877877 let err = _validateEventStatus(status, "isConfirmedEvent: no such event")
878878 if ((err == err))
879879 then if ((status == EVENT_STATUS_CONFIRMED))
880880 then $Tuple2(nil, true)
881881 else $Tuple2(nil, false)
882882 else throw("Strict value is not equal to itself.")
883883 }
884884
885885
886886
887887 @Callable(i)
888+func getRawEvent (eventId_,execChainId_) = {
889+ let err = if (_validateEventIdx(eventId_, _loadWavesEventSize(), "getRawEvent: invalid event idx"))
890+ then _validateInt(execChainId_, 0, MAX_INT, "getRawEvent: invalid execChainId")
891+ else false
892+ if ((err == err))
893+ then {
894+ let type = _loadEventType(execChainId_)
895+ if ((type == EVENT_TYPE_WAVES))
896+ then {
897+ let event = _loadWavesEvent(eventId_)
898+ let argsSize = size(event._6)
899+ func foldFunc (acc,elem) = ((acc + toBytes(size(elem))) + toBytes(elem))
900+
901+ let argsBytes = {
902+ let $l = event._6
903+ let $s = size($l)
904+ let $acc0 = base58''
905+ func $f0_1 ($a,$i) = if (($i >= $s))
906+ then $a
907+ else foldFunc($a, $l[$i])
908+
909+ func $f0_2 ($a,$i) = if (($i >= $s))
910+ then $a
911+ else throw("List size exceeds 22")
912+
913+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
914+ }
915+ let data = (((((((((toBytes(event._1) + toBytes(event._2)) + toBytes(event._3)) + toBytes(size(event._7))) + toBytes(event._7)) + fromBase58String(event._4)) + toBytes(size(event._5))) + toBytes(event._5)) + toBytes(argsSize)) + argsBytes)
916+ $Tuple2(nil, $Tuple2(type, data))
917+ }
918+ else if ((type == EVENT_TYPE_EVM))
919+ then $Tuple2(nil, $Tuple2(type, base58''))
920+ else throw("getRawEvent: invalid event type")
921+ }
922+ else throw("Strict value is not equal to itself.")
923+ }
924+
925+
926+
927+@Callable(i)
888928 func setMultisig (multisig_) = {
889929 let err = if (_onlyThisContract(i.caller))
890930 then _validateAddress(multisig_, "setMultisig: invalid multisig address")
891931 else false
892932 if ((err == err))
893933 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
894934 else throw("Strict value is not equal to itself.")
895935 }
896936
897937
898938 @Verifier(tx)
899939 func verify () = match getString(KEY_MULTISIG) {
900940 case multisig: String =>
901941 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
902942 case _ =>
903943 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
904944 }
905945

github/deemru/w8io/026f985 
97.81 ms