tx · BYjd8roFCLG4PvvpcPxAAAcEKrQz6wD49FxCfEFknPi9

3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT:  -0.02400000 Waves

2022.10.06 14:43 [3325899] smart account 3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT > SELF 0.00000000 Waves

{ "type": 13, "id": "BYjd8roFCLG4PvvpcPxAAAcEKrQz6wD49FxCfEFknPi9", "fee": 2400000, "feeAssetId": null, "timestamp": 1665056564791, "version": 1, "sender": "3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT", "senderPublicKey": "2cFG5wZimjVSeCT8ZCRybx7Mzo5tJF879aw2b31uLRmR", "proofs": [ "4trcAMSZhvXUq5pc5b7svpVYatxnhqzhJz6XnJU76R6LNpjs5P16cnKgRqYdAKpm9tSLg8LT9dRuTn4dX2yW2iPE" ], "script": "base64:BgKRAQgCEgMKAQgSBAoCCAQSBQoDCAQIEgMKAQgSBAoCCAESABIAEgQKAggBEgQKAggBEgMKAQgSBAoCCAESAwoBCBIECgIIARIECgIIARIECgIIARIECgIBBBIFCgMIAQQSBAoCBAQSAwoBCBIECgIBBBIAEgQKAggEEgASBAoCCAESAwoBCBIAEgQKAggIEgMKAQg4AAtmYWN0b3JzQmFzZQDoBwEDZkNpAwV2YWx1ZQludW1lcmF0b3ILZGVub21pbmF0b3IEBGNhbmQJAGsDBQV2YWx1ZQUJbnVtZXJhdG9yBQtkZW5vbWluYXRvcgQBRACz5pOoCwQFZXhhY3QJAAACCQBqAgkAaAIJAGoCBQRjYW5kBQFECQBqAgULZGVub21pbmF0b3IFAUQFAUQJAGoCCQBoAgkAagIFBXZhbHVlBQFECQBqAgUJbnVtZXJhdG9yBQFEBQFEAwUFZXhhY3QFBGNhbmQJAGQCBQRjYW5kAAEBC3B1cmVBc3NldElkAQdhc3NldElkBAFpCQCRAwIJALUJAgUHYXNzZXRJZAIBXwAAAwkAAAIFAWkCBVdBVkVTBQR1bml0CQDZBAEFAWkBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIDbToxAQZhc0ludDMBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEyARFhc1VzZXJCYWxhbmNlRGF0YQEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACIihJbnQsIEludCwgSW50LCBJbnQsIEludCwgQm9vbGVhbikEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEzAAtjb25maWdTdG9yZQIGY29uZmlnAAVhVElkUwIIYVRva2VuSWQABGFJZFMCB2Fzc2V0SWQADWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFC2NvbmZpZ1N0b3JlAAZsb2NrZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIJbHBfbG9ja2VyAh5ubyBscF9sb2NrZXIgYWRkcmVzcyBpbiBjb25maWcCH2JhZCBscF9sb2NrZXIgYWRkcmVzcyBpbiBjb25maWcAC3Jlc2VydmVzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIQcHJpbWFyeV9yZXNlcnZlcwIWbm8gcmVzZXJ2ZXMgcmVnaXN0ZXJlZAAIcmVzZXJ2ZXMJALwJAgULcmVzZXJ2ZXNTdHICAXwAA2ViUgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCCmViX3Jld2FyZHMCDW5vIGViX3Jld2FyZHMAC3ZpcmVzTWludGVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCDHZpcmVzX21pbnRlcgIUbWFpbjogbm8gdmlyZXNNaW50ZXICCmJhZCBtaW50ZXIAB21heWJldlMJAJ0IAgUNY29uZmlnQWRkcmVzcwIMdmlyZXNfc3Rha2VyAAJ2UwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQdtYXliZXZTAg9ubyB2aXJlc19zdGFrZXIAAmRDCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEmRpdmlkZW5kc19jb250cmFjdAIVbm8gZGl2aWRlbmRzX2NvbnRyYWN0AgdiYWQgZGl2AANtVkQEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIRdmlyZXNfZGlzdHJpYnV0b3IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFkBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFkBQR1bml0AAJWRAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQNtVkQCCG5vIGRpc3RyAAdsaW1pdGVyBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCB2xpbWl0ZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFkBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFkBQR1bml0ABFtYXliZVZpcmVzQXNzZXRJZAkAnQgCBQt2aXJlc01pbnRlcgUEYUlkUwAMdmlyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRFtYXliZVZpcmVzQXNzZXRJZAILbm8gdmlyZXMgaWQCEGludmFsaWQgdmlyZXMgaWQBDHZpcmVzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAAAAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMdmlyZXNBc3NldElkCQACAQIJbm90IHZpcmVzCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAEQYXNzZXRJZE9mUmVzZXJ2ZQEDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyBQRhSWRTAhFubyBhc3NldElkIGluIHJzcgEQY29sbGF0ZXJhbEZhY3RvcgEDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICCQEQYXNzZXRJZE9mUmVzZXJ2ZQEFA3JzcgIRX0NvbGxhdGVyYWxGYWN0b3ICBG5vIDEBFGxpcXVpZGF0aW9uVGhyZXNob2xkAQNyc3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIJARBhc3NldElkT2ZSZXNlcnZlAQUDcnNyAhVfTGlxdWlkYXRpb25UaHJlc2hvbGQCBG5vIDIAFmFjY291bnRIZWFsdGhUaHJlc2hvbGQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ1jb25maWdBZGRyZXNzAhhhY2NvdW50X2hlYWx0aF90aHJlc2hvbGQCBG5vIDQAFGFjY291bnRIZWFsdGhPdmVybGFwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwIWYWNjb3VudF9oZWFsdGhfb3ZlcmxhcAIEbm8gNQALbGlxdWlkYXRvcnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwILbGlxdWlkYXRvcnMCAAEJcmVzZXJ2ZUJ5AgVzdG9yZQV2YWx1ZQoBBGZvbGQCAWEBcgQHJG1hdGNoMAUBYQMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAVmb3VuZAUHJG1hdGNoMAUFZm91bmQEA3JzcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAXICD3JzciBiYWQgYWRkcmVzcwMJAAACCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyBQVzdG9yZQkArAICAgtyc3IgaGFzIG5vIAUFc3RvcmUFBXZhbHVlBQNyc3IFBHVuaXQEByRtYXRjaDAKAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQR1bml0CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQFZm91bmQFByRtYXRjaDAFBWZvdW5kCQACAQkArAICAgh1bmtub3duIAUFc3RvcmUBA3ZsUgEBcgMJAQhjb250YWlucwIFC3Jlc2VydmVzU3RyBQFyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBcgINbWFpbjogYmFkIHJzcgkAAgEJAKwCAgIMdW5rbm93biByc3I6BQFyAQt1c2VyQmFsYW5jZQIDcnNyBHVzZXIJARFhc1VzZXJCYWxhbmNlRGF0YQEJAPwHBAUDcnNyAgt1c2VyQmFsYW5jZQkAzAgCBQR1c2VyBQNuaWwFA25pbAAObWF5YmVQcm90ZWN0ZWQEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIRcHJvdGVjdGVkX3Jlc2VydmUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANwZHMFByRtYXRjaDAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQNwZHMCDWJhZCBwcm90ZWN0ZWQFBHVuaXQAEHByb3RlY3RlZFJlc2VydmUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUObWF5YmVQcm90ZWN0ZWQCEG5vIHByb3RlY3RlZCByc3IAHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIccHJvaGliaXRlZENvbGxhdGVyYWxSZXNlcnZlcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJALUJAgUBcwIBfAUDbmlsAR1lbnN1cmVOb1Byb2hpYml0ZWRDb2xsYXRlcmFscwEEdXNlcgoBCGZvbGRGdW5jAgFhEXByb2hpYml0ZWRSZXNlcnZlBANhdGIJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQURcHJvaGliaXRlZFJlc2VydmUJAKwCAgUEdXNlcgIOX2FUb2tlbkJhbGFuY2UAAAMJAGYCBQNhdGIAAAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgImb3BlcmF0aW9uIGRlbmllZDogdXNlciBoYXMgZGVwb3NpdCBpbiAFEXByb2hpYml0ZWRSZXNlcnZlAgI6IAkApAMBBQNhdGICCyhscCB0b2tlbnMpBgoAAiRsBRxwcm9oaWJpdGVkQ29sbGF0ZXJhbFJlc2VydmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAYKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZvbGRGdW5jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwESZW5zdXJlTm9Qcm9oaWJpdGVkAwR1c2VyA2JwdQdyZXNlcnZlAwMJAAACBQNicHUAAAYJAQlpc0RlZmluZWQBCQDPCAIFHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMFB3Jlc2VydmUGCQEdZW5zdXJlTm9Qcm9oaWJpdGVkQ29sbGF0ZXJhbHMBBQR1c2VyARFlbnN1cmVOb1Byb3RlY3RlZAEEdXNlcgQDaGFzBAckbWF0Y2gwBQ5tYXliZVByb3RlY3RlZAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJwYQUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJwYQkArAICAhVwcm90ZWN0ZWRfY29sbGF0ZXJhbF8FBHVzZXIHBwMFA2hhcwkAAgECCmRpc2FsbG93ZWQFBHVuaXQBC2Vuc3VyZUxpbWl0BAZhY3Rpb24DcnNyBHVzZXIGYW1vdW50BAckbWF0Y2gwBQdsaW1pdGVyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWwFByRtYXRjaDAJAQVhc0ludAEJAPwHBAUBbAINdmFsaWRhdGVMaW1pdAkAzAgCBQZhY3Rpb24JAMwIAgkApQgBBQNyc3IJAMwIAgUEdXNlcgkAzAgCBQZhbW91bnQFA25pbAUDbmlsBgEJdXNlclBvd2VyAQR1c2VyBBBwcm90ZWN0ZWREZXBvc2l0BAckbWF0Y2gwBQ5tYXliZVByb3RlY3RlZAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJwYQUHJG1hdGNoMAkBBWFzSW50AQkA/AcEBQJwYQILYm9ycm93UG93ZXIJAMwIAgUEdXNlcgUDbmlsBQNuaWwAAAoBBGZvbGQCBnRvdGFscwFyBAskdDA4Nzk4ODg0NAUGdG90YWxzBAZ0b3RhbEQIBQskdDA4Nzk4ODg0NAJfMQQGdG90YWxCCAULJHQwODc5ODg4NDQCXzIED251bWJlck9mQm9ycm93cwgFCyR0MDg3OTg4ODQ0Al8zBANyc3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQFyAg9yc3IgYmFkIGFkZHJlc3MEAmNmCQEQY29sbGF0ZXJhbEZhY3RvcgEFA3JzcgQCbHQJARRsaXF1aWRhdGlvblRocmVzaG9sZAEFA3JzcgQLJHQwODk5ODkwODIJAQt1c2VyQmFsYW5jZQIFA3JzcgUEdXNlcgQFdG9rZW4IBQskdDA4OTk4OTA4MgJfMQQFYXNzZXQIBQskdDA4OTk4OTA4MgJfMgQKZGVwb3NpdFVzZAgFCyR0MDg5OTg5MDgyAl8zBARkZWJ0CAULJHQwODk5ODkwODICXzQEB2RlYnRVc2QIBQskdDA4OTk4OTA4MgJfNQQMYXNDb2xsYXRlcmFsCAULJHQwODk5ODkwODICXzYEDHRvdGFsQm9ycm93cwkAZAIFD251bWJlck9mQm9ycm93cwMJAGYCBQRkZWJ0AAAAAQAABBNlZmZlY3RpdmVEZXBvc2l0VXNkAwUMYXNDb2xsYXRlcmFsBQpkZXBvc2l0VXNkAAAECm92ZXJsYXBVc2QJAJcDAQkAzAgCBQdkZWJ0VXNkCQDMCAIFE2VmZmVjdGl2ZURlcG9zaXRVc2QFA25pbAQNb3ZlcmxhcENoYXJnZQkBA2ZDaQMFCm92ZXJsYXBVc2QFFGFjY291bnRIZWFsdGhPdmVybGFwBQtmYWN0b3JzQmFzZQMJAGYCBQdkZWJ0VXNkBRNlZmZlY3RpdmVEZXBvc2l0VXNkCQCVCgMFBnRvdGFsRAkAZAIJAGQCBQZ0b3RhbEIJAGsDCQBlAgUHZGVidFVzZAUTZWZmZWN0aXZlRGVwb3NpdFVzZAULZmFjdG9yc0Jhc2UFAmx0BQ1vdmVybGFwQ2hhcmdlBQx0b3RhbEJvcnJvd3MJAJUKAwkAZAIFBnRvdGFsRAkAawMJAGUCBRNlZmZlY3RpdmVEZXBvc2l0VXNkBQdkZWJ0VXNkBQJjZgULZmFjdG9yc0Jhc2UJAGQCBQZ0b3RhbEIFDW92ZXJsYXBDaGFyZ2UFDHRvdGFsQm9ycm93cwQBcgoAAiRsBQhyZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUQcHJvdGVjdGVkRGVwb3NpdAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAMDCQBmAgUQcHJvdGVjdGVkRGVwb3NpdAAACQBmAggFAXICXzMABAcJAAIBAh5jYW4ndCBoYXZlIG1vcmUgdGhhbiA0IGJvcnJvd3MFAXIBDWdldFVzZXJIZWFsdGgBB2FjY291bnQECyR0MDk4Mzc5ODg4CQEGYXNJbnQzAQkBCXVzZXJQb3dlcgEFB2FjY291bnQEAmJwCAULJHQwOTgzNzk4ODgCXzEEA2JwdQgFCyR0MDk4Mzc5ODg4Al8yBAZpZ25vcmUIBQskdDA5ODM3OTg4OAJfMwkArAICCQCsAgIJAKwCAgIDYnA6CQCkAwEFAmJwAgYsIGJwdToJAKQDAQUDYnB1AQ12YWxpZGF0ZUFmdGVyAgR1c2VyAm9wBA0kdDAxMDAwMDEwMDMxCQEJdXNlclBvd2VyAQUEdXNlcgQCYnAIBQ0kdDAxMDAwMDEwMDMxAl8xBANicHUIBQ0kdDAxMDAwMDEwMDMxAl8yBAlhY2NIZWFsdGgJAGkCCQBoAgkAZQIFAmJwBQNicHUFC2ZhY3RvcnNCYXNlBQJicAMDCQAAAgUCYnAAAAkAAAIFA2JwdQAABwAAAwMJAAACBQJicAAACQBmAgUDYnB1AAAHCQACAQkArAICCQCsAgIFAm9wAiw6IGJyZWFjaGluZyBsaXF1aWRhdGlvbiB0aHJlc2hvbGQoYnA9MCwgYnB1PQkApAMBBQNicHUDCQBmAgUWYWNjb3VudEhlYWx0aFRocmVzaG9sZAUJYWNjSGVhbHRoCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQJvcAIlOiBicmVhY2hpbmcgbGlxdWlkYXRpb24gdGhyZXNob2xkKGJwPQkApAMBBQJicAIGLCBicHU9CQCkAwEFA2JwdQIJLCBoZWFsdGg9CQCkAwEFCWFjY0hlYWx0aAIBKQUDYnB1AQJ1UwUDcnNyBmFjdGlvbgR1c2VyCnVzZXJDaGFuZ2UMc3RyZWFtQ2hhbmdlBAckbWF0Y2gwBQNtVkQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAkA/AcEBQFhAghvbkFjdGlvbgkAzAgCBQNyc3IJAMwIAgUGYWN0aW9uCQDMCAIFBHVzZXIJAMwIAgUKdXNlckNoYW5nZQkAzAgCBQxzdHJlYW1DaGFuZ2UFA25pbAUDbmlsBQR1bml0AQptb3ZlU3RyZWFtBQNyc3IGYWN0aW9uBGZyb20Gc3RyaW5nA2FtdAQHJG1hdGNoMAUDbVZEAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAJAPwHBAUBYQIEbW92ZQkAzAgCBQNyc3IJAMwIAgUGYWN0aW9uCQDMCAIFBGZyb20JAMwIAgUGc3RyaW5nCQDMCAIFA2FtdAUDbmlsBQNuaWwFBHVuaXQBAnNSAQNyc3IEByRtYXRjaDAFA21WRAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwCQD8BwQFAWECCnN5bmNIZWlnaHQJAMwIAgUDcnNyBQNuaWwFA25pbAUEdW5pdAEMbG9ja09yUGF5b3V0AwlyZWNpcGllbnQDYW10BGxvY2sDCQEBIQEFBGxvY2sJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUJcmVjaXBpZW50BQNhbXQFDHZpcmVzQXNzZXRJZAUDbmlsBAZkb0xvY2sJAPwHBAUCZEMCB2xvY2tGb3IJAMwIAgkApQgBBQlyZWNpcGllbnQJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHZpcmVzQXNzZXRJZAUDYW10BQNuaWwDCQAAAgUGZG9Mb2NrBQZkb0xvY2sFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJZG9EZXBvc2l0AwFpA3JzcgVhc0NvbAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEBmNoZWNrcwkBEWVuc3VyZU5vUHJvdGVjdGVkAQUEdXNlcgMJAAACBQZjaGVja3MFBmNoZWNrcwQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEBmFjdGlvbgkA/AcECQEDdmxSAQUDcnNyAgpkZXBvc2l0Rm9yCQDMCAIFBHVzZXIJAMwIAgUFYXNDb2wFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUGYWN0aW9uBQZhY3Rpb24EA2FtdAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEA3BSdwkBAnVTBQUDcnNyAgdkZXBvc2l0BQR1c2VyBQNhbXQFA2FtdAMJAAACBQNwUncFA3BSdwQCdmEDCQEBIQEFBWFzQ29sCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICCmRlcG9zaXRpbmcAAAMJAAACBQJ2YQUCdmEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAOcmV3YXJkUmVzZXJ2ZXMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCE3Jld2FyZGFibGVfcmVzZXJ2ZXMCCW5vIHN0cmluZwIBfAEWY2xhaW1BbGxSZXdhcmRzRm9yVXNlcgEEdXNlcgQJY2xhaW1lZEViCQEFYXNJbnQBCQD8BwQFA2ViUgIQY2xhaW1FYlJld2FyZEZvcgkAzAgCBQR1c2VyCQDMCAIA////////////AQUDbmlsBQNuaWwDCQAAAgUJY2xhaW1lZEViBQljbGFpbWVkRWIKAQRmb2xkAgNhY2MDcnNyBAdjbGFpbWVkCQEFYXNJbnQBCQD8BwQFAlZEAg5jbGFpbVJld2FyZEZvcgkAzAgCBQNyc3IJAMwIAgUEdXNlcgkAzAgCAP///////////wEFA25pbAUDbmlsAwkAAAIFB2NsYWltZWQFB2NsYWltZWQJAGQCBQNhY2MFB2NsYWltZWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDGNsYWltZWRUb3RhbAoAAiRsBQ5yZXdhcmRSZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUCQBkAgUMY2xhaW1lZFRvdGFsBQljbGFpbWVkRWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGGNsYWltQWxsTHBSZXdhcmRzRm9yVXNlcgEEdXNlcgoBBGZvbGQCA2FjYwNyc3IECGFUb2tlbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUDcnNyBQVhVElkUwIWbm8gYVRva2VuSWQgaW4gcmVzZXJ2ZQQHY2xhaW1lZAkBBWFzSW50AQkA/AcEBQZsb2NrZXICEGNsYWltTHBSZXdhcmRGb3IJAMwIAgUEdXNlcgkAzAgCBQhhVG9rZW5JZAkAzAgCAP///////////wEFA25pbAUDbmlsAwkAAAIFB2NsYWltZWQFB2NsYWltZWQJAGQCBQNhY2MFB2NsYWltZWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDGNsYWltZWRUb3RhbAoAAiRsBQ5yZXdhcmRSZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBQxjbGFpbWVkVG90YWwBDm1vdmVDb2xsYXRlcmFsBARhZGRyCGFzc2V0U3RyA3JzcgpyZXNlcnZlU3RyBANhbXQJAQVhc0ludAEJAPwHBAUQcHJvdGVjdGVkUmVzZXJ2ZQIOd2l0aGRyYXdUb01haW4JAMwIAgUEYWRkcgkAzAgCBQhhc3NldFN0cgUDbmlsBQNuaWwDCQAAAgUDYW10BQNhbXQEA2RlcAkA/AcEBQNyc3ICCmRlcG9zaXRGb3IJAMwIAgUEYWRkcgkAzAgCBgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQELcHVyZUFzc2V0SWQBBQhhc3NldFN0cgUDYW10BQNuaWwDCQAAAgUDZGVwBQNkZXAEBHByb3AJAQJ1UwUFCnJlc2VydmVTdHICB2RlcG9zaXQFBGFkZHIFA2FtdAUDYW10AwkAAAIFBHByb3AFBHByb3AFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BBHNwZnIACQD8BwQFAmRDAhdzaGFyZVByb2ZpdEZyb21SZXNlcnZlcwUDbmlsBQNuaWwBCndkSW50ZXJuYWwEBHVzZXIDcnNyA2FtdAJvcAQCc2gJAQJzUgEJAKUIAQUDcnNyAwkAAAIFAnNoBQJzaAQPd2l0aGRyYXduQW1vdW50CQEFYXNJbnQBCQD8BwQFA3JzcgUCb3AJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFD3dpdGhkcmF3bkFtb3VudAUPd2l0aGRyYXduQW1vdW50BANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyCQEBLQEFD3dpdGhkcmF3bkFtb3VudAkBAS0BBQ93aXRoZHJhd25BbW91bnQDCQAAAgUDcFJ3BQNwUncEAWUJAQtlbnN1cmVMaW1pdAQCCHdpdGhkcmF3BQNyc3IFBHVzZXIFD3dpdGhkcmF3bkFtb3VudAMJAAACBQFlBQFlBQ93aXRoZHJhd25BbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF3JlcGF5V2l0aEF0b2tlbkludGVybmFsAgR1c2VyB3BheW1lbnQECGFUb2tlbklkCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFB3BheW1lbnQHYXNzZXRJZAIeYmFkIGFzc2V0SWQ6IHdhdmVzIG5vdCBhbGxvd2VkBAF0CQEJcmVzZXJ2ZUJ5AgUFYVRJZFMFCGFUb2tlbklkBAJzaAkBAnNSAQkApQgBBQF0AwkAAAIFAnNoBQJzaAQDYW10CQEFYXNJbnQBCQD8BwQFAXQCHnJlcGxlbmlzaEZvclJlcGF5V2l0aEF0b2tlbkZvcgkAzAgCBQR1c2VyBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFA2FtdAUDYW10BAFjCQEFYXNJbnQBCQD8BwQFAXQCEWNvbGxhcHNlRm9yQW1vdW50CQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFjBQFjAwkAZgIFA2FtdAUBYwkAAgECEXJlcGF5aW5nIHRvbyBtdWNoBANwUncJAQJ1UwUJAKUIAQUBdAIGYm9ycm93BQR1c2VyCQEBLQEFAWMJAQEtAQUBYwMJAAACBQNwUncFA3BSdwQEcFJ3MgkBAnVTBQkApQgBBQF0AgdkZXBvc2l0BQR1c2VyCQBlAgUDYW10BQFjCQEBLQEFAWMDCQAAAgUEcFJ3MgUEcFJ3MgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuHAFpAQppbml0aWFsaXplAQJjYQkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFC2NvbmZpZ1N0b3JlBQJjYQUDbmlsAWkBB2RlcG9zaXQCA3JzcgVhc0NvbAkBCWRvRGVwb3NpdAMFAWkFA3JzcgUFYXNDb2wBaQEKZGVwb3NpdFJlZgMDcnNyBWFzQ29sA3JlZgkBCWRvRGVwb3NpdAMFAWkFA3JzcgUFYXNDb2wBaQEFcmVwYXkBA3JzcgQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAZyZXBhaWQJAQVhc0ludAEJAPwHBAkBA3ZsUgEFA3JzcgIIcmVwYXlGb3IJAMwIAgUEdXNlcgUDbmlsCAUBaQhwYXltZW50cwMJAAACBQZyZXBhaWQFBnJlcGFpZAQDcFJ3CQECdVMFBQNyc3ICBmJvcnJvdwUEdXNlcgkBAS0BBQZyZXBhaWQJAQEtAQUGcmVwYWlkAwkAAAIFA3BSdwUDcFJ3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbWludEF0b2tlbgIIYVRva2VuSWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBdAkBCXJlc2VydmVCeQIFBWFUSWRTBQhhVG9rZW5JZAQCc2gJAQJzUgEJAKUIAQUBdAMJAAACBQJzaAUCc2gEBmFjdHVhbAkBBWFzSW50AQkA/AcEBQF0Ag1taW50QXRva2VuRm9yCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQZhY3R1YWwFBmFjdHVhbAQDcFJ3CQECdVMFCQClCAEFAXQCB2RlcG9zaXQFBHVzZXIJAQEtAQUGYWN0dWFsAAADCQAAAgUDcFJ3BQNwUncEA2JwdQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgdtaW50aW5nAwkAAAIFA2JwdQUDYnB1BAJwYwkBEmVuc3VyZU5vUHJvaGliaXRlZAMFBHVzZXIFA2JwdQkApQgBBQF0AwkAAAIFAnBjBQJwYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3JlcGxlbmlzaFdpdGhBdG9rZW4ABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQERZW5zdXJlTm9Qcm90ZWN0ZWQBBQR1c2VyAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAhhVG9rZW5JZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIOYmFkIGFzc2V0SWQodykEA3JzcgkBCXJlc2VydmVCeQIFBWFUSWRTBQhhVG9rZW5JZAQCc2gJAQJzUgEJAKUIAQUDcnNyAwkAAAIFAnNoBQJzaAQDYW10CQEFYXNJbnQBCQD8BwQFA3JzcgIWcmVwbGVuaXNoV2l0aEF0b2tlbkZvcgkAzAgCBQR1c2VyBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFA2FtdAUDYW10BANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyBQNhbXQAAAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGaW1wb3J0BQNyc3IFBHVzZXIFA2FtdAMJAAACBQFlBQFlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENcmVkZWVtQXRva2VucwAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAhhVG9rZW5JZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAISYmFkIGFzc2V0SWQ6IFdBVkVTBANyc3IJAQlyZXNlcnZlQnkCBQVhVElkUwUIYVRva2VuSWQEAnNoCQECc1IBCQClCAEFA3JzcgMJAAACBQJzaAUCc2gEA2FtdAkBBWFzSW50AQkA/AcEBQNyc3ICEHJlZGVlbUF0b2tlbnNGb3IJAMwIAgUEdXNlcgUDbmlsCAUBaQhwYXltZW50cwMJAAACBQNhbXQFA2FtdAQDcFJ3CQECdVMFCQClCAEFA3JzcgIHZGVwb3NpdAUEdXNlcgAACQEBLQEFA2FtdAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGcmVkZWVtBQNyc3IFBHVzZXIFA2FtdAMJAAACBQFlBQFlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcCB2Fzc2V0SWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBcgkBCXJlc2VydmVCeQIFBGFJZFMFB2Fzc2V0SWQEBnJlc3VsdAkBBWFzSW50AQkBCndkSW50ZXJuYWwEBQR1c2VyBQFyBQNhbXQCC3dpdGhkcmF3Rm9yAwkAAAIFBnJlc3VsdAUGcmVzdWx0BANicHUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgILd2l0aGRyYXdpbmcDCQAAAgUDYnB1BQNicHUEAnBjCQESZW5zdXJlTm9Qcm9oaWJpdGVkAwUEdXNlcgUDYnB1CQClCAEFAXIDCQAAAgUCcGMFAnBjCQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXdpdGhkcmF3MgIDcnNyA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAdyc3JBZGRyCQEDdmxSAQUDcnNyBAZhY3R1YWwJAQVhc0ludAEJAPwHBAUHcnNyQWRkcgILd2l0aGRyYXdGb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFBmFjdHVhbAUGYWN0dWFsBANwUncJAQJ1UwUFA3JzcgIHZGVwb3NpdAUEdXNlcgkBAS0BBQZhY3R1YWwJAQEtAQUGYWN0dWFsAwkAAAIFA3BSdwUDcFJ3BANicHUDCQEIY29udGFpbnMCBQtsaXF1aWRhdG9ycwUEdXNlcgAABAFlCQELZW5zdXJlTGltaXQEAgh3aXRoZHJhdwUHcnNyQWRkcgUEdXNlcgUGYWN0dWFsAwkAAAIFAWUFAWUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIMd2l0aGRyYXdpbmcyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJwYwkBEmVuc3VyZU5vUHJvaGliaXRlZAMFBHVzZXIFA2JwdQUDcnNyAwkAAAIFAnBjBQJwYwkAlAoCBQNuaWwFBmFjdHVhbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFwcm90ZWN0Q29sbGF0ZXJhbAEDcnNyBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBcgkBA3ZsUgEFA3JzcgQDYW10CQEFYXNJbnQBCQEKd2RJbnRlcm5hbAQFBHVzZXIFAXIA////////////AQIOd2l0aGRyYXdUb01haW4DCQAAAgUDYW10BQNhbXQECmFzc2V0SWRTdHIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFAXIFBGFJZFMEAXAJAPwHBAUQcHJvdGVjdGVkUmVzZXJ2ZQIJc3VwcGx5Rm9yCQDMCAIFBHVzZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBC3B1cmVBc3NldElkAQUKYXNzZXRJZFN0cgUDYW10BQNuaWwDCQAAAgUBcAUBcAQCcGMJARJlbnN1cmVOb1Byb2hpYml0ZWQDBQR1c2VyCAkBCXVzZXJQb3dlcgEFBHVzZXICXzIFA3JzcgMJAAACBQJwYwUCcGMJAJQKAgUDbmlsBQNhbXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEbd2l0aGRyYXdQcm90ZWN0ZWRDb2xsYXRlcmFsAgdhc3NldElkA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWEJAQVhc0ludAEJAPwHBAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRBwcm90ZWN0ZWRSZXNlcnZlAhNubyBwcm90ZWN0ZWRSZXNlcnZlAgt3aXRoZHJhd0ZvcgkAzAgCBQR1c2VyCQDMCAIFB2Fzc2V0SWQJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFhBQFhBAJ2YQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAhV3aXRoZHJhd2luZyBwcm90ZWN0ZWQDCQAAAgUCdmEFAnZhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETbm9ybWFsaXplQ29sbGF0ZXJhbAEDcnNyBARhZGRyCQClCAEIBQFpBmNhbGxlcgQCckEJAQN2bFIBBQNyc3IDCQAAAgUCckEFAnJBBAJzaAkBAnNSAQUDcnNyAwkAAAIFAnNoBQJzaAQKYXNzZXRJZFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAnJBBQRhSWRTCQCsAgICE25vIGFzc2V0SWQgaW4gcnN2OiAFA3JzcgQCbWMJAQ5tb3ZlQ29sbGF0ZXJhbAQFBGFkZHIFCmFzc2V0SWRTdHIFAnJBBQNyc3IDCQAAAgUCbWMFAm1jBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGYm9ycm93Agdhc3NldElkA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEA3JzcgkBCXJlc2VydmVCeQIFBGFJZFMFB2Fzc2V0SWQEAnNoCQECc1IBCQClCAEFA3JzcgMJAAACBQJzaAUCc2gEAWEJAPwHBAUDcnNyAglib3Jyb3dGb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWEFAWEEA3BSdwkBAnVTBQkApQgBBQNyc3ICBmJvcnJvdwUEdXNlcgUDYW10BQNhbXQDCQAAAgUDcFJ3BQNwUncEAWUJAQtlbnN1cmVMaW1pdAQCBmJvcnJvdwUDcnNyBQR1c2VyBQNhbXQDCQAAAgUBZQUBZQQDYnB1CQEFYXNJbnQBCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICCWJvcnJvd2luZwMJAAACBQNicHUFA2JwdQQCcGMJAR1lbnN1cmVOb1Byb2hpYml0ZWRDb2xsYXRlcmFscwEFBHVzZXIDCQAAAgUCcGMFAnBjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHYm9ycm93MgIDcnNyA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAXIJAQN2bFIBBQNyc3IEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAFhCQD8BwQFAXICCWJvcnJvd0ZvcgkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYQUBYQQDcFJ3CQECdVMFBQNyc3ICBmJvcnJvdwUEdXNlcgUDYW10BQNhbXQDCQAAAgUDcFJ3BQNwUncEAWUJAQtlbnN1cmVMaW1pdAQCBmJvcnJvdwUBcgUEdXNlcgUDYW10AwkAAAIFAWUFAWUEA2JwdQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAglib3Jyb3dpbmcDCQAAAgUDYnB1BQNicHUEAnBjCQEdZW5zdXJlTm9Qcm9oaWJpdGVkQ29sbGF0ZXJhbHMBBQR1c2VyAwkAAAIFAnBjBQJwYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGNvbGxhcHNlAgNyc3IDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEAWMJAQVhc0ludAEJAPwHBAkBA3ZsUgEFA3JzcgIRY29sbGFwc2VGb3JBbW91bnQJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWMFAWMEA3BSdwkBAnVTBQUDcnNyAgZib3Jyb3cFBHVzZXIJAQEtAQUBYwkBAS0BBQFjAwkAAAIFA3BSdwUDcFJ3BARwUncyCQECdVMFBQNyc3ICB2RlcG9zaXQFBHVzZXIJAQEtAQUBYwkBAS0BBQFjAwkAAAIFBHBSdzIFBHBSdzIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbUViUmV3YXJkMgIDYW10BGxvY2sEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFjCQEFYXNJbnQBCQD8BwQFA2ViUgIQY2xhaW1FYlJld2FyZEZvcgkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYwUBYwkBDGxvY2tPclBheW91dAMIBQFpBmNhbGxlcgUBYwUEbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxjbGFpbVJld2FyZDIDA3JzcgNhbXQEbG9jawQBdgkBA3ZsUgEFA3JzcgMJAAACBQF2BQF2BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYwkBBWFzSW50AQkA/AcEBQJWRAIOY2xhaW1SZXdhcmRGb3IJAMwIAgUDcnNyCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFjBQFjCQEMbG9ja09yUGF5b3V0AwgFAWkGY2FsbGVyBQFjBQRsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBIWNsYWltQWxsUmV3YXJkc0FuZEFsbEViQXZhaWxhYmxlMgIEbG9jaw11bnN0YWtlTGVnYWN5BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQCY3IJARZjbGFpbUFsbFJld2FyZHNGb3JVc2VyAQUEdXNlcgMJAAACBQJjcgUCY3IEBGNyTHAJARhjbGFpbUFsbExwUmV3YXJkc0ZvclVzZXIBBQR1c2VyAwkAAAIFBGNyTHAFBGNyTHAEAmxBAwUNdW5zdGFrZUxlZ2FjeQkBBWFzSW50AQkA/AcEBQJ2UwITdW5zdGFrZUFsbFZpcmVzRnJvbQkAzAgCBQR1c2VyBQNuaWwFA25pbAAAAwkAAAIFAmxBBQJsQQkBDGxvY2tPclBheW91dAMIBQFpBmNhbGxlcgkAZAIJAGQCBQJjcgUEY3JMcAUCbEEFBGxvY2sJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWZGlzYWJsZVVzZUFzQ29sbGF0ZXJhbAEDcnNyBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBZAkA/AcECQEDdmxSAQUDcnNyAhlkaXNhYmxlVXNlQXNDb2xsYXRlcmFsRm9yCQDMCAIFBHVzZXIFA25pbAUDbmlsAwkAAAIFAWQFAWQEAnZhCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICGmNoYW5naW5nIGNvbGxhdGVyYWwgc3RhdHVzAwkAAAIFAnZhBQJ2YQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxvY2tWaXJlcwIGZmFjdG9yB21pZ3JhdGUEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFhCQEEc3BmcgADCQAAAgUBYQUBYQQNbWlncmF0ZUFtb3VudAMFB21pZ3JhdGUJAQVhc0ludAEJAPwHBAUCdlMCE3Vuc3Rha2VBbGxWaXJlc0Zyb20JAMwIAgUEdXNlcgUDbmlsBQNuaWwAAAQFdG90YWwJAGQCBQ1taWdyYXRlQW1vdW50CQEMdmlyZXNQYXltZW50AQUBaQQBbAkA/AcEBQJkQwIHbG9ja0ZvcgkAzAgCBQR1c2VyCQDMCAIFBmZhY3RvcgUDbmlsAwkAAAIFBXRvdGFsAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMdmlyZXNBc3NldElkBQV0b3RhbAUDbmlsAwkAAAIFAWwFAWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARh3aXRoZHJhd0FsbFBvc3NpYmxlVmlyZXMABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYQkBBHNwZnIAAwkAAAIFAWEFAWEEEXN0YWtlclZpcmVzQW1vdW50CQEFYXNJbnQBCQD8BwQFAnZTAhN1bnN0YWtlQWxsVmlyZXNGcm9tCQDMCAIFBHVzZXIFA25pbAUDbmlsAwkAAAIFEXN0YWtlclZpcmVzQW1vdW50BRFzdGFrZXJWaXJlc0Ftb3VudAQBdQkA/AcEBQJkQwITd2l0aGRyYXdVbmxvY2tlZEZvcgkAzAgCBQR1c2VyBQNuaWwFA25pbAMJAAACBQF1BQF1CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgURc3Rha2VyVmlyZXNBbW91bnQFDHZpcmVzQXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF2NsYWltUHJvdG9jb2xQcm9maXRGcm9tAgRmcm9tBnJlbG9jawQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWEJAQRzcGZyAAMJAAACBQFhBQFhBAF1CQD8BwQFAmRDAgtjbGFpbVByb2ZpdAkAzAgCBQRmcm9tCQDMCAIFBHVzZXIJAMwIAgUGcmVsb2NrBQNuaWwFA25pbAMJAAACBQF1BQF1BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVd2l0aGRyYXdVbmxvY2tlZFZpcmVzAAQBYQkBBHNwZnIAAwkAAAIFAWEFAWEEAXUJAPwHBAUCZEMCE3dpdGhkcmF3VW5sb2NrZWRGb3IJAMwIAgkApQgBCAUBaQZjYWxsZXIFA25pbAUDbmlsAwkAAAIFAXUFAXUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpsb2NrU3VwcGx5AgdyZXNlcnZlBnBlcmlvZAQDcnNyCQEDdmxSAQUHcmVzZXJ2ZQQEdXNlcgkApQgBCAUBaQZjYWxsZXIEBmNoZWNrcwkBEWVuc3VyZU5vUHJvdGVjdGVkAQUEdXNlcgMJAAACBQZjaGVja3MFBmNoZWNrcwQIYVRva2VuSWQJAQV2YWx1ZQEJAQtwdXJlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQNyc3ICCGFUb2tlbklkAhZubyBhVG9rZW5JZCBpbiByZXNlcnZlBAltaWdyYXRpb24DCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABQR1bml0AwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUIYVRva2VuSWQFBHVuaXQDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQELcHVyZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyBQRhSWRTAhVubyBhc3NldElkIGluIHJlc2VydmUEAnNoCQECc1IBBQdyZXNlcnZlAwkAAAIFAnNoBQJzaAQGYWN0aW9uCQD8BwQFA3JzcgIKZGVwb3NpdEZvcgkAzAgCBQR1c2VyCQDMCAIGBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFBmFjdGlvbgUGYWN0aW9uBANhbXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANwUncJAQJ1UwUFB3Jlc2VydmUCB2RlcG9zaXQFBHVzZXIFA2FtdAUDYW10AwkAAAIFA3BSdwUDcFJ3BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQISYmFkIGFzc2V0IGF0dGFjaGVkAwkAAAIFCW1pZ3JhdGlvbgUJbWlncmF0aW9uBARtaW50BAJzaAkBAnNSAQUHcmVzZXJ2ZQMJAAACBQJzaAUCc2gEBmFjdHVhbAkBBWFzSW50AQkA/AcEBQNyc3ICD21pbnRBdG9rZW5Gb3JUbwkAzAgCBQR1c2VyCQDMCAIA////////////AQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFBmFjdHVhbAUGYWN0dWFsBANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyCQEBLQEFBmFjdHVhbAAAAwkAAAIFA3BSdwUDcFJ3BAJ2YQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgxsb2NrLW1pbnRpbmcDCQAAAgUCdmEFAnZhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEbWludAUEbWludAQHYmFsYW5jZQkA8AcCBQR0aGlzBQhhVG9rZW5JZAQBcgkA/AcEBQZsb2NrZXICBmxvY2tMUAkAzAgCBQR1c2VyCQDMCAIFBnBlcmlvZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhhVG9rZW5JZAUHYmFsYW5jZQUDbmlsAwkAAAIFAXIFAXIJAJQKAgUDbmlsBQdiYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnJlcGF5V2l0aEF0b2tlbkZvcgEEdXNlcgQGY2hlY2tzAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQR1c2VyCQACAQIIYmFkIHVzZXIGAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQEXcmVwYXlXaXRoQXRva2VuSW50ZXJuYWwCBQR1c2VyCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVwYXlXaXRoQXRva2VuAAkBF3JlcGF5V2l0aEF0b2tlbkludGVybmFsAgkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAAFpAQhyZXBheUZvcgIDcnNyBHVzZXIEBmNoZWNrcwMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUEdXNlcgkAAgECCGJhZCB1c2VyBgMJAAACBQZjaGVja3MFBmNoZWNrcwQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEBnJlcGFpZAkBBWFzSW50AQkA/AcECQEDdmxSAQUDcnNyAghyZXBheUZvcgkAzAgCBQR1c2VyBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFBnJlcGFpZAUGcmVwYWlkBANwUncJAQJ1UwUFA3JzcgIGYm9ycm93BQR1c2VyCQEBLQEFBnJlcGFpZAkBAS0BBQZyZXBhaWQDCQAAAgUDcFJ3BQNwUncFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhoZWFsdGhPZgEHYWRkcmVzcwQNJHQwMjM2OTcyMzc0OAkBBmFzSW50MwEJAQl1c2VyUG93ZXIBBQdhZGRyZXNzBAJicAgFDSR0MDIzNjk3MjM3NDgCXzEEA2JwdQgFDSR0MDIzNjk3MjM3NDgCXzIEBmlnbm9yZQgFDSR0MDIzNjk3MjM3NDgCXzMJAJQKAgUDbmlsCQCUCgIFAmJwBQNicHUA4Naspg==", "chainId": 87, "height": 3325899, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FZniNb4zdWo1D1PGgUXqTsHnkPeXJG7fehrtyDx9UHac Next: 8mE9Moh8r8tvc8KXAErLDCj5eDwbRtXNfEfGSgxj3CRA Diff:
OldNewDifferences
1313 }
1414
1515
16-func assetStrToId (assetId) = if ((assetId == "WAVES"))
17- then unit
18- else fromBase58String(assetId)
16+func pureAssetId (assetId) = {
17+ let i = split(assetId, "_")[0]
18+ if ((i == "WAVES"))
19+ then unit
20+ else fromBase58String(i)
21+ }
1922
2023
2124 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
4851
4952
5053 let configStore = "config"
51-
52-let reservesStore = "reserves"
5354
5455 let aTIdS = "aTokenId"
5556
229230 0
230231 }
231232 func fold (totals,r) = {
232- let $t087958841 = totals
233- let totalD = $t087958841._1
234- let totalB = $t087958841._2
235- let numberOfBorrows = $t087958841._3
233+ let $t087988844 = totals
234+ let totalD = $t087988844._1
235+ let totalB = $t087988844._2
236+ let numberOfBorrows = $t087988844._3
236237 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
237238 let cf = collateralFactor(rsr)
238239 let lt = liquidationThreshold(rsr)
239- let $t089959079 = userBalance(rsr, user)
240- let token = $t089959079._1
241- let asset = $t089959079._2
242- let depositUsd = $t089959079._3
243- let debt = $t089959079._4
244- let debtUsd = $t089959079._5
245- let asCollateral = $t089959079._6
240+ let $t089989082 = userBalance(rsr, user)
241+ let token = $t089989082._1
242+ let asset = $t089989082._2
243+ let depositUsd = $t089989082._3
244+ let debt = $t089989082._4
245+ let debtUsd = $t089989082._5
246+ let asCollateral = $t089989082._6
246247 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
247248 then 1
248249 else 0))
279280
280281
281282 func getUserHealth (account) = {
282- let $t098349885 = asInt3(userPower(account))
283- let bp = $t098349885._1
284- let bpu = $t098349885._2
285- let ignore = $t098349885._3
283+ let $t098379888 = asInt3(userPower(account))
284+ let bp = $t098379888._1
285+ let bpu = $t098379888._2
286+ let ignore = $t098379888._3
286287 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
287288 }
288289
289290
290291 func validateAfter (user,op) = {
291- let $t0999710028 = userPower(user)
292- let bp = $t0999710028._1
293- let bpu = $t0999710028._2
292+ let $t01000010031 = userPower(user)
293+ let bp = $t01000010031._1
294+ let bpu = $t01000010031._2
294295 let accHealth = (((bp - bpu) * factorsBase) / bp)
295296 if (if ((bp == 0))
296297 then (bpu == 0)
436437 let amt = asInt(invoke(protectedReserve, "withdrawToMain", [addr, assetStr], nil))
437438 if ((amt == amt))
438439 then {
439- let assetId = if ((assetStr == "WAVES"))
440- then unit
441- else fromBase58String(assetStr)
442- let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(assetId, amt)])
440+ let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(pureAssetId(assetStr), amt)])
443441 if ((dep == dep))
444442 then {
445443 let prop = uS(reserveStr, "deposit", addr, amt, amt)
704702 let amt = asInt(wdInternal(user, r, -1, "withdrawToMain"))
705703 if ((amt == amt))
706704 then {
707- let assetId = assetStrToId(getStringValue(r, aIdS))
708- let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(assetId, amt)])
705+ let assetIdStr = getStringValue(r, aIdS)
706+ let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(pureAssetId(assetIdStr), amt)])
709707 if ((p == p))
710708 then {
711709 let pc = ensureNoProhibited(user, userPower(user)._2, rsr)
10051003 let checks = ensureNoProtected(user)
10061004 if ((checks == checks))
10071005 then {
1008- let aTokenId = value(assetStrToId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
1006+ let aTokenId = value(pureAssetId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
10091007 let migration = if ((size(i.payments) == 0))
10101008 then unit
10111009 else if ((i.payments[0].assetId == aTokenId))
10121010 then unit
1013- else if ((i.payments[0].assetId == assetStrToId(valueOrErrorMessage(getString(rsr, "assetId"), "no assetId in reserve"))))
1011+ else if ((i.payments[0].assetId == pureAssetId(valueOrErrorMessage(getString(rsr, aIdS), "no assetId in reserve"))))
10141012 then {
10151013 let sh = sR(reserve)
10161014 if ((sh == sh))
11151113
11161114 @Callable(i)
11171115 func healthOf (address) = {
1118- let $t02376923820 = asInt3(userPower(address))
1119- let bp = $t02376923820._1
1120- let bpu = $t02376923820._2
1121- let ignore = $t02376923820._3
1116+ let $t02369723748 = asInt3(userPower(address))
1117+ let bp = $t02369723748._1
1118+ let bpu = $t02369723748._2
1119+ let ignore = $t02369723748._3
11221120 $Tuple2(nil, $Tuple2(bp, bpu))
11231121 }
11241122
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let factorsBase = 1000
55
66 func fCi (value,numerator,denominator) = {
77 let cand = fraction(value, numerator, denominator)
88 let D = 3037000499
99 let exact = ((((cand % D) * (denominator % D)) % D) == (((value % D) * (numerator % D)) % D))
1010 if (exact)
1111 then cand
1212 else (cand + 1)
1313 }
1414
1515
16-func assetStrToId (assetId) = if ((assetId == "WAVES"))
17- then unit
18- else fromBase58String(assetId)
16+func pureAssetId (assetId) = {
17+ let i = split(assetId, "_")[0]
18+ if ((i == "WAVES"))
19+ then unit
20+ else fromBase58String(i)
21+ }
1922
2023
2124 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
2225 then StringEntry(key, value)
2326 else throw(("already initialized: " + key))
2427
2528
2629 func asInt (value) = match value {
2730 case int: Int =>
2831 int
2932 case _ =>
3033 throw("m:1")
3134 }
3235
3336
3437 func asInt3 (value) = match value {
3538 case x: (Int, Int, Int) =>
3639 x
3740 case t =>
3841 throw("2")
3942 }
4043
4144
4245 func asUserBalanceData (value) = match value {
4346 case x: (Int, Int, Int, Int, Int, Boolean) =>
4447 x
4548 case t =>
4649 throw("3")
4750 }
4851
4952
5053 let configStore = "config"
51-
52-let reservesStore = "reserves"
5354
5455 let aTIdS = "aTokenId"
5556
5657 let aIdS = "assetId"
5758
5859 let configAddress = addressFromStringValue(getStringValue(this, configStore))
5960
6061 let locker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "lp_locker"), "no lp_locker address in config")), "bad lp_locker address in config")
6162
6263 let reservesStr = valueOrErrorMessage(getString(configAddress, "primary_reserves"), "no reserves registered")
6364
6465 let reserves = split_4C(reservesStr, "|")
6566
6667 let ebR = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "eb_rewards"), "no eb_rewards"))
6768
6869 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "main: no viresMinter")), "bad minter")
6970
7071 let maybevS = getString(configAddress, "vires_staker")
7172
7273 let vS = addressFromStringValue(valueOrErrorMessage(maybevS, "no vires_staker"))
7374
7475 let dC = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "bad div")
7576
7677 let mVD = match getString(configAddress, "vires_distributor") {
7778 case d: String =>
7879 addressFromStringValue(d)
7980 case _ =>
8081 unit
8182 }
8283
8384 let VD = valueOrErrorMessage(mVD, "no distr")
8485
8586 let limiter = match getString(configAddress, "limiter") {
8687 case d: String =>
8788 addressFromStringValue(d)
8889 case _ =>
8990 unit
9091 }
9192
9293 let maybeViresAssetId = getString(viresMinter, aIdS)
9394
9495 let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(maybeViresAssetId, "no vires id")), "invalid vires id")
9596
9697 func viresPayment (i) = if ((size(i.payments) == 0))
9798 then 0
9899 else if ((i.payments[0].assetId != viresAssetId))
99100 then throw("not vires")
100101 else i.payments[0].amount
101102
102103
103104 func assetIdOfReserve (rsr) = valueOrErrorMessage(getString(rsr, aIdS), "no assetId in rsr")
104105
105106
106107 func collateralFactor (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_CollateralFactor")), "no 1")
107108
108109
109110 func liquidationThreshold (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_LiquidationThreshold")), "no 2")
110111
111112
112113 let accountHealthThreshold = valueOrErrorMessage(getInteger(configAddress, "account_health_threshold"), "no 4")
113114
114115 let accountHealthOverlap = valueOrErrorMessage(getInteger(configAddress, "account_health_overlap"), "no 5")
115116
116117 let liquidators = valueOrElse(getString(configAddress, "liquidators"), "")
117118
118119 func reserveBy (store,value) = {
119120 func fold (a,r) = match a {
120121 case found: Address =>
121122 found
122123 case _ =>
123124 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
124125 if ((valueOrErrorMessage(getString(rsr, store), ("rsr has no " + store)) == value))
125126 then rsr
126127 else unit
127128 }
128129
129130 match let $l = reserves
130131 let $s = size($l)
131132 let $acc0 = unit
132133 func $f0_1 ($a,$i) = if (($i >= $s))
133134 then $a
134135 else fold($a, $l[$i])
135136
136137 func $f0_2 ($a,$i) = if (($i >= $s))
137138 then $a
138139 else throw("List size exceeds 20")
139140
140141 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) {
141142 case found: Address =>
142143 found
143144 case _ =>
144145 throw(("unknown " + store))
145146 }
146147 }
147148
148149
149150 func vlR (r) = if (contains(reservesStr, r))
150151 then valueOrErrorMessage(addressFromString(r), "main: bad rsr")
151152 else throw(("unknown rsr:" + r))
152153
153154
154155 func userBalance (rsr,user) = asUserBalanceData(invoke(rsr, "userBalance", [user], nil))
155156
156157
157158 let maybeProtected = match getString(configAddress, "protected_reserve") {
158159 case pds: String =>
159160 valueOrErrorMessage(addressFromString(pds), "bad protected")
160161 case _ =>
161162 unit
162163 }
163164
164165 let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
165166
166167 let prohibitedCollateralReserves = match getString(configAddress, "prohibitedCollateralReserves") {
167168 case s: String =>
168169 split(s, "|")
169170 case _ =>
170171 nil
171172 }
172173
173174 func ensureNoProhibitedCollaterals (user) = {
174175 func foldFunc (a,prohibitedReserve) = {
175176 let atb = valueOrElse(getInteger(addressFromStringValue(prohibitedReserve), (user + "_aTokenBalance")), 0)
176177 if ((atb > 0))
177178 then throw((((("operation denied: user has deposit in " + prohibitedReserve) + ": ") + toString(atb)) + "(lp tokens)"))
178179 else true
179180 }
180181
181182 let $l = prohibitedCollateralReserves
182183 let $s = size($l)
183184 let $acc0 = true
184185 func $f0_1 ($a,$i) = if (($i >= $s))
185186 then $a
186187 else foldFunc($a, $l[$i])
187188
188189 func $f0_2 ($a,$i) = if (($i >= $s))
189190 then $a
190191 else throw("List size exceeds 15")
191192
192193 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
193194 }
194195
195196
196197 func ensureNoProhibited (user,bpu,reserve) = if (if ((bpu == 0))
197198 then true
198199 else isDefined(indexOf(prohibitedCollateralReserves, reserve)))
199200 then true
200201 else ensureNoProhibitedCollaterals(user)
201202
202203
203204 func ensureNoProtected (user) = {
204205 let has = match maybeProtected {
205206 case pa: Address =>
206207 valueOrElse(getBoolean(pa, ("protected_collateral_" + user)), false)
207208 case _ =>
208209 false
209210 }
210211 if (has)
211212 then throw("disallowed")
212213 else unit
213214 }
214215
215216
216217 func ensureLimit (action,rsr,user,amount) = match limiter {
217218 case l: Address =>
218219 asInt(invoke(l, "validateLimit", [action, toString(rsr), user, amount], nil))
219220 case _ =>
220221 true
221222 }
222223
223224
224225 func userPower (user) = {
225226 let protectedDeposit = match maybeProtected {
226227 case pa: Address =>
227228 asInt(invoke(pa, "borrowPower", [user], nil))
228229 case _ =>
229230 0
230231 }
231232 func fold (totals,r) = {
232- let $t087958841 = totals
233- let totalD = $t087958841._1
234- let totalB = $t087958841._2
235- let numberOfBorrows = $t087958841._3
233+ let $t087988844 = totals
234+ let totalD = $t087988844._1
235+ let totalB = $t087988844._2
236+ let numberOfBorrows = $t087988844._3
236237 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
237238 let cf = collateralFactor(rsr)
238239 let lt = liquidationThreshold(rsr)
239- let $t089959079 = userBalance(rsr, user)
240- let token = $t089959079._1
241- let asset = $t089959079._2
242- let depositUsd = $t089959079._3
243- let debt = $t089959079._4
244- let debtUsd = $t089959079._5
245- let asCollateral = $t089959079._6
240+ let $t089989082 = userBalance(rsr, user)
241+ let token = $t089989082._1
242+ let asset = $t089989082._2
243+ let depositUsd = $t089989082._3
244+ let debt = $t089989082._4
245+ let debtUsd = $t089989082._5
246+ let asCollateral = $t089989082._6
246247 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
247248 then 1
248249 else 0))
249250 let effectiveDepositUsd = if (asCollateral)
250251 then depositUsd
251252 else 0
252253 let overlapUsd = min([debtUsd, effectiveDepositUsd])
253254 let overlapCharge = fCi(overlapUsd, accountHealthOverlap, factorsBase)
254255 if ((debtUsd > effectiveDepositUsd))
255256 then $Tuple3(totalD, ((totalB + fraction((debtUsd - effectiveDepositUsd), factorsBase, lt)) + overlapCharge), totalBorrows)
256257 else $Tuple3((totalD + fraction((effectiveDepositUsd - debtUsd), cf, factorsBase)), (totalB + overlapCharge), totalBorrows)
257258 }
258259
259260 let r = {
260261 let $l = reserves
261262 let $s = size($l)
262263 let $acc0 = $Tuple3(protectedDeposit, 0, 0)
263264 func $f0_1 ($a,$i) = if (($i >= $s))
264265 then $a
265266 else fold($a, $l[$i])
266267
267268 func $f0_2 ($a,$i) = if (($i >= $s))
268269 then $a
269270 else throw("List size exceeds 20")
270271
271272 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
272273 }
273274 if (if ((protectedDeposit > 0))
274275 then (r._3 > 4)
275276 else false)
276277 then throw("can't have more than 4 borrows")
277278 else r
278279 }
279280
280281
281282 func getUserHealth (account) = {
282- let $t098349885 = asInt3(userPower(account))
283- let bp = $t098349885._1
284- let bpu = $t098349885._2
285- let ignore = $t098349885._3
283+ let $t098379888 = asInt3(userPower(account))
284+ let bp = $t098379888._1
285+ let bpu = $t098379888._2
286+ let ignore = $t098379888._3
286287 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
287288 }
288289
289290
290291 func validateAfter (user,op) = {
291- let $t0999710028 = userPower(user)
292- let bp = $t0999710028._1
293- let bpu = $t0999710028._2
292+ let $t01000010031 = userPower(user)
293+ let bp = $t01000010031._1
294+ let bpu = $t01000010031._2
294295 let accHealth = (((bp - bpu) * factorsBase) / bp)
295296 if (if ((bp == 0))
296297 then (bpu == 0)
297298 else false)
298299 then 0
299300 else if (if ((bp == 0))
300301 then (bpu > 0)
301302 else false)
302303 then throw(((op + ": breaching liquidation threshold(bp=0, bpu=") + toString(bpu)))
303304 else if ((accountHealthThreshold > accHealth))
304305 then throw((((((((op + ": breaching liquidation threshold(bp=") + toString(bp)) + ", bpu=") + toString(bpu)) + ", health=") + toString(accHealth)) + ")"))
305306 else bpu
306307 }
307308
308309
309310 func uS (rsr,action,user,userChange,streamChange) = match mVD {
310311 case a: Address =>
311312 invoke(a, "onAction", [rsr, action, user, userChange, streamChange], nil)
312313 case _ =>
313314 unit
314315 }
315316
316317
317318 func moveStream (rsr,action,from,string,amt) = match mVD {
318319 case a: Address =>
319320 invoke(a, "move", [rsr, action, from, string, amt], nil)
320321 case _ =>
321322 unit
322323 }
323324
324325
325326 func sR (rsr) = match mVD {
326327 case a: Address =>
327328 invoke(a, "syncHeight", [rsr], nil)
328329 case _ =>
329330 unit
330331 }
331332
332333
333334 func lockOrPayout (recipient,amt,lock) = if (!(lock))
334335 then [ScriptTransfer(recipient, amt, viresAssetId)]
335336 else {
336337 let doLock = invoke(dC, "lockFor", [toString(recipient), 1], [AttachedPayment(viresAssetId, amt)])
337338 if ((doLock == doLock))
338339 then nil
339340 else throw("Strict value is not equal to itself.")
340341 }
341342
342343
343344 func doDeposit (i,rsr,asCol) = {
344345 let user = toString(i.caller)
345346 let checks = ensureNoProtected(user)
346347 if ((checks == checks))
347348 then {
348349 let sh = sR(rsr)
349350 if ((sh == sh))
350351 then {
351352 let action = invoke(vlR(rsr), "depositFor", [user, asCol], i.payments)
352353 if ((action == action))
353354 then {
354355 let amt = i.payments[0].amount
355356 let pRw = uS(rsr, "deposit", user, amt, amt)
356357 if ((pRw == pRw))
357358 then {
358359 let va = if (!(asCol))
359360 then validateAfter(user, "depositing")
360361 else 0
361362 if ((va == va))
362363 then nil
363364 else throw("Strict value is not equal to itself.")
364365 }
365366 else throw("Strict value is not equal to itself.")
366367 }
367368 else throw("Strict value is not equal to itself.")
368369 }
369370 else throw("Strict value is not equal to itself.")
370371 }
371372 else throw("Strict value is not equal to itself.")
372373 }
373374
374375
375376 let rewardReserves = split_4C(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
376377
377378 func claimAllRewardsForUser (user) = {
378379 let claimedEb = asInt(invoke(ebR, "claimEbRewardFor", [user, -1], nil))
379380 if ((claimedEb == claimedEb))
380381 then {
381382 func fold (acc,rsr) = {
382383 let claimed = asInt(invoke(VD, "claimRewardFor", [rsr, user, -1], nil))
383384 if ((claimed == claimed))
384385 then (acc + claimed)
385386 else throw("Strict value is not equal to itself.")
386387 }
387388
388389 let claimedTotal = {
389390 let $l = rewardReserves
390391 let $s = size($l)
391392 let $acc0 = 0
392393 func $f0_1 ($a,$i) = if (($i >= $s))
393394 then $a
394395 else fold($a, $l[$i])
395396
396397 func $f0_2 ($a,$i) = if (($i >= $s))
397398 then $a
398399 else throw("List size exceeds 20")
399400
400401 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
401402 }
402403 (claimedTotal + claimedEb)
403404 }
404405 else throw("Strict value is not equal to itself.")
405406 }
406407
407408
408409 func claimAllLpRewardsForUser (user) = {
409410 func fold (acc,rsr) = {
410411 let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(rsr), aTIdS), "no aTokenId in reserve")
411412 let claimed = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, -1], nil))
412413 if ((claimed == claimed))
413414 then (acc + claimed)
414415 else throw("Strict value is not equal to itself.")
415416 }
416417
417418 let claimedTotal = {
418419 let $l = rewardReserves
419420 let $s = size($l)
420421 let $acc0 = 0
421422 func $f0_1 ($a,$i) = if (($i >= $s))
422423 then $a
423424 else fold($a, $l[$i])
424425
425426 func $f0_2 ($a,$i) = if (($i >= $s))
426427 then $a
427428 else throw("List size exceeds 20")
428429
429430 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
430431 }
431432 claimedTotal
432433 }
433434
434435
435436 func moveCollateral (addr,assetStr,rsr,reserveStr) = {
436437 let amt = asInt(invoke(protectedReserve, "withdrawToMain", [addr, assetStr], nil))
437438 if ((amt == amt))
438439 then {
439- let assetId = if ((assetStr == "WAVES"))
440- then unit
441- else fromBase58String(assetStr)
442- let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(assetId, amt)])
440+ let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(pureAssetId(assetStr), amt)])
443441 if ((dep == dep))
444442 then {
445443 let prop = uS(reserveStr, "deposit", addr, amt, amt)
446444 if ((prop == prop))
447445 then unit
448446 else throw("Strict value is not equal to itself.")
449447 }
450448 else throw("Strict value is not equal to itself.")
451449 }
452450 else throw("Strict value is not equal to itself.")
453451 }
454452
455453
456454 func spfr () = invoke(dC, "shareProfitFromReserves", nil, nil)
457455
458456
459457 func wdInternal (user,rsr,amt,op) = {
460458 let sh = sR(toString(rsr))
461459 if ((sh == sh))
462460 then {
463461 let withdrawnAmount = asInt(invoke(rsr, op, [user, amt], nil))
464462 if ((withdrawnAmount == withdrawnAmount))
465463 then {
466464 let pRw = uS(toString(rsr), "deposit", user, -(withdrawnAmount), -(withdrawnAmount))
467465 if ((pRw == pRw))
468466 then {
469467 let e = ensureLimit("withdraw", rsr, user, withdrawnAmount)
470468 if ((e == e))
471469 then withdrawnAmount
472470 else throw("Strict value is not equal to itself.")
473471 }
474472 else throw("Strict value is not equal to itself.")
475473 }
476474 else throw("Strict value is not equal to itself.")
477475 }
478476 else throw("Strict value is not equal to itself.")
479477 }
480478
481479
482480 func repayWithAtokenInternal (user,payment) = {
483481 let aTokenId = toBase58String(valueOrErrorMessage(payment.assetId, "bad assetId: waves not allowed"))
484482 let t = reserveBy(aTIdS, aTokenId)
485483 let sh = sR(toString(t))
486484 if ((sh == sh))
487485 then {
488486 let amt = asInt(invoke(t, "replenishForRepayWithAtokenFor", [user], [payment]))
489487 if ((amt == amt))
490488 then {
491489 let c = asInt(invoke(t, "collapseForAmount", [user, amt], nil))
492490 if ((c == c))
493491 then if ((amt > c))
494492 then throw("repaying too much")
495493 else {
496494 let pRw = uS(toString(t), "borrow", user, -(c), -(c))
497495 if ((pRw == pRw))
498496 then {
499497 let pRw2 = uS(toString(t), "deposit", user, (amt - c), -(c))
500498 if ((pRw2 == pRw2))
501499 then nil
502500 else throw("Strict value is not equal to itself.")
503501 }
504502 else throw("Strict value is not equal to itself.")
505503 }
506504 else throw("Strict value is not equal to itself.")
507505 }
508506 else throw("Strict value is not equal to itself.")
509507 }
510508 else throw("Strict value is not equal to itself.")
511509 }
512510
513511
514512 @Callable(i)
515513 func initialize (ca) = [writeConstString(configStore, ca)]
516514
517515
518516
519517 @Callable(i)
520518 func deposit (rsr,asCol) = doDeposit(i, rsr, asCol)
521519
522520
523521
524522 @Callable(i)
525523 func depositRef (rsr,asCol,ref) = doDeposit(i, rsr, asCol)
526524
527525
528526
529527 @Callable(i)
530528 func repay (rsr) = {
531529 let user = toString(i.caller)
532530 let sh = sR(rsr)
533531 if ((sh == sh))
534532 then {
535533 let repaid = asInt(invoke(vlR(rsr), "repayFor", [user], i.payments))
536534 if ((repaid == repaid))
537535 then {
538536 let pRw = uS(rsr, "borrow", user, -(repaid), -(repaid))
539537 if ((pRw == pRw))
540538 then nil
541539 else throw("Strict value is not equal to itself.")
542540 }
543541 else throw("Strict value is not equal to itself.")
544542 }
545543 else throw("Strict value is not equal to itself.")
546544 }
547545
548546
549547
550548 @Callable(i)
551549 func mintAtoken (aTokenId,amt) = {
552550 let user = toString(i.caller)
553551 let t = reserveBy(aTIdS, aTokenId)
554552 let sh = sR(toString(t))
555553 if ((sh == sh))
556554 then {
557555 let actual = asInt(invoke(t, "mintAtokenFor", [user, amt], nil))
558556 if ((actual == actual))
559557 then {
560558 let pRw = uS(toString(t), "deposit", user, -(actual), 0)
561559 if ((pRw == pRw))
562560 then {
563561 let bpu = asInt(validateAfter(user, "minting"))
564562 if ((bpu == bpu))
565563 then {
566564 let pc = ensureNoProhibited(user, bpu, toString(t))
567565 if ((pc == pc))
568566 then nil
569567 else throw("Strict value is not equal to itself.")
570568 }
571569 else throw("Strict value is not equal to itself.")
572570 }
573571 else throw("Strict value is not equal to itself.")
574572 }
575573 else throw("Strict value is not equal to itself.")
576574 }
577575 else throw("Strict value is not equal to itself.")
578576 }
579577
580578
581579
582580 @Callable(i)
583581 func replenishWithAtoken () = {
584582 let user = toString(i.caller)
585583 let checks = ensureNoProtected(user)
586584 if ((checks == checks))
587585 then {
588586 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId(w)"))
589587 let rsr = reserveBy(aTIdS, aTokenId)
590588 let sh = sR(toString(rsr))
591589 if ((sh == sh))
592590 then {
593591 let amt = asInt(invoke(rsr, "replenishWithAtokenFor", [user], i.payments))
594592 if ((amt == amt))
595593 then {
596594 let pRw = uS(toString(rsr), "deposit", user, amt, 0)
597595 if ((pRw == pRw))
598596 then {
599597 let e = ensureLimit("import", rsr, user, amt)
600598 if ((e == e))
601599 then nil
602600 else throw("Strict value is not equal to itself.")
603601 }
604602 else throw("Strict value is not equal to itself.")
605603 }
606604 else throw("Strict value is not equal to itself.")
607605 }
608606 else throw("Strict value is not equal to itself.")
609607 }
610608 else throw("Strict value is not equal to itself.")
611609 }
612610
613611
614612
615613 @Callable(i)
616614 func redeemAtokens () = {
617615 let user = toString(i.caller)
618616 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId: WAVES"))
619617 let rsr = reserveBy(aTIdS, aTokenId)
620618 let sh = sR(toString(rsr))
621619 if ((sh == sh))
622620 then {
623621 let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], i.payments))
624622 if ((amt == amt))
625623 then {
626624 let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
627625 if ((pRw == pRw))
628626 then {
629627 let e = ensureLimit("redeem", rsr, user, amt)
630628 if ((e == e))
631629 then nil
632630 else throw("Strict value is not equal to itself.")
633631 }
634632 else throw("Strict value is not equal to itself.")
635633 }
636634 else throw("Strict value is not equal to itself.")
637635 }
638636 else throw("Strict value is not equal to itself.")
639637 }
640638
641639
642640
643641 @Callable(i)
644642 func withdraw (assetId,amt) = {
645643 let user = toString(i.caller)
646644 let r = reserveBy(aIdS, assetId)
647645 let result = asInt(wdInternal(user, r, amt, "withdrawFor"))
648646 if ((result == result))
649647 then {
650648 let bpu = asInt(validateAfter(user, "withdrawing"))
651649 if ((bpu == bpu))
652650 then {
653651 let pc = ensureNoProhibited(user, bpu, toString(r))
654652 if ((pc == pc))
655653 then $Tuple2(nil, result)
656654 else throw("Strict value is not equal to itself.")
657655 }
658656 else throw("Strict value is not equal to itself.")
659657 }
660658 else throw("Strict value is not equal to itself.")
661659 }
662660
663661
664662
665663 @Callable(i)
666664 func withdraw2 (rsr,amt) = {
667665 let user = toString(i.caller)
668666 let sh = sR(rsr)
669667 if ((sh == sh))
670668 then {
671669 let rsrAddr = vlR(rsr)
672670 let actual = asInt(invoke(rsrAddr, "withdrawFor", [user, amt], nil))
673671 if ((actual == actual))
674672 then {
675673 let pRw = uS(rsr, "deposit", user, -(actual), -(actual))
676674 if ((pRw == pRw))
677675 then {
678676 let bpu = if (contains(liquidators, user))
679677 then 0
680678 else {
681679 let e = ensureLimit("withdraw", rsrAddr, user, actual)
682680 if ((e == e))
683681 then asInt(validateAfter(user, "withdrawing2"))
684682 else throw("Strict value is not equal to itself.")
685683 }
686684 let pc = ensureNoProhibited(user, bpu, rsr)
687685 if ((pc == pc))
688686 then $Tuple2(nil, actual)
689687 else throw("Strict value is not equal to itself.")
690688 }
691689 else throw("Strict value is not equal to itself.")
692690 }
693691 else throw("Strict value is not equal to itself.")
694692 }
695693 else throw("Strict value is not equal to itself.")
696694 }
697695
698696
699697
700698 @Callable(i)
701699 func protectCollateral (rsr) = {
702700 let user = toString(i.caller)
703701 let r = vlR(rsr)
704702 let amt = asInt(wdInternal(user, r, -1, "withdrawToMain"))
705703 if ((amt == amt))
706704 then {
707- let assetId = assetStrToId(getStringValue(r, aIdS))
708- let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(assetId, amt)])
705+ let assetIdStr = getStringValue(r, aIdS)
706+ let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(pureAssetId(assetIdStr), amt)])
709707 if ((p == p))
710708 then {
711709 let pc = ensureNoProhibited(user, userPower(user)._2, rsr)
712710 if ((pc == pc))
713711 then $Tuple2(nil, amt)
714712 else throw("Strict value is not equal to itself.")
715713 }
716714 else throw("Strict value is not equal to itself.")
717715 }
718716 else throw("Strict value is not equal to itself.")
719717 }
720718
721719
722720
723721 @Callable(i)
724722 func withdrawProtectedCollateral (assetId,amt) = {
725723 let user = toString(i.caller)
726724 let a = asInt(invoke(valueOrErrorMessage(protectedReserve, "no protectedReserve"), "withdrawFor", [user, assetId, amt], nil))
727725 if ((a == a))
728726 then {
729727 let va = validateAfter(user, "withdrawing protected")
730728 if ((va == va))
731729 then nil
732730 else throw("Strict value is not equal to itself.")
733731 }
734732 else throw("Strict value is not equal to itself.")
735733 }
736734
737735
738736
739737 @Callable(i)
740738 func normalizeCollateral (rsr) = {
741739 let addr = toString(i.caller)
742740 let rA = vlR(rsr)
743741 if ((rA == rA))
744742 then {
745743 let sh = sR(rsr)
746744 if ((sh == sh))
747745 then {
748746 let assetIdStr = valueOrErrorMessage(getString(rA, aIdS), ("no assetId in rsv: " + rsr))
749747 let mc = moveCollateral(addr, assetIdStr, rA, rsr)
750748 if ((mc == mc))
751749 then nil
752750 else throw("Strict value is not equal to itself.")
753751 }
754752 else throw("Strict value is not equal to itself.")
755753 }
756754 else throw("Strict value is not equal to itself.")
757755 }
758756
759757
760758
761759 @Callable(i)
762760 func borrow (assetId,amt) = {
763761 let user = toString(i.caller)
764762 let rsr = reserveBy(aIdS, assetId)
765763 let sh = sR(toString(rsr))
766764 if ((sh == sh))
767765 then {
768766 let a = invoke(rsr, "borrowFor", [user, amt], nil)
769767 if ((a == a))
770768 then {
771769 let pRw = uS(toString(rsr), "borrow", user, amt, amt)
772770 if ((pRw == pRw))
773771 then {
774772 let e = ensureLimit("borrow", rsr, user, amt)
775773 if ((e == e))
776774 then {
777775 let bpu = asInt(validateAfter(user, "borrowing"))
778776 if ((bpu == bpu))
779777 then {
780778 let pc = ensureNoProhibitedCollaterals(user)
781779 if ((pc == pc))
782780 then nil
783781 else throw("Strict value is not equal to itself.")
784782 }
785783 else throw("Strict value is not equal to itself.")
786784 }
787785 else throw("Strict value is not equal to itself.")
788786 }
789787 else throw("Strict value is not equal to itself.")
790788 }
791789 else throw("Strict value is not equal to itself.")
792790 }
793791 else throw("Strict value is not equal to itself.")
794792 }
795793
796794
797795
798796 @Callable(i)
799797 func borrow2 (rsr,amt) = {
800798 let user = toString(i.caller)
801799 let r = vlR(rsr)
802800 let sh = sR(rsr)
803801 if ((sh == sh))
804802 then {
805803 let a = invoke(r, "borrowFor", [user, amt], nil)
806804 if ((a == a))
807805 then {
808806 let pRw = uS(rsr, "borrow", user, amt, amt)
809807 if ((pRw == pRw))
810808 then {
811809 let e = ensureLimit("borrow", r, user, amt)
812810 if ((e == e))
813811 then {
814812 let bpu = asInt(validateAfter(user, "borrowing"))
815813 if ((bpu == bpu))
816814 then {
817815 let pc = ensureNoProhibitedCollaterals(user)
818816 if ((pc == pc))
819817 then nil
820818 else throw("Strict value is not equal to itself.")
821819 }
822820 else throw("Strict value is not equal to itself.")
823821 }
824822 else throw("Strict value is not equal to itself.")
825823 }
826824 else throw("Strict value is not equal to itself.")
827825 }
828826 else throw("Strict value is not equal to itself.")
829827 }
830828 else throw("Strict value is not equal to itself.")
831829 }
832830
833831
834832
835833 @Callable(i)
836834 func collapse (rsr,amt) = {
837835 let user = toString(i.caller)
838836 let sh = sR(rsr)
839837 if ((sh == sh))
840838 then {
841839 let c = asInt(invoke(vlR(rsr), "collapseForAmount", [user, amt], nil))
842840 if ((c == c))
843841 then {
844842 let pRw = uS(rsr, "borrow", user, -(c), -(c))
845843 if ((pRw == pRw))
846844 then {
847845 let pRw2 = uS(rsr, "deposit", user, -(c), -(c))
848846 if ((pRw2 == pRw2))
849847 then nil
850848 else throw("Strict value is not equal to itself.")
851849 }
852850 else throw("Strict value is not equal to itself.")
853851 }
854852 else throw("Strict value is not equal to itself.")
855853 }
856854 else throw("Strict value is not equal to itself.")
857855 }
858856
859857
860858
861859 @Callable(i)
862860 func claimEbReward2 (amt,lock) = {
863861 let user = toString(i.caller)
864862 let c = asInt(invoke(ebR, "claimEbRewardFor", [user, amt], nil))
865863 if ((c == c))
866864 then lockOrPayout(i.caller, c, lock)
867865 else throw("Strict value is not equal to itself.")
868866 }
869867
870868
871869
872870 @Callable(i)
873871 func claimReward2 (rsr,amt,lock) = {
874872 let v = vlR(rsr)
875873 if ((v == v))
876874 then {
877875 let user = toString(i.caller)
878876 let c = asInt(invoke(VD, "claimRewardFor", [rsr, user, amt], nil))
879877 if ((c == c))
880878 then lockOrPayout(i.caller, c, lock)
881879 else throw("Strict value is not equal to itself.")
882880 }
883881 else throw("Strict value is not equal to itself.")
884882 }
885883
886884
887885
888886 @Callable(i)
889887 func claimAllRewardsAndAllEbAvailable2 (lock,unstakeLegacy) = {
890888 let user = toString(i.caller)
891889 let cr = claimAllRewardsForUser(user)
892890 if ((cr == cr))
893891 then {
894892 let crLp = claimAllLpRewardsForUser(user)
895893 if ((crLp == crLp))
896894 then {
897895 let lA = if (unstakeLegacy)
898896 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
899897 else 0
900898 if ((lA == lA))
901899 then lockOrPayout(i.caller, ((cr + crLp) + lA), lock)
902900 else throw("Strict value is not equal to itself.")
903901 }
904902 else throw("Strict value is not equal to itself.")
905903 }
906904 else throw("Strict value is not equal to itself.")
907905 }
908906
909907
910908
911909 @Callable(i)
912910 func disableUseAsCollateral (rsr) = {
913911 let user = toString(i.caller)
914912 let d = invoke(vlR(rsr), "disableUseAsCollateralFor", [user], nil)
915913 if ((d == d))
916914 then {
917915 let va = validateAfter(user, "changing collateral status")
918916 if ((va == va))
919917 then nil
920918 else throw("Strict value is not equal to itself.")
921919 }
922920 else throw("Strict value is not equal to itself.")
923921 }
924922
925923
926924
927925 @Callable(i)
928926 func lockVires (factor,migrate) = {
929927 let user = toString(i.caller)
930928 let a = spfr()
931929 if ((a == a))
932930 then {
933931 let migrateAmount = if (migrate)
934932 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
935933 else 0
936934 let total = (migrateAmount + viresPayment(i))
937935 let l = invoke(dC, "lockFor", [user, factor], if ((total == 0))
938936 then nil
939937 else [AttachedPayment(viresAssetId, total)])
940938 if ((l == l))
941939 then nil
942940 else throw("Strict value is not equal to itself.")
943941 }
944942 else throw("Strict value is not equal to itself.")
945943 }
946944
947945
948946
949947 @Callable(i)
950948 func withdrawAllPossibleVires () = {
951949 let user = toString(i.caller)
952950 let a = spfr()
953951 if ((a == a))
954952 then {
955953 let stakerViresAmount = asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
956954 if ((stakerViresAmount == stakerViresAmount))
957955 then {
958956 let u = invoke(dC, "withdrawUnlockedFor", [user], nil)
959957 if ((u == u))
960958 then [ScriptTransfer(i.caller, stakerViresAmount, viresAssetId)]
961959 else throw("Strict value is not equal to itself.")
962960 }
963961 else throw("Strict value is not equal to itself.")
964962 }
965963 else throw("Strict value is not equal to itself.")
966964 }
967965
968966
969967
970968 @Callable(i)
971969 func claimProtocolProfitFrom (from,relock) = {
972970 let user = toString(i.caller)
973971 let a = spfr()
974972 if ((a == a))
975973 then {
976974 let u = invoke(dC, "claimProfit", [from, user, relock], nil)
977975 if ((u == u))
978976 then nil
979977 else throw("Strict value is not equal to itself.")
980978 }
981979 else throw("Strict value is not equal to itself.")
982980 }
983981
984982
985983
986984 @Callable(i)
987985 func withdrawUnlockedVires () = {
988986 let a = spfr()
989987 if ((a == a))
990988 then {
991989 let u = invoke(dC, "withdrawUnlockedFor", [toString(i.caller)], nil)
992990 if ((u == u))
993991 then nil
994992 else throw("Strict value is not equal to itself.")
995993 }
996994 else throw("Strict value is not equal to itself.")
997995 }
998996
999997
1000998
1001999 @Callable(i)
10021000 func lockSupply (reserve,period) = {
10031001 let rsr = vlR(reserve)
10041002 let user = toString(i.caller)
10051003 let checks = ensureNoProtected(user)
10061004 if ((checks == checks))
10071005 then {
1008- let aTokenId = value(assetStrToId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
1006+ let aTokenId = value(pureAssetId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
10091007 let migration = if ((size(i.payments) == 0))
10101008 then unit
10111009 else if ((i.payments[0].assetId == aTokenId))
10121010 then unit
1013- else if ((i.payments[0].assetId == assetStrToId(valueOrErrorMessage(getString(rsr, "assetId"), "no assetId in reserve"))))
1011+ else if ((i.payments[0].assetId == pureAssetId(valueOrErrorMessage(getString(rsr, aIdS), "no assetId in reserve"))))
10141012 then {
10151013 let sh = sR(reserve)
10161014 if ((sh == sh))
10171015 then {
10181016 let action = invoke(rsr, "depositFor", [user, true], i.payments)
10191017 if ((action == action))
10201018 then {
10211019 let amt = i.payments[0].amount
10221020 let pRw = uS(reserve, "deposit", user, amt, amt)
10231021 if ((pRw == pRw))
10241022 then unit
10251023 else throw("Strict value is not equal to itself.")
10261024 }
10271025 else throw("Strict value is not equal to itself.")
10281026 }
10291027 else throw("Strict value is not equal to itself.")
10301028 }
10311029 else throw("bad asset attached")
10321030 if ((migration == migration))
10331031 then {
10341032 let mint = {
10351033 let sh = sR(reserve)
10361034 if ((sh == sh))
10371035 then {
10381036 let actual = asInt(invoke(rsr, "mintAtokenForTo", [user, -1, toString(this)], nil))
10391037 if ((actual == actual))
10401038 then {
10411039 let pRw = uS(toString(rsr), "deposit", user, -(actual), 0)
10421040 if ((pRw == pRw))
10431041 then {
10441042 let va = validateAfter(user, "lock-minting")
10451043 if ((va == va))
10461044 then nil
10471045 else throw("Strict value is not equal to itself.")
10481046 }
10491047 else throw("Strict value is not equal to itself.")
10501048 }
10511049 else throw("Strict value is not equal to itself.")
10521050 }
10531051 else throw("Strict value is not equal to itself.")
10541052 }
10551053 if ((mint == mint))
10561054 then {
10571055 let balance = assetBalance(this, aTokenId)
10581056 let r = invoke(locker, "lockLP", [user, period], [AttachedPayment(aTokenId, balance)])
10591057 if ((r == r))
10601058 then $Tuple2(nil, balance)
10611059 else throw("Strict value is not equal to itself.")
10621060 }
10631061 else throw("Strict value is not equal to itself.")
10641062 }
10651063 else throw("Strict value is not equal to itself.")
10661064 }
10671065 else throw("Strict value is not equal to itself.")
10681066 }
10691067
10701068
10711069
10721070 @Callable(i)
10731071 func repayWithAtokenFor (user) = {
10741072 let checks = if (!(isDefined(addressFromString(user))))
10751073 then throw("bad user")
10761074 else true
10771075 if ((checks == checks))
10781076 then repayWithAtokenInternal(user, i.payments[0])
10791077 else throw("Strict value is not equal to itself.")
10801078 }
10811079
10821080
10831081
10841082 @Callable(i)
10851083 func repayWithAtoken () = repayWithAtokenInternal(toString(i.caller), i.payments[0])
10861084
10871085
10881086
10891087 @Callable(i)
10901088 func repayFor (rsr,user) = {
10911089 let checks = if (!(isDefined(addressFromString(user))))
10921090 then throw("bad user")
10931091 else true
10941092 if ((checks == checks))
10951093 then {
10961094 let sh = sR(rsr)
10971095 if ((sh == sh))
10981096 then {
10991097 let repaid = asInt(invoke(vlR(rsr), "repayFor", [user], i.payments))
11001098 if ((repaid == repaid))
11011099 then {
11021100 let pRw = uS(rsr, "borrow", user, -(repaid), -(repaid))
11031101 if ((pRw == pRw))
11041102 then nil
11051103 else throw("Strict value is not equal to itself.")
11061104 }
11071105 else throw("Strict value is not equal to itself.")
11081106 }
11091107 else throw("Strict value is not equal to itself.")
11101108 }
11111109 else throw("Strict value is not equal to itself.")
11121110 }
11131111
11141112
11151113
11161114 @Callable(i)
11171115 func healthOf (address) = {
1118- let $t02376923820 = asInt3(userPower(address))
1119- let bp = $t02376923820._1
1120- let bpu = $t02376923820._2
1121- let ignore = $t02376923820._3
1116+ let $t02369723748 = asInt3(userPower(address))
1117+ let bp = $t02369723748._1
1118+ let bpu = $t02369723748._2
1119+ let ignore = $t02369723748._3
11221120 $Tuple2(nil, $Tuple2(bp, bpu))
11231121 }
11241122
11251123

github/deemru/w8io/3ef1775 
107.53 ms