tx · DhrsDEdURfpBtFMsR4xdekhPVbQWSDftaEeZzrEYwVbC

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.02800000 Waves

2024.11.28 15:57 [3391319] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "DhrsDEdURfpBtFMsR4xdekhPVbQWSDftaEeZzrEYwVbC", "fee": 2800000, "feeAssetId": null, "timestamp": 1732798665967, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "qeJKP6B1xWLG7BqQWrCU72WpKTorn8rrdwrtdNMPMqopFvYhPVXjcZofkJgAHd9SS1vLsE4xUDcHVzkVj3BPFFD" ], "script": "base64:BgJNCAISABIECgIICBIDCgEEEgMKAQESABIAEgMKAQESABIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIARIFCgMIAQESABIDCgEIEgBhAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ3AICt4gQABU1VTFQ4AIDC1y8ACkRBWV9NSUxMSVMAgLiZKQAVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAoAE09ORV9QRVJDRU5UX0RJVklTT1IAZAAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC1dFRUtfQkxPQ0tTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAOBOAwkAAAIBAVQFByRtYXRjaDAAtAEJAAIBAg1Vbmtub3duIGNoYWluAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUEZ3WXRhOGJpRXozMXpwZUZlNURKSzh3RTV0clNwUVZGOAMJAAACAQFUBQckbWF0Y2gwAiMzTjdVdVlhcjYyNjRQNThGQmhWV0tQUUFoNFl1YTJoZ25ndgkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQpEQVlfTUlMTElTAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgAVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAQFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABBJZHhDZmdBY3JlczJEYXBwAAEADUlkeENmZ1dsZ0RhcHAAAgAUSWR4Q2ZnSW52ZXN0RnVuZERhcHAABQEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ9rZXlSZXN0MkFkZHJlc3MAAg0lc19fcmVzdDJBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIIcmVzdDJDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQhyZXN0MkNmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADXJlc3QyQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVJlc3QyQWRkcmVzcwAFFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIACHJlc3QyQ2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQ1yZXN0MkNvbnRyYWN0AA5hY3JlczJDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdBY3JlczJEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBQ1JZHhDZmdXbGdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUUSWR4Q2ZnSW52ZXN0RnVuZERhcHAAE29sZEFjcmVzQ29udHJhY3RLZXkCEG9sZEFjcmVzQ29udHJhY3QBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgITbGFzdFdlZWtUeElkQnlVc2VyXwUEYWRkcgEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgISY3VyV2Vla1R4SWRCeVVzZXJfBQRhZGRyABRhY3Jlc0lzc3VlZEFtb3VudEtleQIRYWNyZXNJc3N1ZWRBbW91bnQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5hY3JlczJDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQRhZGRyCQCsAgICFmFjcmVzU3Rha2VkVGltZUJ5VXNlcl8FBGFkZHIBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkBGFkZHIJAKwCAgkArAICCQCsAgICA3N0XwUHYXNzZXRJZAIBXwUEYWRkcgEUa2V5U3Rha2VkTkZUc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWRORlRzQnlPd25lcl8FCW93bmVyQWRkcgEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxhc1R1cGxlNUludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACGShJbnQsIEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAitmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlNEludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQImZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQsIEludCkBDGFzVHVwbGUzSW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIPKEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIhZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQpAQxhc1R1cGxlMkludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAhxmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQpAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAADTTZfAMCEPQADTThfAIDC1y8AD3dsZ0lzc3VlZEFtdEtleQIQd2xnX2lzc3VlZEFtb3VudAAOemJJc3N1ZWRBbXRLZXkCEnpiaWxsX2lzc3VlZEFtb3VudAEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBGFkZHIJAKwCAgITZmFybWluZ1Bvd2VyQnlVc2VyXwUEYWRkcgASYWNyZXNTdGFrZFRvdGFsS2V5AhZhY3Jlc1N0YWtlZEFtb3VudFRvdGFsABR0b3RhbEZhcm1pbmdQb3dlcktleQIRdG90YWxGYXJtaW5nUG93ZXIAFUlkeER0eDNQZXJjQ29udmVyc2lvbgAAAAtNQVhfV0xfTkZUUwADAAxNQVhfQVJLX05GVFMAAQANQVJLX05GVF9CT05VUwCIJwAXTUFYX05GVFNfU1RBS0VEX0JZX1VTRVIABAARa2V5TmZ0VG90YWxJc3N1ZWQCDm5mdFRvdGFsSXNzdWVkABFrZXlOZnRUb3RhbEJ1cm5lZAIObmZ0VG90YWxCdXJuZWQAE2tleVdsTmZ0VG90YWxTdGFrZWQCEFdsTmZ0VG90YWxTdGFrZWQAFGtleUFya05mdFRvdGFsU3Rha2VkAhFBcmtOZnRUb3RhbFN0YWtlZAEVa2V5TmZ0TnVtYmVyQnlBc3NldElkAQdhc3NldElkCQCsAgICE25mdE51bWJlckJ5QXNzZXRJZF8FB2Fzc2V0SWQBEmtleVVzZXJXbE5mdE51bWJlcgEEYWRkcgkArAICAhB1c2VyV2xOZnROdW1iZXJfBQRhZGRyARNrZXlVc2VyQXJrTmZ0TnVtYmVyAQRhZGRyCQCsAgICEXVzZXJBcmtOZnROdW1iZXJfBQRhZGRyARBrZXlVc2VyRnVsbEJvbnVzAQRhZGRyCQCsAgICDnVzZXJGdWxsQm9udXNfBQRhZGRyAApsZXZlbEFjcmVzCQDMCAIAAAkAzAgCAAoJAMwIAgAUCQDMCAIAKAkAzAgCAFAJAMwIAgCWAQkAzAgCAPoBCQDMCAIAkAMJAMwIAgC8BQkAzAgCAOgHBQNuaWwBD2dldExldmVsQnlBY3JlcwEFYWNyZXMEA2FjcgkAaQIJAGQCBQVhY3JlcwD/wdcvBQNNOF8KAQdjaGVja2VyAgNhY2MEaXRlbQMJAGcCBQRpdGVtBQNhY3IFA2FjYwkAZAIFA2FjYwABCgACJGwFCmxldmVsQWNyZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBWFjcmVzCQBoAgkAaAIFBWFjcmVzABQJAGQCCQEPZ2V0TGV2ZWxCeUFjcmVzAQUFYWNyZXMABAEeZ2V0RmFybWluZ1Bvd2VyQnlBY3Jlc0FuZEJvbnVzAgVhY3JlcwZib251czYECm5vdEJvbnVzZWQJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUFYWNyZXMJAJQKAgkAawMFCm5vdEJvbnVzZWQJAGQCBQNNNl8FBmJvbnVzNgUDTTZfBQpub3RCb251c2VkARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIAFGtleUxhc3RBY3Jlc1NlbGxUaW1lAhFsYXN0QWNyZXNTZWxsVGltZQAQa2V5TGFzdExpbWl0TGVmdAINbGFzdExpbWl0TGVmdAAIbmZ0TmFtZXMJAMwIAgIJU0hPVkVMLVAzCQDMCAICClBJQ0tBWEUtQzEJAMwIAgIKUElDS0FYRS1DMwkAzAgCAgpQSUNLQVhFLUM1CQDMCAICC1BJQ0tBWEUtQzEwBQNuaWwAC2NvbnRlbnRLZXlzCQDMCAICD2NvbnRlbnRTaG92ZWxQMwkAzAgCAhBjb250ZW50UGlja2F4ZUMxCQDMCAICEGNvbnRlbnRQaWNrYXhlQzMJAMwIAgIQY29udGVudFBpY2theGVDNQkAzAgCAhFjb250ZW50UGlja2F4ZUMxMAUDbmlsAAVuYW1lcwkAzAgCAgtHb2xkIHNob3ZlbAkAzAgCAgdQaWNrYXhlCQDMCAICB1BpY2theGUJAMwIAgIHUGlja2F4ZQkAzAgCAgdQaWNrYXhlBQNuaWwADGRlc2NyaXB0aW9ucwkAzAgCAhZSZXdhcmQgZm9yIGVhcmx5IGJpcmRzCQDMCAICE0luY3JlYXNlcyBGYXJtUG93ZXIJAMwIAgITSW5jcmVhc2VzIEZhcm1Qb3dlcgkAzAgCAhNJbmNyZWFzZXMgRmFybVBvd2VyCQDMCAICE0luY3JlYXNlcyBGYXJtUG93ZXIFA25pbAAIcmFyaXRpZXMJAMwIAgIFUHJvbW8JAMwIAgIGQ29tbW9uCQDMCAICBkNvbW1vbgkAzAgCAgZDb21tb24JAMwIAgIGQ29tbW9uBQNuaWwAB2JvbnVzZXMJAMwIAgADCQDMCAIAAQkAzAgCAAMJAMwIAgAFCQDMCAIACgUDbmlsAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQ1yZXN0MkNvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBHdlZWsJAGkCBQZoZWlnaHQFC1dFRUtfQkxPQ0tTBBJsYXN0V2Vla1R4SWRCeVVzZXIJAKIIAQkBFWtleUxhc3RXZWVrVHhJZEJ5VXNlcgEFBGFkZHIEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQDd3R4CQCsAgIJAKwCAgkApAMBBQR3ZWVrAgFfBQR0eElkAwkBCWlzRGVmaW5lZAEFEmxhc3RXZWVrVHhJZEJ5VXNlcgQKbGFzdFdlZWtUeAkAtQkCCQEFdmFsdWUBBRJsYXN0V2Vla1R4SWRCeVVzZXICAV8DCQAAAgkAkQMCBQpsYXN0V2Vla1R4AAAJAKQDAQUEd2VlawkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4CQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAUDbmlsAwkAAAIJAJEDAgUKbGFzdFdlZWtUeAAACQCkAwEJAGUCBQR3ZWVrAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4BQNuaWwEEWN1cldlZWtUeElkQnlVc2VyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgQJY3VyV2Vla1R4CQC1CQIFEWN1cldlZWtUeElkQnlVc2VyAgFfAwkAAAIJAJEDAgUJY3VyV2Vla1R4AAAJAKQDAQUEd2VlawkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgURY3VyV2Vla1R4SWRCeVVzZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhc3RXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAEUY3JlYXRlTmZ0RGVzY3JpcHRpb24CCG5mdEluZGV4CW5mdFNlcmlhbAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIieyJ1cmwiOiAiaHR0cHM6Ly93YXZlc2xhbmRzLmNvbSIsIAIPImNvbnRlbnRLZXkiOiAiCQCRAwIFC2NvbnRlbnRLZXlzBQhuZnRJbmRleAIDIiwgAgoibnVtYmVyIjogBQluZnRTZXJpYWwCAiwgAhwiY29sbGVjdGlvbiI6ICJEaWdnaW5nIHRvb2xzAgMiLCACCSJuYW1lIjogIgkAkQMCBQVuYW1lcwUIbmZ0SW5kZXgCAyIsIAIQImRlc2NyaXB0aW9uIjogIgkAkQMCBQxkZXNjcmlwdGlvbnMFCG5mdEluZGV4AgMiLCACCSJyYXJlIjogIgkAkQMCBQhyYXJpdGllcwUIbmZ0SW5kZXgCAyIsIAIJImJvbnVzIjogCQCkAwEJAJEDAgUHYm9udXNlcwUIbmZ0SW5kZXgCAiwgAhkiYm9udXNUeXBlIjogIkZhcm1Qb3dlciJ9ARBpc3N1ZU5GVGludGVybmFsAghuZnRJbmRleARhZGRyAwkAZwIFCG5mdEluZGV4CQCQAwEFC2NvbnRlbnRLZXlzCQACAQIWbmZ0SW5kZXggb3V0IG9mIGJvdW5kcwQJbmZ0U2VyaWFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWtleU5mdFRvdGFsSXNzdWVkAAAEBWlzc3VlCQDCCAUJAJEDAgUIbmZ0TmFtZXMFCG5mdEluZGV4CQEUY3JlYXRlTmZ0RGVzY3JpcHRpb24CBQhuZnRJbmRleAkApAMBBQluZnRTZXJpYWwAAQAABwQKbmZ0QXNzZXRJZAkAuAgBBQVpc3N1ZQkAlAoCCQDMCAIFBWlzc3VlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlOZnRUb3RhbElzc3VlZAkAZAIFCW5mdFNlcmlhbAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5TmZ0TnVtYmVyQnlBc3NldElkAQkA2AQBBQpuZnRBc3NldElkBQluZnRTZXJpYWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUEYWRkcgABBQpuZnRBc3NldElkBQNuaWwFCm5mdEFzc2V0SWQBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDA2FtdAdhZGRyZXNzCmJvbnVzRGVsdGEDAwkAAAIFA2FtdAAACQAAAgUKYm9udXNEZWx0YQAABwkAAgECDU5vdGhpbmcgdG8gZG8ECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFCXdsZ1Jlc3VsdAUJd2xnUmVzdWx0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUHYWRkcmVzcwQJYW1vdW50S2V5CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzBA5vbGRBY3Jlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAMDCQBmAgAABQNhbXQJAGYCAAAJAGQCBQ5vbGRBY3Jlc0Ftb3VudAUDYW10BwkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQEKZml4ZWRQb2ludAIFDm9sZEFjcmVzQW1vdW50AAgCICBBQ1JFUyBzdGFrZWQsIHRyaWVkIHRvIHVuc3Rha2UgCQEKZml4ZWRQb2ludAIJAQEtAQUDYW10AAgEDm5ld0FjcmVzQW1vdW50CQBkAgUOb2xkQWNyZXNBbW91bnQFA2FtdAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSYWNyZXNTdGFrZFRvdGFsS2V5AAAECXVzZXJGcEtleQkBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEFB2FkZHJlc3MEBW9sZEZwCQELdmFsdWVPckVsc2UCCQCfCAEFCXVzZXJGcEtleQAABAhib251c0tleQkBEGtleVVzZXJGdWxsQm9udXMBBQdhZGRyZXNzBAhvbGRCb251cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAUIYm9udXNLZXkAAAMDCQBmAgAABQpib251c0RlbHRhCQBmAgAACQBkAgUIb2xkQm9udXMFCmJvbnVzRGVsdGEHCQACAQkArAICCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkBCmZpeGVkUG9pbnQCBQhvbGRCb251cwAEAh4lIGJvbnVzLCBhbmQgdHJpZWQgdG8gdW5zdGFrZSAJAQpmaXhlZFBvaW50AgkBAS0BBQpib251c0RlbHRhAAQCASUECyR0MDQ4MjA0OTE5CQEeZ2V0RmFybWluZ1Bvd2VyQnlBY3Jlc0FuZEJvbnVzAgUObmV3QWNyZXNBbW91bnQJAGQCBQhvbGRCb251cwUKYm9udXNEZWx0YQQMbmV3Qm9udXNlZEZwCAULJHQwNDgyMDQ5MTkCXzEEB2lnbm9yZWQIBQskdDA0ODIwNDkxOQJfMgQKb2xkVG90YWxGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRR0b3RhbEZhcm1pbmdQb3dlcktleQAABAxhY3Jlc0FjdGlvbnMDCQAAAgUDYW10AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5BQ5uZXdBY3Jlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSYWNyZXNTdGFrZFRvdGFsS2V5CQBkAgUIb2xkVG90YWwFA2FtdAUDbmlsCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgUMYWNyZXNBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAQxJbnRlZ2VyRW50cnkCBQl1c2VyRnBLZXkFDG5ld0JvbnVzZWRGcAkBDEludGVnZXJFbnRyeQIFFHRvdGFsRmFybWluZ1Bvd2VyS2V5CQBlAgkAZAIFCm9sZFRvdGFsRnAFDG5ld0JvbnVzZWRGcAUFb2xkRnAJAQxJbnRlZ2VyRW50cnkCBQhib251c0tleQkAZAIFCG9sZEJvbnVzBQpib251c0RlbHRhBQl3bGdSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFdsZ1ByaWNlARV1c2R0QmFsYW5jZUNvcnJlY3Rpb24EDGlzc3VlZEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFC3dsZ0NvbnRyYWN0BQ93bGdJc3N1ZWRBbXRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAQGd2xnVXNkCQDwBwIFC3dsZ0NvbnRyYWN0BQt1c2R0QXNzZXRJZAQJYWNyZXMyVXNkCQBlAgkA8AcCBQ5hY3JlczJDb250cmFjdAULdXNkdEFzc2V0SWQFFXVzZHRCYWxhbmNlQ29ycmVjdGlvbgQPaW52ZXN0RnVuZFRvdGFsCQBkAgkA8AcCBRJpbnZlc3RGdW5kQ29udHJhY3QFC3VzZHRBc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEmludmVzdEZ1bmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQNdG90YWxGdW5kc1VzZAkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsCQBrAwUNdG90YWxGdW5kc1VzZAUFTVVMVDgFDGlzc3VlZEFtb3VudAERZ2V0U3dhcExpbWl0QWNyZXMABAZ3bGdVc2QJAPAHAgULd2xnQ29udHJhY3QFC3VzZHRBc3NldElkBAlhY3JlczJVc2QJAPAHAgUEdGhpcwULdXNkdEFzc2V0SWQED2ludmVzdEZ1bmRUb3RhbAkAZAIJAPAHAgUSaW52ZXN0RnVuZENvbnRyYWN0BQt1c2R0QXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJpbnZlc3RGdW5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDGRlZmF1bHRMaW1pdAkAaQIJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAUTT05FX1BFUkNFTlRfRElWSVNPUgQNbGFzdExpbWl0TGVmdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRBrZXlMYXN0TGltaXRMZWZ0BQxkZWZhdWx0TGltaXQECGxhc3RUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFFGtleUxhc3RBY3Jlc1NlbGxUaW1lAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDGN1cnJlbnRMaW1pdAkAZAIFDWxhc3RMaW1pdExlZnQJAGsDBQxkZWZhdWx0TGltaXQJAGUCBQNub3cFCGxhc3RUaW1lBQpEQVlfTUlMTElTBA1saW1pdExlZnRVc2R0CQCXAwEJAMwIAgUMY3VycmVudExpbWl0CQDMCAIFDGRlZmF1bHRMaW1pdAUDbmlsCQCUCgIJAQxJbnRlZ2VyRW50cnkCBRRrZXlMYXN0QWNyZXNTZWxsVGltZQUDbm93BQ1saW1pdExlZnRVc2R0AAlhcmtPcmFjbGUJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQSmdaNkFLMVdWQ3BkQ21FWnBlc0htYUt2clFEZFhHNW9nAAlpbmN1YmF0b3IJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwIAAAdicmVlZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIVc3RhdGljX2JyZWVkZXJBZGRyZXNzAgAAD3R1cnRsZUluY3ViYXRvcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCHXN0YXRpY190dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAgAADXR1cnRsZUJyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhtzdGF0aWNfdHVydGxlQnJlZWRlckFkZHJlc3MCAAAPY2FuaW5lSW5jdWJhdG9yCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIdc3RhdGljX2NhbmluZUluY3ViYXRvckFkZHJlc3MCAAANY2FuaW5lQnJlZWRlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCG3N0YXRpY19jYW5pbmVCcmVlZGVyQWRkcmVzcwIAAA9mZWxpbmVJbmN1YmF0b3IJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAh1zdGF0aWNfZmVsaW5lSW5jdWJhdG9yQWRkcmVzcwIAAA1mZWxpbmVCcmVlZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIbc3RhdGljX2ZlbGluZUJyZWVkZXJBZGRyZXNzAgAADW11dGFudEJyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAh1zdGF0aWNfbXV0YW50SW5jdWJhdG9yQWRkcmVzcwIAAQ9pc0Fya2ltYWxJc3N1ZWQBA25mbwQGaXNzdWVyCQClCAEIBQNuZm8GaXNzdWVyAwMDAwMDAwMDAwkAAAIFBWNoYWluAQFUCQAAAgUGaXNzdWVyBRVvbGRTdGFraW5nQ29udHJhY3RTdHIHBgkAAAIFBmlzc3VlcgUJaW5jdWJhdG9yBgkAAAIFBmlzc3VlcgUHYnJlZWRlcgYJAAACBQZpc3N1ZXIFD3R1cnRsZUluY3ViYXRvcgYJAAACBQZpc3N1ZXIFDXR1cnRsZUJyZWVkZXIGCQAAAgUGaXNzdWVyBQ9jYW5pbmVJbmN1YmF0b3IGCQAAAgUGaXNzdWVyBQ1jYW5pbmVCcmVlZGVyBgkAAAIFBmlzc3VlcgUPZmVsaW5lSW5jdWJhdG9yBgkAAAIFBmlzc3VlcgUNZmVsaW5lQnJlZWRlcggFA25mbwRuYW1lAwkAAAIFBmlzc3VlcgUNbXV0YW50QnJlZWRlcggFA25mbwtkZXNjcmlwdGlvbgIAARJib251c0J5RGVzY3JpcHRpb24BBWRlc2NyAwkBASEBCQEIY29udGFpbnMCBQVkZXNjcgIYImJvbnVzVHlwZSI6ICJGYXJtUG93ZXIiCQACAQkArAICAhZORlQgaXMgbm90IHN1cHBvcnRlZDogBQVkZXNjcgQIYm9udXNTdHIJAJEDAgkAvAkCCQCRAwIJALwJAgUFZGVzY3ICCCJib251cyI6AAECASwAAAkBDXBhcnNlSW50VmFsdWUBCQCwAgIFCGJvbnVzU3RyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAtwkCBQhib251c1N0cgIBIAD///////////8BAAEBEHN0YWtlTmZ0SW50ZXJuYWwGBGFkZHIKYXNzZXRJZFN0cgZib251czYKdXNlck51bUtleQt0b3RhbE51bUtleQVsaW1pdAQJbmZ0TnVtYmVyCQELdmFsdWVPckVsc2UCCQCfCAEFCnVzZXJOdW1LZXkAAAMJAGcCBQluZnROdW1iZXIFBWxpbWl0CQACAQkArAICCQCsAgICEllvdSBjYW4gc3Rha2UgbWF4IAkApAMBBQVsaW1pdAINIG9mIHN1Y2ggTkZUcwQLJHQwOTQ0Njk1MjIJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwAABQRhZGRyBQZib251czYEB2FjdGlvbnMIBQskdDA5NDQ2OTUyMgJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFCyR0MDk0NDY5NTIyAl8yCQCUCgIJAM0IAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQp1c2VyTnVtS2V5CQBkAgUJbmZ0TnVtYmVyAAEJAQxJbnRlZ2VyRW50cnkCBQt0b3RhbE51bUtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQULdG90YWxOdW1LZXkAAAABCQEMSW50ZWdlckVudHJ5AgkBHmtleVN0YWtlZFRpbWVCeUFzc2V0SWRBbmRPd25lcgIFCmFzc2V0SWRTdHIFBGFkZHIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRB3bGdDbGFpbWVkQW1vdW50EgFpAQpzYXZlTGFzdFR4AAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBDWNvbnN0cnVjdG9yVjECCXJlc3QyQWRkcg5vbGRBY3JDb250cmFjdAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA5vbGRBY3JDb250QWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUOb2xkQWNyQ29udHJhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFFGFjcmVzSXNzdWVkQW1vdW50S2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ5vbGRBY3JDb250QWRkcgUUYWNyZXNJc3N1ZWRBbW91bnRLZXkJAMwIAgkBC0JpbmFyeUVudHJ5AgUPYWNyZXNBc3NldElkS2V5CQERQGV4dHJOYXRpdmUoMTA1MikCBQ5vbGRBY3JDb250QWRkcgUPYWNyZXNBc3NldElkS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlSZXN0MkFkZHJlc3MABQlyZXN0MkFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTb2xkQWNyZXNDb250cmFjdEtleQUOb2xkQWNyQ29udHJhY3QFA25pbAFpAQpzZXRCbG9ja2VkAQlpc0Jsb2NrZWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmtleUJsb2NrZWQABQlpc0Jsb2NrZWQFA25pbAFpAQx1bnN0YWtlQWNyZXMBBmFtb3VudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQBnAgAABQZhbW91bnQJAAIBAhlBbW91bnQgc2hvdWxkIGJlIHBvc2l0aXZlBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQUHYWRkcmVzcwAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAAIBCQCsAgICLVlvdSB0cmFkZWQgc29tZSBXTEdPTEQsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQNJHQwMTEwOTYxMTE3NgkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDCQEBLQEFBmFtb3VudAUHYWRkcmVzcwAABAdhY3Rpb25zCAUNJHQwMTEwOTYxMTE3NgJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDExMDk2MTExNzYCXzIJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxhY3Jlc0Fzc2V0SWQFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEKc3Rha2VBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEEDSR0MDExNjI3MTE3MDMJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwUDYW10BQdhZGRyZXNzAAAEB2FjdGlvbnMIBQ0kdDAxMTYyNzExNzAzAl8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTE2MjcxMTcwMwJfMgkAlAoCCQDOCAIFB2FjdGlvbnMFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEIYnV5QWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAp1c2R0QW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAGYCBQVNVUxUNgUKdXNkdEFtb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ2AAYCBSBVU0RUBAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnQW1vdW50CQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQDcmVxCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUcmVxdWVzdEFjcmVzQ2FsbGJhY2sJAMwIAgULYWNyZXNBbW91bnQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBAl3bGdSZW1haW4JAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCmJ1cm5XbGdvbGQJAMwIAgUJd2xnQW1vdW50BQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthY3Jlc0Ftb3VudAUMYWNyZXNBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1JlbWFpbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBidXlBY3Jlc1JFQURPTkxZAQp1c2R0QW1vdW50BAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnVG9CdXJuCQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQJAJQKAgUDbmlsCQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFBU1VTFQ2CQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFCXdsZ1RvQnVybgUDbmlsAWkBCXNlbGxBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEC2FjcmVzQW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ3BQthY3Jlc0Ftb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ3AAgCBiBBQ1JFUwQEYWRkcgkApQgBCAUBaQZjYWxsZXIEDSR0MDEzNTYwMTM2MDgJARFnZXRTd2FwTGltaXRBY3JlcwAEC2xpbWl0QWN0aW9uCAUNJHQwMTM1NjAxMzYwOAJfMQQHbWF4VXNkdAgFDSR0MDEzNTYwMTM2MDgCXzIECG1heEFjcmVzCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAwkAZgIFC2FjcmVzQW1vdW50BQhtYXhBY3JlcwkAAgEJAKwCAgkArAICAhFZb3UgY2FuIHNlbGwgbWF4IAkBCmZpeGVkUG9pbnQCBQhtYXhBY3JlcwAIAgYgQUNSRVMECnVzZHRBbW91bnQJAGkCCQBpAgULYWNyZXNBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgACCQCUCgIJAM4IAgkAzAgCBQtsaW1pdEFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5TGFzdExpbWl0TGVmdAkAZQIFB21heFVzZHQFCnVzZHRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp1c2R0QW1vdW50BQt1c2R0QXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQp1c2R0QW1vdW50AWkBEXNlbGxBY3Jlc1JFQURPTkxZAgdhZGRyZXNzC2FjcmVzQW1vdW50BA0kdDAxNDEwNDE0MTUyCQERZ2V0U3dhcExpbWl0QWNyZXMABAtsaW1pdEFjdGlvbggFDSR0MDE0MTA0MTQxNTICXzEEB21heFVzZHQIBQ0kdDAxNDEwNDE0MTUyAl8yBAp1c2R0QW1vdW50CQBpAgkAaQIFC2FjcmVzQW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIAAgkAlAoCBQNuaWwJAMwIAgUKdXNkdEFtb3VudAkAzAgCBQVNVUxUNwkAzAgCCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQDMCAIAAAUDbmlsAWkBEGNvbnZlcnRPbGRTdGFrZXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVGVtcG9yYXJpbHkgZGlzYWJsZWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQGYW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFD29sZEFjcmVzQWRkcmVzcwkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwAABAlnb3RBY3JlczADCQBmAgUGYW1vdW50AAAJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUdW5zdGFrZUFjcmVzQ2FsbGJhY2sJAMwIAgUGYW1vdW50CQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIAAAAABBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAhsYW5kc1N0cgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEC2xhbmRzUmVzdWx0AwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyBAVsYW5kcwkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAMJAAACBQtsYW5kQXNzZXRJZAIACQACAQIXbGFuZEFzc2V0SWQgaXMgcmVxdWlyZWQEAXIJAQxhc1R1cGxlNUludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlTGFuZENhbGxiYWNrCQDMCAIFC2xh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XzMIBQJycgJfNAUKbmZ0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlwoFAAAAAAAAAAAFA25pbAQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MCAAQKZHVja1Jlc3VsdAMJAQIhPQIFC2R1Y2tBc3NldElkAgAJAQxhc1R1cGxlM0ludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlRHVja0NhbGxiYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCVCgMAAAAAAAAEAXgJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAgkAZAIIBQlnb3RBY3JlczACXzEIBQtsYW5kc1Jlc3VsdAJfMQgFC2xhbmRzUmVzdWx0Al8yCAULbGFuZHNSZXN1bHQCXzMIBQtsYW5kc1Jlc3VsdAJfNAgFCmR1Y2tSZXN1bHQCXzEIBQpkdWNrUmVzdWx0Al8yCAUKZHVja1Jlc3VsdAJfMwUHYWRkcmVzcwAACQCUCgIJAM4IAggFC2xhbmRzUmVzdWx0Al81CAUBeAJfMQgFAXgCXzIBaQEUdW5zdGFrZUxhbmRzUkVBRE9OTFkBB2FkZHJlc3MEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIEBWxhbmRzCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJ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BA5uZXdBY3Jlc0Ftb3VudAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAAFC2FkZGVkQW1vdW50BAhvbGRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJhY3Jlc1N0YWtkVG90YWxLZXkAAAQJdXNlckZwS2V5CQEVa2V5RmFybWluZ1Bvd2VyQnlVc2VyAQUHYWRkcmVzcwQFb2xkRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJdXNlckZwS2V5AAAECXVzZXJCb251cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAkBEGtleVVzZXJGdWxsQm9udXMBBQdhZGRyZXNzAAAEDSR0MDE4MjY2MTgzNTMJAR5nZXRGYXJtaW5nUG93ZXJCeUFjcmVzQW5kQm9udXMCBQ5uZXdBY3Jlc0Ftb3VudAUJdXNlckJvbnVzBAxuZXdCb251c2VkRnAIBQ0kdDAxODI2NjE4MzUzAl8xBAdpZ25vcmVkCAUNJHQwMTgyNjYxODM1MwJfMgQKb2xkVG90YWxGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRR0b3RhbEZhcm1pbmdQb3dlcktleQAABApuZXdUb3RhbEZwCQBlAgkAZAIFCm9sZFRvdGFsRnAFDG5ld0JvbnVzZWRGcAUFb2xkRnAJAJQKAgUDbmlsCQDMCAIFBW9sZEZwCQDMCAIFDG5ld0JvbnVzZWRGcAkAzAgCBQpvbGRUb3RhbEZwCQDMCAIFCm5ld1RvdGFsRnAFA25pbAFpAQhpc3N1ZU5GVAIKZm9yQWRkcmVzcwhuZnRJbmRleAMJAQIhPQIIBQFpBmNhbGxlcgULd2xnQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkBEGlzc3VlTkZUaW50ZXJuYWwCBQhuZnRJbmRleAkBEUBleHRyTmF0aXZlKDEwNjIpAQUKZm9yQWRkcmVzcwFpAQ1pc3N1ZU5mdEFkbWluAwpmb3JBZGRyZXNzCG5mdEluZGV4BnNlcmlhbAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAwkAZwIFCG5mdEluZGV4CQCQAwEFC2NvbnRlbnRLZXlzCQACAQIWbmZ0SW5kZXggb3V0IG9mIGJvdW5kcwQFaXNzdWUJAMIIBQkAkQMCBQhuZnROYW1lcwUIbmZ0SW5kZXgJARRjcmVhdGVOZnREZXNjcmlwdGlvbgIFCG5mdEluZGV4CQCkAwEFBnNlcmlhbAABAAAHBApuZnRBc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBCQDYBAEFCm5mdEFzc2V0SWQFBnNlcmlhbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpmb3JBZGRyZXNzAAEFCm5mdEFzc2V0SWQFA25pbAUKbmZ0QXNzZXRJZAFpAQhzdGFrZU5GVAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10BmFtb3VudAABCQACAQInTkZUIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEB25mdHNLZXkJARRrZXlTdGFrZWRORlRzQnlPd25lcgEFBGFkZHIEB25mdHNTdHIJAKIIAQUHbmZ0c0tleQQEbmZ0cwMJAQlpc0RlZmluZWQBBQduZnRzU3RyCQC8CQIJAQV2YWx1ZQEFB25mdHNTdHICAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQRuZnRzBQphc3NldElkU3RyCQACAQkArAICAiFZb3VyIHN0YWtlZCBORlRzIGFscmVhZHkgY29udGFpbiAFCmFzc2V0SWRTdHIDCQBnAgkAkAMBBQRuZnRzBRdNQVhfTkZUU19TVEFLRURfQllfVVNFUgkAAgEJAKwCAgkArAICAhlZb3VyIGFscmVhZHkgc3Rha2VkIG1heCAoCQCkAwEFF01BWF9ORlRTX1NUQUtFRF9CWV9VU0VSAgYpIE5GVHMECmxpc3RBY3Rpb24JAQtTdHJpbmdFbnRyeQIFB25mdHNLZXkJALoJAgkAzQgCBQRuZnRzBQphc3NldElkU3RyAgFfAwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMEDSR0MDIwMzIyMjA1MTIJARBzdGFrZU5mdEludGVybmFsBgUEYWRkcgUKYXNzZXRJZFN0cgkAaAIJARJib251c0J5RGVzY3JpcHRpb24BCQEFdmFsdWUBCAUFYXNzZXQLZGVzY3JpcHRpb24AkE4JARJrZXlVc2VyV2xOZnROdW1iZXIBBQRhZGRyBRNrZXlXbE5mdFRvdGFsU3Rha2VkBQtNQVhfV0xfTkZUUwQHYWN0aW9ucwgFDSR0MDIwMzIyMjA1MTICXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAyMDMyMjIwNTEyAl8yCQCUCgIJAM0IAgkAzggCBQ1wcm9sb2dBY3Rpb25zBQdhY3Rpb25zBQpsaXN0QWN0aW9uBRB3bGdDbGFpbWVkQW1vdW50AwkAAAIJAQ9pc0Fya2ltYWxJc3N1ZWQBBQVhc3NldAIACQACAQI0T25seSBXYXZlc0xhbmRzIGFuZCBBcmtpbWFscyBORlQgdG9rZW5zIGFyZSBhY2NlcHRlZAQNJHQwMjA2OTMyMDg0NAkBEHN0YWtlTmZ0SW50ZXJuYWwGBQRhZGRyBQphc3NldElkU3RyBQ1BUktfTkZUX0JPTlVTCQETa2V5VXNlckFya05mdE51bWJlcgEFBGFkZHIFFGtleUFya05mdFRvdGFsU3Rha2VkBQxNQVhfQVJLX05GVFMEB2FjdGlvbnMIBQ0kdDAyMDY5MzIwODQ0Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMjA2OTMyMDg0NAJfMgkAlAoCCQDNCAIJAM4IAgUNcHJvbG9nQWN0aW9ucwUHYWN0aW9ucwUKbGlzdEFjdGlvbgUQd2xnQ2xhaW1lZEFtb3VudAFpAQp1bnN0YWtlTkZUAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgUKYXNzZXRJZFN0cgUEYWRkcgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIVIGlzIG5vdCBzdGFrZWQgYnkgeW91BAduZnRzS2V5CQEUa2V5U3Rha2VkTkZUc0J5T3duZXIBBQRhZGRyBARuZnRzCQC8CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUHbmZ0c0tleQIAAgFfBANpZHgJAM8IAgUEbmZ0cwUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIfWW91ciBzdGFrZWQgTkZUcyBkb24ndCBjb250YWluIAUKYXNzZXRJZFN0cgQKbGlzdEFjdGlvbgMJAGYCCQCQAwEFBG5mdHMAAQkBC1N0cmluZ0VudHJ5AgUHbmZ0c0tleQkAugkCCQDRCAIFBG5mdHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUHbmZ0c0tleQQEaXNXTAkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMDBQRpc1dMBAt3bE5mdE51bWJlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5VXNlcldsTmZ0TnVtYmVyAQUEYWRkcgAABAhib251c1ZhbAkAaAIJARJib251c0J5RGVzY3JpcHRpb24BCQEFdmFsdWUBCAUFYXNzZXQLZGVzY3JpcHRpb24AkE4EDSR0MDIyMDA5MjIwODgJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwAABQRhZGRyCQEBLQEFCGJvbnVzVmFsBAdhY3Rpb25zCAUNJHQwMjIwMDkyMjA4OAJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDIyMDA5MjIwODgCXzIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgUHYWN0aW9ucwUKbGlzdEFjdGlvbgkBDEludGVnZXJFbnRyeQIJARJrZXlVc2VyV2xOZnROdW1iZXIBBQRhZGRyCQBlAgULd2xOZnROdW1iZXIAAQkBDEludGVnZXJFbnRyeQIFE2tleVdsTmZ0VG90YWxTdGFrZWQJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTa2V5V2xOZnRUb3RhbFN0YWtlZAAAAAEFA25pbAkBC0RlbGV0ZUVudHJ5AQkBHmtleVN0YWtlZFRpbWVCeUFzc2V0SWRBbmRPd25lcgIJANgEAQUHYXNzZXRJZAUEYWRkcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQEC2Fya2ltYWxOYW1lCQEPaXNBcmtpbWFsSXNzdWVkAQUFYXNzZXQDCQAAAgULYXJraW1hbE5hbWUCAAkAAgECNE9ubHkgV2F2ZXNMYW5kcyBhbmQgQXJraW1hbHMgTkZUIHRva2VucyBhcmUgYWNjZXB0ZWQEDGFya05mdE51bWJlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5VXNlckFya05mdE51bWJlcgEFBGFkZHIAAAQNJHQwMjI3NDgyMjgzMgkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDAAAFBGFkZHIJAQEtAQUNQVJLX05GVF9CT05VUwQHYWN0aW9ucwgFDSR0MDIyNzQ4MjI4MzICXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAyMjc0ODIyODMyAl8yCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zBQpsaXN0QWN0aW9uCQEMSW50ZWdlckVudHJ5AgkBE2tleVVzZXJBcmtOZnROdW1iZXIBBQRhZGRyCQBlAgUMYXJrTmZ0TnVtYmVyAAEJAQtEZWxldGVFbnRyeQEJAR5rZXlTdGFrZWRUaW1lQnlBc3NldElkQW5kT3duZXICCQDYBAEFB2Fzc2V0SWQFBGFkZHIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQ1wcm9sb2dBY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50AWkBDGV4Y2hhbmdlTkZUcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkAZgIAAwkAkAMBCAUBaQhwYXltZW50cwkAAgECJ01pbiBvbmUgVVNEVCBhbmQgMiBORlQgcGF5bWVudHMgYWxsb3dlZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAYJAAIBAidNYXggb25lIFVTRFQgYW5kIDUgTkZUIHBheW1lbnRzIGFsbG93ZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyCgEFYWRkVXACA2FjYwNwbXQEB2Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAhpXQVZFUyBwYXltZW50cyBub3QgYWxsb3dlZAMJAAACBQdhc3NldElkBQt1c2R0QXNzZXRJZAkAlQoDCQBkAggFA2FjYwJfMQgFA3BtdAZhbW91bnQIBQNhY2MCXzIIBQNhY2MCXzMEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIbT25seSBXTC1pc3N1ZWQgTkZUcyBhbGxvd2VkBAlib251c1BlcmMJARJib251c0J5RGVzY3JpcHRpb24BCQEFdmFsdWUBCAUFYXNzZXQLZGVzY3JpcHRpb24JAJUKAwgFA2FjYwJfMQkAZAIIBQNhY2MCXzIFCWJvbnVzUGVyYwkAzQgCCAUDYWNjAl8zCQEEQnVybgIFB2Fzc2V0SWQAAQQNJHQwMjM5ODAyNDA1OQoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwAAAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkVXACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEB3VzZHRGZWUIBQ0kdDAyMzk4MDI0MDU5Al8xBAp0b3RhbEJvbnVzCAUNJHQwMjM5ODAyNDA1OQJfMgQLYnVybkFjdGlvbnMIBQ0kdDAyMzk4MDI0MDU5Al8zBAhuZnRJbmRleAMJAAACBQp0b3RhbEJvbnVzAAMAAgMJAAACBQp0b3RhbEJvbnVzAAUAAwMJAAACBQp0b3RhbEJvbnVzAAoABAkAAgECK09ubHkgYm9udXNlcyBvZiAzJSwgNSUgb3IgMTAlIGFyZSBzdXBwb3J0ZWQEBmNoYW5nZQkAZQIFB3VzZHRGZWUJAGgCBQp0b3RhbEJvbnVzBQVNVUxUNgMJAGYCAAAFBmNoYW5nZQkAAgEJAKwCAgkArAICAhNZb3UgbmVlZCB0byBhdHRhY2ggCQCkAwEFCnRvdGFsQm9udXMCDCBVU0RUIGFzIGZlZQQNY2hhbmdlQWN0aW9ucwMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBA0kdDAyNDUxNjI0NTg4CQEQaXNzdWVORlRpbnRlcm5hbAIFCG5mdEluZGV4CAUBaQZjYWxsZXIED2lzc3VlTmZ0QWN0aW9ucwgFDSR0MDI0NTE2MjQ1ODgCXzEECm5mdEFzc2V0SWQIBQ0kdDAyNDUxNjI0NTg4Al8yBAZidXJuZWQJAJADAQULYnVybkFjdGlvbnMEEmJ1cm5Db3VudGVyQWN0aW9ucwMJAAACBQZidXJuZWQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlOZnRUb3RhbEJ1cm5lZAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQURa2V5TmZ0VG90YWxCdXJuZWQAAAUGYnVybmVkBQNuaWwJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQ9pc3N1ZU5mdEFjdGlvbnMFC2J1cm5BY3Rpb25zBRJidXJuQ291bnRlckFjdGlvbnMFDXByb2xvZ0FjdGlvbnMFDWNoYW5nZUFjdGlvbnMFCm5mdEFzc2V0SWQAj+h+Bw==", "height": 3391319, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A8VGKJakrnEL9esjq6YUKBHKw6ojsKmQD8wDjW83XPtL Next: FkuouCruxf26S6783WN9HtAwaEcUXm26w4tpTzigbPrD Diff:
OldNewDifferences
342342 else false)
343343 then throw((((("You have only " + fixedPoint(oldBonus, 4)) + "% bonus, and tried to unstake ") + fixedPoint(-(bonusDelta), 4)) + "%"))
344344 else {
345- let $t057895888 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
346- let newBonusedFp = $t057895888._1
347- let ignored = $t057895888._2
345+ let $t048204919 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
346+ let newBonusedFp = $t048204919._1
347+ let ignored = $t048204919._2
348348 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
349349 let acresActions = if ((amt == 0))
350350 then nil
442442 if ((nftNumber >= limit))
443443 then throw((("You can stake max " + toString(limit)) + " of such NFTs"))
444444 else {
445- let $t01040210478 = stakeUnstakeAcresInternal(0, addr, bonus6)
446- let actions = $t01040210478._1
447- let wlgClaimedAmount = $t01040210478._2
445+ let $t094469522 = stakeUnstakeAcresInternal(0, addr, bonus6)
446+ let actions = $t094469522._1
447+ let wlgClaimedAmount = $t094469522._2
448448 $Tuple2((((actions :+ IntegerEntry(userNumKey, (nftNumber + 1))) :+ IntegerEntry(totalNumKey, (valueOrElse(getInteger(totalNumKey), 0) + 1))) :+ IntegerEntry(keyStakedTimeByAssetIdAndOwner(assetIdStr, addr), lastBlock.timestamp)), wlgClaimedAmount)
449449 }
450450 }
488488 if ((arbReleaseTime > lastBlock.timestamp))
489489 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
490490 else {
491- let $t01205212132 = stakeUnstakeAcresInternal(-(amount), address, 0)
492- let actions = $t01205212132._1
493- let wlgClaimedAmount = $t01205212132._2
491+ let $t01109611176 = stakeUnstakeAcresInternal(-(amount), address, 0)
492+ let actions = $t01109611176._1
493+ let wlgClaimedAmount = $t01109611176._2
494494 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
495495 }
496496 }
513513 else (value(pmt.assetId) != acresAssetId))
514514 then throw("ACRES payments only!")
515515 else {
516- let $t01258312659 = stakeUnstakeAcresInternal(amt, address, 0)
517- let actions = $t01258312659._1
518- let wlgClaimedAmount = $t01258312659._2
516+ let $t01162711703 = stakeUnstakeAcresInternal(amt, address, 0)
517+ let actions = $t01162711703._1
518+ let wlgClaimedAmount = $t01162711703._2
519519 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
520520 }
521521 }
579579 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
580580 else {
581581 let addr = toString(i.caller)
582- let $t01451614564 = getSwapLimitAcres()
583- let limitAction = $t01451614564._1
584- let maxUsdt = $t01451614564._2
582+ let $t01356013608 = getSwapLimitAcres()
583+ let limitAction = $t01356013608._1
584+ let maxUsdt = $t01356013608._2
585585 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
586586 if ((acresAmount > maxAcres))
587587 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
597597
598598 @Callable(i)
599599 func sellAcresREADONLY (address,acresAmount) = {
600- let $t01506015108 = getSwapLimitAcres()
601- let limitAction = $t01506015108._1
602- let maxUsdt = $t01506015108._2
600+ let $t01410414152 = getSwapLimitAcres()
601+ let limitAction = $t01410414152._1
602+ let maxUsdt = $t01410414152._2
603603 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
604604 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
605605 }
651651 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
652652 if ((req == req))
653653 then {
654- let $t01697717057 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
655- let nftActions = $t01697717057._1
656- let nftAssetId = $t01697717057._2
654+ let $t01602116101 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
655+ let nftActions = $t01602116101._1
656+ let nftAssetId = $t01602116101._2
657657 $Tuple5(rr._1, rr._2, rr._3, rr._4, nftActions)
658658 }
659659 else throw("Strict value is not equal to itself.")
720720 let userFpKey = keyFarmingPowerByUser(address)
721721 let oldFp = valueOrElse(getInteger(userFpKey), 0)
722722 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(address)), 0)
723- let $t01922219309 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
724- let newBonusedFp = $t01922219309._1
725- let ignored = $t01922219309._2
723+ let $t01826618353 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
724+ let newBonusedFp = $t01826618353._1
725+ let ignored = $t01826618353._2
726726 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
727727 let newTotalFp = ((oldTotalFp + newBonusedFp) - oldFp)
728728 $Tuple2(nil, [oldFp, newBonusedFp, oldTotalFp, newTotalFp])
734734 func issueNFT (forAddress,nftIndex) = if ((i.caller != wlgContract))
735735 then throw("Permission denied")
736736 else issueNFTinternal(nftIndex, addressFromStringValue(forAddress))
737+
738+
739+
740+@Callable(i)
741+func issueNftAdmin (forAddress,nftIndex,serial) = if ((i.caller != this))
742+ then throw("Permission denied")
743+ else if ((nftIndex >= size(contentKeys)))
744+ then throw("nftIndex out of bounds")
745+ else {
746+ let issue = Issue(nftNames[nftIndex], createNftDescription(nftIndex, toString(serial)), 1, 0, false)
747+ let nftAssetId = calculateAssetId(issue)
748+ $Tuple2([issue, IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), serial), ScriptTransfer(addressFromStringValue(forAddress), 1, nftAssetId)], nftAssetId)
749+ }
737750
738751
739752
764777 let listAction = StringEntry(nftsKey, makeString_2C((nfts :+ assetIdStr), "_"))
765778 if ((asset.issuer == this))
766779 then {
767- let $t02072620916 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
768- let actions = $t02072620916._1
769- let wlgClaimedAmount = $t02072620916._2
780+ let $t02032220512 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
781+ let actions = $t02032220512._1
782+ let wlgClaimedAmount = $t02032220512._2
770783 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
771784 }
772785 else if ((isArkimalIssued(asset) == ""))
773786 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
774787 else {
775- let $t02109721248 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
776- let actions = $t02109721248._1
777- let wlgClaimedAmount = $t02109721248._2
788+ let $t02069320844 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
789+ let actions = $t02069320844._1
790+ let wlgClaimedAmount = $t02069320844._2
778791 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
779792 }
780793 }
811824 then {
812825 let wlNftNumber = valueOrElse(getInteger(keyUserWlNftNumber(addr)), 0)
813826 let bonusVal = (bonusByDescription(value(asset.description)) * 10000)
814- let $t02241322492 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
815- let actions = $t02241322492._1
816- let wlgClaimedAmount = $t02241322492._2
827+ let $t02200922088 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
828+ let actions = $t02200922088._1
829+ let wlgClaimedAmount = $t02200922088._2
817830 $Tuple2(((((((actions :+ listAction) :+ IntegerEntry(keyUserWlNftNumber(addr), (wlNftNumber - 1))) :+ IntegerEntry(keyWlNftTotalStaked, max([0, (valueOrElse(getInteger(keyWlNftTotalStaked), 0) - 1)]))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
818831 }
819832 else {
822835 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
823836 else {
824837 let arkNftNumber = valueOrElse(getInteger(keyUserArkNftNumber(addr)), 0)
825- let $t02315223236 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
826- let actions = $t02315223236._1
827- let wlgClaimedAmount = $t02315223236._2
838+ let $t02274822832 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
839+ let actions = $t02274822832._1
840+ let wlgClaimedAmount = $t02274822832._2
828841 $Tuple2((((((actions :+ listAction) :+ IntegerEntry(keyUserArkNftNumber(addr), (arkNftNumber - 1))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
829842 }
830843 }
859872 }
860873 }
861874
862- let $t02438424463 = {
875+ let $t02398024059 = {
863876 let $l = i.payments
864877 let $s = size($l)
865878 let $acc0 = $Tuple3(0, 0, nil)
873886
874887 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
875888 }
876- let usdtFee = $t02438424463._1
877- let totalBonus = $t02438424463._2
878- let burnActions = $t02438424463._3
889+ let usdtFee = $t02398024059._1
890+ let totalBonus = $t02398024059._2
891+ let burnActions = $t02398024059._3
879892 let nftIndex = if ((totalBonus == 3))
880893 then 2
881894 else if ((totalBonus == 5))
890903 let changeActions = if ((change > 0))
891904 then [ScriptTransfer(i.caller, change, usdtAssetId)]
892905 else nil
893- let $t02492024992 = issueNFTinternal(nftIndex, i.caller)
894- let issueNftActions = $t02492024992._1
895- let nftAssetId = $t02492024992._2
906+ let $t02451624588 = issueNFTinternal(nftIndex, i.caller)
907+ let issueNftActions = $t02451624588._1
908+ let nftAssetId = $t02451624588._2
896909 let burned = size(burnActions)
897910 let burnCounterActions = if ((burned == 0))
898911 then nil
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT6 = 1000000
77
88 let MULT7 = 10000000
99
1010 let MULT8 = 100000000
1111
1212 let DAY_MILLIS = 86400000
1313
1414 let USDT2ACRES_MULTIPLIER = 10
1515
1616 let ONE_PERCENT_DIVISOR = 100
1717
1818 let chain = take(drop(this.bytes, 1), 1)
1919
2020 let WEEK_BLOCKS = match chain {
2121 case _ =>
2222 if ((base58'2W' == $match0))
2323 then 10080
2424 else if ((base58'2T' == $match0))
2525 then 180
2626 else throw("Unknown chain")
2727 }
2828
2929 let usdtAssetId = match chain {
3030 case _ =>
3131 if ((base58'2W' == $match0))
3232 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
3333 else if ((base58'2T' == $match0))
3434 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3535 else throw("Unknown chain")
3636 }
3737
3838 let defaultRest2AddressStr = match chain {
3939 case _ =>
4040 if ((base58'2W' == $match0))
4141 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
4242 else if ((base58'2T' == $match0))
4343 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
4444 else throw("Unknown chain")
4545 }
4646
4747 let arbitrageDelay = match chain {
4848 case _ =>
4949 if ((base58'2W' == $match0))
5050 then DAY_MILLIS
5151 else if ((base58'2T' == $match0))
5252 then 60000
5353 else throw("Unknown chain")
5454 }
5555
5656 let oldStakingContractStr = match chain {
5757 case _ =>
5858 if ((base58'2W' == $match0))
5959 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
6060 else if ((base58'2T' == $match0))
6161 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
6262 else throw("Unknown chain")
6363 }
6464
6565 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
6666
6767
6868 let IdxCfgAcres2Dapp = 1
6969
7070 let IdxCfgWlgDapp = 2
7171
7272 let IdxCfgInvestFundDapp = 5
7373
7474 func keyRestCfg () = "%s__restConfig"
7575
7676
7777 func keyRest2Address () = "%s__rest2Addr"
7878
7979
8080 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
8181
8282
8383 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
8484
8585
8686 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
8787
8888 let rest2Cfg = readRestCfgOrFail(rest2Contract)
8989
9090 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
9191
9292 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
9393
9494 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
9595
9696 let oldAcresContractKey = "oldAcresContract"
9797
9898 func keyBlocked () = "contractsBlocked"
9999
100100
101101 func keyLastWeekTxIdByUser (addr) = ("lastWeekTxIdByUser_" + addr)
102102
103103
104104 func keyCurWeekTxIdByUser (addr) = ("curWeekTxIdByUser_" + addr)
105105
106106
107107 let acresIssuedAmountKey = "acresIssuedAmount"
108108
109109 let acresAssetIdKey = "acresAssetId"
110110
111111 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
112112
113113 func keyAcresStakedTimeByUser (addr) = ("acresStakedTimeByUser_" + addr)
114114
115115
116116 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
117117
118118
119119 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
120120
121121
122122 func keyStakedTimeByAssetIdAndOwner (assetId,addr) = ((("st_" + assetId) + "_") + addr)
123123
124124
125125 func keyStakedNFTsByOwner (ownerAddr) = ("stakedNFTsByOwner_" + ownerAddr)
126126
127127
128128 func asInt (v) = match v {
129129 case n: Int =>
130130 n
131131 case _ =>
132132 throw("fail to cast into Int")
133133 }
134134
135135
136136 func asTuple5Ints (val) = match val {
137137 case t: (Int, Int, Int, Int, Int) =>
138138 t
139139 case _ =>
140140 throw("fail to cast into (Int, Int, Int, Int, Int)")
141141 }
142142
143143
144144 func asTuple4Ints (val) = match val {
145145 case t: (Int, Int, Int, Int) =>
146146 t
147147 case _ =>
148148 throw("fail to cast into (Int, Int, Int, Int)")
149149 }
150150
151151
152152 func asTuple3Ints (val) = match val {
153153 case t: (Int, Int, Int) =>
154154 t
155155 case _ =>
156156 throw("fail to cast into (Int, Int, Int)")
157157 }
158158
159159
160160 func asTuple2Ints (val) = match val {
161161 case t: (Int, Int) =>
162162 t
163163 case _ =>
164164 throw("fail to cast into (Int, Int)")
165165 }
166166
167167
168168 func fixedPoint (val,decimals) = {
169169 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
170170 let lowPart = toString((val % tenPow))
171171 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
172172 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
173173 }
174174
175175
176176 let M6_ = 1000000
177177
178178 let M8_ = 100000000
179179
180180 let wlgIssuedAmtKey = "wlg_issuedAmount"
181181
182182 let zbIssuedAmtKey = "zbill_issuedAmount"
183183
184184 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
185185
186186
187187 func keyFarmingPowerByUser (addr) = ("farmingPowerByUser_" + addr)
188188
189189
190190 let acresStakdTotalKey = "acresStakedAmountTotal"
191191
192192 let totalFarmingPowerKey = "totalFarmingPower"
193193
194194 let IdxDtx3PercConversion = 0
195195
196196 let MAX_WL_NFTS = 3
197197
198198 let MAX_ARK_NFTS = 1
199199
200200 let ARK_NFT_BONUS = 5000
201201
202202 let MAX_NFTS_STAKED_BY_USER = 4
203203
204204 let keyNftTotalIssued = "nftTotalIssued"
205205
206206 let keyNftTotalBurned = "nftTotalBurned"
207207
208208 let keyWlNftTotalStaked = "WlNftTotalStaked"
209209
210210 let keyArkNftTotalStaked = "ArkNftTotalStaked"
211211
212212 func keyNftNumberByAssetId (assetId) = ("nftNumberByAssetId_" + assetId)
213213
214214
215215 func keyUserWlNftNumber (addr) = ("userWlNftNumber_" + addr)
216216
217217
218218 func keyUserArkNftNumber (addr) = ("userArkNftNumber_" + addr)
219219
220220
221221 func keyUserFullBonus (addr) = ("userFullBonus_" + addr)
222222
223223
224224 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
225225
226226 func getLevelByAcres (acres) = {
227227 let acr = ((acres + 99999999) / M8_)
228228 func checker (acc,item) = if ((item >= acr))
229229 then acc
230230 else (acc + 1)
231231
232232 let $l = levelAcres
233233 let $s = size($l)
234234 let $acc0 = 0
235235 func $f0_1 ($a,$i) = if (($i >= $s))
236236 then $a
237237 else checker($a, $l[$i])
238238
239239 func $f0_2 ($a,$i) = if (($i >= $s))
240240 then $a
241241 else throw("List size exceeds 10")
242242
243243 $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)
244244 }
245245
246246
247247 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
248248
249249
250250 func getFarmingPowerByAcresAndBonus (acres,bonus6) = {
251251 let notBonused = getFarmingPowerByAcres(acres)
252252 $Tuple2(fraction(notBonused, (M6_ + bonus6), M6_), notBonused)
253253 }
254254
255255
256256 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
257257
258258
259259 let keyLastAcresSellTime = "lastAcresSellTime"
260260
261261 let keyLastLimitLeft = "lastLimitLeft"
262262
263263 let nftNames = ["SHOVEL-P3", "PICKAXE-C1", "PICKAXE-C3", "PICKAXE-C5", "PICKAXE-C10"]
264264
265265 let contentKeys = ["contentShovelP3", "contentPickaxeC1", "contentPickaxeC3", "contentPickaxeC5", "contentPickaxeC10"]
266266
267267 let names = ["Gold shovel", "Pickaxe", "Pickaxe", "Pickaxe", "Pickaxe"]
268268
269269 let descriptions = ["Reward for early birds", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower"]
270270
271271 let rarities = ["Promo", "Common", "Common", "Common", "Common"]
272272
273273 let bonuses = [3, 1, 3, 5, 10]
274274
275275 func prolog (i) = if (if ((i.originCaller != rest2Contract))
276276 then valueOrElse(getBoolean(keyBlocked()), false)
277277 else false)
278278 then throw("Contracts are under maintenance")
279279 else {
280280 let addr = toString(i.originCaller)
281281 let week = (height / WEEK_BLOCKS)
282282 let lastWeekTxIdByUser = getString(keyLastWeekTxIdByUser(addr))
283283 let txId = toBase58String(i.transactionId)
284284 let wtx = ((toString(week) + "_") + txId)
285285 if (isDefined(lastWeekTxIdByUser))
286286 then {
287287 let lastWeekTx = split(value(lastWeekTxIdByUser), "_")
288288 if ((lastWeekTx[0] == toString(week)))
289289 then [StringEntry(keyLastWeekTxIdByUser(addr), wtx), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
290290 else if ((lastWeekTx[0] == toString((week - 1))))
291291 then [StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
292292 else {
293293 let curWeekTxIdByUser = getStringValue(keyLastWeekTxIdByUser(addr))
294294 let curWeekTx = split(curWeekTxIdByUser, "_")
295295 if ((curWeekTx[0] == toString(week)))
296296 then [StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
297297 else [StringEntry(keyLastWeekTxIdByUser(addr), curWeekTxIdByUser), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
298298 }
299299 }
300300 else [StringEntry(keyLastWeekTxIdByUser(addr), wtx), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
301301 }
302302
303303
304304 func createNftDescription (nftIndex,nftSerial) = ((((((((((((((((((((("{\"url\": \"https://waveslands.com\", " + "\"contentKey\": \"") + contentKeys[nftIndex]) + "\", ") + "\"number\": ") + nftSerial) + ", ") + "\"collection\": \"Digging tools") + "\", ") + "\"name\": \"") + names[nftIndex]) + "\", ") + "\"description\": \"") + descriptions[nftIndex]) + "\", ") + "\"rare\": \"") + rarities[nftIndex]) + "\", ") + "\"bonus\": ") + toString(bonuses[nftIndex])) + ", ") + "\"bonusType\": \"FarmPower\"}")
305305
306306
307307 func issueNFTinternal (nftIndex,addr) = if ((nftIndex >= size(contentKeys)))
308308 then throw("nftIndex out of bounds")
309309 else {
310310 let nftSerial = valueOrElse(getInteger(keyNftTotalIssued), 0)
311311 let issue = Issue(nftNames[nftIndex], createNftDescription(nftIndex, toString(nftSerial)), 1, 0, false)
312312 let nftAssetId = calculateAssetId(issue)
313313 $Tuple2([issue, IntegerEntry(keyNftTotalIssued, (nftSerial + 1)), IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), nftSerial), ScriptTransfer(addr, 1, nftAssetId)], nftAssetId)
314314 }
315315
316316
317317 func stakeUnstakeAcresInternal (amt,address,bonusDelta) = if (if ((amt == 0))
318318 then (bonusDelta == 0)
319319 else false)
320320 then throw("Nothing to do")
321321 else {
322322 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
323323 if ((wlgResult == wlgResult))
324324 then {
325325 let now = lastBlock.timestamp
326326 let timeKey = keyAcresStakedTimeByUser(address)
327327 let amountKey = keyAcresStakedAmtByUser(address)
328328 let oldAcresAmount = valueOrElse(getInteger(amountKey), 0)
329329 if (if ((0 > amt))
330330 then (0 > (oldAcresAmount + amt))
331331 else false)
332332 then throw(((("You have only " + fixedPoint(oldAcresAmount, 8)) + " ACRES staked, tried to unstake ") + fixedPoint(-(amt), 8)))
333333 else {
334334 let newAcresAmount = (oldAcresAmount + amt)
335335 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
336336 let userFpKey = keyFarmingPowerByUser(address)
337337 let oldFp = valueOrElse(getInteger(userFpKey), 0)
338338 let bonusKey = keyUserFullBonus(address)
339339 let oldBonus = valueOrElse(getInteger(acres2Contract, bonusKey), 0)
340340 if (if ((0 > bonusDelta))
341341 then (0 > (oldBonus + bonusDelta))
342342 else false)
343343 then throw((((("You have only " + fixedPoint(oldBonus, 4)) + "% bonus, and tried to unstake ") + fixedPoint(-(bonusDelta), 4)) + "%"))
344344 else {
345- let $t057895888 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
346- let newBonusedFp = $t057895888._1
347- let ignored = $t057895888._2
345+ let $t048204919 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
346+ let newBonusedFp = $t048204919._1
347+ let ignored = $t048204919._2
348348 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
349349 let acresActions = if ((amt == 0))
350350 then nil
351351 else [IntegerEntry(amountKey, newAcresAmount), IntegerEntry(acresStakdTotalKey, (oldTotal + amt))]
352352 $Tuple2(((((acresActions :+ IntegerEntry(timeKey, lastBlock.timestamp)) :+ IntegerEntry(userFpKey, newBonusedFp)) :+ IntegerEntry(totalFarmingPowerKey, ((oldTotalFp + newBonusedFp) - oldFp))) :+ IntegerEntry(bonusKey, (oldBonus + bonusDelta))), wlgResult)
353353 }
354354 }
355355 }
356356 else throw("Strict value is not equal to itself.")
357357 }
358358
359359
360360 func getWlgPrice (usdtBalanceCorrection) = {
361361 let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmtKey), "WLGOLD is not issued yet")
362362 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
363363 let acres2Usd = (assetBalance(acres2Contract, usdtAssetId) - usdtBalanceCorrection)
364364 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
365365 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
366366 fraction(totalFundsUsd, MULT8, issuedAmount)
367367 }
368368
369369
370370 func getSwapLimitAcres () = {
371371 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
372372 let acres2Usd = assetBalance(this, usdtAssetId)
373373 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
374374 let defaultLimit = (((acres2Usd + wlgUsd) + investFundTotal) / ONE_PERCENT_DIVISOR)
375375 let lastLimitLeft = valueOrElse(getInteger(keyLastLimitLeft), defaultLimit)
376376 let lastTime = valueOrElse(getInteger(keyLastAcresSellTime), 0)
377377 let now = lastBlock.timestamp
378378 let currentLimit = (lastLimitLeft + fraction(defaultLimit, (now - lastTime), DAY_MILLIS))
379379 let limitLeftUsdt = min([currentLimit, defaultLimit])
380380 $Tuple2(IntegerEntry(keyLastAcresSellTime, now), limitLeftUsdt)
381381 }
382382
383383
384384 let arkOracle = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
385385
386386 let incubator = valueOrElse(getString(arkOracle, "static_incubatorAddress"), "")
387387
388388 let breeder = valueOrElse(getString(arkOracle, "static_breederAddress"), "")
389389
390390 let turtleIncubator = valueOrElse(getString(arkOracle, "static_turtleIncubatorAddress"), "")
391391
392392 let turtleBreeder = valueOrElse(getString(arkOracle, "static_turtleBreederAddress"), "")
393393
394394 let canineIncubator = valueOrElse(getString(arkOracle, "static_canineIncubatorAddress"), "")
395395
396396 let canineBreeder = valueOrElse(getString(arkOracle, "static_canineBreederAddress"), "")
397397
398398 let felineIncubator = valueOrElse(getString(arkOracle, "static_felineIncubatorAddress"), "")
399399
400400 let felineBreeder = valueOrElse(getString(arkOracle, "static_felineBreederAddress"), "")
401401
402402 let mutantBreeder = valueOrElse(getString(arkOracle, "static_mutantIncubatorAddress"), "")
403403
404404 func isArkimalIssued (nfo) = {
405405 let issuer = toString(nfo.issuer)
406406 if (if (if (if (if (if (if (if (if (if ((chain == base58'2T'))
407407 then (issuer == oldStakingContractStr)
408408 else false)
409409 then true
410410 else (issuer == incubator))
411411 then true
412412 else (issuer == breeder))
413413 then true
414414 else (issuer == turtleIncubator))
415415 then true
416416 else (issuer == turtleBreeder))
417417 then true
418418 else (issuer == canineIncubator))
419419 then true
420420 else (issuer == canineBreeder))
421421 then true
422422 else (issuer == felineIncubator))
423423 then true
424424 else (issuer == felineBreeder))
425425 then nfo.name
426426 else if ((issuer == mutantBreeder))
427427 then nfo.description
428428 else ""
429429 }
430430
431431
432432 func bonusByDescription (descr) = if (!(contains(descr, "\"bonusType\": \"FarmPower\"")))
433433 then throw(("NFT is not supported: " + descr))
434434 else {
435435 let bonusStr = split_4C(split_4C(descr, "\"bonus\":")[1], ",")[0]
436436 parseIntValue(drop(bonusStr, (valueOrElse(lastIndexOf(bonusStr, " "), -1) + 1)))
437437 }
438438
439439
440440 func stakeNftInternal (addr,assetIdStr,bonus6,userNumKey,totalNumKey,limit) = {
441441 let nftNumber = valueOrElse(getInteger(userNumKey), 0)
442442 if ((nftNumber >= limit))
443443 then throw((("You can stake max " + toString(limit)) + " of such NFTs"))
444444 else {
445- let $t01040210478 = stakeUnstakeAcresInternal(0, addr, bonus6)
446- let actions = $t01040210478._1
447- let wlgClaimedAmount = $t01040210478._2
445+ let $t094469522 = stakeUnstakeAcresInternal(0, addr, bonus6)
446+ let actions = $t094469522._1
447+ let wlgClaimedAmount = $t094469522._2
448448 $Tuple2((((actions :+ IntegerEntry(userNumKey, (nftNumber + 1))) :+ IntegerEntry(totalNumKey, (valueOrElse(getInteger(totalNumKey), 0) + 1))) :+ IntegerEntry(keyStakedTimeByAssetIdAndOwner(assetIdStr, addr), lastBlock.timestamp)), wlgClaimedAmount)
449449 }
450450 }
451451
452452
453453 @Callable(i)
454454 func saveLastTx () = if (!(containsElement([wlgContract], i.caller)))
455455 then throw("Access denied")
456456 else $Tuple2(prolog(i), 42)
457457
458458
459459
460460 @Callable(i)
461461 func constructorV1 (rest2Addr,oldAcrContract) = if ((i.caller != this))
462462 then throw("Permission denied")
463463 else {
464464 let oldAcrContAddr = addressFromStringValue(oldAcrContract)
465465 [IntegerEntry(acresIssuedAmountKey, getIntegerValue(oldAcrContAddr, acresIssuedAmountKey)), BinaryEntry(acresAssetIdKey, getBinaryValue(oldAcrContAddr, acresAssetIdKey)), StringEntry(keyRest2Address(), rest2Addr), StringEntry(oldAcresContractKey, oldAcrContract)]
466466 }
467467
468468
469469
470470 @Callable(i)
471471 func setBlocked (isBlocked) = if ((i.caller != this))
472472 then throw("permission denied")
473473 else [BooleanEntry(keyBlocked(), isBlocked)]
474474
475475
476476
477477 @Callable(i)
478478 func unstakeAcres (amount) = {
479479 let prologActions = prolog(i)
480480 if ((0 >= amount))
481481 then throw("Amount should be positive")
482482 else {
483483 let address = toString(i.caller)
484484 if ((size(i.payments) != 0))
485485 then throw("No payments required")
486486 else {
487487 let arbReleaseTime = (valueOrElse(getInteger(wlgContract, keyLastWlgTradeTimeByUser(address)), 0) + arbitrageDelay)
488488 if ((arbReleaseTime > lastBlock.timestamp))
489489 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
490490 else {
491- let $t01205212132 = stakeUnstakeAcresInternal(-(amount), address, 0)
492- let actions = $t01205212132._1
493- let wlgClaimedAmount = $t01205212132._2
491+ let $t01109611176 = stakeUnstakeAcresInternal(-(amount), address, 0)
492+ let actions = $t01109611176._1
493+ let wlgClaimedAmount = $t01109611176._2
494494 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
495495 }
496496 }
497497 }
498498 }
499499
500500
501501
502502 @Callable(i)
503503 func stakeAcres () = {
504504 let prologActions = prolog(i)
505505 let address = toString(i.caller)
506506 if ((size(i.payments) != 1))
507507 then throw("exactly 1 payment must be attached")
508508 else {
509509 let pmt = i.payments[0]
510510 let amt = pmt.amount
511511 if (if (!(isDefined(pmt.assetId)))
512512 then true
513513 else (value(pmt.assetId) != acresAssetId))
514514 then throw("ACRES payments only!")
515515 else {
516- let $t01258312659 = stakeUnstakeAcresInternal(amt, address, 0)
517- let actions = $t01258312659._1
518- let wlgClaimedAmount = $t01258312659._2
516+ let $t01162711703 = stakeUnstakeAcresInternal(amt, address, 0)
517+ let actions = $t01162711703._1
518+ let wlgClaimedAmount = $t01162711703._2
519519 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
520520 }
521521 }
522522 }
523523
524524
525525
526526 @Callable(i)
527527 func buyAcres () = {
528528 let prologActions = prolog(i)
529529 if ((size(i.payments) != 1))
530530 then throw("exactly 1 payment must be attached")
531531 else {
532532 let pmt = i.payments[0]
533533 let usdtAmount = pmt.amount
534534 if (if (!(isDefined(pmt.assetId)))
535535 then true
536536 else (value(pmt.assetId) != usdtAssetId))
537537 then throw("USDT payments only!")
538538 else if ((MULT6 > usdtAmount))
539539 then throw((("Min payment should be " + fixedPoint(MULT6, 6)) + " USDT"))
540540 else {
541541 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
542542 let wlgAmount = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
543543 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
544544 let req = invoke(oldAcresAddress, "requestAcresCallback", [acresAmount], nil)
545545 if ((req == req))
546546 then {
547547 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [wlgAmount], nil))
548548 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
549549 }
550550 else throw("Strict value is not equal to itself.")
551551 }
552552 }
553553 }
554554
555555
556556
557557 @Callable(i)
558558 func buyAcresREADONLY (usdtAmount) = {
559559 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
560560 let wlgToBurn = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
561561 $Tuple2(nil, [acresAmount, MULT6, acresAmount, wlgToBurn])
562562 }
563563
564564
565565
566566 @Callable(i)
567567 func sellAcres () = {
568568 let prologActions = prolog(i)
569569 if ((size(i.payments) != 1))
570570 then throw("exactly 1 payment must be attached")
571571 else {
572572 let pmt = i.payments[0]
573573 let acresAmount = pmt.amount
574574 if (if (!(isDefined(pmt.assetId)))
575575 then true
576576 else (value(pmt.assetId) != acresAssetId))
577577 then throw("ACRES payments only!")
578578 else if ((MULT7 > acresAmount))
579579 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
580580 else {
581581 let addr = toString(i.caller)
582- let $t01451614564 = getSwapLimitAcres()
583- let limitAction = $t01451614564._1
584- let maxUsdt = $t01451614564._2
582+ let $t01356013608 = getSwapLimitAcres()
583+ let limitAction = $t01356013608._1
584+ let maxUsdt = $t01356013608._2
585585 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
586586 if ((acresAmount > maxAcres))
587587 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
588588 else {
589589 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
590590 $Tuple2(([limitAction, IntegerEntry(keyLastLimitLeft, (maxUsdt - usdtAmount)), ScriptTransfer(i.caller, usdtAmount, usdtAssetId)] ++ prologActions), usdtAmount)
591591 }
592592 }
593593 }
594594 }
595595
596596
597597
598598 @Callable(i)
599599 func sellAcresREADONLY (address,acresAmount) = {
600- let $t01506015108 = getSwapLimitAcres()
601- let limitAction = $t01506015108._1
602- let maxUsdt = $t01506015108._2
600+ let $t01410414152 = getSwapLimitAcres()
601+ let limitAction = $t01410414152._1
602+ let maxUsdt = $t01410414152._2
603603 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
604604 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
605605 }
606606
607607
608608
609609 @Callable(i)
610610 func convertOldStakes () = if ((i.caller != this))
611611 then throw("Temporarily disabled")
612612 else {
613613 let address = toString(i.caller)
614614 if ((size(i.payments) != 0))
615615 then throw("No payments required")
616616 else {
617617 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
618618 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
619619 let gotAcres0 = if ((amount > 0))
620620 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
621621 else $Tuple2(0, 0)
622622 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
623623 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
624624 let landsResult = if (isDefined(landsStr))
625625 then {
626626 let lands = split_51C(value(landsStr), "_")
627627 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
628628 then throw("landAssetId is required")
629629 else {
630630 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
631631 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
632632 }
633633
634634 let rr = {
635635 let $l = lands
636636 let $s = size($l)
637637 let $acc0 = $Tuple4(0, 0, 0, 0)
638638 func $f0_1 ($a,$i) = if (($i >= $s))
639639 then $a
640640 else oneLand($a, $l[$i])
641641
642642 func $f0_2 ($a,$i) = if (($i >= $s))
643643 then $a
644644 else throw("List size exceeds 100")
645645
646646 $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($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), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
647647 }
648648 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
649649 if ((finalize == finalize))
650650 then {
651651 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
652652 if ((req == req))
653653 then {
654- let $t01697717057 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
655- let nftActions = $t01697717057._1
656- let nftAssetId = $t01697717057._2
654+ let $t01602116101 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
655+ let nftActions = $t01602116101._1
656+ let nftAssetId = $t01602116101._2
657657 $Tuple5(rr._1, rr._2, rr._3, rr._4, nftActions)
658658 }
659659 else throw("Strict value is not equal to itself.")
660660 }
661661 else throw("Strict value is not equal to itself.")
662662 }
663663 else $Tuple5(0, 0, 0, 0, nil)
664664 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
665665 let duckResult = if ((duckAssetId != ""))
666666 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
667667 else $Tuple3(0, 0, 0)
668668 let x = stakeUnstakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address, 0)
669669 $Tuple2((landsResult._5 ++ x._1), x._2)
670670 }
671671 }
672672
673673
674674
675675 @Callable(i)
676676 func unstakeLandsREADONLY (address) = {
677677 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
678678 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
679679 let landsResult = if (isDefined(landsStr))
680680 then {
681681 let lands = split_51C(value(landsStr), "_")
682682 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
683683 then throw("landAssetId is required")
684684 else {
685685 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
686686 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
687687 }
688688
689689 let $l = lands
690690 let $s = size($l)
691691 let $acc0 = $Tuple4(0, 0, 0, 0)
692692 func $f0_1 ($a,$i) = if (($i >= $s))
693693 then $a
694694 else oneLand($a, $l[$i])
695695
696696 func $f0_2 ($a,$i) = if (($i >= $s))
697697 then $a
698698 else throw("List size exceeds 100")
699699
700700 $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($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), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
701701 }
702702 else $Tuple4(0, 0, 0, 0)
703703 $Tuple2(nil, landsResult)
704704 }
705705
706706
707707
708708 @Callable(i)
709709 func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
710710 then throw("Permission denied")
711711 else stakeUnstakeAcresInternal(i.payments[0].amount, addr, 0)
712712
713713
714714
715715 @Callable(i)
716716 func simulateStakeAcresREADONLY (address,addedAmount) = {
717717 let amountKey = keyAcresStakedAmtByUser(address)
718718 let newAcresAmount = (valueOrElse(getInteger(amountKey), 0) + addedAmount)
719719 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
720720 let userFpKey = keyFarmingPowerByUser(address)
721721 let oldFp = valueOrElse(getInteger(userFpKey), 0)
722722 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(address)), 0)
723- let $t01922219309 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
724- let newBonusedFp = $t01922219309._1
725- let ignored = $t01922219309._2
723+ let $t01826618353 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
724+ let newBonusedFp = $t01826618353._1
725+ let ignored = $t01826618353._2
726726 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
727727 let newTotalFp = ((oldTotalFp + newBonusedFp) - oldFp)
728728 $Tuple2(nil, [oldFp, newBonusedFp, oldTotalFp, newTotalFp])
729729 }
730730
731731
732732
733733 @Callable(i)
734734 func issueNFT (forAddress,nftIndex) = if ((i.caller != wlgContract))
735735 then throw("Permission denied")
736736 else issueNFTinternal(nftIndex, addressFromStringValue(forAddress))
737+
738+
739+
740+@Callable(i)
741+func issueNftAdmin (forAddress,nftIndex,serial) = if ((i.caller != this))
742+ then throw("Permission denied")
743+ else if ((nftIndex >= size(contentKeys)))
744+ then throw("nftIndex out of bounds")
745+ else {
746+ let issue = Issue(nftNames[nftIndex], createNftDescription(nftIndex, toString(serial)), 1, 0, false)
747+ let nftAssetId = calculateAssetId(issue)
748+ $Tuple2([issue, IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), serial), ScriptTransfer(addressFromStringValue(forAddress), 1, nftAssetId)], nftAssetId)
749+ }
737750
738751
739752
740753 @Callable(i)
741754 func stakeNFT () = {
742755 let prologActions = prolog(i)
743756 if ((size(i.payments) != 1))
744757 then throw("Exactly one payment required")
745758 else {
746759 let pmt = value(i.payments[0])
747760 if ((pmt.amount != 1))
748761 then throw("NFT token should be attached as payment")
749762 else {
750763 let assetId = value(pmt.assetId)
751764 let asset = value(assetInfo(assetId))
752765 let assetIdStr = toBase58String(assetId)
753766 let addr = toString(i.caller)
754767 let nftsKey = keyStakedNFTsByOwner(addr)
755768 let nftsStr = getString(nftsKey)
756769 let nfts = if (isDefined(nftsStr))
757770 then split_4C(value(nftsStr), "_")
758771 else nil
759772 if (containsElement(nfts, assetIdStr))
760773 then throw(("Your staked NFTs already contain " + assetIdStr))
761774 else if ((size(nfts) >= MAX_NFTS_STAKED_BY_USER))
762775 then throw((("Your already staked max (" + toString(MAX_NFTS_STAKED_BY_USER)) + ") NFTs"))
763776 else {
764777 let listAction = StringEntry(nftsKey, makeString_2C((nfts :+ assetIdStr), "_"))
765778 if ((asset.issuer == this))
766779 then {
767- let $t02072620916 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
768- let actions = $t02072620916._1
769- let wlgClaimedAmount = $t02072620916._2
780+ let $t02032220512 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
781+ let actions = $t02032220512._1
782+ let wlgClaimedAmount = $t02032220512._2
770783 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
771784 }
772785 else if ((isArkimalIssued(asset) == ""))
773786 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
774787 else {
775- let $t02109721248 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
776- let actions = $t02109721248._1
777- let wlgClaimedAmount = $t02109721248._2
788+ let $t02069320844 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
789+ let actions = $t02069320844._1
790+ let wlgClaimedAmount = $t02069320844._2
778791 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
779792 }
780793 }
781794 }
782795 }
783796 }
784797
785798
786799
787800 @Callable(i)
788801 func unstakeNFT (assetIdStr) = {
789802 let prologActions = prolog(i)
790803 if ((size(i.payments) != 0))
791804 then throw("No payments required")
792805 else {
793806 let assetId = fromBase58String(assetIdStr)
794807 let addr = toString(i.caller)
795808 let asset = value(assetInfo(assetId))
796809 let timeKey = keyStakedTimeByAssetIdAndOwner(assetIdStr, addr)
797810 if (!(isDefined(getInteger(timeKey))))
798811 then throw((("NFT " + asset.name) + " is not staked by you"))
799812 else {
800813 let nftsKey = keyStakedNFTsByOwner(addr)
801814 let nfts = split_4C(valueOrElse(getString(nftsKey), ""), "_")
802815 let idx = indexOf(nfts, assetIdStr)
803816 if (!(isDefined(idx)))
804817 then throw(("Your staked NFTs don't contain " + assetIdStr))
805818 else {
806819 let listAction = if ((size(nfts) > 1))
807820 then StringEntry(nftsKey, makeString_2C(removeByIndex(nfts, value(idx)), "_"))
808821 else DeleteEntry(nftsKey)
809822 let isWL = (asset.issuer == this)
810823 if (isWL)
811824 then {
812825 let wlNftNumber = valueOrElse(getInteger(keyUserWlNftNumber(addr)), 0)
813826 let bonusVal = (bonusByDescription(value(asset.description)) * 10000)
814- let $t02241322492 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
815- let actions = $t02241322492._1
816- let wlgClaimedAmount = $t02241322492._2
827+ let $t02200922088 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
828+ let actions = $t02200922088._1
829+ let wlgClaimedAmount = $t02200922088._2
817830 $Tuple2(((((((actions :+ listAction) :+ IntegerEntry(keyUserWlNftNumber(addr), (wlNftNumber - 1))) :+ IntegerEntry(keyWlNftTotalStaked, max([0, (valueOrElse(getInteger(keyWlNftTotalStaked), 0) - 1)]))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
818831 }
819832 else {
820833 let arkimalName = isArkimalIssued(asset)
821834 if ((arkimalName == ""))
822835 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
823836 else {
824837 let arkNftNumber = valueOrElse(getInteger(keyUserArkNftNumber(addr)), 0)
825- let $t02315223236 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
826- let actions = $t02315223236._1
827- let wlgClaimedAmount = $t02315223236._2
838+ let $t02274822832 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
839+ let actions = $t02274822832._1
840+ let wlgClaimedAmount = $t02274822832._2
828841 $Tuple2((((((actions :+ listAction) :+ IntegerEntry(keyUserArkNftNumber(addr), (arkNftNumber - 1))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
829842 }
830843 }
831844 }
832845 }
833846 }
834847 }
835848
836849
837850
838851 @Callable(i)
839852 func exchangeNFTs () = {
840853 let prologActions = prolog(i)
841854 if ((3 > size(i.payments)))
842855 then throw("Min one USDT and 2 NFT payments allowed")
843856 else if ((size(i.payments) > 6))
844857 then throw("Max one USDT and 5 NFT payments allowed")
845858 else {
846859 let addr = toString(i.caller)
847860 func addUp (acc,pmt) = {
848861 let assetId = valueOrErrorMessage(pmt.assetId, "WAVES payments not allowed")
849862 if ((assetId == usdtAssetId))
850863 then $Tuple3((acc._1 + pmt.amount), acc._2, acc._3)
851864 else {
852865 let asset = value(assetInfo(assetId))
853866 if ((asset.issuer != this))
854867 then throw("Only WL-issued NFTs allowed")
855868 else {
856869 let bonusPerc = bonusByDescription(value(asset.description))
857870 $Tuple3(acc._1, (acc._2 + bonusPerc), (acc._3 :+ Burn(assetId, 1)))
858871 }
859872 }
860873 }
861874
862- let $t02438424463 = {
875+ let $t02398024059 = {
863876 let $l = i.payments
864877 let $s = size($l)
865878 let $acc0 = $Tuple3(0, 0, nil)
866879 func $f0_1 ($a,$i) = if (($i >= $s))
867880 then $a
868881 else addUp($a, $l[$i])
869882
870883 func $f0_2 ($a,$i) = if (($i >= $s))
871884 then $a
872885 else throw("List size exceeds 6")
873886
874887 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
875888 }
876- let usdtFee = $t02438424463._1
877- let totalBonus = $t02438424463._2
878- let burnActions = $t02438424463._3
889+ let usdtFee = $t02398024059._1
890+ let totalBonus = $t02398024059._2
891+ let burnActions = $t02398024059._3
879892 let nftIndex = if ((totalBonus == 3))
880893 then 2
881894 else if ((totalBonus == 5))
882895 then 3
883896 else if ((totalBonus == 10))
884897 then 4
885898 else throw("Only bonuses of 3%, 5% or 10% are supported")
886899 let change = (usdtFee - (totalBonus * MULT6))
887900 if ((0 > change))
888901 then throw((("You need to attach " + toString(totalBonus)) + " USDT as fee"))
889902 else {
890903 let changeActions = if ((change > 0))
891904 then [ScriptTransfer(i.caller, change, usdtAssetId)]
892905 else nil
893- let $t02492024992 = issueNFTinternal(nftIndex, i.caller)
894- let issueNftActions = $t02492024992._1
895- let nftAssetId = $t02492024992._2
906+ let $t02451624588 = issueNFTinternal(nftIndex, i.caller)
907+ let issueNftActions = $t02451624588._1
908+ let nftAssetId = $t02451624588._2
896909 let burned = size(burnActions)
897910 let burnCounterActions = if ((burned == 0))
898911 then nil
899912 else [IntegerEntry(keyNftTotalBurned, (valueOrElse(getInteger(keyNftTotalBurned), 0) + burned))]
900913 $Tuple2(((((issueNftActions ++ burnActions) ++ burnCounterActions) ++ prologActions) ++ changeActions), nftAssetId)
901914 }
902915 }
903916 }
904917
905918

github/deemru/w8io/169f3d6 
105.48 ms