tx · BtajGB1EpywfXsTKVGgXj4MjVT6Hni1fuBPzXnsAUcEQ

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02400000 Waves

2023.01.19 08:44 [2411411] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "BtajGB1EpywfXsTKVGgXj4MjVT6Hni1fuBPzXnsAUcEQ", "fee": 2400000, "feeAssetId": null, "timestamp": 1674107055048, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "2ceRh5EEvGZCCviJmp5XZZzUD13pBpVSf8mTANHjoVLiBX2VWzpCe9Bf6isUXnno26QqDtZKowN4JpWJQXpbRj9F" ], "script": "base64:BgJfCAISBAoCCAgSEAoOCAgICAgICAgICAgIAQgSDwoNCAgICAgICAgICAgBCBIGCgQICAgIEgQKAggIEggKBggBAQgBCBIECgIICBIECgIICBIGCgQICAgIEgYKBAgICAhOAAdWRVJTSU9OAgUxLjEuOQEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAAIdW5pdFRlc3QHAAlvcmFjbGVGZWUJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl9vcmFjbGVfZmVlAAhzaWduRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX3NpZ253ZWJfZGFwcAALZmVlUmVjZWl2ZXIJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfZmVlX3JlY2VpdmVyAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECD2NvbmZfdXNlcnNfZGFwcAANd2hpdGVsaXN0RGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhNjb25mX3doaXRlbGlzdF9kYXBwAAtzaWduQXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfVVNETgALdXNkdEFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAx3YXZlc0Fzc2V0SWQBAAAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBD2dldEludGVnZXJCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ5jaGVja1doaXRlbGlzdAEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDXdoaXRlbGlzdERhcHAFA2tleQAAAQ9nZXRCb29sZWFuQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHAAdzaWduQ3V0AAcAC3VzZG5XYXZlQ3V0AAoADmRlZmF1bHRMaWNlbmNlCQEOZ2V0U3RyaW5nQnlLZXkBAhRjb25mX2RlZmF1bHRfbGljZW5jZQASZGVmYXVsdEhhc2hMaWNlbmNlCQEOZ2V0U3RyaW5nQnlLZXkBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAtkYXBwUnVubmluZwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQh1c2VyRGFwcAIUY29uZl9kYXBwX2lzX3J1bm5pbmcGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAIUY29uZl9tYWludGVuYW5jZV9tc2cCAAANdXNlclN1c3BlbmRlZAIJU1VTUEVOREVEAAt1c2VyUmVtb3ZlZAIHUkVNT1ZFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAAt1c2VyQWxsb3dlZAIHQUxMT1dFRAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQtzaWduQXNzZXRJZAETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQDoBwEUY2hlY2tTaWduQ2VydGlmaWNhdGUDBnNpZ25JRAVPd25lcgpzaGEyNTZIYXNoBAckbWF0Y2gwCQCdCAIFCHNpZ25EYXBwCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUGc2lnbklEAgFfBQVPd25lcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDADCQEIY29udGFpbnMCBQFhBQpzaGEyNTZIYXNoBgcHAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcBDHZhbGlkYXRlSGFzaAEEaGFzaAkAAAIJALECAQUEaGFzaABAAQ1rZXlVc2VyU3RhdHVzAQZjYWxsZXIJAKwCAgIMdXNlcl9zdGF0dXNfBQZjYWxsZXIBB2tleURhdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X2RhdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlOYW1lAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9uYW1lXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5RGVzYwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGVzY18FBWFydElkAgFfBQZjYWxsZXIBDWtleURpc3BsYXlDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2Rpc3BsYXlfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RXhwb3J0SGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZXhwb3J0X2hhc2hfBQVhcnRJZAIBXwUGY2FsbGVyAQxrZXlFeHBvcnRDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIPYXJ0X2V4cG9ydF9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlNYXhNaW50AgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICDGFydF9tYXhtaW50XwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5U2lnbklEAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlJc3N1ZWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X2lzc3VlZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleU9uU2FsZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfb25zYWxlXwUFYXJ0SWQCAV8FBmNhbGxlcgEOa2V5TGljZW5jZUhhc2gCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIRYXJ0X2xpY2VuY2VfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDWtleUxpY2VuY2VDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2xpY2VuY2VfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VGFncwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FBWFydElkAgFfBQZjYWxsZXIBB2tleVR5cGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X3R5cGVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlOb3RlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9ub3RlXwUFYXJ0SWQCAV8FBmNhbGxlcgEKa2V5Q3Jhd2xlcgIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQxrZXlSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCGtleVByaWNlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCmFydF9wcmljZV8FBWFydElkAgFfBQZjYWxsZXIBCmtleUVuZFNhbGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyARJrZXlBc3NldElkQWNjZXB0ZWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgISYXJ0X2Fzc2V0QWNjZXB0ZWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlGbGFnAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUFYXJ0SWQCAV8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBD2tleVByaW1hcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhVhcnRpc3RfYWdlbnRfcHJpbWFyeV8FCmFydGlzdEFkZHIBEWtleUhhc2hCeVR4aWRBZGRyAgZjYWxsZXIEdHhpZAkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUEdHhpZAIBXwUGY2FsbGVyAQ5rZXlPd25lckJ5SGFzaAEKc2hhMjU2SGFzaAkArAICAhJnZXRfb3duZXJfYnlfaGFzaF8FCnNoYTI1Nkhhc2gBDWtleWlkQnlTaWduaWQCBmNhbGxlcgZzaWduSWQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUGc2lnbklkAgFfBQZjYWxsZXIBEmtleVR4aWRCeUhhc2hPd25lcgIKc2hhMjU2SGFzaAZjYWxsZXIJAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUKc2hhMjU2SGFzaAUGY2FsbGVyAQ52YWxpZGF0ZUFsbENJRAMKY2lkRGlzcGxheQljaWRFeHBvcnQKY2lkTGljZW5jZQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEVdyb25nIERpc3BsYXkgQ0lEAwkBASEBCQELdmFsaWRhdGVDSUQBBQljaWRFeHBvcnQJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFCmNpZExpY2VuY2UCAAkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWRMaWNlbmNlBwkAAgECEVdyb25nIExpY2VuY2UgQ0lEBgEPdmFsaWRhdGVBbGxIYXNoAgxzaGEyNTZFeHBvcnQNc2hhMjU2TGljZW5jZQMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDHNoYTI1NkV4cG9ydAkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDXNoYTI1NkxpY2VuY2UJAAIBAhlMaWNlbmNlIEhhc2ggNjQgY2hhci4gbWF4BgEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBDHZhbGlkYXRlVXNlcgEGY2FsbGVyBAp1c2VyU3RhdHVzCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUQdXNlclVucmVnaXN0ZXJlZAMDCQAAAgUKdXNlclN0YXR1cwUQdXNlclVucmVnaXN0ZXJlZAYJAAACBQp1c2VyU3RhdHVzBQt1c2VyQWxsb3dlZAIuUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIkFjY291bnQiIHRhYgMJAAACBQp1c2VyU3RhdHVzBQ11c2VyU3VzcGVuZGVkAhFBY2NvdW50IHN1c3BlbmRlZAMJAAACBQp1c2VyU3RhdHVzBQt1c2VyUmVtb3ZlZAIPQWNjb3VudCByZW1vdmVkAgABCnNldExJY2VuY2UCCmNpZExpY2VuY2UNc2hhMjU2TGljZW5jZQQDY2lkAwkAAAIJALECAQUKY2lkTGljZW5jZQAABQ5kZWZhdWx0TGljZW5jZQUKY2lkTGljZW5jZQQEaGFzaAMJAAACCQCxAgEFDXNoYTI1NkxpY2VuY2UAAAUSZGVmYXVsdEhhc2hMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlCQCUCgIFA2NpZAUEaGFzaAETdmFsaWRhdGVBcnR3b3JrRGF0YQoGY2FsbGVyCmNpZERpc3BsYXkJY2lkRXhwb3J0CmxpY2VuY2VDSUQMc2hhMjU2RXhwb3J0C2xpY2VuY2VIYXNoBG5hbWULZGVzY3JpcHRpb24EdGFncwlyb3lhbHRpZXMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkAAAIJALECAQUKY2lkRGlzcGxheQAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQEOdmFsaWRhdGVBbGxDSUQDBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQJAAIBAhBQcm9ibGVtIHdpdGggQ0lEAwkBASEBCQEPdmFsaWRhdGVBbGxIYXNoAgUMc2hhMjU2RXhwb3J0BQtsaWNlbmNlSGFzaAkAAgECE1Byb2JsZW0gd2l0aCBIYXNoZXMDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQlyb3lhbHRpZXMGCQBmAgUJcm95YWx0aWVzAOgHCQACAQIzUm95YWx0aWVzIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCUgb3IgaGlnaGVyIHRoYW4gMTAlAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBD3ZhbGlkYXRlUGF5bWVudAEBaQQLJHQwODg3Njg5MTIJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwODg3Njg5MTICXzEEBmFtb3VudAgFCyR0MDg4NzY4OTEyAl8yBAdhc3NldElkAwMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQAAAggFB3BheW1lbnQHYXNzZXRJZAULc2lnbkFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIrT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGFzIHRyYW5zYWN0aW9uIGZlZQMJAQIhPQIFBmFtb3VudAUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAAgEJAKwCAgIZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkApAMBBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQCUCgIFBmFtb3VudAUHYXNzZXRJZAELaXNBcnRNaW50ZWQCCWFkZHJUb1VzZQVhcnRJZAQHJG1hdGNoMAkAmggCBQR0aGlzCQEJa2V5SXNzdWVkAgUJYWRkclRvVXNlBQVhcnRJZAMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDADCQECIT0CBQFiAAAGBwcBFHZhbGlkYXRlUHJpY2VBc3NldElkAwFpDHByaWNlQXNzZXRJZAxhcnR3b3JrUHJpY2UECyR0MDk1MDA5NTM2CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDk1MDA5NTM2Al8xBAZhbW91bnQIBQskdDA5NTAwOTUzNgJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQDAwkAZgIJALECAQUMcHJpY2VBc3NldElkAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQFDHByaWNlQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAg5Xcm9uZyBhc3NldCBpZAMDCQAAAgUHYXNzZXRJZAUEdW5pdAkBAiE9AgUMcHJpY2VBc3NldElkAgAHCQACAQIOV3JvbmcgYXNzZXQgaWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECE1BheW1lbnQgZG9uJ3QgbWF0Y2gJAJQKAgUGYW1vdW50BQdhc3NldElkARBhY2NlcHRlZEFzc2V0SWRzAQdhc3NldElkAwMDAwMJAQIhPQIFB2Fzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQJAQIhPQIFB2Fzc2V0SWQJANgEAQUMd2F2ZXNBc3NldElkBwkBAiE9AgUHYXNzZXRJZAIFV0FWRVMHCQECIT0CBQdhc3NldElkCQDYBAEFC3VzZG5Bc3NldElkBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2R0QXNzZXRJZAcJAAIBAiZPbmx5IFNJR04sIFVTRE4sVVNEVCBvciBXQVZFUyBhY2NlcHRlZAYBD3ZhbGlkYXRlTWluU2VsbAIHYXNzZXRJZAVwcmljZQQMbWluU2VsbFdhdmVzAwUIdW5pdFRlc3QACgkBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBAg53YXZlc19taW5fc2VsbAQLbWluU2VsbFVzZG4AwIQ9BAttaW5TZWxsU2lnbgMFCHVuaXRUZXN0AAEJAGgCBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlAAIDAwMDAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZG5Bc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQBmAgULbWluU2VsbFNpZ24FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQGCQAAAgUHYXNzZXRJZAIFV0FWRVMJAGYCBQxtaW5TZWxsV2F2ZXMFBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQ1nZXRCaWRBc3NldElkAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBFmdldFByaWNlQXNzZXRJZEZyb21CaWQBCmJpZERhdGFLZXkEB2JpZERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4DCQAAAgUHYmlkRGF0YQIACQACAQINQmlkIG5vdCBmb3VuZAQKYmlkRGF0YUFycgkAtQkCBQdiaWREYXRhAgFfBAliaWRBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpiaWREYXRhQXJyAAEECmJpZEFzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAADCQBnAgAABQliaWRBbW91bnQJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUJYmlkQW1vdW50BQpiaWRBc3NldElkARVpZENhbGxlckRhdGVTcG9uc29yZWQCAWkGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkA2AQBCAUEdGhpcwVieXRlcwkBASEBCQEJaXNEZWZpbmVkAQgFAWkIcGF5bWVudHMHCQClCAEJAKcIAQkAmwMBBQZwdWJLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQTZ2V0X3Nwb25zb3JlZF93YXZlcwMJAQIhPQIFBnB1YktleQIACQD8BwQFDXdoaXRlbGlzdERhcHACCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkAmwMBBQZwdWJLZXkFA25pbAUDbmlsBQR1bml0AwkAAAIFE2dldF9zcG9uc29yZWRfd2F2ZXMFE2dldF9zcG9uc29yZWRfd2F2ZXMJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQZjYWxsZXIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQdidXlNaW50BQFpBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQNJHQwMTI2NTAxMjcwOQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTI2NTAxMjcwOQJfMQQGY2FsbGVyCAUNJHQwMTI2NTAxMjcwOQJfMgQEZGF0ZQgFDSR0MDEyNjUwMTI3MDkCXzMEBWlzQmlkAwMDCQAAAgUGY2FsbGVyBQZpc3N1ZXIJAQIhPQIFCGJpZE93bmVyAgAHCQECIT0CBQViaWRJZAIABwYHBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGY2FsbGVyBQVhcnRJZAMDAwkBAiE9AgUIYmxvY2tFbmQAAAkAZwIFBmhlaWdodAUIYmxvY2tFbmQHCQEBIQEFBWlzQmlkBwkAAgECC1NhbGUgZW5kZWQuBA5jYWxsZXJJc0lzc3VlcgkAAAIFBmNhbGxlcgUGaXNzdWVyBAh0b3RhbE5GVAkBD2dldEludGVnZXJCeUtleQECEHRvdGFsX25mdF9pc3N1ZWQEBnNpZ25JRAkBDmdldFN0cmluZ0J5S2V5AQkBCWtleVNpZ25JRAIFBmlzc3VlcgUFYXJ0SWQEC2FydHdvcmtOYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmlzc3VlcgUFYXJ0SWQDCQAAAgULYXJ0d29ya05hbWUCAAkAAgECEUFydCBkb2Vzbid0IGV4aXN0BAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQlrZXlPblNhbGUCBQZpc3N1ZXIFBWFydElkBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQEDGFydHdvcmtQcmljZQMFDmNhbGxlcklzSXNzdWVyCQBoAgUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQACCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCGtleVByaWNlAgUGaXNzdWVyBQVhcnRJZAQMcHJpY2VBc3NldElkAwUOY2FsbGVySXNJc3N1ZXIJANgEAQULc2lnbkFzc2V0SWQJAQ5nZXRTdHJpbmdCeUtleQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwMDCQEBIQEFBWlzQmlkCQEBIQEFDmNhbGxlcklzSXNzdWVyBwMDCQBnAgAABQxhcnR3b3JrUHJpY2UGCQEBIQEFCGlzT25TYWxlBgkAZwIAAAUKbWF4Q2FuU2VsbAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFBWlzQmlkBQ5jYWxsZXJJc0lzc3VlcgcJAGcCAAAFCm1heENhblNlbGwHCQACAQIUTWF4IGlzc3VhYmxlIG5vdCBzZXQECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmlzc3VlcgMDBQVpc0JpZAkBAiE9AgUJY2hlY2tVc2VyAgAHCQACAQUJY2hlY2tVc2VyBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQNJHQwMTQ0MTIxNDU3OQMFBWlzQmlkCQEWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAEFCmJpZERhdGFLZXkJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAUMYXJ0d29ya1ByaWNlBAZhbW91bnQIBQ0kdDAxNDQxMjE0NTc5Al8xBAdhc3NldElkCAUNJHQwMTQ0MTIxNDU3OQJfMgQFYWdlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJARJrZXlBcnRpc3RBZ2VudEFkZHIBBQZpc3N1ZXIFC2ZlZVJlY2VpdmVyBAphZ2VudFNoYXJlCQELdmFsdWVPckVsc2UCCQCaCAIFCHVzZXJEYXBwCQEPa2V5UHJpbWFyeVNoYXJlAQUGaXNzdWVyAAAEDWlzV2hpdGVsaXN0ZWQJAQ5jaGVja1doaXRlbGlzdAEFBmlzc3VlcgQDY3V0AwkAZgIFDWlzV2hpdGVsaXN0ZWQFBmhlaWdodAAAAwkAAAIFB2Fzc2V0SWQFC3NpZ25Bc3NldElkBQdzaWduQ3V0BQt1c2RuV2F2ZUN1dAQNYW1vdW50Rm9yU2lnbgkAawMFBmFtb3VudAUDY3V0AGQEDmFtb3VudEZvckFnZW50AwMDCQECIT0CBQVhZ2VudAULZmVlUmVjZWl2ZXIJAGYCBQphZ2VudFNoYXJlAAAHCQBmAgUGaGVpZ2h0BQ1pc1doaXRlbGlzdGVkBwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQBkAAAEEGFtb3VudEZvckNyZWF0b3IJAGUCBQZhbW91bnQFDWFtb3VudEZvclNpZ24DCQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECDEFydCBzb2xkIG91dAQNbmV3QW1vdW50U29sZAkAZAIFCmFtb3VudFNvbGQAAQQJaXNzdWVNZXRhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJQ3JlYXRvcjogBQZpc3N1ZXICCiwKIEFydElEOiAFBWFydElkAgssCiBTaWduSUQ6IAUGc2lnbklEAhEsCiBBcnR3b3JrIG5hbWU6IAULYXJ0d29ya05hbWUCCiwKIElzc3VlOiAJAKQDAQUNbmV3QW1vdW50U29sZAIBLwkApAMBBQptYXhDYW5TZWxsBAhpc3N1ZU5GVAkAwggFCQCsAgICA1NBXwkApAMBCQBkAgUIdG90YWxORlQAAQUJaXNzdWVNZXRhAAEAAAcEBWlkTkZUCQC4CAEFCGlzc3VlTkZUBApzZWxsU3RhdHVzAwMJAAACBQ1uZXdBbW91bnRTb2xkBQptYXhDYW5TZWxsBgkBASEBBQhpc09uU2FsZQcGBApyZWNlaXZlTkZUAwMDCQAAAgUGY2FsbGVyBQZpc3N1ZXIJAQIhPQIFCGJpZE93bmVyAgAHCQECIT0CBQViaWRJZAIABwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYmlkT3duZXIIBQFpBmNhbGxlcgQKYXNzZXRJZEJpZAMJAQEhAQkBCWlzRGVmaW5lZAEFB2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQEB2JpZERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4ECWJpZERlbE9sZAkBC0RlbGV0ZUVudHJ5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgQJYmlkVXBkYXRlCQELU3RyaW5nRW50cnkCCQCsAgIFCmJpZERhdGFLZXkCB19DTE9TRUQJAKwCAgkArAICBQdiaWREYXRhAgFfCQCkAwEFBGRhdGUEB3NvbGRLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJYXJ0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUFYXJ0SWQCAV8FBmlzc3VlcgQJc29sZFZhbHVlAwkBASEBBQVpc0JpZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZjYWxsZXICAV8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8JAKQDAQUMYXJ0d29ya1ByaWNlAgFfBQxwcmljZUFzc2V0SWQCAV8JANgEAQUFaWRORlQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwUKYXNzZXRJZEJpZAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQLY29tbWlzc2lvbnMDCQECIT0CBQ5hbW91bnRGb3JBZ2VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgkAZQIFDWFtb3VudEZvclNpZ24FDmFtb3VudEZvckFnZW50BQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQVhZ2VudAUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIFDWFtb3VudEZvclNpZ24FB2Fzc2V0SWQFA25pbAQGYnV5UmVzCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBQ1uZXdBbW91bnRTb2xkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQVpZE5GVAUHc29sZEtleQkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCBQhpc3N1ZU5GVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGaXNzdWVyBRBhbW91bnRGb3JDcmVhdG9yBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQFA25pbAULY29tbWlzc2lvbnMDBQVpc0JpZAkAzAgCBQhzb2xkRGF0YQkAzAgCBQliaWRVcGRhdGUJAMwIAgUJYmlkRGVsT2xkBQZidXlSZXMJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwEIYXNTdHJpbmcBAmJ2BAckbWF0Y2gwBQJidgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA2J2MAUHJG1hdGNoMAUDYnYwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkCgZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEKYWRkQXJ0d29yaw4Kc2hhMjU2SGFzaAZzaWduSUQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBHR5cGUKY2lkRGlzcGxheQxzaGEyNTZFeHBvcnQJY2lkRXhwb3J0DXNoYTI1NkxpY2VuY2UKY2lkTGljZW5jZQdjcmF3bGVyCXJveWFsdGllcwZwdWJLZXkEDSR0MDE4NjEyMTg2NzIJARVpZENhbGxlckRhdGVTcG9uc29yZWQCBQFpBQZwdWJLZXkEBWFydElkCAUNJHQwMTg2MTIxODY3MgJfMQQGY2FsbGVyCAUNJHQwMTg2MTIxODY3MgJfMgQEZGF0ZQgFDSR0MDE4NjEyMTg2NzICXzMDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQpzaGEyNTZIYXNoCQACAQIkSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtBA0kdDAxODc3MzE4ODQyCQEKc2V0TEljZW5jZQIFCmNpZExpY2VuY2UFDXNoYTI1NkxpY2VuY2UECmxpY2VuY2VDSUQIBQ0kdDAxODc3MzE4ODQyAl8xBAtsaWNlbmNlSGFzaAgFDSR0MDE4NzczMTg4NDICXzIED3ZhbGlkYXRlQXJ0d29yawkBE3ZhbGlkYXRlQXJ0d29ya0RhdGEKBQZjYWxsZXIFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAUMc2hhMjU2RXhwb3J0BQtsaWNlbmNlSGFzaAUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFCXJveWFsdGllcwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBBB3aGl0ZWxpc3RlZF9kcm9wCQBmAgkBDmNoZWNrV2hpdGVsaXN0AQkArAICBQZjYWxsZXICC19mcmVlX2Ryb3BzAAAEDSR0MDE5MTQxMTkyMjUDBRB3aGl0ZWxpc3RlZF9kcm9wCQCUCgIAAAUGc2lnbklECQEPdmFsaWRhdGVQYXltZW50AQUBaQQGYW1vdW50CAUNJHQwMTkxNDExOTIyNQJfMQQHYXNzZXRJZAgFDSR0MDE5MTQxMTkyMjUCXzIDCQEBIQEJAQlpc0RlZmluZWQBBQZhbW91bnQJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBEmtleVR4aWRCeUhhc2hPd25lcgIFCnNoYTI1Nkhhc2gFBmNhbGxlcgMJAQIhPQIFCmVudHJ5RXhpc3QCAAkAAgECFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAloYXNoRXhpc3QJAQ5nZXRTdHJpbmdCeUtleQEJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gDCQECIT0CBQloYXNoRXhpc3QCAAkAAgECF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBA9pc1NpZ25DZXJ0aWZpZWQJARRjaGVja1NpZ25DZXJ0aWZpY2F0ZQMFBnNpZ25JRAUGY2FsbGVyBQpzaGEyNTZIYXNoAwkBASEBBQ9pc1NpZ25DZXJ0aWZpZWQJAAIBAixTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgQXZGVjcmVhc2Vfd2hpdGVsaXN0X2Ryb3ADBRB3aGl0ZWxpc3RlZF9kcm9wCQD8BwQFDXdoaXRlbGlzdERhcHACC3VzZUZyZWVEcm9wCQDMCAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUXZGVjcmVhc2Vfd2hpdGVsaXN0X2Ryb3AFF2RlY3JlYXNlX3doaXRlbGlzdF9kcm9wCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyBQVhcnRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleURhdGUCBQZjYWxsZXIFBWFydElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUFYXJ0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQVhcnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQVhcnRJZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQVhcnRJZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUFYXJ0SWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQVhcnRJZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUFYXJ0SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBWFydElkBQR0YWdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEJa2V5U2lnbklEAgUGY2FsbGVyBQVhcnRJZAUGc2lnbklECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleWlkQnlTaWduaWQCBQZjYWxsZXIFBnNpZ25JRAUFYXJ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUhhc2hCeVR4aWRBZGRyAgUGY2FsbGVyBQVhcnRJZAUKc2hhMjU2SGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUFYXJ0SWQFB2NyYXdsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxrZXlSb3lhbHRpZXMCBQZjYWxsZXIFBWFydElkBQlyb3lhbHRpZXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQZhbW91bnQFC3NpZ25Bc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENdXBkYXRlQXJ0d29yaw0EdHhpZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIJcm95YWx0aWVzBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQNJHQwMjIxNjcyMjIyNAkBFWlkQ2FsbGVyRGF0ZVNwb25zb3JlZAIFAWkFBnB1YktleQQCaWQIBQ0kdDAyMjE2NzIyMjI0Al8xBAZjYWxsZXIIBQ0kdDAyMjE2NzIyMjI0Al8yBARkYXRlCAUNJHQwMjIxNjcyMjIyNAJfMwQNJHQwMjIyMzQyMjMwMwkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMjIyMzQyMjMwMwJfMQQLbGljZW5jZUhhc2gIBQ0kdDAyMjIzNDIyMzAzAl8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCgUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQlyb3lhbHRpZXMDCQECIT0CBQ92YWxpZGF0ZUFydHdvcmsCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZjYWxsZXIFBHR4aWQDCQAAAgUKZW50cnlFeGlzdAIACQACAQIPRW50cnkgbm90IGZvdW5kBARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5RmxhZwIFBmNhbGxlcgUEdHhpZAMJAAACBQRmbGFnAgdJTExFR0FMCQACAQIdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEBIQEJAQtpc0FydE1pbnRlZAIFBmNhbGxlcgUEdHhpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUEdHhpZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleURpc3BsYXlDaWQCBQZjYWxsZXIFBHR4aWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV4cG9ydENpZAIFBmNhbGxlcgUEdHhpZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQR0eGlkBQxzaGEyNTZFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUxpY2VuY2VDaWQCBQZjYWxsZXIFBHR4aWQFCmxpY2VuY2VDSUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUxpY2VuY2VIYXNoAgUGY2FsbGVyBQR0eGlkBQtsaWNlbmNlSGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VGFncwIFBmNhbGxlcgUEdHhpZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUEdHhpZAUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUEdHhpZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVJveWFsdGllcwIFBmNhbGxlcgUEdHhpZAUJcm95YWx0aWVzBQNuaWwJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDIzODA0MjM4MzgJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDIzODA0MjM4MzgCXzEEBmNhbGxlcggFDSR0MDIzODA0MjM4MzgCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjQyNzQyNDMwOAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjQyNzQyNDMwOAJfMQQGY2FsbGVyCAUNJHQwMjQyNzQyNDMwOAJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUEYWRkcgUGY2FsbGVyBAplbnRyeUV4aXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUJYWRkclRvVXNlBQVhcnRJZAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUKZW50cnlFeGlzdAIACQACAQIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MECnNoYTI1Nkhhc2gJAQ5nZXRTdHJpbmdCeUtleQEJARFrZXlIYXNoQnlUeGlkQWRkcgIFCWFkZHJUb1VzZQUFYXJ0SWQDCQAAAgUKc2hhMjU2SGFzaAIACQACAQIlTm8gYXJ0IGhhc2ggbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQGc2lnbklECQEOZ2V0U3RyaW5nQnlLZXkBCQEJa2V5U2lnbklEAgUJYWRkclRvVXNlBQVhcnRJZAMJAAACBQZzaWduSUQCAAkAAgECE05vIFNJR04gSUQgbWF0Y2hpbmcEDGRhdGFUb0RlbGV0ZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5RGF0ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleU5hbWUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEZXNjAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RGlzcGxheUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV4cG9ydENpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUV4cG9ydEhhc2gCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlMaWNlbmNlSGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUxpY2VuY2VDaWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUeXBlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5VGFncwIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleU1heE1pbnQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlJc3N1ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlPblNhbGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlGbGFnAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIa2V5UHJpY2UCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleWlkQnlTaWduaWQCBQlhZGRyVG9Vc2UFBnNpZ25JRAkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUJYWRkclRvVXNlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlFbmRTYWxlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Tm90ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleUNyYXdsZXICBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlSb3lhbHRpZXMCBQlhZGRyVG9Vc2UFBWFydElkBQNuaWwDCQEBIQEJAQtpc0FydE1pbnRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cFDGRhdGFUb0RlbGV0ZQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIFDGRhdGFUb0RlbGV0ZQkAAgECKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQBaQELc2VsbEFydHdvcmsGBWFydElkBXByaWNlB21heE1pbnQHYXNzZXRJZAhibG9ja0VuZAZwdWJLZXkEDSR0MDI3MTQ0MjcxOTUJARVpZENhbGxlckRhdGVTcG9uc29yZWQCBQFpBQZwdWJLZXkEAmlkCAUNJHQwMjcxNDQyNzE5NQJfMQQGY2FsbGVyCAUNJHQwMjcxNDQyNzE5NQJfMgQLYXJ0d29ya05hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAMJAAACBQthcnR3b3JrTmFtZQIACQACAQIjVGhpcyBhcnQgZG9lc24ndCBtYXRjaCB5b3VyIGFjY291bnQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQVhcnRJZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAAgECD0ZsYWdnZWQgYXJ0d29yawQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkAZgIAAAUIYmxvY2tFbmQJAAIBAgxOZWdhdGl2ZSBlbmQDAwkAZgIFCGJsb2NrRW5kAAADCQECIT0CBQdtYXhNaW50AAEGCQECIT0CBQVwcmljZQAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkECmJhc2VIZWlnaHQDCQAAAgUIYmxvY2tFbmQAAAAABQZoZWlnaHQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBXByaWNlCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZjYWxsZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkAwkAZgIFB21heE1pbnQAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUKYW1vdW50U29sZAAACQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUKYW1vdW50U29sZAAACQECIT0CBQptYXhDYW5TZWxsBQdtYXhNaW50BwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQZiaWROYnIAAAkBAiE9AgUKbWF4Q2FuU2VsbAUHbWF4TWludAcJAAIBAjFDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgd2l0aCBhY3RpdmUgb3JkZXJzBApzZWxsU3RhdHVzAwMJAGYCBQVwcmljZQAACQBmAgUHbWF4TWludAAABwYHCQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCGtleVByaWNlAgUGY2FsbGVyBQVhcnRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAUHbWF4TWludAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGY2FsbGVyBQVhcnRJZAUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUVuZFNhbGUCBQZjYWxsZXIFBWFydElkCQBkAgUKYmFzZUhlaWdodAUIYmxvY2tFbmQFA25pbAFpAQpidXlBcnR3b3JrAgVhcnRJZAZpc3N1ZXIJAQdidXlNaW50BQUBaQUFYXJ0SWQFBmlzc3VlcgIAAgABaQEGc2V0QmlkAgVhcnRJZAZpc3N1ZXIEDSR0MDI5NDUyMjk0OTIJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDI5NDUyMjk0OTICXzEEBmNhbGxlcggFDSR0MDI5NDUyMjk0OTICXzIEBGRhdGUIBQ0kdDAyOTQ1MjI5NDkyAl8zBA0kdDAyOTQ5NzI5NTMzCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDI5NDk3Mjk1MzMCXzEEBmFtb3VudAgFDSR0MDI5NDk3Mjk1MzMCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAMDCQECIT0CBQhibG9ja0VuZAAACQBnAgUGaGVpZ2h0BQhibG9ja0VuZAcJAAIBAgtTYWxlIGVuZGVkLgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQdhc3NldElkBQZhbW91bnQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwkAZwIAAAUKbWF4Q2FuU2VsbAkAAgECI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAZwIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FBmNhbGxlcgIBXwUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFB2Fzc2V0SWQCAV8JAKQDAQUGYW1vdW50AgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZAIFBmJpZE5icgABBQNuaWwBaQEJYWNjZXB0QmlkBAVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEDSR0MDMwNjkxMzA3MzEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDMwNjkxMzA3MzECXzEEBmNhbGxlcggFDSR0MDMwNjkxMzA3MzECXzIEBGRhdGUIBQ0kdDAzMDY5MTMwNzMxAl8zAwkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQEHYnV5TWludAUFAWkFBWFydElkBQZpc3N1ZXIFBWJpZElkBQhiaWRPd25lcgFpAQljYW5jZWxCaWQEBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQNJHQwMzA5NTczMTAxOAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMzA5NTczMTAxOAJfMQQGY2FsbGVyCAUNJHQwMzA5NTczMTAxOAJfMgQEZGF0ZQgFDSR0MDMwOTU3MzEwMTgCXzMDAwkBAiE9AgUGY2FsbGVyBQhiaWRPd25lcgkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIHCQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgQNcmV0dXJuTW9uZXlUbwMJAAACBQZjYWxsZXIFBmlzc3VlcgUIYmlkT3duZXIFBmNhbGxlcgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg1CaWQgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAAECWJpZFN0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUKYmlkRGF0YUtleQIBXwUJYmlkU3RhdHVzCQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQJAGUCBQZiaWROYnIAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUNcmV0dXJuTW9uZXlUbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsAQJ0eAEIdmVyaWZpZXIABAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwAwkAAAIIBQNpbnYIZnVuY3Rpb24CCmFkZEFydHdvcmsJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MADQMJAAACCAUDaW52CGZ1bmN0aW9uAg11cGRhdGVBcnR3b3JrCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAwDCQAAAggFA2ludghmdW5jdGlvbgILc2VsbEFydHdvcmsJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MABQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleeE4an4=", "height": 2411411, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EGa4W59CGQoqARbxysKugkGFFR2HvmwuUxDSRukjF3bv Next: VGABVsPDnqZdKmoyTmMCqxz8N44aUKY4pjjV6iPpcu4 Diff:
OldNewDifferences
382382 func br (aR,bs) = if (!(w))
383383 then throw(x)
384384 else {
385- let P = if ((toBase58String(aR.caller.bytes) == toBase58String(this.bytes)))
385+ let P = if (if ((toBase58String(aR.caller.bytes) == toBase58String(this.bytes)))
386+ then !(isDefined(aR.payments))
387+ else false)
386388 then toString(addressFromPublicKey(toBytes(bs)))
387389 else toBase58String(aR.caller.bytes)
388390 let bt = if ((bs != ""))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.1.9"
55
66 func b (c) = valueOrElse(getString(this, c), "")
77
88
99 let d = false
1010
1111 let e = value(addressFromString(b("conf_oracle_fee")))
1212
1313 let f = value(addressFromString(b("conf_signweb_dapp")))
1414
1515 let g = b("conf_fee_receiver")
1616
1717 let h = if (d)
1818 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1919 else value(addressFromString(b("conf_users_dapp")))
2020
2121 let i = value(addressFromString(b("conf_whitelist_dapp")))
2222
2323 let j = fromBase58String(b("conf_accepted_asset_SIGN"))
2424
2525 let k = fromBase58String(b("conf_accepted_asset_USDN"))
2626
2727 let l = fromBase58String(b("conf_accepted_asset_USDT"))
2828
2929 let m = base58''
3030
3131 let n = b("conf_admin_1")
3232
3333 func o (c) = valueOrErrorMessage(getInteger(e, c), "Integer undefine or 0 in oracle")
3434
3535
3636 func p (c) = valueOrElse(getInteger(this, c), 0)
3737
3838
3939 func q (c) = valueOrElse(getInteger(i, c), 0)
4040
4141
4242 func r (c) = valueOrElse(getBoolean(this, c), false)
4343
4444
4545 let s = 7
4646
4747 let t = 10
4848
4949 let u = b("conf_default_licence")
5050
5151 let v = b("conf_default_licence_hash")
5252
5353 let w = valueOrElse(getBoolean(h, "conf_dapp_is_running"), true)
5454
5555 let x = valueOrElse(getString(h, "conf_maintenance_msg"), "")
5656
5757 let y = "SUSPENDED"
5858
5959 let z = "REMOVED"
6060
6161 let A = "UNREGISTERED"
6262
6363 let B = "ALLOWED"
6464
6565 let C = o(("certification_fee_" + toBase58String(j)))
6666
6767 func D (c) = valueOrElse(getInteger(this, c), 1000)
6868
6969
7070 func E (F,G,H) = {
7171 let I = getString(f, ((("data_fc_" + F) + "_") + G))
7272 if ($isInstanceOf(I, "String"))
7373 then {
7474 let J = I
7575 if (contains(J, H))
7676 then true
7777 else false
7878 }
7979 else false
8080 }
8181
8282
8383 func K (L) = if (contains(L, "/"))
8484 then if (if ((76 > size(L)))
8585 then (size(split(L, "/")[0]) == 59)
8686 else false)
8787 then (16 > size(split(L, "/")[1]))
8888 else false
8989 else false
9090
9191
9292 func M (N) = (size(N) == 64)
9393
9494
9595 func O (P) = ("user_status_" + P)
9696
9797
9898 func Q (P,R) = ((("art_date_" + R) + "_") + P)
9999
100100
101101 func S (P,R) = ((("art_name_" + R) + "_") + P)
102102
103103
104104 func T (P,R) = ((("art_desc_" + R) + "_") + P)
105105
106106
107107 func U (P,R) = ((("art_display_cid_" + R) + "_") + P)
108108
109109
110110 func V (P,R) = ((("art_export_hash_" + R) + "_") + P)
111111
112112
113113 func W (P,R) = ((("art_export_cid_" + R) + "_") + P)
114114
115115
116116 func X (P,R) = ((("art_maxmint_" + R) + "_") + P)
117117
118118
119119 func Y (P,R) = ((("art_signid_" + R) + "_") + P)
120120
121121
122122 func Z (P,R) = ((("art_issued_" + R) + "_") + P)
123123
124124
125125 func aa (P,R) = ((("art_onsale_" + R) + "_") + P)
126126
127127
128128 func ab (P,R) = ((("art_licence_hash_" + R) + "_") + P)
129129
130130
131131 func ac (P,R) = ((("art_licence_cid_" + R) + "_") + P)
132132
133133
134134 func ad (P,R) = ((("art_tags_" + R) + "_") + P)
135135
136136
137137 func ae (P,R) = ((("art_type_" + R) + "_") + P)
138138
139139
140140 func af (P,R) = ((("art_note_" + R) + "_") + P)
141141
142142
143143 func ag (P,R) = ((("art_crawler_cid_" + R) + "_") + P)
144144
145145
146146 func ah (P,R) = ((("art_royalties_" + R) + "_") + P)
147147
148148
149149 func ai (P,R) = ((("art_price_" + R) + "_") + P)
150150
151151
152152 func aj (P,R) = ((("art_endsale_" + R) + "_") + P)
153153
154154
155155 func ak (P,R) = ((("art_assetAccepted_" + R) + "_") + P)
156156
157157
158158 func al (P,R) = ((("art_flag_" + R) + "_") + P)
159159
160160
161161 func am (an) = ("artist_agent_" + an)
162162
163163
164164 func ao (an) = ("artist_agent_primary_" + an)
165165
166166
167167 func ap (P,aq) = ((("get_hashbytxidaddr_" + aq) + "_") + P)
168168
169169
170170 func ar (H) = ("get_owner_by_hash_" + H)
171171
172172
173173 func as (P,at) = ((("get_artidbysignid_" + at) + "_") + P)
174174
175175
176176 func au (H,P) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((H + P)))))
177177
178178
179179 func av (aw,ax,ay) = if (!(K(aw)))
180180 then throw("Wrong Display CID")
181181 else if (!(K(ax)))
182182 then throw("Wrong Export CID")
183183 else if (if ((ay != ""))
184184 then !(K(ay))
185185 else false)
186186 then throw("Wrong Licence CID")
187187 else true
188188
189189
190190 func az (aA,aB) = if (!(M(aA)))
191191 then throw("Export Hash 64 char. max")
192192 else if (!(M(aB)))
193193 then throw("Licence Hash 64 char. max")
194194 else true
195195
196196
197197 func aC (aD,aE) = if ((size(aD) == 0))
198198 then throw("Field cannot be is empty")
199199 else if ((size(aD) > aE))
200200 then throw((aD + " is too long"))
201201 else true
202202
203203
204204 func aF (P) = {
205205 let aG = valueOrElse(getString(h, O(P)), A)
206206 if (if ((aG == A))
207207 then true
208208 else (aG == B))
209209 then "Register this account first with \"Account\" tab"
210210 else if ((aG == y))
211211 then "Account suspended"
212212 else if ((aG == z))
213213 then "Account removed"
214214 else ""
215215 }
216216
217217
218218 func aH (ay,aB) = {
219219 let L = if ((size(ay) == 0))
220220 then u
221221 else ay
222222 let N = if ((size(aB) == 0))
223223 then v
224224 else aB
225225 $Tuple2(L, N)
226226 }
227227
228228
229229 func aI (P,aw,ax,aJ,aA,aK,aL,aM,aN,aO) = {
230230 let aP = aF(P)
231231 if ((aP != ""))
232232 then throw(aP)
233233 else if ((size(aw) == 0))
234234 then throw("Display CID cannot be empty")
235235 else if (!(av(aw, ax, aJ)))
236236 then throw("Problem with CID")
237237 else if (!(az(aA, aK)))
238238 then throw("Problem with Hashes")
239239 else if (!(aC(aL, 100)))
240240 then throw("100 Char. max name")
241241 else if (!(aC(aM, 1000)))
242242 then throw("1000 Char. max description")
243243 else if (if ((0 > aO))
244244 then true
245245 else (aO > 1000))
246246 then throw("Royalties cannot be less than 0% or higher than 10%")
247247 else if ((size(split(aN, ",")) > 5))
248248 then throw("5 tags max.")
249249 else ""
250250 }
251251
252252
253253 func aQ (aR) = if ((size(aR.payments) == 0))
254254 then throw("No payment attached")
255255 else {
256256 let aS = value(aR.payments[0])
257257 let aT = value(aS.amount)
258258 $Tuple2(aS, aT)
259259 }
260260
261261
262262 func aU (aR) = {
263263 let aV = aQ(aR)
264264 let aS = aV._1
265265 let aT = aV._2
266266 let aW = if (if (isDefined(aS.assetId))
267267 then (aS.assetId == j)
268268 else false)
269269 then aS.assetId
270270 else throw("Only SIGN token accepted as transaction fee")
271271 if ((aT != C))
272272 then throw(("Payment amount should be " + toString(C)))
273273 else $Tuple2(aT, aW)
274274 }
275275
276276
277277 func aX (aY,R) = {
278278 let I = getInteger(this, Z(aY, R))
279279 if ($isInstanceOf(I, "Int"))
280280 then {
281281 let aZ = I
282282 if ((aZ != 0))
283283 then true
284284 else false
285285 }
286286 else false
287287 }
288288
289289
290290 func ba (aR,bb,bc) = {
291291 let bd = aQ(aR)
292292 let aS = bd._1
293293 let aT = bd._2
294294 let aW = if (!(isDefined(aS.assetId)))
295295 then unit
296296 else if (if ((size(bb) > 0))
297297 then (toBase58String(value(aS.assetId)) == bb)
298298 else false)
299299 then aS.assetId
300300 else throw("Wrong asset id")
301301 if (if ((aW == unit))
302302 then (bb != "")
303303 else false)
304304 then throw("Wrong asset id")
305305 else if ((bc != aT))
306306 then throw("Payment don't match")
307307 else $Tuple2(aT, aW)
308308 }
309309
310310
311311 func be (aW) = if (if (if (if (if ((aW != toBase58String(j)))
312312 then (aW != toBase58String(m))
313313 else false)
314314 then (aW != "WAVES")
315315 else false)
316316 then (aW != toBase58String(k))
317317 else false)
318318 then (aW != toBase58String(l))
319319 else false)
320320 then throw("Only SIGN, USDN,USDT or WAVES accepted")
321321 else true
322322
323323
324324 func bf (aW,bg) = {
325325 let bh = if (d)
326326 then 10
327327 else o("waves_min_sell")
328328 let bi = 1000000
329329 let bj = if (d)
330330 then 1
331331 else (C * 2)
332332 if (if (if (if (if (if ((aW == toBase58String(k)))
333333 then (bi > bg)
334334 else false)
335335 then (bg != 0)
336336 else false)
337337 then true
338338 else if (if ((aW == toBase58String(l)))
339339 then (bi > bg)
340340 else false)
341341 then (bg != 0)
342342 else false)
343343 then true
344344 else if (if ((aW == toBase58String(j)))
345345 then (bj > bg)
346346 else false)
347347 then (bg != 0)
348348 else false)
349349 then true
350350 else if (if (if ((aW == toBase58String(m)))
351351 then true
352352 else (aW == "WAVES"))
353353 then (bh > bg)
354354 else false)
355355 then (bg != 0)
356356 else false)
357357 then throw("Wrong minimum sell price")
358358 else true
359359 }
360360
361361
362362 func bk (aW) = if ((aW == "WAVES"))
363363 then unit
364364 else fromBase58String(aW)
365365
366366
367367 func bl (bm) = {
368368 let bn = b((bm + "_OPEN"))
369369 if ((bn == ""))
370370 then throw("Bid not found")
371371 else {
372372 let bo = split(bn, "_")
373373 let bp = parseIntValue(bo[1])
374374 let bq = bk(bo[0])
375375 if ((0 >= bp))
376376 then throw("Wrong amount")
377377 else $Tuple2(bp, bq)
378378 }
379379 }
380380
381381
382382 func br (aR,bs) = if (!(w))
383383 then throw(x)
384384 else {
385- let P = if ((toBase58String(aR.caller.bytes) == toBase58String(this.bytes)))
385+ let P = if (if ((toBase58String(aR.caller.bytes) == toBase58String(this.bytes)))
386+ then !(isDefined(aR.payments))
387+ else false)
386388 then toString(addressFromPublicKey(toBytes(bs)))
387389 else toBase58String(aR.caller.bytes)
388390 let bt = if ((bs != ""))
389391 then invoke(i, "useFreeTx", [toString(addressFromPublicKey(toBytes(bs)))], nil)
390392 else unit
391393 if ((bt == bt))
392394 then $Tuple3(toBase58String(aR.transactionId), P, lastBlock.timestamp)
393395 else throw("Strict value is not equal to itself.")
394396 }
395397
396398
397399 func bu (aR) = if (!(w))
398400 then throw(x)
399401 else $Tuple3(toBase58String(aR.transactionId), toBase58String(aR.caller.bytes), lastBlock.timestamp)
400402
401403
402404 func bv (aR,R,bw,bx,by) = {
403405 let bz = bu(aR)
404406 let bA = bz._1
405407 let P = bz._2
406408 let bB = bz._3
407409 let bC = if (if (if ((P == bw))
408410 then (by != "")
409411 else false)
410412 then (bx != "")
411413 else false)
412414 then true
413415 else false
414416 let bD = p(aj(P, R))
415417 if (if (if ((bD != 0))
416418 then (height >= bD)
417419 else false)
418420 then !(bC)
419421 else false)
420422 then throw("Sale ended.")
421423 else {
422424 let bE = (P == bw)
423425 let bF = p("total_nft_issued")
424426 let F = b(Y(bw, R))
425427 let bG = b(S(bw, R))
426428 if ((bG == ""))
427429 then throw("Art doesn't exist")
428430 else {
429431 let bH = r(aa(bw, R))
430432 let bI = p(Z(bw, R))
431433 let bc = if (bE)
432434 then (C * 2)
433435 else p(ai(bw, R))
434436 let bb = if (bE)
435437 then toBase58String(j)
436438 else b(ak(bw, R))
437439 let bJ = p(X(bw, R))
438440 if (if (if (!(bC))
439441 then !(bE)
440442 else false)
441443 then if (if ((0 >= bc))
442444 then true
443445 else !(bH))
444446 then true
445447 else (0 >= bJ)
446448 else false)
447449 then throw("Art not for sale")
448450 else if (if (if (!(bC))
449451 then bE
450452 else false)
451453 then (0 >= bJ)
452454 else false)
453455 then throw("Max issuable not set")
454456 else {
455457 let aP = aF(bw)
456458 if (if (bC)
457459 then (aP != "")
458460 else false)
459461 then throw(aP)
460462 else {
461463 let bm = ((((((("bid_" + R) + "_") + bw) + "_") + by) + "_") + bx)
462464 let bK = if (bC)
463465 then bl(bm)
464466 else ba(aR, bb, bc)
465467 let aT = bK._1
466468 let aW = bK._2
467469 let bL = valueOrElse(getString(h, am(bw)), g)
468470 let bM = valueOrElse(getInteger(h, ao(bw)), 0)
469471 let bN = q(bw)
470472 let bO = if ((bN > height))
471473 then 0
472474 else if ((aW == j))
473475 then s
474476 else t
475477 let bP = fraction(aT, bO, 100)
476478 let bQ = if (if (if ((bL != g))
477479 then (bM > 0)
478480 else false)
479481 then (height > bN)
480482 else false)
481483 then fraction(aT, bM, 100)
482484 else 0
483485 let bR = (aT - bP)
484486 if ((bI == bJ))
485487 then throw("Art sold out")
486488 else {
487489 let bS = (bI + 1)
488490 let bT = ((((((((((("Creator: " + bw) + ",
489491 ArtID: ") + R) + ",
490492 SignID: ") + F) + ",
491493 Artwork name: ") + bG) + ",
492494 Issue: ") + toString(bS)) + "/") + toString(bJ))
493495 let bU = Issue(("SA_" + toString((bF + 1))), bT, 1, 0, false)
494496 let bV = calculateAssetId(bU)
495497 let bW = if (if ((bS == bJ))
496498 then true
497499 else !(bH))
498500 then false
499501 else true
500502 let bX = if (if (if ((P == bw))
501503 then (by != "")
502504 else false)
503505 then (bx != "")
504506 else false)
505507 then addressFromStringValue(by)
506508 else aR.caller
507509 let bY = if (!(isDefined(aW)))
508510 then "WAVES"
509511 else toBase58String(value(aW))
510512 let bn = b((bm + "_OPEN"))
511513 let bZ = DeleteEntry((bm + "_OPEN"))
512514 let ca = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bB)))
513515 let cb = ((((((("art_sold_" + toString(bS)) + "_of_") + toString(bJ)) + "_") + R) + "_") + bw)
514516 let cc = if (!(bC))
515517 then ((((((((((P + "_") + toString(bB)) + "_") + bA) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(bV))
516518 else ((((((((((toString(bX) + "_") + toString(bB)) + "_") + bA) + "_") + toString(aT)) + "_") + bY) + "_") + toBase58String(bV))
517519 let cd = StringEntry(cb, cc)
518520 let ce = if ((bQ != 0))
519521 then [ScriptTransfer(Address(fromBase58String(g)), (bP - bQ), aW), ScriptTransfer(Address(fromBase58String(bL)), bQ, aW)]
520522 else [ScriptTransfer(Address(fromBase58String(g)), bP, aW)]
521523 let cf = ([IntegerEntry(Z(bw, R), bS), StringEntry(("nft_" + toBase58String(bV)), cb), IntegerEntry("total_nft_issued", (bF + 1)), IntegerEntry(aj(bw, R), 0), BooleanEntry(aa(bw, R), bW), bU, ScriptTransfer(Address(fromBase58String(bw)), bR, aW), ScriptTransfer(bX, 1, bV)] ++ ce)
522524 if (bC)
523525 then [cd, ca, bZ] :: cf
524526 else cd :: cf
525527 }
526528 }
527529 }
528530 }
529531 }
530532 }
531533
532534
533535 func cg (ch) = {
534536 let I = ch
535537 if ($isInstanceOf(I, "String"))
536538 then {
537539 let ci = I
538540 ci
539541 }
540542 else throw("Sponsored Public Key String expected")
541543 }
542544
543545
544546 @Callable(cj)
545547 func setConf (c,ck) = {
546548 let P = toString(cj.caller)
547549 if (containsElement([n, toString(this)], P))
548550 then if (contains(c, "conf_"))
549551 then [StringEntry(c, ck)]
550552 else throw("Entries starting with conf_ only")
551553 else throw("You are not allowed to change this")
552554 }
553555
554556
555557
556558 @Callable(aR)
557559 func addArtwork (H,F,aL,aM,aN,cl,aw,aA,ax,aB,ay,cm,aO,bs) = {
558560 let cn = br(aR, bs)
559561 let R = cn._1
560562 let P = cn._2
561563 let bB = cn._3
562564 if (!(M(H)))
563565 then throw("Hash should be 64 characters maximum")
564566 else {
565567 let co = aH(ay, aB)
566568 let aJ = co._1
567569 let aK = co._2
568570 let cp = aI(P, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
569571 if ((cp != ""))
570572 then throw("Something went wrong!")
571573 else {
572574 let cq = (q((P + "_free_drops")) > 0)
573575 let cr = if (cq)
574576 then $Tuple2(0, F)
575577 else aU(aR)
576578 let aT = cr._1
577579 let aW = cr._2
578580 if (!(isDefined(aT)))
579581 then throw("Something went wrong")
580582 else {
581583 let cs = b(au(H, P))
582584 if ((cs != ""))
583585 then throw("You already added it")
584586 else {
585587 let ct = b(ar(H))
586588 if ((ct != ""))
587589 then throw("Hash already registered")
588590 else {
589591 let cu = E(F, P, H)
590592 if (!(cu))
591593 then throw("Sign Certificate not found for this address.")
592594 else {
593595 let cv = if (cq)
594596 then invoke(i, "useFreeDrop", [toBase58String(aR.caller.bytes)], nil)
595597 else unit
596598 if ((cv == cv))
597599 then [StringEntry(ar(H), P), StringEntry(au(H, P), R), IntegerEntry(Q(P, R), bB), StringEntry(S(P, R), aL), StringEntry(T(P, R), aM), StringEntry(U(P, R), aw), StringEntry(W(P, R), ax), StringEntry(V(P, R), aA), StringEntry(ab(P, R), aK), StringEntry(ac(P, R), aJ), StringEntry(ae(P, R), cl), StringEntry(ad(P, R), aN), IntegerEntry(X(P, R), 0), StringEntry(Y(P, R), F), IntegerEntry(Z(P, R), 0), BooleanEntry(aa(P, R), false), StringEntry(as(P, F), R), StringEntry(ap(P, R), H), StringEntry(ag(P, R), cm), IntegerEntry(ah(P, R), aO), ScriptTransfer(Address(fromBase58String(g)), aT, j)]
598600 else throw("Strict value is not equal to itself.")
599601 }
600602 }
601603 }
602604 }
603605 }
604606 }
605607 }
606608
607609
608610
609611 @Callable(aR)
610612 func updateArtwork (aq,aL,aM,aN,cl,aw,aA,ax,aB,ay,cm,aO,bs) = if (!(w))
611613 then throw(x)
612614 else {
613615 let cw = br(aR, bs)
614616 let bA = cw._1
615617 let P = cw._2
616618 let bB = cw._3
617619 let cx = aH(ay, aB)
618620 let aJ = cx._1
619621 let aK = cx._2
620622 let cp = aI(P, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
621623 if ((cp != ""))
622624 then throw("Something went wrong!")
623625 else {
624626 let cs = b(S(P, aq))
625627 if ((cs == ""))
626628 then throw("Entry not found")
627629 else {
628630 let cy = b(al(P, aq))
629631 if ((cy == "ILLEGAL"))
630632 then throw("Cannot update ILLEGAL artwork")
631633 else if (!(aX(P, aq)))
632634 then [StringEntry(S(P, aq), aL), StringEntry(T(P, aq), aM), StringEntry(U(P, aq), aw), StringEntry(W(P, aq), ax), StringEntry(V(P, aq), aA), StringEntry(ac(P, aq), aJ), StringEntry(ab(P, aq), aK), StringEntry(ad(P, aq), aN), StringEntry(ae(P, aq), cl), StringEntry(ag(P, aq), cm), IntegerEntry(ah(P, aq), aO)]
633635 else throw("Already minted")
634636 }
635637 }
636638 }
637639
638640
639641
640642 @Callable(aR)
641643 func flagArtwork (R,cz,cy,cA) = {
642644 let cB = bu(aR)
643645 let bA = cB._1
644646 let P = cB._2
645647 if (containsElement([n, toString(this)], P))
646648 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cy))
647649 then [StringEntry(al(cz, R), cy), StringEntry(af(cz, R), cA)]
648650 else throw(("Unknow status " + cy))
649651 else throw("You are not allowed")
650652 }
651653
652654
653655
654656 @Callable(aR)
655657 func deleteArtwork (R,cz) = {
656658 let cC = bu(aR)
657659 let bA = cC._1
658660 let P = cC._2
659661 let aY = if (containsElement([n, toString(this)], P))
660662 then cz
661663 else P
662664 let cs = valueOrErrorMessage(b(S(aY, R)), "No art matching for this address")
663665 if ((cs == ""))
664666 then throw("No art matching for this address")
665667 else {
666668 let H = b(ap(aY, R))
667669 if ((H == ""))
668670 then throw("No art hash matching for this address")
669671 else {
670672 let F = b(Y(aY, R))
671673 if ((F == ""))
672674 then throw("No SIGN ID matching")
673675 else {
674676 let cD = [DeleteEntry(Q(aY, R)), DeleteEntry(S(aY, R)), DeleteEntry(T(aY, R)), DeleteEntry(U(aY, R)), DeleteEntry(W(aY, R)), DeleteEntry(V(aY, R)), DeleteEntry(ab(aY, R)), DeleteEntry(ac(aY, R)), DeleteEntry(ae(aY, R)), DeleteEntry(ad(aY, R)), DeleteEntry(X(aY, R)), DeleteEntry(Y(aY, R)), DeleteEntry(Z(aY, R)), DeleteEntry(aa(aY, R)), DeleteEntry(al(aY, R)), DeleteEntry(ai(aY, R)), DeleteEntry(ak(aY, R)), DeleteEntry(ar(H)), DeleteEntry(as(aY, F)), DeleteEntry(au(H, aY)), DeleteEntry(aj(aY, R)), DeleteEntry(af(aY, R)), DeleteEntry(ag(aY, R)), DeleteEntry(ah(aY, R))]
675677 if (!(aX(aY, R)))
676678 then if (!(w))
677679 then throw(x)
678680 else cD
679681 else if (containsElement([n, toString(this)], P))
680682 then cD
681683 else throw("Art already minted, you cannot delete it")
682684 }
683685 }
684686 }
685687 }
686688
687689
688690
689691 @Callable(aR)
690692 func sellArtwork (R,bg,cE,aW,bD,bs) = {
691693 let cF = br(aR, bs)
692694 let bA = cF._1
693695 let P = cF._2
694696 let bG = b(S(P, R))
695697 if ((bG == ""))
696698 then throw("This art doesn't match your account")
697699 else {
698700 let cy = b(al(P, R))
699701 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cy))
700702 then throw("Flagged artwork")
701703 else {
702704 let cG = p(("current_bidamount_" + R))
703705 if ((0 > bD))
704706 then throw("Negative end")
705707 else if (if ((bD > 0))
706708 then if ((cE != 1))
707709 then true
708710 else (bg != 0)
709711 else false)
710712 then throw("Timed offer only allowed for unique edition and offer only")
711713 else {
712714 let cH = if ((bD == 0))
713715 then 0
714716 else height
715717 if (!(be(aW)))
716718 then throw("Something went wrong!")
717719 else if (!(bf(aW, bg)))
718720 then throw("Something went wrong!")
719721 else {
720722 let aP = aF(P)
721723 if ((aP != ""))
722724 then throw(aP)
723725 else {
724726 let bI = p(Z(P, R))
725727 let bJ = p(X(P, R))
726728 if ((cE > 100))
727729 then throw("100 editions max per artwork")
728730 else if (if ((bI != 0))
729731 then (bI == bJ)
730732 else false)
731733 then throw("Max edition reached.")
732734 else if (if ((bI > 0))
733735 then (bJ != cE)
734736 else false)
735737 then throw("Cannot change maximum issuable anymore")
736738 else if (if ((cG > 0))
737739 then (bJ != cE)
738740 else false)
739741 then throw("Cannot change maximum issuable with active orders")
740742 else {
741743 let bW = if (if ((bg > 0))
742744 then (cE > 0)
743745 else false)
744746 then true
745747 else false
746748 [BooleanEntry(aa(P, R), bW), IntegerEntry(ai(P, R), bg), IntegerEntry(X(P, R), cE), StringEntry(ak(P, R), aW), IntegerEntry(aj(P, R), (cH + bD))]
747749 }
748750 }
749751 }
750752 }
751753 }
752754 }
753755 }
754756
755757
756758
757759 @Callable(aR)
758760 func buyArtwork (R,bw) = bv(aR, R, bw, "", "")
759761
760762
761763
762764 @Callable(aR)
763765 func setBid (R,bw) = {
764766 let cI = bu(aR)
765767 let bA = cI._1
766768 let P = cI._2
767769 let bB = cI._3
768770 let cJ = aQ(aR)
769771 let aS = cJ._1
770772 let aT = cJ._2
771773 let aW = if (!(isDefined(aS.assetId)))
772774 then "WAVES"
773775 else toBase58String(value(aS.assetId))
774776 let bD = p(aj(bw, R))
775777 if (if ((bD != 0))
776778 then (height >= bD)
777779 else false)
778780 then throw("Sale ended.")
779781 else {
780782 let cG = p(("current_bidamount_" + R))
781783 if (!(be(aW)))
782784 then throw("asset not accepted")
783785 else if (!(bf(aW, aT)))
784786 then throw("Wrong min sell")
785787 else {
786788 let bI = p(Z(bw, R))
787789 let bJ = p(X(bw, R))
788790 if ((0 >= bJ))
789791 then throw("No max edition set for this artwork")
790792 else if ((bI >= bJ))
791793 then throw("Sold out, you cannot bid")
792794 else [StringEntry((((((((("bid_" + R) + "_") + bw) + "_") + P) + "_") + bA) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + R), (cG + 1))]
793795 }
794796 }
795797 }
796798
797799
798800
799801 @Callable(aR)
800802 func acceptBid (R,bw,bx,by) = {
801803 let cK = bu(aR)
802804 let bA = cK._1
803805 let P = cK._2
804806 let bB = cK._3
805807 if ((P != bw))
806808 then throw("You cannot do this action")
807809 else bv(aR, R, bw, bx, by)
808810 }
809811
810812
811813
812814 @Callable(aR)
813815 func cancelBid (R,bw,bx,by) = {
814816 let cL = bu(aR)
815817 let bA = cL._1
816818 let P = cL._2
817819 let bB = cL._3
818820 if (if ((P != by))
819821 then (P != bw)
820822 else false)
821823 then throw("You cannot do this action")
822824 else {
823825 let cM = if ((P == bw))
824826 then by
825827 else P
826828 let cG = p(("current_bidamount_" + R))
827829 let bm = ((((((("bid_" + R) + "_") + bw) + "_") + by) + "_") + bx)
828830 let bn = b((bm + "_OPEN"))
829831 if ((bn == ""))
830832 then throw("Bid not found")
831833 else {
832834 let bo = split(bn, "_")
833835 let aW = bk(bo[0])
834836 let cN = "CANCELED"
835837 [DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cN), ((bn + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + R), (cG - 1)), ScriptTransfer(Address(fromBase58String(cM)), parseIntValue(bo[1]), aW)]
836838 }
837839 }
838840 }
839841
840842
841843 @Verifier(cO)
842844 func cP () = {
843845 let I = cO
844846 if ($isInstanceOf(I, "InvokeScriptTransaction"))
845847 then {
846848 let cQ = I
847849 if ((cQ.function == "addArtwork"))
848850 then sigVerify(cO.bodyBytes, cO.proofs[0], fromBase58String(cg(cQ.args[13])))
849851 else if ((cQ.function == "updateArtwork"))
850852 then sigVerify(cO.bodyBytes, cO.proofs[0], fromBase58String(cg(cQ.args[12])))
851853 else if ((cQ.function == "sellArtwork"))
852854 then sigVerify(cO.bodyBytes, cO.proofs[0], fromBase58String(cg(cQ.args[5])))
853855 else sigVerify(cO.bodyBytes, cO.proofs[0], cO.senderPublicKey)
854856 }
855857 else sigVerify(cO.bodyBytes, cO.proofs[0], cO.senderPublicKey)
856858 }
857859

github/deemru/w8io/169f3d6 
76.60 ms