tx · 4BorXrQigpr2mEAdonQaT3jFhfTJBR3VmFD4XScAReXp

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01600000 Waves

2023.02.03 06:57 [2432928] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "4BorXrQigpr2mEAdonQaT3jFhfTJBR3VmFD4XScAReXp", "fee": 1600000, "feeAssetId": null, "timestamp": 1675395533861, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "4cGzkApbX7BsfoB6Nckcz8FFATiA3aa5gpj7X8Fm7qh6sbnW1q9ti1b4dFAvCqT75jxiuPXbaBZBka9ByYi3agBZ" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgIOgAHVkVSU0lPTgIFMS4xLjUBCWdldFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl9vcmFjbGVfZmVlAAhzaWduRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIRY29uZl9zaWdud2ViX2RhcHAAC2ZlZVJlY2VpdmVyCQEJZ2V0U3RyQnlLAQIRY29uZl9mZWVfcmVjZWl2ZXIADGFydHdvcmtzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX3VzZXJzX2RhcHAADXdoaXRlbGlzdERhcHAJAQV2YWx1ZQEJAKYIAQkBCWdldFN0ckJ5SwECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEAAphcnRJbGxlZ2FsAgdJTExFR0FMAAxhcnRTdXNwZW5kZWQCCVNVU1BFTkRFRAAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAJbnVtU2FsZXNLAgludW1fc2FsZXMBDWdldFVzZXJTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAUDa2V5AgVFcnJvcgETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDGFydHdvcmtzRGFwcAUDa2V5AOgHAQxnZXRBcnRTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQxhcnR3b3Jrc0RhcHAFA2tleQIAAQlnZXRJbnRCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAENa2V5VXNlclN0YXR1cwEEYWRkcgkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBE2tleUFydHdvcmtSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIKYXJ0aXN0QWRkcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQphcnRpc3RBZGRyAQdrZXlGbGFnAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQphcnRpc3RBZGRyAQprZXlORlREYXRhAQJpZAkArAICAgRuZnRfBQJpZAEKZ2V0U2FsZUtleQQGY2FsbGVyBW5mdElkBWFydElkC2NyZWF0b3JBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXNhbGUybmRfaW5mb18FBmNhbGxlcgIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyBW5mdElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUFbmZ0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARNnZXRJbnRCeUtGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARZrZXlTZWNvbmRhcnlTaGFyZUFnZW50AQphcnRpc3RBZGRyCQCsAgICF2FydGlzdF9hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgIUYXJ0aXN0X3B1YmxpY19hZ2VudF8FCmFydGlzdEFkZHIBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBCmFydGlzdEFkZHIJAKwCAgIeYXJ0aXN0X3B1YmxpY19hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBDGFzc2V0SXNWYWxpZAEMYXNzZXREZXRhaWxzAwMDCQAAAggFDGFzc2V0RGV0YWlscwhxdWFudGl0eQABCQAAAggFDGFzc2V0RGV0YWlscwhkZWNpbWFscwAABwkAAAIIBQxhc3NldERldGFpbHMKcmVpc3N1YWJsZQcHCQAAAggFDGFzc2V0RGV0YWlscwZpc3N1ZXIFDGFydHdvcmtzRGFwcAcBDGlzU2lnbkFydE5GVAECaWQEDGFzc2V0RGV0YWlscwkBBXZhbHVlAQkA7AcBBQJpZAkBDGFzc2V0SXNWYWxpZAEFDGFzc2V0RGV0YWlscwEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMDAwMDCQECIT0CBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQECIT0CBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQCBVdBVkVTBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQHBwYBDWdldEJpZEFzc2V0SWQBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQVuZnRpZAQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRpZAMJAAACCQCxAgEFCXNhbGVPd25lcgAACQACAQINTkZUIG5vdCBmb3VuZAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRpZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAhBORlQgbm90IGZvciBzYWxlBQlzYWxlT3duZXIBCmdldEJpZERhdGEBA2tleQQHYmlkRGF0YQkBCWdldFN0ckJ5SwEJAKwCAgUDa2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg9PZmZlciBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAgkAlQoDBQpiaWREYXRhQXJyBQdhc3NldElkBQdiaWREYXRhAQphcnRJc1ZhbGlkAQlhcnRTdGF0dXMDCQECIT0CBQlhcnRTdGF0dXMFCmFydElsbGVnYWwJAQIhPQIFCWFydFN0YXR1cwUMYXJ0U3VzcGVuZGVkBwEOY2hlY2tBcnRTdGF0dXMCBGFkZHICaWQECWFydFN0YXR1cwkBDGdldEFydFN0ckJ5SwEJAQdrZXlGbGFnAgUEYWRkcgUCaWQDCQEKYXJ0SXNWYWxpZAEFCWFydFN0YXR1cwYJAAIBCQCsAgICHE9yaWdpbmFsIEFydHdvcmsgZmxhZ2dlZCBhcyAFCWFydFN0YXR1cwERY2hlY2tBcnRpc3RTdGF0dXMBBGFkZHIEDGFydGlzdFN0YXR1cwkBDWdldFVzZXJTdHJCeUsBCQENa2V5VXNlclN0YXR1cwEFBGFkZHIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQ11c2VyU3VzcGVuZGVkCQDMCAIFC3VzZXJSZW1vdmVkBQNuaWwFDGFydGlzdFN0YXR1cwkAAgEJAKwCAgIQT3JpZ2luYWwgQXJ0aXN0IAUMYXJ0aXN0U3RhdHVzBgEMY2hlY2tORlRJbmZvAQdhc3NldElkBAduZnREYXRhCQC1CQIJAQxnZXRBcnRTdHJCeUsBCQEKa2V5TkZURGF0YQEFB2Fzc2V0SWQCAV8ECWFydFNpZ25JRAkBDGdldEFydFN0ckJ5SwEJAQlrZXlTaWduSUQCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUDAwkBASEBCQEOY2hlY2tBcnRTdGF0dXMCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUJAQEhAQkBEWNoZWNrQXJ0aXN0U3RhdHVzAQkAkQMCBQduZnREYXRhAAYHCQCWCgQHCQCRAwIFB25mdERhdGEABQkAkQMCBQduZnREYXRhAAYFCWFydFNpZ25JRAkAlgoEBgkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQBDWNoZWNrQVJURXhpc3QCBWFydElkC2NyZWF0b3JBZGRyBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgULY3JlYXRvckFkZHIFBWFydElkAwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMDCQEBIQEJAQ5jaGVja0FydFN0YXR1cwIFC2NyZWF0b3JBZGRyBQVhcnRJZAkBASEBCQERY2hlY2tBcnRpc3RTdGF0dXMBBQtjcmVhdG9yQWRkcgcHBgEMc2V0VHJhbnNmZXJzBwZhbW91bnQHYXNzZXRJZAVuZnRpZAtjcmVhdG9yQWRkcglzYWxlT3duZXIGY2FsbGVyBWFydElkBApjcmVhdG9yQ3V0CQETZ2V0QXJ0d29ya1JveWFsdGllcwEJARNrZXlBcnR3b3JrUm95YWx0aWVzAgULY3JlYXRvckFkZHIFBWFydElkBAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQtjcmVhdG9yQWRkcgAABAtwdWJsaWNBZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQQcHVibGljQWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBBQtjcmVhdG9yQWRkcgAABA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEGFtb3VudEZvckNyZWF0b3IJAGsDBQZhbW91bnQFCmNyZWF0b3JDdXQAkE4EDmFtb3VudEZvck93bmVyCQBlAgUGYW1vdW50CQBkAgUNYW1vdW50Rm9yU2lnbgUQYW1vdW50Rm9yQ3JlYXRvcgQOYW1vdW50Rm9yQWdlbnQDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQBkAAAEFGFtb3VudEZvclB1YmxpY0FnZW50AwMJAQIhPQIFC3B1YmxpY0FnZW50BQtmZWVSZWNlaXZlcgkAZgIFEHB1YmxpY0FnZW50U2hhcmUAAAcJAGsDBQZhbW91bnQFEHB1YmxpY0FnZW50U2hhcmUAZAAABAtjb21taXNzaW9ucwMJAQIhPQIFDmFtb3VudEZvckFnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyCQBlAgUNYW1vdW50Rm9yU2lnbgUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBWFnZW50BQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsBApjcmVhdG9yRmVlAwkBAiE9AgUUYW1vdW50Rm9yUHVibGljQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULcHVibGljQWdlbnQFFGFtb3VudEZvclB1YmxpY0FnZW50BQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtjcmVhdG9yQWRkcgkAZQIFEGFtb3VudEZvckNyZWF0b3IFFGFtb3VudEZvclB1YmxpY0FnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2NyZWF0b3JBZGRyBRBhbW91bnRGb3JDcmVhdG9yBQdhc3NldElkBQNuaWwECG93bmVyRmVlCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUJc2FsZU93bmVyBQ5hbW91bnRGb3JPd25lcgUHYXNzZXRJZAQMY29sbGVjdG9yTkZUCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEJANkEAQUFbmZ0aWQJAJYKBAULY29tbWlzc2lvbnMFCmNyZWF0b3JGZWUFCG93bmVyRmVlBQxjb2xsZWN0b3JORlQBD3ZhbGlkYXRlTWluU2VsbAIHYXNzZXRJZAVwcmljZQQMbWluU2VsbFdhdmVzAwUIdW5pdFRlc3QACgkBE2dldEludEJ5S0Zyb21PcmFjbGUBAg53YXZlc19taW5fc2VsbAQLbWluU2VsbFVzZG4AwIQ9BAttaW5TZWxsU2lnbgMFCHVuaXRUZXN0AAEJAGgCBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlAAIDAwMDAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZG5Bc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQBmAgULbWluU2VsbFNpZ24FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQGCQAAAgUHYXNzZXRJZAIFV0FWRVMJAGYCBQxtaW5TZWxsV2F2ZXMFBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcHBgEPcHJvdmlkZUJhc2VEYXRhAgFpBW5mdElkBA0kdDAxMDY3MzEwNzEzCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMDY3MzEwNzEzAl8xBAZjYWxsZXIIBQ0kdDAxMDY3MzEwNzEzAl8yBARkYXRlCAUNJHQwMTA2NzMxMDcxMwJfMwQNJHQwMTA3MTYxMDc4NQkBDGNoZWNrTkZUSW5mbwEFBW5mdElkBAppc1ZhbGlkTkZUCAUNJHQwMTA3MTYxMDc4NQJfMQQFYXJ0SWQIBQ0kdDAxMDcxNjEwNzg1Al8yBAtjcmVhdG9yQWRkcggFDSR0MDEwNzE2MTA3ODUCXzMECWFydFNpZ25JRAgFDSR0MDEwNzE2MTA3ODUCXzQJAJkKBwUCaWQFBmNhbGxlcgUEZGF0ZQUKaXNWYWxpZE5GVAUFYXJ0SWQFC2NyZWF0b3JBZGRyBQlhcnRTaWduSUQBDnVwZGF0ZU51bVNhbGVzAAQIbnVtU2FsZXMJAQlnZXRJbnRCeUsBBQludW1TYWxlc0sJAQxJbnRlZ2VyRW50cnkCBQludW1TYWxlc0sJAGQCBQhudW1TYWxlcwABCQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlAQphcHBSdW5uaW5nAgZpc0xpdmUHbWVzc2FnZQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyBAJpZAkA2AQBCAUGaW52b2tlDXRyYW5zYWN0aW9uSWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5kYXBwUnVubmluZ0tleQUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW50ZW5hbmNlTVNHS2V5BQdtZXNzYWdlBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAWkBB3NlbGxORlQCBXByaWNlBWFzc2V0BA0kdDAxMTg1MDExODg2CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDExODUwMTE4ODYCXzEEBmFtb3VudAgFDSR0MDExODUwMTE4ODYCXzIDCQECIT0CBQZhbW91bnQAAQkAAgECD05vIE5GVCBhdHRhY2hlZAQFbmZ0SWQDAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAQxpc1NpZ25BcnRORlQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQACAQIbT25seSBTSUdOIEFydCBORlQgYWNjZXB0ZWQuBA0kdDAxMjEyMDEyMjEzCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTIxMjAxMjIxMwJfMQQGY2FsbGVyCAUNJHQwMTIxMjAxMjIxMwJfMgQEZGF0ZQgFDSR0MDEyMTIwMTIyMTMCXzMECmlzVmFsaWRORlQIBQ0kdDAxMjEyMDEyMjEzAl80BAVhcnRJZAgFDSR0MDEyMTIwMTIyMTMCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTIxMjAxMjIxMwJfNgQJYXJ0U2lnbklECAUNJHQwMTIxMjAxMjIxMwJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIdQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUFYXNzZXQJAAIBAidPbmx5IFNJR04sIFVTRE4sIFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQVhc3NldAUFcHJpY2UJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUEZGF0ZQIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8FBW5mdElkAgFfBQVhcnRJZAIBXwULY3JlYXRvckFkZHICAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAIET1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkBQZjYWxsZXIFA25pbAFpAQ91cGRhdGVTYWxlUHJpY2UDBW5mdElkBXByaWNlBWFzc2V0BA0kdDAxMzA5MzEzMTg2CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTMwOTMxMzE4NgJfMQQGY2FsbGVyCAUNJHQwMTMwOTMxMzE4NgJfMgQEZGF0ZQgFDSR0MDEzMDkzMTMxODYCXzMECmlzVmFsaWRORlQIBQ0kdDAxMzA5MzEzMTg2Al80BAVhcnRJZAgFDSR0MDEzMDkzMTMxODYCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTMwOTMxMzE4NgJfNgQJYXJ0U2lnbklECAUNJHQwMTMwOTMxMzE4NgJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECJ09ubHkgU0lHTiwgVVNETiwgVVNEVCBvciBXQVZFUyBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFBWFzc2V0BQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQC1CQIJAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOAgFfCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2FsZUtleQIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUIc2FsZUluZm8AAAIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8JAJEDAgUIc2FsZUluZm8AAwIBXwkAkQMCBQhzYWxlSW5mbwAEAgFfCQCRAwIFCHNhbGVJbmZvAAUCAV8JAJEDAgUIc2FsZUluZm8ABgUDbmlsAWkBCmNhbmNlbFNhbGUBBW5mdElkBA0kdDAxNDMzNDE0NTc1CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTQzMzQxNDU3NQJfMQQGY2FsbGVyCAUNJHQwMTQzMzQxNDU3NQJfMgQEZGF0ZQgFDSR0MDE0MzM0MTQ1NzUCXzMECmlzVmFsaWRORlQIBQ0kdDAxNDMzNDE0NTc1Al80BAVhcnRJZAgFDSR0MDE0MzM0MTQ1NzUCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTQzMzQxNDU3NQJfNgQJYXJ0U2lnbklECAUNJHQwMTQzMzQxNDU3NQJfNwQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAMJAQIhPQIFCXNhbGVPd25lcgUGY2FsbGVyCQACAQIWWW91IGRvbid0IG93biB0aGlzIE5GVAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAg9TYWxlIG5vdCBhY3RpdmUEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIKX0NBTkNFTExFRAkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgABCQDZBAEFBW5mdElkBQNuaWwBaQEGYnV5TkZUAQVuZnRJZAQNJHQwMTU0MDYxNTQ5OQkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE1NDA2MTU0OTkCXzEEBmNhbGxlcggFDSR0MDE1NDA2MTU0OTkCXzIEBGRhdGUIBQ0kdDAxNTQwNjE1NDk5Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTU0MDYxNTQ5OQJfNAQFYXJ0SWQIBQ0kdDAxNTQwNjE1NDk5Al81BAtjcmVhdG9yQWRkcggFDSR0MDE1NDA2MTU0OTkCXzYECWFydFNpZ25JRAgFDSR0MDE1NDA2MTU0OTkCXzcDCQAAAgkAsQIBBQlhcnRTaWduSUQAAAkAAgECMEFydHdvcmsgbm90IGZvdW5kIG9uIFNJR04gQXJ0LCBjYW5jZWwgeW91ciBzYWxlLgMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUJc2FsZU93bmVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4DCQAAAgkAsQIBBQhzYWxlSW5mbwAACQACAQIPU2FsZSBOb3QgZm91bmQhBA1zYWxlSW5mb0FycmF5CQC1CQIFCHNhbGVJbmZvAgFfAwkAAAIJALYJAQkAkQMCBQ1zYWxlSW5mb0FycmF5AAEAAAkAAgECCk9mZmVyIG9ubHkEDSR0MDE1OTk2MTYwMzIJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTU5OTYxNjAzMgJfMQQGYW1vdW50CAUNJHQwMTU5OTYxNjAzMgJfMgQPcGF5bWVudEFzc2V0U3RyAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAIAAwMJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQABCQCkAwEFBmFtb3VudAYJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQACBQ9wYXltZW50QXNzZXRTdHIJAAIBAhpQYXltZW50IGluZm9zIGRvbid0IG1hdGNoLgQNJHQwMTY1MzgxNjY3NwkBDHNldFRyYW5zZmVycwcFBmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIFBmNhbGxlcgUFYXJ0SWQEC2NvbW1pc3Npb25zCAUNJHQwMTY1MzgxNjY3NwJfMQQKY3JlYXRvckZlZQgFDSR0MDE2NTM4MTY2NzcCXzIECG93bmVyRmVlCAUNJHQwMTY1MzgxNjY3NwJfMwQMY29sbGVjdG9yTkZUCAUNJHQwMTY1MzgxNjY3NwJfNAkAzggCCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUIc2FsZUluZm8CCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkAgFfBQZjYWxsZXIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQhvd25lckZlZQkAzAgCBQxjb2xsZWN0b3JORlQFA25pbAUKY3JlYXRvckZlZQULY29tbWlzc2lvbnMBaQEIc2V0T2ZmZXIBBW5mdElkBA0kdDAxNzA4ODE3MTg1CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTcwODgxNzE4NQJfMQQKb2ZmZXJPd25lcggFDSR0MDE3MDg4MTcxODUCXzIEBGRhdGUIBQ0kdDAxNzA4ODE3MTg1Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTcwODgxNzE4NQJfNAQFYXJ0SWQIBQ0kdDAxNzA4ODE3MTg1Al81BAtjcmVhdG9yQWRkcggFDSR0MDE3MDg4MTcxODUCXzYECWFydFNpZ25JRAgFDSR0MDE3MDg4MTcxODUCXzcDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQEDSR0MDE3MjQ2MTcyODIJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTcyNDYxNzI4MgJfMQQGYW1vdW50CAUNJHQwMTcyNDYxNzI4MgJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECEmFzc2V0IG5vdCBhY2NlcHRlZAMJAAACBQZhbW91bnQAAAkAAgECFk9mZmVyIG9mIDAgbm90IGFsbG93ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQdhc3NldElkBQZhbW91bnQJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UECXNhbGVPd25lcgkBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCWdldEJpZEtleQQFCm9mZmVyT3duZXIFBW5mdElkBQlzYWxlT3duZXIFAmlkAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUEZGF0ZQIBXwkApAMBBQZhbW91bnQCAV8FB2Fzc2V0SWQCAV8FBW5mdElkAgFfBQVhcnRJZAIBXwULY3JlYXRvckFkZHICAV8FCm9mZmVyT3duZXICAV8FAmlkBQNuaWwBaQELYWNjZXB0T2ZmZXIDBW5mdElkB29mZmVySWQKb2ZmZXJPd25lcgQNJHQwMTgwODQxODE3NwkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE4MDg0MTgxNzcCXzEEBmNhbGxlcggFDSR0MDE4MDg0MTgxNzcCXzIEBGRhdGUIBQ0kdDAxODA4NDE4MTc3Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTgwODQxODE3NwJfNAQFYXJ0SWQIBQ0kdDAxODA4NDE4MTc3Al81BAtjcmVhdG9yQWRkcggFDSR0MDE4MDg0MTgxNzcCXzYECWFydFNpZ25JRAgFDSR0MDE4MDg0MTgxNzcCXzcDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQECXNhbGVPd25lcgkBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFBW5mdElkAwkBAiE9AgUGY2FsbGVyBQlzYWxlT3duZXIJAAIBAiBPbmx5IHNhbGUgb3duZXIgY2FuIGFjY2VwdCBvZmZlcgQGYmlkS2V5CQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUHb2ZmZXJJZAQNJHQwMTg0MzExODQ4NgkBCmdldEJpZERhdGEBBQZiaWRLZXkECmJpZERhdGFBcnIIBQ0kdDAxODQzMTE4NDg2Al8xBAdhc3NldElkCAUNJHQwMTg0MzExODQ4NgJfMgQHYmlkRGF0YQgFDSR0MDE4NDMxMTg0ODYCXzMEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUJc2FsZU93bmVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4DCQAAAgkAsQIBBQhzYWxlSW5mbwAACQACAQIPU2FsZSBOb3QgZm91bmQhBAZhbW91bnQJAQV2YWx1ZQEJALYJAQkAkQMCBQpiaWREYXRhQXJyAAEEDSR0MDE4NzIyMTg4NjAJAQxzZXRUcmFuc2ZlcnMHBQZhbW91bnQFB2Fzc2V0SWQFBW5mdElkBQtjcmVhdG9yQWRkcgUJc2FsZU93bmVyCQCRAwIFCmJpZERhdGFBcnIABgUFYXJ0SWQEC2NvbW1pc3Npb25zCAUNJHQwMTg3MjIxODg2MAJfMQQKY3JlYXRvckZlZQgFDSR0MDE4NzIyMTg4NjACXzIECG93bmVyRmVlCAUNJHQwMTg3MjIxODg2MAJfMwQMY29sbGVjdG9yTkZUCAUNJHQwMTg3MjIxODg2MAJfNAQKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBBQdhc3NldElkCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQCBVdBVkVTCQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGYmlkS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmJpZEtleQIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICBQdiaWREYXRhAghfQ0xPU0VEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIOX0NMT1NFRC1PRkZFUl8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FCm9mZmVyT3duZXICAV8JAKQDAQUGYW1vdW50AgFfBQphc3NldElkU3RyCQDMCAIJAQ51cGRhdGVOdW1TYWxlcwAJAMwIAgUIb3duZXJGZWUJAMwIAgUMY29sbGVjdG9yTkZUBQNuaWwFCmNyZWF0b3JGZWUFC2NvbW1pc3Npb25zAWkBC2NhbmNlbE9mZmVyBAVuZnRJZAdvZmZlcklkCm9mZmVyT3duZXIJc2FsZU93bmVyBA0kdDAxOTY2MDE5NzM0CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxOTY2MDE5NzM0Al8xBAZjYWxsZXIIBQ0kdDAxOTY2MDE5NzM0Al8yBARkYXRlCAUNJHQwMTk2NjAxOTczNAJfMwMDCQECIT0CBQZjYWxsZXIFCm9mZmVyT3duZXIJAQIhPQIFBmNhbGxlcgUJc2FsZU93bmVyBwkAAgECHVlvdSBjYW5ub3QgY2FuY2VsIHRoaXMgb2ZmZXIuBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxOTkwNjE5OTYxCQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDE5OTA2MTk5NjECXzEEB2Fzc2V0SWQIBQ0kdDAxOTkwNjE5OTYxAl8yBAdiaWREYXRhCAUNJHQwMTk5MDYxOTk2MQJfMwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBmJpZEtleQIFX09QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZiaWRLZXkCCl9DQU5DRUxMRUQJAKwCAgkArAICCQCsAgIJAKwCAgUHYmlkRGF0YQILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsAKN5j8Y=", "height": 2432928, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8XJcRSSKPzAJGhVTbMxdopfJM3XvLhLDgBEqCyjNq8hJ Next: HdQQomAiRRN9wadHHGKf68zNdzgKwxPRWp4GwaE5HaBM Diff:
OldNewDifferences
237237 else false)
238238 then fraction(amount, publicAgentShare, 100)
239239 else 0
240- if (true)
241- then throw(((("amountForAgent = " + toString(amountForAgent)) + " / amountForPublicAgent = ") + toString(amountForPublicAgent)))
242- else {
243- let commissions = if ((amountForAgent != 0))
244- then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
245- else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
246- let creatorFee = if ((amountForPublicAgent != 0))
247- then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
248- else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
249- let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
250- let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
251- $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
252- }
240+ let commissions = if ((amountForAgent != 0))
241+ then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
242+ else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
243+ let creatorFee = if ((amountForPublicAgent != 0))
244+ then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
245+ else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
246+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
247+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
248+ $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
253249 }
254250
255251
292288
293289
294290 func provideBaseData (i,nftId) = {
295- let $t01080710847 = idCallerDate(i)
296- let id = $t01080710847._1
297- let caller = $t01080710847._2
298- let date = $t01080710847._3
299- let $t01085010919 = checkNFTInfo(nftId)
300- let isValidNFT = $t01085010919._1
301- let artId = $t01085010919._2
302- let creatorAddr = $t01085010919._3
303- let artSignID = $t01085010919._4
291+ let $t01067310713 = idCallerDate(i)
292+ let id = $t01067310713._1
293+ let caller = $t01067310713._2
294+ let date = $t01067310713._3
295+ let $t01071610785 = checkNFTInfo(nftId)
296+ let isValidNFT = $t01071610785._1
297+ let artId = $t01071610785._2
298+ let creatorAddr = $t01071610785._3
299+ let artSignID = $t01071610785._4
304300 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
305301 }
306302
336332
337333 @Callable(i)
338334 func sellNFT (price,asset) = {
339- let $t01198412020 = isPayment(i)
340- let payment = $t01198412020._1
341- let amount = $t01198412020._2
335+ let $t01185011886 = isPayment(i)
336+ let payment = $t01185011886._1
337+ let amount = $t01185011886._2
342338 if ((amount != 1))
343339 then throw("No NFT attached")
344340 else {
347343 else false)
348344 then toBase58String(value(payment.assetId))
349345 else throw("Only SIGN Art NFT accepted.")
350- let $t01225412347 = provideBaseData(i, nftId)
351- let id = $t01225412347._1
352- let caller = $t01225412347._2
353- let date = $t01225412347._3
354- let isValidNFT = $t01225412347._4
355- let artId = $t01225412347._5
356- let creatorAddr = $t01225412347._6
357- let artSignID = $t01225412347._7
346+ let $t01212012213 = provideBaseData(i, nftId)
347+ let id = $t01212012213._1
348+ let caller = $t01212012213._2
349+ let date = $t01212012213._3
350+ let isValidNFT = $t01212012213._4
351+ let artId = $t01212012213._5
352+ let creatorAddr = $t01212012213._6
353+ let artSignID = $t01212012213._7
358354 if ((size(artSignID) == 0))
359355 then throw("Artwork not found on SIGN Art")
360356 else if (!(isValidNFT))
371367
372368 @Callable(i)
373369 func updateSalePrice (nftId,price,asset) = {
374- let $t01322713320 = provideBaseData(i, nftId)
375- let id = $t01322713320._1
376- let caller = $t01322713320._2
377- let date = $t01322713320._3
378- let isValidNFT = $t01322713320._4
379- let artId = $t01322713320._5
380- let creatorAddr = $t01322713320._6
381- let artSignID = $t01322713320._7
370+ let $t01309313186 = provideBaseData(i, nftId)
371+ let id = $t01309313186._1
372+ let caller = $t01309313186._2
373+ let date = $t01309313186._3
374+ let isValidNFT = $t01309313186._4
375+ let artId = $t01309313186._5
376+ let creatorAddr = $t01309313186._6
377+ let artSignID = $t01309313186._7
382378 if ((size(artSignID) == 0))
383379 then throw("Artwork not found on SIGN Art, cancel your sale.")
384380 else if (!(isValidNFT))
408404
409405 @Callable(i)
410406 func cancelSale (nftId) = {
411- let $t01446814709 = provideBaseData(i, nftId)
412- let id = $t01446814709._1
413- let caller = $t01446814709._2
414- let date = $t01446814709._3
415- let isValidNFT = $t01446814709._4
416- let artId = $t01446814709._5
417- let creatorAddr = $t01446814709._6
418- let artSignID = $t01446814709._7
407+ let $t01433414575 = provideBaseData(i, nftId)
408+ let id = $t01433414575._1
409+ let caller = $t01433414575._2
410+ let date = $t01433414575._3
411+ let isValidNFT = $t01433414575._4
412+ let artId = $t01433414575._5
413+ let creatorAddr = $t01433414575._6
414+ let artSignID = $t01433414575._7
419415 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
420416 if ((saleOwner != caller))
421417 then throw("You don't own this NFT")
435431
436432 @Callable(i)
437433 func buyNFT (nftId) = {
438- let $t01554015633 = provideBaseData(i, nftId)
439- let id = $t01554015633._1
440- let caller = $t01554015633._2
441- let date = $t01554015633._3
442- let isValidNFT = $t01554015633._4
443- let artId = $t01554015633._5
444- let creatorAddr = $t01554015633._6
445- let artSignID = $t01554015633._7
434+ let $t01540615499 = provideBaseData(i, nftId)
435+ let id = $t01540615499._1
436+ let caller = $t01540615499._2
437+ let date = $t01540615499._3
438+ let isValidNFT = $t01540615499._4
439+ let artId = $t01540615499._5
440+ let creatorAddr = $t01540615499._6
441+ let artSignID = $t01540615499._7
446442 if ((size(artSignID) == 0))
447443 then throw("Artwork not found on SIGN Art, cancel your sale.")
448444 else if (!(isValidNFT))
458454 if ((parseInt(saleInfoArray[1]) == 0))
459455 then throw("Offer only")
460456 else {
461- let $t01613016166 = isPayment(i)
462- let payment = $t01613016166._1
463- let amount = $t01613016166._2
457+ let $t01599616032 = isPayment(i)
458+ let payment = $t01599616032._1
459+ let amount = $t01599616032._2
464460 let paymentAssetStr = if (isDefined(payment.assetId))
465461 then toBase58String(value(payment.assetId))
466462 else ""
469465 else (saleInfoArray[2] != paymentAssetStr))
470466 then throw("Payment infos don't match.")
471467 else {
472- let $t01667216811 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
473- let commissions = $t01667216811._1
474- let creatorFee = $t01667216811._2
475- let ownerFee = $t01667216811._3
476- let collectorNFT = $t01667216811._4
468+ let $t01653816677 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469+ let commissions = $t01653816677._1
470+ let creatorFee = $t01653816677._2
471+ let ownerFee = $t01653816677._3
472+ let collectorNFT = $t01653816677._4
477473 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
478474 }
479475 }
485481
486482 @Callable(i)
487483 func setOffer (nftId) = {
488- let $t01722217319 = provideBaseData(i, nftId)
489- let id = $t01722217319._1
490- let offerOwner = $t01722217319._2
491- let date = $t01722217319._3
492- let isValidNFT = $t01722217319._4
493- let artId = $t01722217319._5
494- let creatorAddr = $t01722217319._6
495- let artSignID = $t01722217319._7
484+ let $t01708817185 = provideBaseData(i, nftId)
485+ let id = $t01708817185._1
486+ let offerOwner = $t01708817185._2
487+ let date = $t01708817185._3
488+ let isValidNFT = $t01708817185._4
489+ let artId = $t01708817185._5
490+ let creatorAddr = $t01708817185._6
491+ let artSignID = $t01708817185._7
496492 if (!(isValidNFT))
497493 then throw("Not a valid nft")
498494 else {
499- let $t01738017416 = isPayment(i)
500- let payment = $t01738017416._1
501- let amount = $t01738017416._2
495+ let $t01724617282 = isPayment(i)
496+ let payment = $t01724617282._1
497+ let amount = $t01724617282._2
502498 let assetId = if (!(isDefined(payment.assetId)))
503499 then "WAVES"
504500 else toBase58String(value(payment.assetId))
519515
520516 @Callable(i)
521517 func acceptOffer (nftId,offerId,offerOwner) = {
522- let $t01821818311 = provideBaseData(i, nftId)
523- let id = $t01821818311._1
524- let caller = $t01821818311._2
525- let date = $t01821818311._3
526- let isValidNFT = $t01821818311._4
527- let artId = $t01821818311._5
528- let creatorAddr = $t01821818311._6
529- let artSignID = $t01821818311._7
518+ let $t01808418177 = provideBaseData(i, nftId)
519+ let id = $t01808418177._1
520+ let caller = $t01808418177._2
521+ let date = $t01808418177._3
522+ let isValidNFT = $t01808418177._4
523+ let artId = $t01808418177._5
524+ let creatorAddr = $t01808418177._6
525+ let artSignID = $t01808418177._7
530526 if (!(isValidNFT))
531527 then throw("Not a valid nft")
532528 else {
535531 then throw("Only sale owner can accept offer")
536532 else {
537533 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
538- let $t01856518620 = getBidData(bidKey)
539- let bidDataArr = $t01856518620._1
540- let assetId = $t01856518620._2
541- let bidData = $t01856518620._3
534+ let $t01843118486 = getBidData(bidKey)
535+ let bidDataArr = $t01843118486._1
536+ let assetId = $t01843118486._2
537+ let bidData = $t01843118486._3
542538 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
543539 let saleInfo = getStrByK((saleKey + "_OPEN"))
544540 if ((size(saleInfo) == 0))
545541 then throw("Sale Not found!")
546542 else {
547543 let amount = value(parseInt(bidDataArr[1]))
548- let $t01885618994 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
549- let commissions = $t01885618994._1
550- let creatorFee = $t01885618994._2
551- let ownerFee = $t01885618994._3
552- let collectorNFT = $t01885618994._4
544+ let $t01872218860 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545+ let commissions = $t01872218860._1
546+ let creatorFee = $t01872218860._2
547+ let ownerFee = $t01872218860._3
548+ let collectorNFT = $t01872218860._4
553549 let assetIdStr = if (isDefined(assetId))
554550 then toBase58String(value(assetId))
555551 else "WAVES"
563559
564560 @Callable(i)
565561 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
566- let $t01979419868 = idCallerDate(i)
567- let id = $t01979419868._1
568- let caller = $t01979419868._2
569- let date = $t01979419868._3
562+ let $t01966019734 = idCallerDate(i)
563+ let id = $t01966019734._1
564+ let caller = $t01966019734._2
565+ let date = $t01966019734._3
570566 if (if ((caller != offerOwner))
571567 then (caller != saleOwner)
572568 else false)
573569 then throw("You cannot cancel this offer.")
574570 else {
575571 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
576- let $t02004020095 = getBidData(bidKey)
577- let bidDataArr = $t02004020095._1
578- let assetId = $t02004020095._2
579- let bidData = $t02004020095._3
572+ let $t01990619961 = getBidData(bidKey)
573+ let bidDataArr = $t01990619961._1
574+ let assetId = $t01990619961._2
575+ let bidData = $t01990619961._3
580576 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
581577 }
582578 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.1.5"
55
66 func getStrByK (key) = valueOrElse(getString(this, key), "")
77
88
99 let unitTest = false
1010
1111 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
1212
1313 let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
1414
1515 let feeReceiver = getStrByK("conf_fee_receiver")
1616
1717 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1818
1919 let userDapp = if (unitTest)
2020 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
2121 else value(addressFromString(getStrByK("conf_users_dapp")))
2222
2323 let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
2424
2525 let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
2626
2727 let usdnAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDN"))
2828
2929 let usdtAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDT"))
3030
3131 let wavesAssetId = base58''
3232
3333 let chris = getStrByK("conf_admin_1")
3434
3535 let signCut = 3
3636
3737 let userSuspended = "SUSPENDED"
3838
3939 let userRemoved = "REMOVED"
4040
4141 let artIllegal = "ILLEGAL"
4242
4343 let artSuspended = "SUSPENDED"
4444
4545 let dappRunningKey = "conf_dapp_is_running"
4646
4747 let maintenanceMSGKey = "conf_maintenance_msg"
4848
4949 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
5050
5151 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
5252
5353 let numSalesK = "num_sales"
5454
5555 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
5656
5757
5858 func getArtworkRoyalties (key) = valueOrElse(getInteger(artworksDapp, key), 1000)
5959
6060
6161 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
6262
6363
6464 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
6565
6666
6767 func keyUserStatus (addr) = ("user_status_" + addr)
6868
6969
7070 func keyArtworkRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
7171
7272
7373 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
7474
7575
7676 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
7777
7878
7979 func keyNFTData (id) = ("nft_" + id)
8080
8181
8282 func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
8383
8484
8585 func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
8686
8787
8888 func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
8989
9090
9191 let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
9292
9393 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
9494
9595
9696 func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
9797
9898
9999 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
100100
101101
102102 func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
103103
104104
105105 func idCallerDate (i) = if (!(dappRunning))
106106 then throw(maintenanceMSG)
107107 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
108108
109109
110110 func isPayment (i) = if ((size(i.payments) == 0))
111111 then throw("No payment attached")
112112 else {
113113 let payment = value(i.payments[0])
114114 let amount = value(payment.amount)
115115 $Tuple2(payment, amount)
116116 }
117117
118118
119119 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
120120 then (assetDetails.decimals == 0)
121121 else false)
122122 then (assetDetails.reissuable == false)
123123 else false)
124124 then (assetDetails.issuer == artworksDapp)
125125 else false
126126
127127
128128 func isSignArtNFT (id) = {
129129 let assetDetails = value(assetInfo(id))
130130 assetIsValid(assetDetails)
131131 }
132132
133133
134134 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
135135 then (assetId != toBase58String(wavesAssetId))
136136 else false)
137137 then (assetId != "WAVES")
138138 else false)
139139 then (assetId != toBase58String(usdnAssetId))
140140 else false)
141141 then (assetId != toBase58String(usdtAssetId))
142142 else false)
143143 then false
144144 else true
145145
146146
147147 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
148148 then unit
149149 else fromBase58String(assetId)
150150
151151
152152 func getSaleOwnerAndStatus (nftid) = {
153153 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
154154 if ((size(saleOwner) == 0))
155155 then throw("NFT not found")
156156 else {
157157 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
158158 if ((saleStatus != "OPEN"))
159159 then throw("NFT not for sale")
160160 else saleOwner
161161 }
162162 }
163163
164164
165165 func getBidData (key) = {
166166 let bidData = getStrByK((key + "_OPEN"))
167167 if ((bidData == ""))
168168 then throw("Offer not found")
169169 else {
170170 let bidDataArr = split(bidData, "_")
171171 let assetId = getBidAssetId(bidDataArr[2])
172172 $Tuple3(bidDataArr, assetId, bidData)
173173 }
174174 }
175175
176176
177177 func artIsValid (artStatus) = if ((artStatus != artIllegal))
178178 then (artStatus != artSuspended)
179179 else false
180180
181181
182182 func checkArtStatus (addr,id) = {
183183 let artStatus = getArtStrByK(keyFlag(addr, id))
184184 if (artIsValid(artStatus))
185185 then true
186186 else throw(("Original Artwork flagged as " + artStatus))
187187 }
188188
189189
190190 func checkArtistStatus (addr) = {
191191 let artistStatus = getUserStrByK(keyUserStatus(addr))
192192 if (containsElement([userSuspended, userRemoved], artistStatus))
193193 then throw(("Original Artist " + artistStatus))
194194 else true
195195 }
196196
197197
198198 func checkNFTInfo (assetId) = {
199199 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
200200 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
201201 if (if (!(checkArtStatus(nftData[6], nftData[5])))
202202 then !(checkArtistStatus(nftData[6]))
203203 else false)
204204 then $Tuple4(false, nftData[5], nftData[6], artSignID)
205205 else $Tuple4(true, nftData[5], nftData[6], artSignID)
206206 }
207207
208208
209209 func checkARTExist (artId,creatorAddr) = {
210210 let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
211211 if ((size(artSignID) == 0))
212212 then throw("Artwork not found on SIGN Art")
213213 else if (if (!(checkArtStatus(creatorAddr, artId)))
214214 then !(checkArtistStatus(creatorAddr))
215215 else false)
216216 then false
217217 else true
218218 }
219219
220220
221221 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller,artId) = {
222222 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, artId))
223223 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
224224 let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShareAgent(creatorAddr)), 0)
225225 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(creatorAddr)), feeReceiver)
226226 let publicAgentShare = valueOrElse(getInteger(userDapp, keySecondarySharePublicAgent(creatorAddr)), 0)
227227 let amountForSign = fraction(amount, signCut, 100)
228228 let amountForCreator = fraction(amount, creatorCut, 10000)
229229 let amountForOwner = (amount - (amountForSign + amountForCreator))
230230 let amountForAgent = if (if ((agent != feeReceiver))
231231 then (agentShare > 0)
232232 else false)
233233 then fraction(amount, agentShare, 100)
234234 else 0
235235 let amountForPublicAgent = if (if ((publicAgent != feeReceiver))
236236 then (publicAgentShare > 0)
237237 else false)
238238 then fraction(amount, publicAgentShare, 100)
239239 else 0
240- if (true)
241- then throw(((("amountForAgent = " + toString(amountForAgent)) + " / amountForPublicAgent = ") + toString(amountForPublicAgent)))
242- else {
243- let commissions = if ((amountForAgent != 0))
244- then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
245- else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
246- let creatorFee = if ((amountForPublicAgent != 0))
247- then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
248- else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
249- let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
250- let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
251- $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
252- }
240+ let commissions = if ((amountForAgent != 0))
241+ then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
242+ else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
243+ let creatorFee = if ((amountForPublicAgent != 0))
244+ then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
245+ else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
246+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
247+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
248+ $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
253249 }
254250
255251
256252 func validateMinSell (assetId,price) = {
257253 let minSellWaves = if (unitTest)
258254 then 10
259255 else getIntByKFromOracle("waves_min_sell")
260256 let minSellUsdn = 1000000
261257 let minSellSign = if (unitTest)
262258 then 1
263259 else (currentCertificationPrice * 2)
264260 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
265261 then (minSellUsdn > price)
266262 else false)
267263 then (price != 0)
268264 else false)
269265 then true
270266 else if (if ((assetId == toBase58String(usdtAssetId)))
271267 then (minSellUsdn > price)
272268 else false)
273269 then (price != 0)
274270 else false)
275271 then true
276272 else if (if ((assetId == toBase58String(signAssetId)))
277273 then (minSellSign > price)
278274 else false)
279275 then (price != 0)
280276 else false)
281277 then true
282278 else if (if (if ((assetId == toBase58String(wavesAssetId)))
283279 then true
284280 else (assetId == "WAVES"))
285281 then (minSellWaves > price)
286282 else false)
287283 then (price != 0)
288284 else false)
289285 then false
290286 else true
291287 }
292288
293289
294290 func provideBaseData (i,nftId) = {
295- let $t01080710847 = idCallerDate(i)
296- let id = $t01080710847._1
297- let caller = $t01080710847._2
298- let date = $t01080710847._3
299- let $t01085010919 = checkNFTInfo(nftId)
300- let isValidNFT = $t01085010919._1
301- let artId = $t01085010919._2
302- let creatorAddr = $t01085010919._3
303- let artSignID = $t01085010919._4
291+ let $t01067310713 = idCallerDate(i)
292+ let id = $t01067310713._1
293+ let caller = $t01067310713._2
294+ let date = $t01067310713._3
295+ let $t01071610785 = checkNFTInfo(nftId)
296+ let isValidNFT = $t01071610785._1
297+ let artId = $t01071610785._2
298+ let creatorAddr = $t01071610785._3
299+ let artSignID = $t01071610785._4
304300 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
305301 }
306302
307303
308304 func updateNumSales () = {
309305 let numSales = getIntByK(numSalesK)
310306 IntegerEntry(numSalesK, (numSales + 1))
311307 }
312308
313309
314310 @Callable(invoke)
315311 func setConf (key,val) = {
316312 let caller = toString(invoke.caller)
317313 if (containsElement([chris, toString(this)], caller))
318314 then if (contains(key, "conf_"))
319315 then [StringEntry(key, val)]
320316 else throw("Entries starting with conf_ only")
321317 else throw("You are not allowed to change this")
322318 }
323319
324320
325321
326322 @Callable(invoke)
327323 func appRunning (isLive,message) = {
328324 let caller = toString(invoke.caller)
329325 let id = toBase58String(invoke.transactionId)
330326 if (containsElement([chris, toString(this)], caller))
331327 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
332328 else throw("You are not allowed to change this")
333329 }
334330
335331
336332
337333 @Callable(i)
338334 func sellNFT (price,asset) = {
339- let $t01198412020 = isPayment(i)
340- let payment = $t01198412020._1
341- let amount = $t01198412020._2
335+ let $t01185011886 = isPayment(i)
336+ let payment = $t01185011886._1
337+ let amount = $t01185011886._2
342338 if ((amount != 1))
343339 then throw("No NFT attached")
344340 else {
345341 let nftId = if (if (isDefined(payment.assetId))
346342 then isSignArtNFT(value(payment.assetId))
347343 else false)
348344 then toBase58String(value(payment.assetId))
349345 else throw("Only SIGN Art NFT accepted.")
350- let $t01225412347 = provideBaseData(i, nftId)
351- let id = $t01225412347._1
352- let caller = $t01225412347._2
353- let date = $t01225412347._3
354- let isValidNFT = $t01225412347._4
355- let artId = $t01225412347._5
356- let creatorAddr = $t01225412347._6
357- let artSignID = $t01225412347._7
346+ let $t01212012213 = provideBaseData(i, nftId)
347+ let id = $t01212012213._1
348+ let caller = $t01212012213._2
349+ let date = $t01212012213._3
350+ let isValidNFT = $t01212012213._4
351+ let artId = $t01212012213._5
352+ let creatorAddr = $t01212012213._6
353+ let artSignID = $t01212012213._7
358354 if ((size(artSignID) == 0))
359355 then throw("Artwork not found on SIGN Art")
360356 else if (!(isValidNFT))
361357 then throw("Not a valid nft")
362358 else if (!(acceptedAssetIds(asset)))
363359 then throw("Only SIGN, USDN, USDT or WAVES accepted")
364360 else if (!(validateMinSell(asset, price)))
365361 then throw("Wrong minimum sell price")
366362 else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
367363 }
368364 }
369365
370366
371367
372368 @Callable(i)
373369 func updateSalePrice (nftId,price,asset) = {
374- let $t01322713320 = provideBaseData(i, nftId)
375- let id = $t01322713320._1
376- let caller = $t01322713320._2
377- let date = $t01322713320._3
378- let isValidNFT = $t01322713320._4
379- let artId = $t01322713320._5
380- let creatorAddr = $t01322713320._6
381- let artSignID = $t01322713320._7
370+ let $t01309313186 = provideBaseData(i, nftId)
371+ let id = $t01309313186._1
372+ let caller = $t01309313186._2
373+ let date = $t01309313186._3
374+ let isValidNFT = $t01309313186._4
375+ let artId = $t01309313186._5
376+ let creatorAddr = $t01309313186._6
377+ let artSignID = $t01309313186._7
382378 if ((size(artSignID) == 0))
383379 then throw("Artwork not found on SIGN Art, cancel your sale.")
384380 else if (!(isValidNFT))
385381 then throw("Not a valid nft")
386382 else {
387383 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
388384 if ((saleOwner != caller))
389385 then throw("You don't own this NFT")
390386 else {
391387 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
392388 if ((saleStatus != "OPEN"))
393389 then throw("Sale not active")
394390 else if (!(acceptedAssetIds(asset)))
395391 then throw("Only SIGN, USDN, USDT or WAVES accepted")
396392 else if (!(validateMinSell(asset, price)))
397393 then throw("Wrong minimum sell price")
398394 else {
399395 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
400396 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
401397 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
402398 }
403399 }
404400 }
405401 }
406402
407403
408404
409405 @Callable(i)
410406 func cancelSale (nftId) = {
411- let $t01446814709 = provideBaseData(i, nftId)
412- let id = $t01446814709._1
413- let caller = $t01446814709._2
414- let date = $t01446814709._3
415- let isValidNFT = $t01446814709._4
416- let artId = $t01446814709._5
417- let creatorAddr = $t01446814709._6
418- let artSignID = $t01446814709._7
407+ let $t01433414575 = provideBaseData(i, nftId)
408+ let id = $t01433414575._1
409+ let caller = $t01433414575._2
410+ let date = $t01433414575._3
411+ let isValidNFT = $t01433414575._4
412+ let artId = $t01433414575._5
413+ let creatorAddr = $t01433414575._6
414+ let artSignID = $t01433414575._7
419415 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
420416 if ((saleOwner != caller))
421417 then throw("You don't own this NFT")
422418 else {
423419 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
424420 if ((saleStatus != "OPEN"))
425421 then throw("Sale not active")
426422 else {
427423 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
428424 let saleInfo = getStrByK((saleKey + "_OPEN"))
429425 [DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftId))]
430426 }
431427 }
432428 }
433429
434430
435431
436432 @Callable(i)
437433 func buyNFT (nftId) = {
438- let $t01554015633 = provideBaseData(i, nftId)
439- let id = $t01554015633._1
440- let caller = $t01554015633._2
441- let date = $t01554015633._3
442- let isValidNFT = $t01554015633._4
443- let artId = $t01554015633._5
444- let creatorAddr = $t01554015633._6
445- let artSignID = $t01554015633._7
434+ let $t01540615499 = provideBaseData(i, nftId)
435+ let id = $t01540615499._1
436+ let caller = $t01540615499._2
437+ let date = $t01540615499._3
438+ let isValidNFT = $t01540615499._4
439+ let artId = $t01540615499._5
440+ let creatorAddr = $t01540615499._6
441+ let artSignID = $t01540615499._7
446442 if ((size(artSignID) == 0))
447443 then throw("Artwork not found on SIGN Art, cancel your sale.")
448444 else if (!(isValidNFT))
449445 then throw("Not a valid nft")
450446 else {
451447 let saleOwner = getSaleOwnerAndStatus(nftId)
452448 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
453449 let saleInfo = getStrByK((saleKey + "_OPEN"))
454450 if ((size(saleInfo) == 0))
455451 then throw("Sale Not found!")
456452 else {
457453 let saleInfoArray = split(saleInfo, "_")
458454 if ((parseInt(saleInfoArray[1]) == 0))
459455 then throw("Offer only")
460456 else {
461- let $t01613016166 = isPayment(i)
462- let payment = $t01613016166._1
463- let amount = $t01613016166._2
457+ let $t01599616032 = isPayment(i)
458+ let payment = $t01599616032._1
459+ let amount = $t01599616032._2
464460 let paymentAssetStr = if (isDefined(payment.assetId))
465461 then toBase58String(value(payment.assetId))
466462 else ""
467463 if (if ((saleInfoArray[1] != toString(amount)))
468464 then true
469465 else (saleInfoArray[2] != paymentAssetStr))
470466 then throw("Payment infos don't match.")
471467 else {
472- let $t01667216811 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
473- let commissions = $t01667216811._1
474- let creatorFee = $t01667216811._2
475- let ownerFee = $t01667216811._3
476- let collectorNFT = $t01667216811._4
468+ let $t01653816677 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469+ let commissions = $t01653816677._1
470+ let creatorFee = $t01653816677._2
471+ let ownerFee = $t01653816677._3
472+ let collectorNFT = $t01653816677._4
477473 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
478474 }
479475 }
480476 }
481477 }
482478 }
483479
484480
485481
486482 @Callable(i)
487483 func setOffer (nftId) = {
488- let $t01722217319 = provideBaseData(i, nftId)
489- let id = $t01722217319._1
490- let offerOwner = $t01722217319._2
491- let date = $t01722217319._3
492- let isValidNFT = $t01722217319._4
493- let artId = $t01722217319._5
494- let creatorAddr = $t01722217319._6
495- let artSignID = $t01722217319._7
484+ let $t01708817185 = provideBaseData(i, nftId)
485+ let id = $t01708817185._1
486+ let offerOwner = $t01708817185._2
487+ let date = $t01708817185._3
488+ let isValidNFT = $t01708817185._4
489+ let artId = $t01708817185._5
490+ let creatorAddr = $t01708817185._6
491+ let artSignID = $t01708817185._7
496492 if (!(isValidNFT))
497493 then throw("Not a valid nft")
498494 else {
499- let $t01738017416 = isPayment(i)
500- let payment = $t01738017416._1
501- let amount = $t01738017416._2
495+ let $t01724617282 = isPayment(i)
496+ let payment = $t01724617282._1
497+ let amount = $t01724617282._2
502498 let assetId = if (!(isDefined(payment.assetId)))
503499 then "WAVES"
504500 else toBase58String(value(payment.assetId))
505501 if (!(acceptedAssetIds(assetId)))
506502 then throw("asset not accepted")
507503 else if ((amount == 0))
508504 then throw("Offer of 0 not allowed")
509505 else if (!(validateMinSell(assetId, amount)))
510506 then throw("Wrong minimum sell price")
511507 else {
512508 let saleOwner = getSaleOwnerAndStatus(nftId)
513509 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
514510 }
515511 }
516512 }
517513
518514
519515
520516 @Callable(i)
521517 func acceptOffer (nftId,offerId,offerOwner) = {
522- let $t01821818311 = provideBaseData(i, nftId)
523- let id = $t01821818311._1
524- let caller = $t01821818311._2
525- let date = $t01821818311._3
526- let isValidNFT = $t01821818311._4
527- let artId = $t01821818311._5
528- let creatorAddr = $t01821818311._6
529- let artSignID = $t01821818311._7
518+ let $t01808418177 = provideBaseData(i, nftId)
519+ let id = $t01808418177._1
520+ let caller = $t01808418177._2
521+ let date = $t01808418177._3
522+ let isValidNFT = $t01808418177._4
523+ let artId = $t01808418177._5
524+ let creatorAddr = $t01808418177._6
525+ let artSignID = $t01808418177._7
530526 if (!(isValidNFT))
531527 then throw("Not a valid nft")
532528 else {
533529 let saleOwner = getSaleOwnerAndStatus(nftId)
534530 if ((caller != saleOwner))
535531 then throw("Only sale owner can accept offer")
536532 else {
537533 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
538- let $t01856518620 = getBidData(bidKey)
539- let bidDataArr = $t01856518620._1
540- let assetId = $t01856518620._2
541- let bidData = $t01856518620._3
534+ let $t01843118486 = getBidData(bidKey)
535+ let bidDataArr = $t01843118486._1
536+ let assetId = $t01843118486._2
537+ let bidData = $t01843118486._3
542538 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
543539 let saleInfo = getStrByK((saleKey + "_OPEN"))
544540 if ((size(saleInfo) == 0))
545541 then throw("Sale Not found!")
546542 else {
547543 let amount = value(parseInt(bidDataArr[1]))
548- let $t01885618994 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
549- let commissions = $t01885618994._1
550- let creatorFee = $t01885618994._2
551- let ownerFee = $t01885618994._3
552- let collectorNFT = $t01885618994._4
544+ let $t01872218860 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545+ let commissions = $t01872218860._1
546+ let creatorFee = $t01872218860._2
547+ let ownerFee = $t01872218860._3
548+ let collectorNFT = $t01872218860._4
553549 let assetIdStr = if (isDefined(assetId))
554550 then toBase58String(value(assetId))
555551 else "WAVES"
556552 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
557553 }
558554 }
559555 }
560556 }
561557
562558
563559
564560 @Callable(i)
565561 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
566- let $t01979419868 = idCallerDate(i)
567- let id = $t01979419868._1
568- let caller = $t01979419868._2
569- let date = $t01979419868._3
562+ let $t01966019734 = idCallerDate(i)
563+ let id = $t01966019734._1
564+ let caller = $t01966019734._2
565+ let date = $t01966019734._3
570566 if (if ((caller != offerOwner))
571567 then (caller != saleOwner)
572568 else false)
573569 then throw("You cannot cancel this offer.")
574570 else {
575571 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
576- let $t02004020095 = getBidData(bidKey)
577- let bidDataArr = $t02004020095._1
578- let assetId = $t02004020095._2
579- let bidData = $t02004020095._3
572+ let $t01990619961 = getBidData(bidKey)
573+ let bidDataArr = $t01990619961._1
574+ let assetId = $t01990619961._2
575+ let bidData = $t01990619961._3
580576 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
581577 }
582578 }
583579
584580

github/deemru/w8io/3ef1775 
130.13 ms