tx · 8Bh3TNMYuFa7qLbcdFpSNzL9oHCheTv7bEmKbXQZyihN

3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e:  -0.01700000 Waves

2023.10.07 09:03 [3853650] smart account 3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e > SELF 0.00000000 Waves

{ "type": 13, "id": "8Bh3TNMYuFa7qLbcdFpSNzL9oHCheTv7bEmKbXQZyihN", "fee": 1700000, "feeAssetId": null, "timestamp": 1696658614314, "version": 2, "chainId": 87, "sender": "3PBbLJcBjLWUZZrFFUk5s53TdTUneHXDc7e", "senderPublicKey": "qv5sHFvV7GyNRm1A2r8BR9oX2nhkc1yNa1QfWLkaja8", "proofs": [ "49SA4MxnTxsfVyHjRUGBPeNadd1QG3xtm2TUESP9Ko77BeJXwfigpqe252eYzmK3iAb5T1GazBakcbBC4yHy7yrV" ], "script": "base64:BgIjCAISABIAEgASAwoBARIAEgASABIAEgASABIAEgASBAoCCAE7AQ10cnlHZXRJbnRlZ2VyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAAAAmQ4AIDC1y8AA2QxNgkAaAIFAmQ4BQJkOAAQYnVybnh0blBQVHBvb2xJZAEaAVf1RmgngA1o304mdXq0odMoMeAJv/V5eTcADHByb2plY3RPd25lcgEaAVeOHeZRyjgjzsORw8RWi9WD02+IVv823QsAD3doaXJscG9vbFBvb2xJZAEaAVcJSFSomLX/zEpG2xL9S8mTGUY3Q5iH180ACXdoaXJscG9vbAEgWeON3MK1I7pKFNzE0K8UCeZk5gS+JQYLJk7lUG2XWccAD3doaXJscG9vbFN0cmluZwkA2AQBASBZ443cwrUjukoU3MTQrxQJ5mTmBL4lBgsmTuVQbZdZxwAEdGVzdAEgCc6A2qSEYQEDFtHChxRdJUyYFe25w8sijpje/5CtqUcABXdhdmVzAQQTq9kzAAd1c2R0ZXJjASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQAHdXNkY2VyYwEg8b90j2kCa66vzjuwb/Nd8MVKoTFsVrfc+ipKoeuRGkkAB3VzZHRic2MBIIeFKhRdvRvgacOk2tYbd0/cBQSbrAXfQbCvgMBJMOmiAAd1c2RjYnNjASAvN5TEMA7UHoYvTQ14Xf3kXkI8Q97mJBxq1GB3huvltQAHYnVybnh0bgEgJE91eWp+Mzm4+wz/hKlxXF7KLd4zoMRdafnqRBHsTFQAA2V0aAEgJR76/9ghyXCe+8C03j63q4aeBTtm79wH/FHj9agzKHIAA2JuYgEgS7ep4jwDLeZJ/TwoM/wRUkbi6v6x+mu9cBafRBfVHhwABHdidGMBIBKeo3EHNGSP6mN2enCiK9cwBs75vPQVGctmd0xybol/AARidGNiASDIlsraYoy6SPYFNHcPBbtsEP/v2GRaY5157d4CGOemoQAEZWFzdAEgVoJP4wutz64pn/F3h50Vd/r+QUj98n3dRjyfnx8R03QABnN0ZWFzdAEg4Tj7DL+1BlqSS0fgEtOD/O7RI9SQqBlxFRrcq0CylDYABnN3YXZlcwEgCB/I9xYw7VHCKRvsrBqP/JBxHFk4LeshgbA3QfBF0UoAC3Bvb2xib29zdFNDARoBV1+hRBbaqQHNFrLXSm/kpWLQp/1rM4gJMQAHUExfTWFpbgkBB0FkZHJlc3MBARoBVyCUXEqtz/RIOTuIQLO/2+6MUKCnas/a6AAHUExfRGVmaQkBB0FkZHJlc3MBARoBVxkLO48/zcX1AFJDuOumjMisvxQ5MT4kvgAGUExfTG93CQEHQWRkcmVzcwEBGgFXrmAU0mZwDPA/3HTF0nTmGr6p4FLB6guQAApFQVNUX3N0YWtlCQEHQWRkcmVzcwEBGgFXCHSp2cN38YJ996KDSPPrm7NP/Ig86xdvAA1XWF9XQVZFU19FQVNUCQEHQWRkcmVzcwEBGgFXtcI/53C/UBxRdbkKYmb09j7c3NWdpOjUAAxTV0FWRVNfc3Rha2UJAQdBZGRyZXNzAQEaAVd9yXuTFHn/51HxsUrHb/lqHYCVR89YI34ACWV0aEluUG9vbAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQJAKwCAgkArAICAgdnbG9iYWxfCQDYBAEFA2V0aAIIX2JhbGFuY2UAC3dhdmVzSW5Qb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUQYnVybnh0blBQVHBvb2xJZAkArAICCQCsAgICB2dsb2JhbF8JANgEAQUFd2F2ZXMCCF9iYWxhbmNlAAhldGhXYXZlcwkAawMFAmQ4BQt3YXZlc0luUG9vbAUJZXRoSW5Qb29sAAxwcm9qZWN0U3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBRBidXJueHRuUFBUcG9vbElkCQCsAgIJAKUIAQUEdGhpcwIMX2luZGV4U3Rha2VkAAp0b3RhbFN0YWtlCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUQYnVybnh0blBQVHBvb2xJZAIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQBCFBMX3ZhbHVlAgtkQXBwQWRkcmVzcwVhc3NldAkAawMJAQ10cnlHZXRJbnRlZ2VyAgULZEFwcEFkZHJlc3MJAKwCAgkArAICCQClCAEFBHRoaXMCCl9zdXBwbGllZF8JANgEAQUFYXNzZXQJAQ10cnlHZXRJbnRlZ2VyAgULZEFwcEFkZHJlc3MJAKwCAgkA2AQBBQVhc3NldAIGX3NSYXRlBQNkMTYBCF9sb2FkSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCaCAIFDFNXQVZFU19zdGFrZQUEa2V5XwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFCGRlZmF1bHRfAQtfbG9hZEJpZ0ludAIEa2V5XwhkZWZhdWx0XwQHJG1hdGNoMAkAnAgCBQxTV0FWRVNfc3Rha2UFBGtleV8DCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYQUHJG1hdGNoMAkAngMBBQFhBQhkZWZhdWx0XwAIbGFzdFJhdGUJAQtfbG9hZEJpZ0ludAICCUxBU1RfUkFURQkAtgIBAICglKWNHQALY3VycmVudFJhdGUJAQtfbG9hZEJpZ0ludAICDENVUlJFTlRfUkFURQkAtgIBAAAACmxhc3RIZWlnaHQJAQhfbG9hZEludAICC0xBU1RfSEVJR0hUAAAADHRhcmdldEhlaWdodAkAlwMBCQDMCAIJAQhfbG9hZEludAICDVRBUkdFVF9IRUlHSFQAAAkAzAgCBQZoZWlnaHQFA25pbAAPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIFC2N1cnJlbnRSYXRlCQC2AgEJAGUCBQx0YXJnZXRIZWlnaHQFCmxhc3RIZWlnaHQACmJhc2VBbW91bnQJAKADAQkAvQIECQC2AgEJAPAHAgUNV1hfV0FWRVNfRUFTVAUGc3dhdmVzBQ9sYXN0UmF0ZVVwZGF0ZWQJALYCAQCAoJSljR0FBUZMT09SAAl3YXZlc0luV1gJAGQCCAkA7wcBBQ1XWF9XQVZFU19FQVNUB3JlZ3VsYXIFCmJhc2VBbW91bnQACGVhc3RJbldYCQDwBwIFDVdYX1dBVkVTX0VBU1QFBGVhc3QACXdhdmVzRWFzdAkAawMJAGgCBQJkOABkBQhlYXN0SW5XWAUJd2F2ZXNJbldYABB3YXZlc0luV2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQV3YXZlcwIIX2JhbGFuY2UAEHdoaXJsSW5XaGlybHBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgkArAICAgdnbG9iYWxfBQ93aGlybHBvb2xTdHJpbmcCCF9iYWxhbmNlABFwcm9qZWN0U3Rha2VXaGlybAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAkArAICCQClCAEFBHRoaXMCDF9pbmRleFN0YWtlZAAPdG90YWxTdGFrZVdoaXJsCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAANc3RFYXN0SW5XYXZlcwkAaAIJAGsDCQBpAgkAbgQJAPAHAgUEdGhpcwUGc3RlYXN0CQENdHJ5R2V0SW50ZWdlcgIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAUCZDgFCXdhdmVzRWFzdABkAA1lYXN0SW5TdGFraW5nCQBpAgkAbgQJAPAHAgUEdGhpcwUGc3RlYXN0CQENdHJ5R2V0SW50ZWdlcgIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAAKdHZsSW5XYXZlcwkAZAIJAGQCCQBkAgkAawMJAGgCBQt3YXZlc0luUG9vbAAKBQxwcm9qZWN0U3Rha2UFCnRvdGFsU3Rha2UJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aFdhdmVzBQJkOAkAawMJAGgCBRB3YXZlc0luV2hpcmxwb29sAAoFEXByb2plY3RTdGFrZVdoaXJsBQ90b3RhbFN0YWtlV2hpcmwFDXN0RWFzdEluV2F2ZXMAD3doaXJscG9vbFN1cHBseQQHJG1hdGNoMAkA7AcBBQR0ZXN0AwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAAFcHJpY2UDCQBnAgkAZAIJAGsDCQBkAgUKdHZsSW5XYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sU3VwcGx5BQJkOAkBDXRyeUdldEludGVnZXICBQR0aGlzAiFXSElSTFBPT0wgaXNzdWUgcHJpY2UgaW4gd2F2ZWxldHMJAGQCCQBrAwkAZAIFCnR2bEluV2F2ZXMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwUCZDgFD3doaXJscG9vbFN1cHBseQUCZDgJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzARN3aXRoZHJhd0Ftb3VudFdhdmVzAQtkYXBwQWRkcmVzcwkAZQIJAQhQTF92YWx1ZQIFC2RhcHBBZGRyZXNzBQV3YXZlcwkAaQIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMBCHN1cHBseVBMAwtkYXBwQWRkcmVzcwdhc3NldElkDHN1cHBseUFtb3VudAkA/AcEBQtkYXBwQWRkcmVzcwIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFDHN1cHBseUFtb3VudAUDbmlsAQp3aXRoZHJhd1BMAwtkYXBwQWRkcmVzcwdhc3NldElkDndpdGhkcmF3QW1vdW50CQD8BwQFC2RhcHBBZGRyZXNzAgh3aXRoZHJhdwkAzAgCCQDYBAEFB2Fzc2V0SWQJAMwIAgUOd2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAQtzd2FwVG9XYXZlcwIGcG9vbElkB2Fzc2V0SWQJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQJAPAHAgUEdGhpcwUHYXNzZXRJZAUDbmlsDQFpARVidXlXSElSTFBPT0x3aXRoV0FWRVMAAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX6WYhKtIG4NwWiusIWpfUn51io3/3wlpMBwkAAgECIHNtYXJ0IGNvbnRyYWN0IHVuZGVyIG1haW50ZW5hbmNlBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHc3VycGx1cwkAawMJAGUCBQVwcmljZQUCZDgIBQNwbXQGYW1vdW50BQJkOAQLSXNzdWVBbW91bnQDCQBnAggFA3BtdAZhbW91bnQJAGsDCAUDcG10BmFtb3VudAUCZDgFBXByaWNlCQBrAwgFA3BtdAZhbW91bnQFAmQ4BQVwcmljZQkAAgECMHBsZWFzZSBjb250YWN0IHByb2plY3Qgb3duZXI6IGlzc3VlIGFtb3VudCBlcnJvcgQMc3VwcGx5QW1vdW50CQBpAgkAZQIIBQNwbXQGYW1vdW50BQdzdXJwbHVzAAMEDWNsZWFuQW1vdW50SW4JAGUCCAUDcG10BmFtb3VudAkAawMIBQNwbXQGYW1vdW50AMgBAJBOBAlBbW91bnRPdXQJAG4EBRB3aGlybEluV2hpcmxwb29sCQBlAgkAaAIFAmQ4BQJkOAkAoAMBCQB2BgkAvQIECQC2AgEFEHdhdmVzSW5XaGlybHBvb2wJALYCAQkAaAIFAmQ4BQJkOAkAtgIBCQBkAgUQd2F2ZXNJbldoaXJscG9vbAUNY2xlYW5BbW91bnRJbgUGSEFMRlVQABAJALYCAQkAawMAZACQTgCEBwAEABAFB0NFSUxJTkcJAGgCBQJkOAUCZDgFBERPV04DCQECIT0CCAUDcG10B2Fzc2V0SWQFBHVuaXQJAAIBAhdhdHRhY2ggV0FWRVMgdG9rZW4gb25seQQWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzBQl3aGlybHBvb2wDCQAAAgUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQQDYnV5AwkAZgIFCUFtb3VudE91dAULSXNzdWVBbW91bnQJAPwHBAkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQCBHN3YXAJAMwIAgUPd2hpcmxwb29sU3RyaW5nCQDMCAIJAGQCBQtJc3N1ZUFtb3VudAABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQIBQNwbXQGYW1vdW50BQNuaWwFBHVuaXQDCQAAAgUDYnV5BQNidXkEFVdoaXJscG9vbEJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzBQl3aGlybHBvb2wDCQAAAgUVV2hpcmxwb29sQmFsYW5jZUFmdGVyBRVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIEEVdoaXJscG9vbEZyb21Td2FwCQBlAgUWV2hpcmxwb29sQmFsYW5jZUJlZm9yZQUVV2hpcmxwb29sQmFsYW5jZUFmdGVyAwkAAAIFEVdoaXJscG9vbEZyb21Td2FwBRFXaGlybHBvb2xGcm9tU3dhcAQEbWFpbgMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQEIc3VwcGx5UEwDBQdQTF9NYWluBQR1bml0BQxzdXBwbHlBbW91bnQFBHVuaXQDCQAAAgUEbWFpbgUEbWFpbgQEZGVmaQMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQEIc3VwcGx5UEwDBQdQTF9EZWZpBQR1bml0BQxzdXBwbHlBbW91bnQFBHVuaXQDCQAAAgUEZGVmaQUEZGVmaQQDbG93AwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAQhzdXBwbHlQTAMFBlBMX0xvdwUEdW5pdAUMc3VwcGx5QW1vdW50BQR1bml0AwkAAAIFA2xvdwUDbG93CQDMCAIJAQdSZWlzc3VlAwUEdGVzdAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAAABgkAzAgCAwkAZgIFCUFtb3VudE91dAULSXNzdWVBbW91bnQJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgURV2hpcmxwb29sRnJvbVN3YXAFCXdoaXJscG9vbAkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtJc3N1ZUFtb3VudAUEdGVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZAIIBQNwbXQGYW1vdW50CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQBkAgAACQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZAIJAGUCCAUDcG10BmFtb3VudAUHc3VycGx1cwkBDXRyeUdldEludGVnZXICBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkAAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnByaWNlU3VycGx1c1N1cHBseQAJAMwIAgkBDEludGVnZXJFbnRyeQICClBMIEJUIE1haW4JAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBEZWZpCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJUEwgQlQgTG93CQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBQTCBiYXNlIHRyZWFzdXJ5CQBkAgkAZAIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIwc3VycGx1cyB0cmVhc3VyeSBCVVJOLVhUTiB4IFBlcGVUZWFtIGluIHdhdmVsZXRzCQBrAwkAaAIFC3dhdmVzSW5Qb29sAAoFDHByb2plY3RTdGFrZQUKdG90YWxTdGFrZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIZRVRIIFB1enpsZSBMZW5kIG1haW4gcG9vbAkBCFBMX3ZhbHVlAgUHUExfTWFpbgUDZXRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCAjZzdXJwbHVzIHRyZWFzdXJ5IEVUSCBQdXp6bGUgTGVuZCBtYWluIHBvb2wgaW4gd2F2ZWxldHMJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aFdhdmVzBQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgIqc3VycGx1cyB0cmVhc3VyeSBXSElSTFBPT0wgQU1NIGluIHdhdmVsZXRzCQBrAwkAaAIFEHdhdmVzSW5XaGlybHBvb2wACgURcHJvamVjdFN0YWtlV2hpcmwFD3RvdGFsU3Rha2VXaGlybAkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1QgRUFTVCBpbiBzdGFraW5nBQ1lYXN0SW5TdGFraW5nCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhJTVCBzdEVBU1QgaW4gd2F2ZXMFDXN0RWFzdEluV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICKFRvdGFsIHN1cnBsdXMgdHJlYXN1cnkgdmFsdWUgaW4gd2F2ZWxldHMFCnR2bEluV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICIVdISVJMUE9PTCBpc3N1ZSBwcmljZSBpbiB3YXZlbGV0cwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICGldISVJMUE9PTCBtaWQgbWFya2V0IHByaWNlCQBrAwUCZDgJAGgCBRB3YXZlc0luV2hpcmxwb29sAAkFEHdoaXJsSW5XaGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICFldISVJMUE9PTCB0b3RhbCBzdXBwbHkFD3doaXJscG9vbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOVG90YWwgdHJlYXN1cnkJAGQCCQBkAgkAZAIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwUKdHZsSW5XYXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgINTkFWIFdISVJMUE9PTAkAawMFAmQ4CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bEluV2F2ZXMFD3doaXJscG9vbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCHndhdmVsZXRzIHJlY2VpdmVkIGZvciB0cmVhc3VyeQkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICEFJPSSBiYXNpcyBwb2ludHMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIQUk9JIGJhc2lzIHBvaW50cwUDbmlsAWkBE3Bvb2xPbmVUb2tlblN1cnBsdXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQNc3VycGx1c0Ftb3VudAkBDXRyeUdldEludGVnZXICBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBBNQb29sT25lVG9rZW5TdXJwbHVzCQD8BwQJAQdBZGRyZXNzAQEaAVf9JcO9TmGUQe+6XhJjj8U5b0m1iDr16W0CIWdlbmVyYXRlSW5kZXhXaXRoT25lVG9rZW5BbmRTdGFrZQkAzAgCCQDYBAEFEGJ1cm54dG5QUFRwb29sSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUNc3VycGx1c0Ftb3VudAUDbmlsAwkAAAIFE1Bvb2xPbmVUb2tlblN1cnBsdXMFE1Bvb2xPbmVUb2tlblN1cnBsdXMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAGUCCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMFDXN1cnBsdXNBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxib29zdFBvb2xBUFkBEndhdmVzQmFsYW5jZUJlZm9yZQMJAGYCCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBQZoZWlnaHQJAAIBCQCsAgICFldhaXQgdGlsbCBibG9ja2hlaWdodDoJAKQDAQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwQPd2F2ZXNEaWZmZXJlbmNlCQBlAggJAO8HAQUEdGhpcwlhdmFpbGFibGUFEndhdmVzQmFsYW5jZUJlZm9yZQMJAAACBQ93YXZlc0RpZmZlcmVuY2UFD3dhdmVzRGlmZmVyZW5jZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQDCQAAAgUQd2F2ZXNBbW91bnRCb29zdAUQd2F2ZXNBbW91bnRCb29zdAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkAwkAAAIFC2Ftb3VudEJvb3N0BQthbW91bnRCb29zdAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkAwkAAAIFC2Ftb3VudE93bmVyBQthbW91bnRPd25lcgQFYm9vc3QJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgkA2AQBBQ93aGlybHBvb2xQb29sSWQJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdE93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwCQTgkBDXRyeUdldEludGVnZXICBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgMJAAACCAUBaQZjYWxsZXIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAIgQWN0aXZhdGVkIGJ5IGFueWJvZHkgYmxvY2toZWlnaHQFBmhlaWdodAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmJvb3N0UG9vbEFQWWJ1cm54dG5QUFQAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQCEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0EC3N3YXBidXJueHRuCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQdidXJueHRuAwkAAAIFC3N3YXBidXJueHRuBQtzd2FwYnVybnh0bgQLc3dhcHVzZHRlcmMJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFB3VzZHRlcmMDCQAAAgULc3dhcHVzZHRlcmMFC3N3YXB1c2R0ZXJjBAtzd2FwdXNkdGJzYwkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUHdXNkdGJzYwMJAAACBQtzd2FwdXNkdGJzYwULc3dhcHVzZHRic2MEC3N3YXB1c2RjZXJjCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQd1c2RjZXJjAwkAAAIFC3N3YXB1c2RjZXJjBQtzd2FwdXNkY2VyYwQLc3dhcHVzZGNic2MJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFB3VzZGNic2MDCQAAAgULc3dhcHVzZGNic2MFC3N3YXB1c2RjYnNjBAdzd2FwZXRoCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQNldGgDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQHc3dhcGJuYgkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUDYm5iAwkAAAIFB3N3YXBibmIFB3N3YXBibmIECHN3YXB3YnRjCQELc3dhcFRvV2F2ZXMCBRBidXJueHRuUFBUcG9vbElkBQR3YnRjAwkAAAIFCHN3YXB3YnRjBQhzd2Fwd2J0YwQIc3dhcGJ0Y2IJAQtzd2FwVG9XYXZlcwIFEGJ1cm54dG5QUFRwb29sSWQFBGJ0Y2IDCQAAAgUIc3dhcGJ0Y2IFCHN3YXBidGNiBAVib29zdAkA/AcEBQR0aGlzAgxib29zdFBvb2xBUFkJAMwIAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBQNuaWwFA25pbAMJAAACBQVib29zdAUFYm9vc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRib29zdFBvb2xBUFl3RVRIbWFpbgADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsEEndhdmVzQmFsYW5jZUJlZm9yZQgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBRJ3YXZlc0JhbGFuY2VCZWZvcmUEE2NhbGN1bGF0ZVRva2VuUmF0ZXMJAPwHBAUHUExfTWFpbgITY2FsY3VsYXRlVG9rZW5SYXRlcwkAzAgCBwUDbmlsBQNuaWwDCQAAAgUTY2FsY3VsYXRlVG9rZW5SYXRlcwUTY2FsY3VsYXRlVG9rZW5SYXRlcwQOd2l0aGRyYXdBbW91bnQJAGUCCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIMRVRIIHN1cHBsaWVkBAh3aXRoZHJhdwkBCndpdGhkcmF3UEwDBQdQTF9NYWluBQNldGgFDndpdGhkcmF3QW1vdW50AwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwQHc3dhcGV0aAkBC3N3YXBUb1dhdmVzAgUQYnVybnh0blBQVHBvb2xJZAUDZXRoAwkAAAIFB3N3YXBldGgFB3N3YXBldGgEBWJvb3N0CQD8BwQFBHRoaXMCDGJvb3N0UG9vbEFQWQkAzAgCBRJ3YXZlc0JhbGFuY2VCZWZvcmUFA25pbAUDbmlsAwkAAAIFBWJvb3N0BQVib29zdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmJvb3N0UG9vbEFQWXdXaGlybHBvb2wAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFBWNsYWltBQVjbGFpbQQNc3dhcHdoaXJscG9vbAkBC3N3YXBUb1dhdmVzAgUPd2hpcmxwb29sUG9vbElkBQl3aGlybHBvb2wDCQAAAgUNc3dhcHdoaXJscG9vbAUNc3dhcHdoaXJscG9vbAQFYm9vc3QJAPwHBAUEdGhpcwIMYm9vc3RQb29sQVBZCQDMCAIFEndhdmVzQmFsYW5jZUJlZm9yZQUDbmlsBQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENc3VwcGx5RVRIbWFpbgADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAxzdXBwbHlBbW91bnQJAPAHAgUEdGhpcwUDZXRoAwkAAAIFDHN1cHBseUFtb3VudAUMc3VwcGx5QW1vdW50BARtYWluCQEIc3VwcGx5UEwDBQdQTF9NYWluBQNldGgFDHN1cHBseUFtb3VudAMJAAACBQRtYWluBQRtYWluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxFVEggc3VwcGxpZWQJAGQCBQxzdXBwbHlBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIMRVRIIHN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhlFVEggUHV6emxlIExlbmQgbWFpbiBwb29sCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAMwIAgkBDEludGVnZXJFbnRyeQICNnN1cnBsdXMgdHJlYXN1cnkgRVRIIFB1enpsZSBMZW5kIG1haW4gcG9vbCBpbiB3YXZlbGV0cwkAawMJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAUIZXRoV2F2ZXMFAmQ4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESd2l0aGRyYXdXQVZFU19NYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDndpdGhkcmF3QW1vdW50CQETd2l0aGRyYXdBbW91bnRXYXZlcwEFB1BMX01haW4DCQAAAgUOd2l0aGRyYXdBbW91bnQFDndpdGhkcmF3QW1vdW50BAh3aXRoZHJhdwkBCndpdGhkcmF3UEwDBQdQTF9NYWluBQV3YXZlcwkBE3dpdGhkcmF3QW1vdW50V2F2ZXMBBQdQTF9NYWluAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUEwgQlQgTWFpbgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICFXdpdGhkcmF3IEFtb3VudCBXYXZlcwUOd2l0aGRyYXdBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJ3aXRoZHJhd1dBVkVTX0RlZmkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQOd2l0aGRyYXdBbW91bnQJARN3aXRoZHJhd0Ftb3VudFdhdmVzAQUHUExfRGVmaQMJAAACBQ53aXRoZHJhd0Ftb3VudAUOd2l0aGRyYXdBbW91bnQECHdpdGhkcmF3CQEKd2l0aGRyYXdQTAMFB1BMX0RlZmkFBXdhdmVzCQETd2l0aGRyYXdBbW91bnRXYXZlcwEFB1BMX0RlZmkDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBEZWZpCQEIUExfdmFsdWUCBQdQTF9EZWZpBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIVd2l0aGRyYXcgQW1vdW50IFdhdmVzBQ53aXRoZHJhd0Ftb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXdpdGhkcmF3V0FWRVNfTG93AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDndpdGhkcmF3QW1vdW50CQETd2l0aGRyYXdBbW91bnRXYXZlcwEFBlBMX0xvdwMJAAACBQ53aXRoZHJhd0Ftb3VudAUOd2l0aGRyYXdBbW91bnQECHdpdGhkcmF3CQEKd2l0aGRyYXdQTAMFBlBMX0xvdwUFd2F2ZXMJARN3aXRoZHJhd0Ftb3VudFdhdmVzAQUGUExfTG93AwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJUEwgQlQgTG93CQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhV3aXRoZHJhdyBBbW91bnQgV2F2ZXMFDndpdGhkcmF3QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJc3Rha2VFQVNUAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIECXN0YWtlRUFTVAkA/AcEBQpFQVNUX3N0YWtlAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRlYXN0CQDwBwIFBHRoaXMFBGVhc3QFA25pbAMJAAACBQlzdGFrZUVBU1QFCXN0YWtlRUFTVAkAzAgCCQEMSW50ZWdlckVudHJ5AgILRUFTVCBzdGFrZWQJAGQCCQDwBwIFBHRoaXMFBGVhc3QJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwILRUFTVCBzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQICElNUIEVBU1QgaW4gc3Rha2luZwUNZWFzdEluU3Rha2luZwkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1Qgc3RFQVNUIGluIHdhdmVzBQ1zdEVhc3RJbldhdmVzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESY2hhbmdlSW50ZWdlckVudHJ5AglrZXlTdHJpbmcHaW50ZWdlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVN0cmluZwUHaW50ZWdlcgUDbmlsALbgwYQ=", "height": 3853650, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fvgmdd9dV55f3r4ERLRAi62wBYng16icxagx4uLRp5Rn Next: Drk9CDp8y2qn7ZTjQdLBhCnm5iP4m6uPXhsyeLtkyhMq Diff:
OldNewDifferences
1919
2020 let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY'
2121
22+let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
23+
2224 let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi')
2325
24-let whirlpool = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y'
26+let test = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y'
2527
2628 let waves = base58'WAVES'
2729
124126
125127 let tvlInWaves = (((fraction((wavesInPool * 10), projectStake, totalStake) + fraction(PL_value(PL_Main, eth), ethWaves, d8)) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + stEastInWaves)
126128
127-let whirlpoolSupply = match assetInfo(whirlpool) {
129+let whirlpoolSupply = match assetInfo(test) {
128130 case asset: Asset =>
129131 asset.quantity
130132 case _ =>
145147
146148
147149 func swapToWaves (poolId,assetId) = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(assetId, assetBalance(this, assetId))])
148-
149-
150-func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) {
151- case b: Int =>
152- b
153- case _ =>
154- 0
155-}
156-
157-
158-func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) {
159- case b: String =>
160- b
161- case _ =>
162- ""
163-}
164-
165-
166-func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
167- then unit
168- else fromBase58String(assetIdStr)
169-
170-
171-func getAssetString (assetId) = match assetId {
172- case b: ByteVector =>
173- toBase58String(b)
174- case _ =>
175- "WAVES"
176-}
177-
178-
179-func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
180-
181-
182-func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))])
183-
184-
185-func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))])
186-
187-
188-func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))])
189-
190-
191-let T = tryGetIntegerP("static_tokensAmount")
192-
193-let assetIds = {
194- let $l = split(tryGetStringP("static_tokenIds"), ",")
195- let $s = size($l)
196- let $acc0 = nil
197- func $f0_1 ($a,$i) = if (($i >= $s))
198- then $a
199- else addAssetBytesToList($a, $l[$i])
200-
201- func $f0_2 ($a,$i) = if (($i >= $s))
202- then $a
203- else throw("List size exceeds 10")
204-
205- $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)
206- }
207-
208-let AssetsWeights = {
209- let $l = assetIds
210- let $s = size($l)
211- let $acc0 = nil
212- func $f1_1 ($a,$i) = if (($i >= $s))
213- then $a
214- else addAssetWeightToList($a, $l[$i])
215-
216- func $f1_2 ($a,$i) = if (($i >= $s))
217- then $a
218- else throw("List size exceeds 10")
219-
220- $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
221- }
222-
223-let Decimals = {
224- let $l = assetIds
225- let $s = size($l)
226- let $acc0 = nil
227- func $f2_1 ($a,$i) = if (($i >= $s))
228- then $a
229- else addAssetDecimalsToList($a, $l[$i])
230-
231- func $f2_2 ($a,$i) = if (($i >= $s))
232- then $a
233- else throw("List size exceeds 10")
234-
235- $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
236- }
237-
238-let Scales = {
239- let $l = assetIds
240- let $s = size($l)
241- let $acc0 = nil
242- func $f3_1 ($a,$i) = if (($i >= $s))
243- then $a
244- else addAssetScaleToList($a, $l[$i])
245-
246- func $f3_2 ($a,$i) = if (($i >= $s))
247- then $a
248- else throw("List size exceeds 10")
249-
250- $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
251- }
252-
253-func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
254- let IndexIn = value(indexOf(assetIds, assetIn))
255- let IndexOut = value(indexOf(assetIds, assetOut))
256- if ((IndexIn == IndexOut))
257- then AmountIn
258- else fraction(BalanceOut, ((d8 * d8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((d8 * d8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
259- }
260150
261151
262152 @Callable(i)
304194 then supplyPL(PL_Low, unit, supplyAmount)
305195 else unit
306196 if ((low == low))
307- then [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
197+ then [Reissue(test, if ((IssueAmount >= AmountOut))
308198 then IssueAmount
309199 else 0, true), if ((AmountOut > IssueAmount))
310200 then ScriptTransfer(i.caller, WhirlpoolFromSwap, whirlpool)
311- else ScriptTransfer(i.caller, IssueAmount, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
201+ else ScriptTransfer(i.caller, IssueAmount, test), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
312202 then (pmt.amount + tryGetInteger(this, "total WAVES received in wavelets"))
313203 else (0 + tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
314204 then ((pmt.amount - surplus) + tryGetInteger(this, "wavelets received for treasury"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetInteger (address,key) = match getInteger(address, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 let d8 = 100000000
1313
1414 let d16 = (d8 * d8)
1515
1616 let burnxtnPPTpoolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx'
1717
1818 let projectOwner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'
1919
2020 let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY'
2121
22+let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
23+
2224 let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi')
2325
24-let whirlpool = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y'
26+let test = base58'fHJWWsh2hZAc4Atv8VRhKy3jNbHLeMwQMsLpdaBY51Y'
2527
2628 let waves = base58'WAVES'
2729
2830 let usdterc = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2931
3032 let usdcerc = base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW'
3133
3234 let usdtbsc = base58'A81p1LTRyoq2rDR2TNxB2dWYxsiNwCSSi8sXef2SEkwb'
3335
3436 let usdcbsc = base58'4BKKSp6NoNcrFHyorZogDyctq1fq6w7114Ym1pw6HUtC'
3537
3638 let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns'
3739
3840 let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13'
3941
4042 let bnb = base58'66a1br3BrkoaJgP7yEar9hJcSTvJPoH6PYBLqscXcMGo'
4143
4244 let wbtc = base58'2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6'
4345
4446 let btcb = base58'EW1uGLVo21Wd9i2Rhq8o4VKDTCQTGCGXE8DqayHGrLg8'
4547
4648 let east = base58'6phK22ztGBW127gUFmdMEHKB3CVd6ZhWox2WtwJkbqTq'
4749
4850 let steast = base58'GAB8JowY9UANZ4TQy2TzJyhxjPqXX3DUrb2cdMWrrJus'
4951
5052 let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7'
5153
5254 let poolboostSC = base58'3PAeY7RgwuNUZNscGqahqJxFTFDkh7fbNwJ'
5355
5456 let PL_Main = Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH')
5557
5658 let PL_Defi = Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X')
5759
5860 let PL_Low = Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH')
5961
6062 let EAST_stake = Address(base58'3P2hbtheN5apNppqqUK7L7qAwmRFXy91CNa')
6163
6264 let WX_WAVES_EAST = Address(base58'3PJVwjfi2fF5Jv9AauayU6xLxrYBn8bpGH1')
6365
6466 let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV')
6567
6668 let ethInPool = tryGetInteger(Address(burnxtnPPTpoolId), (("global_" + toBase58String(eth)) + "_balance"))
6769
6870 let wavesInPool = tryGetInteger(Address(burnxtnPPTpoolId), (("global_" + toBase58String(waves)) + "_balance"))
6971
7072 let ethWaves = fraction(d8, wavesInPool, ethInPool)
7173
7274 let projectStake = tryGetInteger(Address(burnxtnPPTpoolId), (toString(this) + "_indexStaked"))
7375
7476 let totalStake = tryGetInteger(Address(burnxtnPPTpoolId), "global_poolToken_amount")
7577
7678 func PL_value (dAppAddress,asset) = fraction(tryGetInteger(dAppAddress, ((toString(this) + "_supplied_") + toBase58String(asset))), tryGetInteger(dAppAddress, (toBase58String(asset) + "_sRate")), d16)
7779
7880
7981 func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) {
8082 case a: Int =>
8183 a
8284 case _ =>
8385 default_
8486 }
8587
8688
8789 func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) {
8890 case a: ByteVector =>
8991 toBigInt(a)
9092 case _ =>
9193 default_
9294 }
9395
9496
9597 let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000))
9698
9799 let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0))
98100
99101 let lastHeight = _loadInt("LAST_HEIGHT", 0)
100102
101103 let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height])
102104
103105 let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
104106
105107 let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_WAVES_EAST, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR))
106108
107109 let wavesInWX = (wavesBalance(WX_WAVES_EAST).regular + baseAmount)
108110
109111 let eastInWX = assetBalance(WX_WAVES_EAST, east)
110112
111113 let wavesEast = fraction((d8 * 100), eastInWX, wavesInWX)
112114
113115 let wavesInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance"))
114116
115117 let whirlInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + whirlpoolString) + "_balance"))
116118
117119 let projectStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), (toString(this) + "_indexStaked"))
118120
119121 let totalStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), "global_poolToken_amount")
120122
121123 let stEastInWaves = (fraction((fraction(assetBalance(this, steast), tryGetInteger(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100), d8, wavesEast) * 100)
122124
123125 let eastInStaking = (fraction(assetBalance(this, steast), tryGetInteger(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100)
124126
125127 let tvlInWaves = (((fraction((wavesInPool * 10), projectStake, totalStake) + fraction(PL_value(PL_Main, eth), ethWaves, d8)) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + stEastInWaves)
126128
127-let whirlpoolSupply = match assetInfo(whirlpool) {
129+let whirlpoolSupply = match assetInfo(test) {
128130 case asset: Asset =>
129131 asset.quantity
130132 case _ =>
131133 throw("Can't find asset")
132134 }
133135
134136 let price = if (((fraction((tvlInWaves + tryGetInteger(this, "surplus received in wavelets")), d8, whirlpoolSupply) + d8) >= tryGetInteger(this, "WHIRLPOOL issue price in wavelets")))
135137 then (fraction((tvlInWaves + tryGetInteger(this, "surplus received in wavelets")), d8, whirlpoolSupply) + d8)
136138 else tryGetInteger(this, "WHIRLPOOL issue price in wavelets")
137139
138140 func withdrawAmountWaves (dappAddress) = (PL_value(dappAddress, waves) - (tryGetInteger(this, "wavelets received for treasury") / 3))
139141
140142
141143 func supplyPL (dappAddress,assetId,supplyAmount) = invoke(dappAddress, "supply", nil, [AttachedPayment(assetId, supplyAmount)])
142144
143145
144146 func withdrawPL (dappAddress,assetId,withdrawAmount) = invoke(dappAddress, "withdraw", [toBase58String(assetId), withdrawAmount], nil)
145147
146148
147149 func swapToWaves (poolId,assetId) = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(assetId, assetBalance(this, assetId))])
148-
149-
150-func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) {
151- case b: Int =>
152- b
153- case _ =>
154- 0
155-}
156-
157-
158-func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) {
159- case b: String =>
160- b
161- case _ =>
162- ""
163-}
164-
165-
166-func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
167- then unit
168- else fromBase58String(assetIdStr)
169-
170-
171-func getAssetString (assetId) = match assetId {
172- case b: ByteVector =>
173- toBase58String(b)
174- case _ =>
175- "WAVES"
176-}
177-
178-
179-func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
180-
181-
182-func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))])
183-
184-
185-func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))])
186-
187-
188-func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))])
189-
190-
191-let T = tryGetIntegerP("static_tokensAmount")
192-
193-let assetIds = {
194- let $l = split(tryGetStringP("static_tokenIds"), ",")
195- let $s = size($l)
196- let $acc0 = nil
197- func $f0_1 ($a,$i) = if (($i >= $s))
198- then $a
199- else addAssetBytesToList($a, $l[$i])
200-
201- func $f0_2 ($a,$i) = if (($i >= $s))
202- then $a
203- else throw("List size exceeds 10")
204-
205- $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)
206- }
207-
208-let AssetsWeights = {
209- let $l = assetIds
210- let $s = size($l)
211- let $acc0 = nil
212- func $f1_1 ($a,$i) = if (($i >= $s))
213- then $a
214- else addAssetWeightToList($a, $l[$i])
215-
216- func $f1_2 ($a,$i) = if (($i >= $s))
217- then $a
218- else throw("List size exceeds 10")
219-
220- $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
221- }
222-
223-let Decimals = {
224- let $l = assetIds
225- let $s = size($l)
226- let $acc0 = nil
227- func $f2_1 ($a,$i) = if (($i >= $s))
228- then $a
229- else addAssetDecimalsToList($a, $l[$i])
230-
231- func $f2_2 ($a,$i) = if (($i >= $s))
232- then $a
233- else throw("List size exceeds 10")
234-
235- $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
236- }
237-
238-let Scales = {
239- let $l = assetIds
240- let $s = size($l)
241- let $acc0 = nil
242- func $f3_1 ($a,$i) = if (($i >= $s))
243- then $a
244- else addAssetScaleToList($a, $l[$i])
245-
246- func $f3_2 ($a,$i) = if (($i >= $s))
247- then $a
248- else throw("List size exceeds 10")
249-
250- $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
251- }
252-
253-func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
254- let IndexIn = value(indexOf(assetIds, assetIn))
255- let IndexOut = value(indexOf(assetIds, assetOut))
256- if ((IndexIn == IndexOut))
257- then AmountIn
258- else fraction(BalanceOut, ((d8 * d8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((d8 * d8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
259- }
260150
261151
262152 @Callable(i)
263153 func buyWHIRLPOOLwithWAVES () = if (if ((i.caller != this))
264154 then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'))
265155 else false)
266156 then throw("smart contract under maintenance")
267157 else {
268158 let pmt = value(i.payments[0])
269159 let surplus = fraction((price - d8), pmt.amount, d8)
270160 let IssueAmount = if ((pmt.amount >= fraction(pmt.amount, d8, price)))
271161 then fraction(pmt.amount, d8, price)
272162 else throw("please contact project owner: issue amount error")
273163 let supplyAmount = ((pmt.amount - surplus) / 3)
274164 let cleanAmountIn = (pmt.amount - fraction(pmt.amount, 200, 10000))
275165 let AmountOut = fraction(whirlInWhirlpool, ((d8 * d8) - toInt(pow(fraction(toBigInt(wavesInWhirlpool), toBigInt((d8 * d8)), toBigInt((wavesInWhirlpool + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(100, 10000, 900)), 4, 16, CEILING))), (d8 * d8), DOWN)
276166 if ((pmt.assetId != unit))
277167 then throw("attach WAVES token only")
278168 else {
279169 let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
280170 if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
281171 then {
282172 let buy = if ((AmountOut > IssueAmount))
283173 then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolString, (IssueAmount + 1)], [AttachedPayment(unit, pmt.amount)])
284174 else unit
285175 if ((buy == buy))
286176 then {
287177 let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
288178 if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
289179 then {
290180 let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
291181 if ((WhirlpoolFromSwap == WhirlpoolFromSwap))
292182 then {
293183 let main = if ((IssueAmount >= AmountOut))
294184 then supplyPL(PL_Main, unit, supplyAmount)
295185 else unit
296186 if ((main == main))
297187 then {
298188 let defi = if ((IssueAmount >= AmountOut))
299189 then supplyPL(PL_Defi, unit, supplyAmount)
300190 else unit
301191 if ((defi == defi))
302192 then {
303193 let low = if ((IssueAmount >= AmountOut))
304194 then supplyPL(PL_Low, unit, supplyAmount)
305195 else unit
306196 if ((low == low))
307- then [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
197+ then [Reissue(test, if ((IssueAmount >= AmountOut))
308198 then IssueAmount
309199 else 0, true), if ((AmountOut > IssueAmount))
310200 then ScriptTransfer(i.caller, WhirlpoolFromSwap, whirlpool)
311- else ScriptTransfer(i.caller, IssueAmount, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
201+ else ScriptTransfer(i.caller, IssueAmount, test), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
312202 then (pmt.amount + tryGetInteger(this, "total WAVES received in wavelets"))
313203 else (0 + tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
314204 then ((pmt.amount - surplus) + tryGetInteger(this, "wavelets received for treasury"))
315205 else 0)]
316206 else throw("Strict value is not equal to itself.")
317207 }
318208 else throw("Strict value is not equal to itself.")
319209 }
320210 else throw("Strict value is not equal to itself.")
321211 }
322212 else throw("Strict value is not equal to itself.")
323213 }
324214 else throw("Strict value is not equal to itself.")
325215 }
326216 else throw("Strict value is not equal to itself.")
327217 }
328218 else throw("Strict value is not equal to itself.")
329219 }
330220 }
331221
332222
333223
334224 @Callable(i)
335225 func priceSurplusSupply () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethWaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST EAST in staking", eastInStaking), IntegerEntry("ST stEAST in waves", stEastInWaves), IntegerEntry("Total surplus treasury value in wavelets", tvlInWaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesInWhirlpool * 9), whirlInWhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolSupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlInWaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlInWaves), whirlpoolSupply)), IntegerEntry("total WAVES received in wavelets", tryGetInteger(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", tryGetInteger(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", tryGetInteger(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", tryGetInteger(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", tryGetInteger(this, "ROI basis points"))]
336226
337227
338228
339229 @Callable(i)
340230 func poolOneTokenSurplus () = if ((i.caller != this))
341231 then throw("access only by project owner")
342232 else {
343233 let surplusAmount = tryGetInteger(this, "surplus received in wavelets")
344234 let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(burnxtnPPTpoolId)], [AttachedPayment(unit, surplusAmount)])
345235 if ((PoolOneTokenSurplus == PoolOneTokenSurplus))
346236 then [IntegerEntry("surplus received in wavelets", (tryGetInteger(this, "surplus received in wavelets") - surplusAmount))]
347237 else throw("Strict value is not equal to itself.")
348238 }
349239
350240
351241
352242 @Callable(i)
353243 func boostPoolAPY (wavesBalanceBefore) = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
354244 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
355245 else {
356246 let wavesDifference = (wavesBalance(this).available - wavesBalanceBefore)
357247 if ((wavesDifference == wavesDifference))
358248 then {
359249 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
360250 if ((wavesAmountBoost == wavesAmountBoost))
361251 then {
362252 let amountBoost = fraction(wavesDifference, 80, 100)
363253 if ((amountBoost == amountBoost))
364254 then {
365255 let amountOwner = fraction(wavesDifference, 20, 100)
366256 if ((amountOwner == amountOwner))
367257 then {
368258 let boost = invoke(Address(poolboostSC), "addBoosting", [toBase58String(whirlpoolPoolId), 7], [AttachedPayment(unit, amountBoost)])
369259 if ((boost == boost))
370260 then [ScriptTransfer(Address(projectOwner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + tryGetInteger(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(tryGetInteger(this, "total WAVES paid out in wavelets"), 10000, tryGetInteger(this, "total WAVES received in wavelets"))), IntegerEntry(if ((i.caller == this))
371261 then "Activated blockheight"
372262 else "Activated by anybody blockheight", height)]
373263 else throw("Strict value is not equal to itself.")
374264 }
375265 else throw("Strict value is not equal to itself.")
376266 }
377267 else throw("Strict value is not equal to itself.")
378268 }
379269 else throw("Strict value is not equal to itself.")
380270 }
381271 else throw("Strict value is not equal to itself.")
382272 }
383273
384274
385275
386276 @Callable(i)
387277 func boostPoolAPYburnxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
388278 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
389279 else {
390280 let wavesBalanceBefore = wavesBalance(this).available
391281 if ((wavesBalanceBefore == wavesBalanceBefore))
392282 then {
393283 let claim = invoke(Address(burnxtnPPTpoolId), "claimIndexRewards", nil, nil)
394284 if ((claim == claim))
395285 then {
396286 let swapburnxtn = swapToWaves(burnxtnPPTpoolId, burnxtn)
397287 if ((swapburnxtn == swapburnxtn))
398288 then {
399289 let swapusdterc = swapToWaves(burnxtnPPTpoolId, usdterc)
400290 if ((swapusdterc == swapusdterc))
401291 then {
402292 let swapusdtbsc = swapToWaves(burnxtnPPTpoolId, usdtbsc)
403293 if ((swapusdtbsc == swapusdtbsc))
404294 then {
405295 let swapusdcerc = swapToWaves(burnxtnPPTpoolId, usdcerc)
406296 if ((swapusdcerc == swapusdcerc))
407297 then {
408298 let swapusdcbsc = swapToWaves(burnxtnPPTpoolId, usdcbsc)
409299 if ((swapusdcbsc == swapusdcbsc))
410300 then {
411301 let swapeth = swapToWaves(burnxtnPPTpoolId, eth)
412302 if ((swapeth == swapeth))
413303 then {
414304 let swapbnb = swapToWaves(burnxtnPPTpoolId, bnb)
415305 if ((swapbnb == swapbnb))
416306 then {
417307 let swapwbtc = swapToWaves(burnxtnPPTpoolId, wbtc)
418308 if ((swapwbtc == swapwbtc))
419309 then {
420310 let swapbtcb = swapToWaves(burnxtnPPTpoolId, btcb)
421311 if ((swapbtcb == swapbtcb))
422312 then {
423313 let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil)
424314 if ((boost == boost))
425315 then nil
426316 else throw("Strict value is not equal to itself.")
427317 }
428318 else throw("Strict value is not equal to itself.")
429319 }
430320 else throw("Strict value is not equal to itself.")
431321 }
432322 else throw("Strict value is not equal to itself.")
433323 }
434324 else throw("Strict value is not equal to itself.")
435325 }
436326 else throw("Strict value is not equal to itself.")
437327 }
438328 else throw("Strict value is not equal to itself.")
439329 }
440330 else throw("Strict value is not equal to itself.")
441331 }
442332 else throw("Strict value is not equal to itself.")
443333 }
444334 else throw("Strict value is not equal to itself.")
445335 }
446336 else throw("Strict value is not equal to itself.")
447337 }
448338 else throw("Strict value is not equal to itself.")
449339 }
450340
451341
452342
453343 @Callable(i)
454344 func boostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
455345 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
456346 else {
457347 let wavesBalanceBefore = wavesBalance(this).available
458348 if ((wavesBalanceBefore == wavesBalanceBefore))
459349 then {
460350 let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil)
461351 if ((calculateTokenRates == calculateTokenRates))
462352 then {
463353 let withdrawAmount = (PL_value(PL_Main, eth) - tryGetInteger(this, "ETH supplied"))
464354 let withdraw = withdrawPL(PL_Main, eth, withdrawAmount)
465355 if ((withdraw == withdraw))
466356 then {
467357 let swapeth = swapToWaves(burnxtnPPTpoolId, eth)
468358 if ((swapeth == swapeth))
469359 then {
470360 let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil)
471361 if ((boost == boost))
472362 then nil
473363 else throw("Strict value is not equal to itself.")
474364 }
475365 else throw("Strict value is not equal to itself.")
476366 }
477367 else throw("Strict value is not equal to itself.")
478368 }
479369 else throw("Strict value is not equal to itself.")
480370 }
481371 else throw("Strict value is not equal to itself.")
482372 }
483373
484374
485375
486376 @Callable(i)
487377 func boostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
488378 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
489379 else {
490380 let wavesBalanceBefore = wavesBalance(this).available
491381 if ((wavesBalanceBefore == wavesBalanceBefore))
492382 then {
493383 let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil)
494384 if ((claim == claim))
495385 then {
496386 let swapwhirlpool = swapToWaves(whirlpoolPoolId, whirlpool)
497387 if ((swapwhirlpool == swapwhirlpool))
498388 then {
499389 let boost = invoke(this, "boostPoolAPY", [wavesBalanceBefore], nil)
500390 if ((boost == boost))
501391 then nil
502392 else throw("Strict value is not equal to itself.")
503393 }
504394 else throw("Strict value is not equal to itself.")
505395 }
506396 else throw("Strict value is not equal to itself.")
507397 }
508398 else throw("Strict value is not equal to itself.")
509399 }
510400
511401
512402
513403 @Callable(i)
514404 func supplyETHmain () = if ((i.caller != this))
515405 then throw("access only by project owner")
516406 else {
517407 let supplyAmount = assetBalance(this, eth)
518408 if ((supplyAmount == supplyAmount))
519409 then {
520410 let main = supplyPL(PL_Main, eth, supplyAmount)
521411 if ((main == main))
522412 then [IntegerEntry("ETH supplied", (supplyAmount + tryGetInteger(this, "ETH supplied"))), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethWaves, d8))]
523413 else throw("Strict value is not equal to itself.")
524414 }
525415 else throw("Strict value is not equal to itself.")
526416 }
527417
528418
529419
530420 @Callable(i)
531421 func withdrawWAVES_Main () = if ((i.caller != this))
532422 then throw("access only by project owner")
533423 else {
534424 let withdrawAmount = withdrawAmountWaves(PL_Main)
535425 if ((withdrawAmount == withdrawAmount))
536426 then {
537427 let withdraw = withdrawPL(PL_Main, waves, withdrawAmountWaves(PL_Main))
538428 if ((withdraw == withdraw))
539429 then [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)]
540430 else throw("Strict value is not equal to itself.")
541431 }
542432 else throw("Strict value is not equal to itself.")
543433 }
544434
545435
546436
547437 @Callable(i)
548438 func withdrawWAVES_Defi () = if ((i.caller != this))
549439 then throw("access only by project owner")
550440 else {
551441 let withdrawAmount = withdrawAmountWaves(PL_Defi)
552442 if ((withdrawAmount == withdrawAmount))
553443 then {
554444 let withdraw = withdrawPL(PL_Defi, waves, withdrawAmountWaves(PL_Defi))
555445 if ((withdraw == withdraw))
556446 then [IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)]
557447 else throw("Strict value is not equal to itself.")
558448 }
559449 else throw("Strict value is not equal to itself.")
560450 }
561451
562452
563453
564454 @Callable(i)
565455 func withdrawWAVES_Low () = if ((i.caller != this))
566456 then throw("access only by project owner")
567457 else {
568458 let withdrawAmount = withdrawAmountWaves(PL_Low)
569459 if ((withdrawAmount == withdrawAmount))
570460 then {
571461 let withdraw = withdrawPL(PL_Low, waves, withdrawAmountWaves(PL_Low))
572462 if ((withdraw == withdraw))
573463 then [IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("withdraw Amount Waves", withdrawAmount)]
574464 else throw("Strict value is not equal to itself.")
575465 }
576466 else throw("Strict value is not equal to itself.")
577467 }
578468
579469
580470
581471 @Callable(i)
582472 func stakeEAST () = if ((i.caller != this))
583473 then throw("access only by project owner")
584474 else {
585475 let stakeEAST = invoke(EAST_stake, "stake", nil, [AttachedPayment(east, assetBalance(this, east))])
586476 if ((stakeEAST == stakeEAST))
587477 then [IntegerEntry("EAST staked", (assetBalance(this, east) + tryGetInteger(this, "EAST staked"))), IntegerEntry("ST EAST in staking", eastInStaking), IntegerEntry("ST stEAST in waves", stEastInWaves)]
588478 else throw("Strict value is not equal to itself.")
589479 }
590480
591481
592482
593483 @Callable(i)
594484 func changeIntegerEntry (keyString,integer) = if ((i.caller != this))
595485 then throw("access only by project owner")
596486 else [IntegerEntry(keyString, integer)]
597487
598488

github/deemru/w8io/873ac7e 
126.76 ms