tx · EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.07600000 Waves 2023.07.20 00:16 [2673265] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J", "fee": 7600000, "feeAssetId": null, "timestamp": 1689801433015, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "37jQDJL6ydGoniq4GY5oNqUGfDDimA1M1uoc13PfwD8dhSgxDTxGmu7j8ctoWEq1m9D2Tr5QkrQJzFEQqfF2g2Zx" ], "script": "base64:BgK0AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSAM8BARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AoI0GAA94cFN1Y2Nlc3NGbGlnaHQA0IYDAAx4cEZhaWxGbGlnaHQAkE4ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCWsQIACnhwTmV3U0xhbmQAgOHrFwAOeHBVcGdyYWRlSW5mcmEAoI0GAAd4cE1lcmdlAICt4gQACXhwT25ib2FyZACAreIEAAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARBzdWJ0cmFjdFByb2R1Y3RzAgRwSGFzBXBVc2VkAwkAAAIFBXBVc2VkAgAFBHBIYXMEBXBMaXN0AwkAAAIFBHBIYXMCAAUDbmlsCQC1CQIFBHBIYXMCAV8KAQRzdWJQAgNhY2MEaXRlbQQBaggFA2Fj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b3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwoBBGFkZFACA2FjYwRpdGVtBAFqCAUDYWNjAl8xBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAAAwkBAiE9AgUKcHJvZHVjdElkeAUBagkAlQoDCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUEY3VycggFA2FjYwJfMwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqAhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAVpc0JpZwMJAQEhAQUKaXNQb3NpdGl2ZQQGY29tcGF0CQCRAwIJALUJAgUEaXRlbQIBXwUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNj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AMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBk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AQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUOUFJPRFVDVFBLR1NJWkUAAQUOUFJPRFVDVFBLR1NJWkUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkAaAIFBHBrZ3MFBU1VTFQ4BAh3aFJlc1ZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAh3aE1hdFZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp3aEdvb2RzVm9sAwkAAAIFBWdvb2RzAgAAAAgKAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgkAZAIJAGQCBQh3aFJlc1ZvbAUId2hNYXRWb2wFCndoR29vZHNWb2wBDGdldFdhcmVob3VzZQMFd2hLZXkJbGFuZEluZGV4CmluZnJhTGV2ZWwECXZvbFByZWZpeAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0F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Y3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBCAUBZgJfMgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFmAl8yBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFA25pbAIAAAAEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCBQZjYWxsZXIFBHR4SWQEAmlkCAgFAWUCXzICXzEJAJUKAwkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BCAUBZgJfMgkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIFB25ld1Byb2QFA25pbAIBOgUCaWQIBQFmAl8zAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMjg4MDgyOTM0NwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAyODgwODI5MzQ3Al8xBAZkdWNrSWQIBQ0kdDAyODgwODI5MzQ3Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDMxNzIxMzI1OTIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDMxNzIxMzI1OTICXzEEBWJwUmVzCAUNJHQwMzE3MjEzMjU5MgJfMgQFbG9mdE8IBQ0kdDAzMTcyMTMyNTkyAl8zBAVsb2Z0RggFDSR0MDMxNzIxMzI1OTICXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAQFeHBLZXkJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIEYWRkcgdkZWx0YVhQAwkBASEBBQ9LU0FMTE9XWFBMRVZFTFMJAJQKAgUDbmlsAAAEBmx2bEtleQkBDGtleVVzZXJMZXZlbAEFBGFkZHIEBXhwS2V5CQEJa2V5VXNlclhQAQUEYWRkcgQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCaCggFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmgoIBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkIwFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBAlvbGRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECXdsZ1Jlc3VsdAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5CQBkAgUJb2xkUGllY2VzBQZwaWVjZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCWFydFBpZWNlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAP///////////wEEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBCXN0YWtlRHVjawAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDNCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQxwcm9sb2dBY3Rpb24BaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQkA2AQBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAAACCAUBZgJfNAULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHbmV3UHJvZAkBEHN1YnRyYWN0UHJvZHVjdHMCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQIBQFmAl8xCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAggFAWYCXzEAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQCRAwIFCG1lZEtpdEhwBQFuBQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAAAAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCAAoFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQdXBncmFkZUluZnJhVXNkdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAcIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFC2xhbmRBc3NldElkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUGCQClCAEIBQFpBmNhbGxlcgAABQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQEObWVyZ2VMYW5kc1VzZHQBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUHCQClCAEIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEPZml4U3Rha2VkUGllY2VzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAxzdGFrZWRQaWVjZXMDCQAAAgUHYWRkcmVzcwIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwKAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFu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b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24AAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUKZnJlZUtleUFjYwAABAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwMJAQIhPQIIBQFpBmNhbGxlcgULd2xnQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0BwkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAZicFByb2QJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAQFcExpc3QDCQAAAgUGYnBQcm9kAgAFA25pbAkAtQkCBQZicFByb2QCAV8ECHRlbXBQcm9kCQEFZHJlc3MDBQtjdXJyZW50U2VncwUFcExpc3QGBAduZXdQcm9kCQEFZHJlc3MDBQVuZXdFcQUIdGVtcFByb2QHCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCBQduZXdQcm9kAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpAQR0ZXN0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEAWEJAQ5wcm9kU3RyVG9CeXRlcwECAAQBYgkBDmJ5dGVzVG9Qcm9kU3RyAQUBYQkAlAoCBQNuaWwFAWIAUjAB0Q==", "height": 2673265, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu Next: 2NcKvAgbF6WbQQedZPYNRKY17h7AK6BR5FfRVLB1Hf5K Diff:
Old | New | Differences | |
---|---|---|---|
629 | 629 | } | |
630 | 630 | ||
631 | 631 | ||
632 | - | func dx (dy,dh,dz,dA,dB,dC) = { | |
633 | - | let do = split(dy, ":") | |
632 | + | func dx (dy) = { | |
633 | + | func dz (cL,aY) = { | |
634 | + | let dk = size(cL) | |
635 | + | let dA = take(drop(dy, (8 * dk)), 8) | |
636 | + | (cL :+ toString(toInt(dA))) | |
637 | + | } | |
638 | + | ||
639 | + | makeString({ | |
640 | + | let cN = ac | |
641 | + | let cO = size(cN) | |
642 | + | let cP = nil | |
643 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
644 | + | then cR | |
645 | + | else dz(cR, cN[cS]) | |
646 | + | ||
647 | + | func cT (cR,cS) = if ((cS >= cO)) | |
648 | + | then cR | |
649 | + | else throw("List size exceeds 50") | |
650 | + | ||
651 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
652 | + | }, "_") | |
653 | + | } | |
654 | + | ||
655 | + | ||
656 | + | func dB (dC,dh,dD,dE,dF,dG) = { | |
657 | + | let do = split(dC, ":") | |
634 | 658 | if ((size(do) != 2)) | |
635 | 659 | then throw("Incorrect format, should be index:amount") | |
636 | 660 | else { | |
637 | - | let | |
638 | - | let | |
639 | - | if (if ((0 > | |
661 | + | let dH = parseIntValue(do[0]) | |
662 | + | let dI = parseIntValue(do[1]) | |
663 | + | if (if ((0 > dH)) | |
640 | 664 | then true | |
641 | - | else ( | |
665 | + | else (dH >= size(ac))) | |
642 | 666 | then throw("Unknown product idx") | |
643 | - | else if ((0 > | |
667 | + | else if ((0 > dI)) | |
644 | 668 | then throw("Count can't be negative") | |
645 | - | else if (( | |
669 | + | else if ((dI == 0)) | |
646 | 670 | then $Tuple2(dh, false) | |
647 | 671 | else { | |
648 | - | func | |
672 | + | func dJ (cL,dj) = { | |
649 | 673 | let dk = cL._1 | |
650 | 674 | let dr = if ((size(dh) > dk)) | |
651 | 675 | then parseIntValue(dh[dk]) | |
652 | 676 | else 0 | |
653 | - | if (( | |
677 | + | if ((dH != dk)) | |
654 | 678 | then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3) | |
655 | - | else if (if (!( | |
656 | - | then ( | |
679 | + | else if (if (!(dD)) | |
680 | + | then (dI > dr) | |
657 | 681 | else false) | |
658 | - | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString( | |
682 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dI))) | |
659 | 683 | else { | |
660 | - | let | |
684 | + | let dK = if (!(dD)) | |
661 | 685 | then { | |
662 | - | let | |
663 | - | if (( | |
686 | + | let dL = split(dj, "_")[ae] | |
687 | + | if ((dL == "")) | |
664 | 688 | then throw("Item cannot be equipped") | |
665 | 689 | else { | |
666 | - | let | |
667 | - | let | |
668 | - | if (( | |
690 | + | let dM = parseIntValue(dL) | |
691 | + | let dN = (dM / 100) | |
692 | + | if ((dE != dN)) | |
669 | 693 | then throw("Segment incompatible") | |
670 | 694 | else { | |
671 | - | let | |
672 | - | if (( | |
695 | + | let dO = ((dM % 100) / 10) | |
696 | + | if ((dF != dO)) | |
673 | 697 | then throw("Slot incompatible") | |
674 | 698 | else { | |
675 | - | let | |
676 | - | if (if (( | |
677 | - | then ( | |
699 | + | let dP = (dM % 10) | |
700 | + | if (if ((dG != 0)) | |
701 | + | then (dP > 1) | |
678 | 702 | else false) | |
679 | 703 | then throw("Big items should occupy slot 0") | |
680 | - | else ( | |
704 | + | else (dP > 1) | |
681 | 705 | } | |
682 | 706 | } | |
683 | 707 | } | |
684 | 708 | } | |
685 | 709 | else false | |
686 | - | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if ( | |
687 | - | then | |
688 | - | else -( | |
710 | + | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dD) | |
711 | + | then dI | |
712 | + | else -(dI))))), if (cL._3) | |
689 | 713 | then true | |
690 | - | else | |
714 | + | else dK) | |
691 | 715 | } | |
692 | 716 | } | |
693 | 717 | ||
697 | 721 | let cP = $Tuple3(0, nil, false) | |
698 | 722 | func cQ (cR,cS) = if ((cS >= cO)) | |
699 | 723 | then cR | |
700 | - | else | |
724 | + | else dJ(cR, cN[cS]) | |
701 | 725 | ||
702 | 726 | func cT (cR,cS) = if ((cS >= cO)) | |
703 | 727 | then cR | |
711 | 735 | } | |
712 | 736 | ||
713 | 737 | ||
714 | - | func | |
738 | + | func dQ (dR,dS,dD,dE,dF) = if ((dR != "")) | |
715 | 739 | then { | |
716 | - | let | |
717 | - | if ((size( | |
740 | + | let dT = split(dR, ",") | |
741 | + | if ((size(dT) > n)) | |
718 | 742 | then throw("Wrong slots format") | |
719 | 743 | else { | |
720 | - | let | |
721 | - | let | |
722 | - | then | |
744 | + | let dU = dT[0] | |
745 | + | let dV = if ((size(dT) > 1)) | |
746 | + | then dT[1] | |
723 | 747 | else "" | |
724 | - | if (if (( | |
725 | - | then ( | |
748 | + | if (if ((dU == "")) | |
749 | + | then (dV == "") | |
726 | 750 | else false) | |
727 | - | then | |
751 | + | then dS | |
728 | 752 | else { | |
729 | - | let | |
730 | - | then | |
731 | - | else $Tuple2( | |
732 | - | if (( | |
733 | - | then if ( | |
753 | + | let dW = if ((dU != "")) | |
754 | + | then dB(dU, dS, dD, dE, dF, 0) | |
755 | + | else $Tuple2(dS, false) | |
756 | + | if ((dV != "")) | |
757 | + | then if (dW._2) | |
734 | 758 | then throw("Big item already occupies slot") | |
735 | - | else | |
736 | - | else | |
759 | + | else dB(dV, dW._1, dD, dE, dF, 1)._1 | |
760 | + | else dW._1 | |
737 | 761 | } | |
738 | 762 | } | |
739 | 763 | } | |
740 | - | else | |
741 | - | ||
742 | - | ||
743 | - | func | |
744 | - | func | |
764 | + | else dS | |
765 | + | ||
766 | + | ||
767 | + | func dX (dY,dh,dD) = { | |
768 | + | func dE (cL,dZ) = { | |
745 | 769 | let dk = cL._1 | |
746 | - | let | |
747 | - | if ((size( | |
770 | + | let dF = split(dZ, ";") | |
771 | + | if ((size(dF) != m)) | |
748 | 772 | then throw("Wrong segment format") | |
749 | 773 | else { | |
750 | - | let | |
751 | - | let dq = | |
752 | - | if (if (( | |
774 | + | let ea = dF[0] | |
775 | + | let dq = dF[1] | |
776 | + | if (if ((ea == "")) | |
753 | 777 | then (dq == "") | |
754 | 778 | else false) | |
755 | 779 | then $Tuple2((dk + 1), cL._2) | |
756 | 780 | else { | |
757 | - | let | |
758 | - | $Tuple2((dk + 1), | |
781 | + | let eb = dQ(ea, cL._2, dD, dk, 0) | |
782 | + | $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1)) | |
759 | 783 | } | |
760 | 784 | } | |
761 | 785 | } | |
762 | 786 | ||
763 | - | ( let cN = | |
787 | + | ( let cN = dY | |
764 | 788 | let cO = size(cN) | |
765 | 789 | let cP = $Tuple2(0, dh) | |
766 | 790 | func cQ (cR,cS) = if ((cS >= cO)) | |
767 | 791 | then cR | |
768 | - | else | |
792 | + | else dE(cR, cN[cS]) | |
769 | 793 | ||
770 | 794 | func cT (cR,cS) = if ((cS >= cO)) | |
771 | 795 | then cR | |
775 | 799 | } | |
776 | 800 | ||
777 | 801 | ||
778 | - | func | |
802 | + | func ec (ed,ee,ef,eg) = if ((size(ed) != S)) | |
779 | 803 | then throw("Wrong proportions data") | |
780 | 804 | else { | |
781 | - | func | |
782 | - | let dd = (parseIntValue( | |
805 | + | func eh (cL,ei) = { | |
806 | + | let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef)) | |
783 | 807 | if ((0 > dd)) | |
784 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
808 | + | then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef))) | |
785 | 809 | else (cL :+ toString(dd)) | |
786 | 810 | } | |
787 | 811 | ||
791 | 815 | let cP = nil | |
792 | 816 | func cQ (cR,cS) = if ((cS >= cO)) | |
793 | 817 | then cR | |
794 | - | else | |
818 | + | else eh(cR, cN[cS]) | |
795 | 819 | ||
796 | 820 | func cT (cR,cS) = if ((cS >= cO)) | |
797 | 821 | then cR | |
803 | 827 | } | |
804 | 828 | ||
805 | 829 | ||
806 | - | func | |
807 | - | let | |
808 | - | | |
809 | - | } | |
810 | - | ||
811 | - | ||
812 | - | func | |
813 | - | ||
814 | - | ||
815 | - | func | |
816 | - | func | |
817 | - | let | |
818 | - | (cL :+ toString((parseIntValue( | |
830 | + | func ej (ee,ef,eg) = { | |
831 | + | let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
832 | + | ec(ed, ee, ef, eg) | |
833 | + | } | |
834 | + | ||
835 | + | ||
836 | + | func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)] | |
837 | + | ||
838 | + | ||
839 | + | func em (en,ee,eo,ef,ep) = { | |
840 | + | func eq (cL,ei) = { | |
841 | + | let er = ((fraction(eo, ep, U) * ee[ei]) * ef) | |
842 | + | (cL :+ toString((parseIntValue(en[ei]) + er))) | |
819 | 843 | } | |
820 | 844 | ||
821 | 845 | let cW = { | |
824 | 848 | let cP = nil | |
825 | 849 | func cQ (cR,cS) = if ((cS >= cO)) | |
826 | 850 | then cR | |
827 | - | else | |
851 | + | else eq(cR, cN[cS]) | |
828 | 852 | ||
829 | 853 | func cT (cR,cS) = if ((cS >= cO)) | |
830 | 854 | then cR | |
836 | 860 | } | |
837 | 861 | ||
838 | 862 | ||
839 | - | func | |
840 | - | func | |
841 | - | let | |
842 | - | $Tuple2((cL._1 :+ | |
863 | + | func es (ee,eo,ef,ep) = { | |
864 | + | func eq (cL,ei) = { | |
865 | + | let er = ((fraction(eo, ep, U) * ee[ei]) * ef) | |
866 | + | $Tuple2((cL._1 :+ er), (cL._2 + er)) | |
843 | 867 | } | |
844 | 868 | ||
845 | 869 | let cN = [0, 1, 2, 3, 4, 5] | |
847 | 871 | let cP = $Tuple2(nil, 0) | |
848 | 872 | func cQ (cR,cS) = if ((cS >= cO)) | |
849 | 873 | then cR | |
850 | - | else | |
874 | + | else eq(cR, cN[cS]) | |
851 | 875 | ||
852 | 876 | func cT (cR,cS) = if ((cS >= cO)) | |
853 | 877 | then cR | |
857 | 881 | } | |
858 | 882 | ||
859 | 883 | ||
860 | - | func | |
861 | - | let | |
862 | - | let | |
863 | - | if (( | |
864 | - | then $Tuple2(makeString( | |
865 | - | else if (( | |
884 | + | func et (eu,ev,ew,ex) = { | |
885 | + | let ey = ew._1 | |
886 | + | let ez = ew._2 | |
887 | + | if ((ez == 0)) | |
888 | + | then $Tuple2(makeString(eu, "_"), makeString(ev, "_")) | |
889 | + | else if ((ex >= ez)) | |
866 | 890 | then { | |
867 | - | func | |
891 | + | func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei]))) | |
868 | 892 | ||
869 | 893 | let cW = { | |
870 | 894 | let cN = [0, 1, 2, 3, 4, 5] | |
872 | 896 | let cP = nil | |
873 | 897 | func cQ (cR,cS) = if ((cS >= cO)) | |
874 | 898 | then cR | |
875 | - | else | |
899 | + | else eA(cR, cN[cS]) | |
876 | 900 | ||
877 | 901 | func cT (cR,cS) = if ((cS >= cO)) | |
878 | 902 | then cR | |
880 | 904 | ||
881 | 905 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
882 | 906 | } | |
883 | - | $Tuple2(makeString(cW, "_"), makeString( | |
907 | + | $Tuple2(makeString(cW, "_"), makeString(ev, "_")) | |
884 | 908 | } | |
885 | 909 | else { | |
886 | - | func | |
887 | - | let | |
888 | - | $Tuple2((cL._1 :+ toString((parseIntValue( | |
910 | + | func eB (cL,ei) = { | |
911 | + | let eC = fraction(ey[ei], ex, ez) | |
912 | + | $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC)))) | |
889 | 913 | } | |
890 | 914 | ||
891 | 915 | let cW = { | |
894 | 918 | let cP = $Tuple2(nil, nil) | |
895 | 919 | func cQ (cR,cS) = if ((cS >= cO)) | |
896 | 920 | then cR | |
897 | - | else | |
921 | + | else eB(cR, cN[cS]) | |
898 | 922 | ||
899 | 923 | func cT (cR,cS) = if ((cS >= cO)) | |
900 | 924 | then cR | |
907 | 931 | } | |
908 | 932 | ||
909 | 933 | ||
910 | - | func | |
911 | - | then | |
912 | - | else -( | |
913 | - | ||
914 | - | ||
915 | - | let | |
916 | - | ||
917 | - | func | |
918 | - | let | |
919 | - | let | |
934 | + | func eD (eE) = if ((eE >= toBigInt(0))) | |
935 | + | then eE | |
936 | + | else -(eE) | |
937 | + | ||
938 | + | ||
939 | + | let eF = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
940 | + | ||
941 | + | func eG (bS,eH) = { | |
942 | + | let eI = toInt((bS % cg)) | |
943 | + | let eJ = if ((eH[0] > eI)) | |
920 | 944 | then "A" | |
921 | - | else if (( | |
945 | + | else if ((eH[1] > eI)) | |
922 | 946 | then "B" | |
923 | - | else if (( | |
947 | + | else if ((eH[2] > eI)) | |
924 | 948 | then "C" | |
925 | - | else if (( | |
949 | + | else if ((eH[3] > eI)) | |
926 | 950 | then "D" | |
927 | - | else if (( | |
951 | + | else if ((eH[4] > eI)) | |
928 | 952 | then "E" | |
929 | 953 | else "F" | |
930 | - | | |
931 | - | } | |
932 | - | ||
933 | - | ||
934 | - | func | |
935 | - | let | |
936 | - | func | |
937 | - | ||
938 | - | let | |
954 | + | eJ | |
955 | + | } | |
956 | + | ||
957 | + | ||
958 | + | func eK (eL,eM) = { | |
959 | + | let eN = eF[eM] | |
960 | + | func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck)) | |
961 | + | ||
962 | + | let eP = { | |
939 | 963 | let cN = [1, 2, 3, 4, 5] | |
940 | 964 | let cO = size(cN) | |
941 | - | let cP = $Tuple2("", ( | |
965 | + | let cP = $Tuple2("", (eL / cf)) | |
942 | 966 | func cQ (cR,cS) = if ((cS >= cO)) | |
943 | 967 | then cR | |
944 | - | else | |
968 | + | else eO(cR, cN[cS]) | |
945 | 969 | ||
946 | 970 | func cT (cR,cS) = if ((cS >= cO)) | |
947 | 971 | then cR | |
949 | 973 | ||
950 | 974 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
951 | 975 | } | |
952 | - | | |
953 | - | } | |
954 | - | ||
955 | - | ||
956 | - | func | |
957 | - | let | |
958 | - | [toString(valueOrElse(parseInt( | |
959 | - | then | |
960 | - | else "0_0_0_0_0_0", if ((size(split( | |
961 | - | then | |
962 | - | else "0_0_0_0_0_0", | |
963 | - | } | |
964 | - | ||
965 | - | ||
966 | - | func | |
967 | - | let do = split( | |
976 | + | eP._1 | |
977 | + | } | |
978 | + | ||
979 | + | ||
980 | + | func eQ (eR) = { | |
981 | + | let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
982 | + | [toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S)) | |
983 | + | then eS[aq] | |
984 | + | else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S)) | |
985 | + | then eS[ar] | |
986 | + | else "0_0_0_0_0_0", eS[as]] | |
987 | + | } | |
988 | + | ||
989 | + | ||
990 | + | func eT (eU) = { | |
991 | + | let do = split(eU, "_") | |
968 | 992 | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
969 | 993 | } | |
970 | 994 | ||
971 | 995 | ||
972 | - | func | |
973 | - | let | |
974 | - | func | |
975 | - | ||
976 | - | func | |
996 | + | func eV (eW) = { | |
997 | + | let eX = eW[aj] | |
998 | + | func eY (cL,dj) = (cL + parseIntValue(dj)) | |
999 | + | ||
1000 | + | func eZ (cL,dj) = { | |
977 | 1001 | let bB = cL._1 | |
978 | - | let | |
979 | - | $Tuple2((bB + 1), (cL._2 + ( | |
980 | - | } | |
981 | - | ||
982 | - | let | |
983 | - | let cN = split( | |
1002 | + | let fa = (((parseIntValue(dj) + af) - 1) / af) | |
1003 | + | $Tuple2((bB + 1), (cL._2 + (fa * bi))) | |
1004 | + | } | |
1005 | + | ||
1006 | + | let fb = { | |
1007 | + | let cN = split(eW[ah], "_") | |
984 | 1008 | let cO = size(cN) | |
985 | 1009 | let cP = 0 | |
986 | 1010 | func cQ (cR,cS) = if ((cS >= cO)) | |
987 | 1011 | then cR | |
988 | - | else | |
1012 | + | else eY(cR, cN[cS]) | |
989 | 1013 | ||
990 | 1014 | func cT (cR,cS) = if ((cS >= cO)) | |
991 | 1015 | then cR | |
993 | 1017 | ||
994 | 1018 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
995 | 1019 | } | |
996 | - | let | |
997 | - | let cN = split( | |
1020 | + | let fc = { | |
1021 | + | let cN = split(eW[ai], "_") | |
998 | 1022 | let cO = size(cN) | |
999 | 1023 | let cP = 0 | |
1000 | - | func | |
1024 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1001 | 1025 | then cR | |
1002 | - | else | |
1003 | - | ||
1004 | - | func | |
1026 | + | else eY(cR, cN[cS]) | |
1027 | + | ||
1028 | + | func fe (cR,cS) = if ((cS >= cO)) | |
1005 | 1029 | then cR | |
1006 | 1030 | else throw("List size exceeds 6") | |
1007 | 1031 | ||
1008 | - | | |
1009 | - | } | |
1010 | - | let | |
1032 | + | fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6) | |
1033 | + | } | |
1034 | + | let ff = if ((eX == "")) | |
1011 | 1035 | then 0 | |
1012 | - | else ( let cN = split_4C( | |
1036 | + | else ( let cN = split_4C(eX, "_") | |
1013 | 1037 | let cO = size(cN) | |
1014 | 1038 | let cP = $Tuple2(0, 0) | |
1015 | - | func | |
1039 | + | func fg (cR,cS) = if ((cS >= cO)) | |
1016 | 1040 | then cR | |
1017 | - | else | |
1018 | - | ||
1019 | - | func | |
1041 | + | else eZ(cR, cN[cS]) | |
1042 | + | ||
1043 | + | func fh (cR,cS) = if ((cS >= cO)) | |
1020 | 1044 | then cR | |
1021 | 1045 | else throw("List size exceeds 50") | |
1022 | 1046 | ||
1023 | - | | |
1024 | - | (( | |
1025 | - | } | |
1026 | - | ||
1027 | - | ||
1028 | - | func | |
1029 | - | let | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | then makeString(["0", toString( | |
1036 | - | else { | |
1037 | - | let | |
1038 | - | let | |
1039 | - | let | |
1040 | - | then parseIntValue( | |
1041 | - | else | |
1042 | - | makeString([toString( | |
1043 | - | } | |
1044 | - | [ | |
1045 | - | then | |
1046 | - | else "0_0_0_0_0_0", if ((size(split( | |
1047 | - | then | |
1048 | - | else "0_0_0_0_0_0", | |
1049 | - | } | |
1050 | - | ||
1051 | - | ||
1052 | - | func | |
1053 | - | let | |
1054 | - | let | |
1055 | - | (( | |
1056 | - | } | |
1057 | - | ||
1058 | - | ||
1059 | - | func | |
1060 | - | let | |
1061 | - | then ((( | |
1062 | - | else -((((-( | |
1063 | - | ( | |
1064 | - | } | |
1065 | - | ||
1066 | - | ||
1067 | - | func | |
1047 | + | fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1048 | + | ((fb + fc) + ff) | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func fi (fj,fk,fl) = { | |
1053 | + | let eU = ((toString(fk) + "_") + toString(fl)) | |
1054 | + | let fm = eT(eU) | |
1055 | + | let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1056 | + | let fo = split_4C(fn, ":") | |
1057 | + | let fp = eV(fo) | |
1058 | + | let fq = if ((5 > size(fo))) | |
1059 | + | then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_") | |
1060 | + | else { | |
1061 | + | let fr = split(fo[ak], "_") | |
1062 | + | let fs = parseIntValue(fr[al]) | |
1063 | + | let ft = if ((size(fr) > 1)) | |
1064 | + | then parseIntValue(fr[am]) | |
1065 | + | else fp | |
1066 | + | makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_") | |
1067 | + | } | |
1068 | + | [fo[ag], if ((size(split(fo[ah], "_")) == S)) | |
1069 | + | then fo[ah] | |
1070 | + | else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S)) | |
1071 | + | then fo[ai] | |
1072 | + | else "0_0_0_0_0_0", fo[aj], fq] | |
1073 | + | } | |
1074 | + | ||
1075 | + | ||
1076 | + | func fu (eW) = { | |
1077 | + | let fv = eV(eW) | |
1078 | + | let fw = parseIntValue(split(eW[ak], "_")[al]) | |
1079 | + | ((eT(eW[ag]) - fv) - fw) | |
1080 | + | } | |
1081 | + | ||
1082 | + | ||
1083 | + | func fx (fy,fz) = { | |
1084 | + | let fa = if ((fy >= 0)) | |
1085 | + | then (((fy + fz) - 1) / fz) | |
1086 | + | else -((((-(fy) + fz) - 1) / fz)) | |
1087 | + | (fa * bi) | |
1088 | + | } | |
1089 | + | ||
1090 | + | ||
1091 | + | func fA (fB,eW,fC) = if ((size(fB) != 3)) | |
1068 | 1092 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1069 | 1093 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1094 | + | let fD = split(fB[0], "_") | |
1095 | + | let fE = split(fB[1], "_") | |
1096 | + | let fF = if ((fB[2] == "")) | |
1073 | 1097 | then nil | |
1074 | - | else split( | |
1075 | - | if ((size( | |
1098 | + | else split(fB[2], "_") | |
1099 | + | if ((size(fD) != S)) | |
1076 | 1100 | then throw("All 6 resources should be passed") | |
1077 | - | else if ((size( | |
1101 | + | else if ((size(fE) != S)) | |
1078 | 1102 | then throw("All 6 materials should be passed") | |
1079 | 1103 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1104 | + | let ex = fu(eW) | |
1105 | + | let fG = split(eW[ah], "_") | |
1106 | + | let fH = split(eW[ai], "_") | |
1107 | + | let fI = if ((eW[aj] == "")) | |
1084 | 1108 | then nil | |
1085 | - | else split( | |
1086 | - | let | |
1087 | - | let | |
1088 | - | let | |
1109 | + | else split(eW[aj], "_") | |
1110 | + | let ev = split(fC[aq], "_") | |
1111 | + | let fJ = split(fC[ar], "_") | |
1112 | + | let fK = if ((fC[as] == "")) | |
1089 | 1113 | then nil | |
1090 | - | else split( | |
1091 | - | func | |
1092 | - | let | |
1093 | - | let | |
1094 | - | let | |
1095 | - | let | |
1096 | - | if (( | |
1097 | - | then $Tuple4(( | |
1098 | - | else if (( | |
1099 | - | then if (( | |
1100 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1101 | - | else $Tuple4(( | |
1102 | - | else if ((-( | |
1103 | - | then throw((((("Attempt to take " + toString(-( | |
1104 | - | else $Tuple4(( | |
1114 | + | else split(fC[as], "_") | |
1115 | + | func fL (cL,dj) = { | |
1116 | + | let ei = cL._1 | |
1117 | + | let fM = parseIntValue(dj) | |
1118 | + | let fN = parseIntValue(fG[ei]) | |
1119 | + | let fO = parseIntValue(ev[ei]) | |
1120 | + | if ((fM == 0)) | |
1121 | + | then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4) | |
1122 | + | else if ((fM > 0)) | |
1123 | + | then if ((fM > fO)) | |
1124 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available")) | |
1125 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM)) | |
1126 | + | else if ((-(fM) > fN)) | |
1127 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available")) | |
1128 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM)) | |
1105 | 1129 | } | |
1106 | 1130 | ||
1107 | 1131 | let cW = { | |
1108 | - | let cN = | |
1132 | + | let cN = fD | |
1109 | 1133 | let cO = size(cN) | |
1110 | 1134 | let cP = $Tuple4(0, nil, nil, 0) | |
1111 | 1135 | func cQ (cR,cS) = if ((cS >= cO)) | |
1112 | 1136 | then cR | |
1113 | - | else | |
1137 | + | else fL(cR, cN[cS]) | |
1114 | 1138 | ||
1115 | 1139 | func cT (cR,cS) = if ((cS >= cO)) | |
1116 | 1140 | then cR | |
1118 | 1142 | ||
1119 | 1143 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1120 | 1144 | } | |
1121 | - | func | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then $Tuple4(( | |
1128 | - | else if (( | |
1129 | - | then if (( | |
1130 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1131 | - | else $Tuple4(( | |
1132 | - | else if ((-( | |
1133 | - | then throw((((("Attempt to take " + toString(-( | |
1134 | - | else $Tuple4(( | |
1145 | + | func fP (cL,dj) = { | |
1146 | + | let ei = cL._1 | |
1147 | + | let fM = parseIntValue(dj) | |
1148 | + | let fQ = parseIntValue(fH[ei]) | |
1149 | + | let fR = parseIntValue(fJ[ei]) | |
1150 | + | if ((fM == 0)) | |
1151 | + | then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4) | |
1152 | + | else if ((fM > 0)) | |
1153 | + | then if ((fM > fR)) | |
1154 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available")) | |
1155 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM)) | |
1156 | + | else if ((-(fM) > fQ)) | |
1157 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available")) | |
1158 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM)) | |
1135 | 1159 | } | |
1136 | 1160 | ||
1137 | - | let | |
1138 | - | let cN = | |
1161 | + | let ea = { | |
1162 | + | let cN = fE | |
1139 | 1163 | let cO = size(cN) | |
1140 | 1164 | let cP = $Tuple4(0, nil, nil, cW._4) | |
1141 | - | func | |
1165 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1142 | 1166 | then cR | |
1143 | - | else | |
1144 | - | ||
1145 | - | func | |
1167 | + | else fP(cR, cN[cS]) | |
1168 | + | ||
1169 | + | func fe (cR,cS) = if ((cS >= cO)) | |
1146 | 1170 | then cR | |
1147 | 1171 | else throw("List size exceeds 6") | |
1148 | 1172 | ||
1149 | - | | |
1173 | + | fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6) | |
1150 | 1174 | } | |
1151 | - | func | |
1152 | - | let | |
1153 | - | let | |
1154 | - | let | |
1155 | - | then parseIntValue( | |
1175 | + | func fS (cL,dj) = { | |
1176 | + | let ei = cL._1 | |
1177 | + | let fM = parseIntValue(dj) | |
1178 | + | let fT = if ((size(fI) > ei)) | |
1179 | + | then parseIntValue(fI[ei]) | |
1156 | 1180 | else 0 | |
1157 | - | let | |
1158 | - | then parseIntValue( | |
1181 | + | let fU = if ((size(fK) > ei)) | |
1182 | + | then parseIntValue(fK[ei]) | |
1159 | 1183 | else 0 | |
1160 | - | if (( | |
1161 | - | then $Tuple4(( | |
1162 | - | else if (( | |
1163 | - | then if (( | |
1164 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1184 | + | if ((fM == 0)) | |
1185 | + | then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4) | |
1186 | + | else if ((fM > 0)) | |
1187 | + | then if ((fM > fU)) | |
1188 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available")) | |
1165 | 1189 | else { | |
1166 | - | let | |
1167 | - | $Tuple4(( | |
1190 | + | let fV = (fx((fT + fM), af) - fx(fT, af)) | |
1191 | + | $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV)) | |
1168 | 1192 | } | |
1169 | - | else if ((-( | |
1170 | - | then throw((((("Attempt to take " + toString(-( | |
1193 | + | else if ((-(fM) > fT)) | |
1194 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available")) | |
1171 | 1195 | else { | |
1172 | - | let | |
1173 | - | $Tuple4(( | |
1196 | + | let fV = (fx((fT + fM), af) - fx(fT, af)) | |
1197 | + | $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV)) | |
1174 | 1198 | } | |
1175 | 1199 | } | |
1176 | 1200 | ||
1177 | - | let | |
1201 | + | let eS = if ((size(fF) != 0)) | |
1178 | 1202 | then { | |
1179 | - | let cN = | |
1203 | + | let cN = fF | |
1180 | 1204 | let cO = size(cN) | |
1181 | - | let cP = $Tuple4(0, nil, nil, | |
1182 | - | func | |
1205 | + | let cP = $Tuple4(0, nil, nil, ea._4) | |
1206 | + | func fg (cR,cS) = if ((cS >= cO)) | |
1183 | 1207 | then cR | |
1184 | - | else | |
1185 | - | ||
1186 | - | func | |
1208 | + | else fS(cR, cN[cS]) | |
1209 | + | ||
1210 | + | func fh (cR,cS) = if ((cS >= cO)) | |
1187 | 1211 | then cR | |
1188 | 1212 | else throw("List size exceeds 50") | |
1189 | 1213 | ||
1190 | - | | |
1214 | + | fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1191 | 1215 | } | |
1192 | - | else $Tuple4(0, | |
1193 | - | let | |
1194 | - | if (( | |
1195 | - | then throw((((("Attempt to put total " + toString( | |
1196 | - | else $Tuple7(makeString(cW._2, "_"), makeString( | |
1216 | + | else $Tuple4(0, fI, fK, ea._4) | |
1217 | + | let fW = eS._4 | |
1218 | + | if ((fW > ex)) | |
1219 | + | then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left")) | |
1220 | + | else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW) | |
1197 | 1221 | } | |
1198 | 1222 | } | |
1199 | 1223 | ||
1200 | 1224 | ||
1201 | - | func | |
1202 | - | let aT = toString( | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let co = toString( | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let av = calculateAssetId( | |
1211 | - | let | |
1212 | - | $Tuple2([IntegerEntry(cm(), ( | |
1213 | - | } | |
1214 | - | ||
1215 | - | ||
1216 | - | func | |
1225 | + | func fX (fY,fZ) = { | |
1226 | + | let aT = toString(fY) | |
1227 | + | let ga = eD(toBigInt(fZ)) | |
1228 | + | let gb = valueOrElse(getInteger(cm()), (cl + 1)) | |
1229 | + | let co = toString(gb) | |
1230 | + | let eM = toInt((ga % cf)) | |
1231 | + | let el = eK(ga, eM) | |
1232 | + | let gc = aa[eM] | |
1233 | + | let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false) | |
1234 | + | let av = calculateAssetId(gd) | |
1235 | + | let ge = toBase58String(av) | |
1236 | + | $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc)) | |
1237 | + | } | |
1238 | + | ||
1239 | + | ||
1240 | + | func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX))) | |
1217 | 1241 | then throw("signature does not match") | |
1218 | 1242 | else { | |
1219 | - | let do = split(toUtf8String( | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | let | |
1224 | - | let | |
1225 | - | let | |
1226 | - | let | |
1227 | - | if (if (( | |
1243 | + | let do = split(toUtf8String(gg), ";") | |
1244 | + | let gi = split(do[0], "|") | |
1245 | + | let gj = split(gi[cA], "_") | |
1246 | + | let gk = parseIntValue(gj[0]) | |
1247 | + | let gl = parseIntValue(gj[1]) | |
1248 | + | let gm = split(do[1], ":") | |
1249 | + | let gn = gm[0] | |
1250 | + | let go = parseIntValue(gi[cB]) | |
1251 | + | if (if ((go > (lastBlock.timestamp + bZ))) | |
1228 | 1252 | then true | |
1229 | - | else ((lastBlock.timestamp - bZ) > | |
1230 | - | then throw(((("signature outdated: logTime=" + toString( | |
1253 | + | else ((lastBlock.timestamp - bZ) > go)) | |
1254 | + | then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1231 | 1255 | else { | |
1232 | - | let | |
1233 | - | let | |
1234 | - | if (( | |
1235 | - | then throw(((("Tx ids don't match! In state: " + | |
1256 | + | let gp = gm[1] | |
1257 | + | let gq = valueOrElse(getString(at(aT)), "") | |
1258 | + | if ((gq != gp)) | |
1259 | + | then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp)) | |
1236 | 1260 | else { | |
1237 | 1261 | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | if (( | |
1242 | - | then throw(((("oldHealth=" + toString( | |
1243 | - | else if ((0 >= | |
1262 | + | let gr = aQ(p) | |
1263 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1264 | + | let gt = valueOrElse(getInteger(gr), gs) | |
1265 | + | if ((gt != gk)) | |
1266 | + | then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk))) | |
1267 | + | else if ((0 >= gk)) | |
1244 | 1268 | then throw("You can't fly with zero health") | |
1245 | 1269 | else { | |
1246 | - | let | |
1247 | - | then | |
1270 | + | let gu = if ((size(gi) > cC)) | |
1271 | + | then gi[cC] | |
1248 | 1272 | else "" | |
1249 | - | let | |
1250 | - | then | |
1273 | + | let gv = if ((size(gi) > cD)) | |
1274 | + | then gi[cD] | |
1251 | 1275 | else "" | |
1252 | - | let | |
1253 | - | then ( | |
1276 | + | let gw = if (if ((gl > 0)) | |
1277 | + | then (gu == "$") | |
1254 | 1278 | else false) | |
1255 | 1279 | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1256 | 1280 | else 0 | |
1257 | - | $Tuple5( | |
1281 | + | $Tuple5(gl, p, gw, gn, gv) | |
1258 | 1282 | } | |
1259 | 1283 | } | |
1260 | 1284 | } | |
1261 | 1285 | } | |
1262 | 1286 | ||
1263 | 1287 | ||
1264 | - | func | |
1265 | - | let aT = toString( | |
1266 | - | let | |
1267 | - | let | |
1268 | - | let | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let dt = de( | |
1273 | - | if ((0 >= | |
1274 | - | then $Tuple3([IntegerEntry( | |
1275 | - | else { | |
1276 | - | let | |
1277 | - | let | |
1278 | - | $Tuple3(((( | |
1279 | - | } | |
1280 | - | } | |
1281 | - | ||
1282 | - | ||
1283 | - | func | |
1284 | - | let | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | ((T + fraction(T, (( | |
1289 | - | } | |
1290 | - | ||
1291 | - | ||
1292 | - | func | |
1293 | - | let | |
1294 | - | then $Tuple2( | |
1288 | + | func gx (fY,fZ,gg,gh) = { | |
1289 | + | let aT = toString(fY) | |
1290 | + | let eN = gf(aT, gg, gh) | |
1291 | + | let gr = aQ(eN._2) | |
1292 | + | let eR = aO(eN._2) | |
1293 | + | let fC = eQ(eR) | |
1294 | + | let gy = split(fC[ar], "_") | |
1295 | + | let gz = makeString(cX(true, gy, cd), "_") | |
1296 | + | let dt = de(fC[as], eN._5) | |
1297 | + | if ((0 >= eN._1)) | |
1298 | + | then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0) | |
1299 | + | else { | |
1300 | + | let gA = fX(fY, fZ) | |
1301 | + | let ge = gA._2._1 | |
1302 | + | $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3) | |
1303 | + | } | |
1304 | + | } | |
1305 | + | ||
1306 | + | ||
1307 | + | func gB (aF,gC) = { | |
1308 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1309 | + | let gD = valueOrElse(getInteger(az(R, aF)), 0) | |
1310 | + | let gE = (fl / 6) | |
1311 | + | let gF = (fl / 7) | |
1312 | + | ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5))) | |
1313 | + | } | |
1314 | + | ||
1315 | + | ||
1316 | + | func gG (b,gH,gI) = { | |
1317 | + | let gJ = if ((gH == cx)) | |
1318 | + | then $Tuple2(gI, valueOrElse(getString(aN(b)), "")) | |
1295 | 1319 | else { | |
1296 | 1320 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1297 | - | let | |
1298 | - | let | |
1299 | - | if (( | |
1300 | - | then throw((("Duck location type is " + | |
1301 | - | else $Tuple2( | |
1302 | - | } | |
1303 | - | let aF = | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | if (( | |
1321 | + | let gK = valueOrElse(getString(aP(p)), W) | |
1322 | + | let gL = split(value(gK), "_") | |
1323 | + | if ((gL[aV] != "L")) | |
1324 | + | then throw((("Duck location type is " + gL[aV]) + ", but should be L")) | |
1325 | + | else $Tuple2(gL[aW], p) | |
1326 | + | } | |
1327 | + | let aF = gJ._1 | |
1328 | + | let gM = gJ._2 | |
1329 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
1330 | + | let gO = ax(aF) | |
1331 | + | let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked")) | |
1332 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
1333 | + | if ((gQ != b)) | |
1310 | 1334 | then throw((P + " is not yours")) | |
1311 | 1335 | else { | |
1312 | - | let | |
1313 | - | $Tuple4( | |
1314 | - | } | |
1315 | - | } | |
1316 | - | ||
1317 | - | ||
1318 | - | func | |
1336 | + | let gR = split(gN.description, "_") | |
1337 | + | $Tuple4(gM, aF, gR, gP) | |
1338 | + | } | |
1339 | + | } | |
1340 | + | ||
1341 | + | ||
1342 | + | func gS (b,fy,gH,gI) = if ((0 > fy)) | |
1319 | 1343 | then throw("Negative amount") | |
1320 | 1344 | else { | |
1321 | - | let | |
1322 | - | let bU = | |
1323 | - | let | |
1324 | - | let | |
1325 | - | if ((0 > | |
1326 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1345 | + | let dM = gG(b, gH, gI) | |
1346 | + | let bU = dM._3[bI] | |
1347 | + | let ee = ek(dM._3[bJ]) | |
1348 | + | let eo = (lastBlock.timestamp - dM._4) | |
1349 | + | if ((0 > eo)) | |
1350 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1327 | 1351 | else { | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | if (( | |
1332 | - | then throw(((("Not enough resources, available = " + toString( | |
1352 | + | let gC = bT(bU) | |
1353 | + | let gT = gB(dM._2, gC) | |
1354 | + | let gU = fraction(eo, (gT * gC), U) | |
1355 | + | if ((fy > gU)) | |
1356 | + | then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy))) | |
1333 | 1357 | else { | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | if (if (( | |
1344 | - | then ( | |
1358 | + | let gV = fraction((gU - fy), U, (gT * gC)) | |
1359 | + | let gW = (lastBlock.timestamp - gV) | |
1360 | + | let fk = (gC / bj) | |
1361 | + | let ew = es(ee, (eo - gV), fk, gT) | |
1362 | + | let fj = aE(dM._2) | |
1363 | + | let fl = valueOrElse(getInteger(ay(dM._2)), 0) | |
1364 | + | let eW = fi(fj, fk, fl) | |
1365 | + | let fr = split(eW[ak], "_") | |
1366 | + | let ex = parseIntValue(fr[an]) | |
1367 | + | if (if ((gH == cx)) | |
1368 | + | then (fy > ex) | |
1345 | 1369 | else false) | |
1346 | - | then throw((("Only " + toString( | |
1370 | + | then throw((("Only " + toString(ex)) + " space left in warehouse")) | |
1347 | 1371 | else { | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | then $Tuple4( | |
1354 | - | else if (( | |
1355 | - | then $Tuple4( | |
1372 | + | let eR = aO(dM._1) | |
1373 | + | let fC = eQ(eR) | |
1374 | + | let ev = split(fC[aq], "_") | |
1375 | + | let eu = split(eW[ah], "_") | |
1376 | + | let gX = if ((gH == cx)) | |
1377 | + | then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2)) | |
1378 | + | else if ((gH == cy)) | |
1379 | + | then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an])) | |
1356 | 1380 | else { | |
1357 | - | let | |
1358 | - | let | |
1359 | - | $Tuple4( | |
1381 | + | let gY = et(eu, ev, ew, ex) | |
1382 | + | let gZ = min([parseIntValue(fr[an]), ew._2]) | |
1383 | + | $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ)) | |
1360 | 1384 | } | |
1361 | - | let | |
1362 | - | let | |
1363 | - | let | |
1364 | - | let | |
1365 | - | $Tuple5([IntegerEntry(ax( | |
1385 | + | let ha = gX._1 | |
1386 | + | let hb = gX._2 | |
1387 | + | let hc = gX._3 | |
1388 | + | let hd = gX._4 | |
1389 | + | $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")]) | |
1366 | 1390 | } | |
1367 | 1391 | } | |
1368 | 1392 | } | |
1369 | 1393 | } | |
1370 | 1394 | ||
1371 | 1395 | ||
1372 | - | func | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | | |
1377 | - | } | |
1378 | - | ||
1379 | - | ||
1380 | - | func | |
1381 | - | let b = toString( | |
1382 | - | let | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | if (( | |
1396 | + | func he (b,aF,gC,gH) = { | |
1397 | + | let gO = ax(aF) | |
1398 | + | let gP = value(getInteger(gO)) | |
1399 | + | let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC) | |
1400 | + | gS(b, gU, gH, aF) | |
1401 | + | } | |
1402 | + | ||
1403 | + | ||
1404 | + | func hf (cY,fY,hg,aF) = { | |
1405 | + | let b = toString(fY) | |
1406 | + | let dM = gG(b, cz, aF) | |
1407 | + | let gC = bT(dM._3[bI]) | |
1408 | + | let hh = ay(dM._2) | |
1409 | + | let hi = valueOrElse(getInteger(hh), 0) | |
1410 | + | if ((hi >= 3)) | |
1387 | 1411 | then throw("Currently max infrastructure level = 3") | |
1388 | 1412 | else { | |
1389 | - | let O = ( | |
1390 | - | let | |
1413 | + | let O = (hi + 1) | |
1414 | + | let hj = fraction(cc, (gC * O), bj) | |
1391 | 1415 | if (if (!(cY)) | |
1392 | - | then ( | |
1416 | + | then (hg != hj) | |
1393 | 1417 | else false) | |
1394 | - | then throw(("Payment attached should be " + toString( | |
1418 | + | then throw(("Payment attached should be " + toString(hj))) | |
1395 | 1419 | else { | |
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | $Tuple3(([IntegerEntry( | |
1420 | + | let eR = aO(dM._1) | |
1421 | + | let fC = eQ(eR) | |
1422 | + | let gy = split(fC[ar], "_") | |
1423 | + | let hk = fraction(be, (gC * O), bj) | |
1424 | + | let gz = makeString(cX(cY, gy, hk), "_") | |
1425 | + | let hl = he(b, dM._2, gC, cz) | |
1426 | + | let hm = hl._5 | |
1427 | + | let hn = eT(hm[ag]) | |
1428 | + | let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_") | |
1429 | + | let hp = eT(ho) | |
1430 | + | let fr = split(hm[ak], "_") | |
1431 | + | let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_") | |
1432 | + | $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk) | |
1409 | 1433 | } | |
1410 | 1434 | } | |
1411 | 1435 | } | |
1412 | 1436 | ||
1413 | 1437 | ||
1414 | - | func | |
1438 | + | func hr (p,hs) = if (!(aZ)) | |
1415 | 1439 | then $Tuple2(nil, 0) | |
1416 | 1440 | else { | |
1417 | - | let | |
1418 | - | let | |
1419 | - | let I = valueOrElse(getInteger(bD, | |
1420 | - | let N = (I + | |
1421 | - | let | |
1422 | - | let | |
1423 | - | $Tuple2([IntegerEntry( | |
1424 | - | } | |
1425 | - | ||
1426 | - | ||
1427 | - | func | |
1441 | + | let ht = r(p) | |
1442 | + | let hu = q(p) | |
1443 | + | let I = valueOrElse(getInteger(bD, hu), 0) | |
1444 | + | let N = (I + hs) | |
1445 | + | let hv = L(valueOrElse(getInteger(bD, ht), 0), N) | |
1446 | + | let hw = s(p) | |
1447 | + | $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N) | |
1448 | + | } | |
1449 | + | ||
1450 | + | ||
1451 | + | func hx (b,hs) = if (!(aZ)) | |
1428 | 1452 | then $Tuple2(nil, 0) | |
1429 | 1453 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let I = valueOrElse(getInteger(bD, | |
1433 | - | let N = (I + | |
1434 | - | let | |
1435 | - | let | |
1436 | - | $Tuple2([IntegerEntry( | |
1437 | - | } | |
1438 | - | ||
1439 | - | ||
1440 | - | func | |
1454 | + | let ht = v(b) | |
1455 | + | let hu = u(b) | |
1456 | + | let I = valueOrElse(getInteger(bD, hu), 0) | |
1457 | + | let N = (I + hs) | |
1458 | + | let hv = L(valueOrElse(getInteger(bD, ht), 0), N) | |
1459 | + | let hw = w(b) | |
1460 | + | $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N) | |
1461 | + | } | |
1462 | + | ||
1463 | + | ||
1464 | + | func hy (b) = { | |
1441 | 1465 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1442 | - | let | |
1443 | - | let | |
1444 | - | if (!(isDefined( | |
1466 | + | let hz = aI(b) | |
1467 | + | let hA = getString(hz) | |
1468 | + | if (!(isDefined(hA))) | |
1445 | 1469 | then throw("You are not eligible for ONBOARD artifact") | |
1446 | 1470 | else { | |
1447 | - | let | |
1448 | - | let | |
1449 | - | if (isDefined( | |
1450 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1471 | + | let hB = aK(b) | |
1472 | + | let hC = getString(hB) | |
1473 | + | if (isDefined(hC)) | |
1474 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hC))) | |
1451 | 1475 | else { | |
1452 | - | let | |
1453 | - | let | |
1454 | - | if (isDefined( | |
1455 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1456 | - | else ([StringEntry( | |
1476 | + | let hD = aJ(p) | |
1477 | + | let hE = getString(hD) | |
1478 | + | if (isDefined(hE)) | |
1479 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE))) | |
1480 | + | else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1) | |
1457 | 1481 | } | |
1458 | 1482 | } | |
1459 | 1483 | } | |
1460 | 1484 | ||
1461 | 1485 | ||
1462 | - | func | |
1463 | - | let | |
1464 | - | let aF = | |
1465 | - | let | |
1466 | - | let | |
1467 | - | if ((valueOrElse(getInteger( | |
1486 | + | func hF (b,gI) = { | |
1487 | + | let dM = gG(b, cz, gI) | |
1488 | + | let aF = dM._2 | |
1489 | + | let gC = bT(dM._3[bI]) | |
1490 | + | let hG = az(R, aF) | |
1491 | + | if ((valueOrElse(getInteger(hG), 0) > 0)) | |
1468 | 1492 | then throw("Presale artifact is already activated") | |
1469 | - | else if ((parseIntValue( | |
1493 | + | else if ((parseIntValue(dM._3[bH]) > cl)) | |
1470 | 1494 | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1471 | 1495 | else { | |
1472 | - | let | |
1473 | - | (((( | |
1496 | + | let hl = he(b, aF, gC, cz) | |
1497 | + | ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":"))) | |
1474 | 1498 | } | |
1475 | 1499 | } | |
1476 | 1500 | ||
1477 | 1501 | ||
1478 | - | func | |
1502 | + | func hH (hI,O,hJ,b,hK,fZ,hL) = { | |
1479 | 1503 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1480 | - | func | |
1481 | - | let | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (( | |
1504 | + | func hM (cL,aF) = { | |
1505 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
1506 | + | let gO = ax(aF) | |
1507 | + | let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked")) | |
1508 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
1509 | + | if ((gQ != b)) | |
1486 | 1510 | then throw((P + " is not yours")) | |
1487 | 1511 | else { | |
1488 | - | let | |
1489 | - | let | |
1512 | + | let gR = split(gN.description, "_") | |
1513 | + | let gc = gR[bK] | |
1490 | 1514 | if (if ((cL._3 != "")) | |
1491 | - | then (cL._3 != | |
1515 | + | then (cL._3 != gc) | |
1492 | 1516 | else false) | |
1493 | 1517 | then throw("Lands should be on the same continent to merge") | |
1494 | 1518 | else { | |
1495 | - | let bU = | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1519 | + | let bU = gR[bI] | |
1520 | + | let hN = cL._1 | |
1521 | + | let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed") | |
1522 | + | let hO = (take(hN, ei) + drop(hN, (ei + 1))) | |
1523 | + | let gC = bT(bU) | |
1524 | + | let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1525 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1526 | + | let hQ = { | |
1503 | 1527 | let bc = bU | |
1504 | 1528 | if (("S" == bc)) | |
1505 | 1529 | then 3 | |
1511 | 1535 | then 6 | |
1512 | 1536 | else throw("Only S, M, L, XL can merge") | |
1513 | 1537 | } | |
1514 | - | if (( | |
1538 | + | if ((fl != hQ)) | |
1515 | 1539 | then throw("All lands should be maxed to merge") | |
1516 | 1540 | else { | |
1517 | - | let co = | |
1518 | - | let | |
1519 | - | let | |
1520 | - | if ((0 > | |
1521 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1541 | + | let co = gR[bH] | |
1542 | + | let ee = ek(gR[bJ]) | |
1543 | + | let eo = (lastBlock.timestamp - gP) | |
1544 | + | if ((0 > eo)) | |
1545 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp))) | |
1522 | 1546 | else { | |
1523 | - | let | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let cV = | |
1527 | - | let | |
1528 | - | let bB = indexOf( | |
1547 | + | let gT = gB(aF, gC) | |
1548 | + | let fk = (gC / bj) | |
1549 | + | let hb = em(split(cL._4, "_"), ee, eo, fk, gT) | |
1550 | + | let cV = ec(split(cL._6, "_"), ee, fk, -1) | |
1551 | + | let hR = cL._7 | |
1552 | + | let bB = indexOf(hR, aF) | |
1529 | 1553 | if (!(isDefined(bB))) | |
1530 | 1554 | then throw(("Your staked lands don't contain " + aF)) | |
1531 | 1555 | else { | |
1532 | - | let | |
1533 | - | let | |
1534 | - | $Tuple8( | |
1556 | + | let hS = aw(aF) | |
1557 | + | let hT = valueOrElse(getString(hS), "") | |
1558 | + | $Tuple8(hO, hP, gc, hb, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC)) | |
1535 | 1559 | } | |
1536 | 1560 | } | |
1537 | 1561 | } | |
1539 | 1563 | } | |
1540 | 1564 | } | |
1541 | 1565 | ||
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | then split_51C(value( | |
1566 | + | let eR = aO(p) | |
1567 | + | let fC = eQ(eR) | |
1568 | + | let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1569 | + | let hV = bM(b) | |
1570 | + | let hW = getString(hV) | |
1571 | + | let hX = if (isDefined(hW)) | |
1572 | + | then split_51C(value(hW), "_") | |
1549 | 1573 | else nil | |
1550 | 1574 | let cW = { | |
1551 | - | let cN = | |
1575 | + | let cN = hK | |
1552 | 1576 | let cO = size(cN) | |
1553 | - | let cP = $Tuple8( | |
1577 | + | let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0) | |
1554 | 1578 | func cQ (cR,cS) = if ((cS >= cO)) | |
1555 | 1579 | then cR | |
1556 | - | else | |
1580 | + | else hM(cR, cN[cS]) | |
1557 | 1581 | ||
1558 | 1582 | func cT (cR,cS) = if ((cS >= cO)) | |
1559 | 1583 | then cR | |
1561 | 1585 | ||
1562 | 1586 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1563 | 1587 | } | |
1564 | - | let | |
1565 | - | let | |
1566 | - | let | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let av = calculateAssetId( | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1588 | + | let gc = cW._3 | |
1589 | + | let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc)) | |
1590 | + | let el = eK(eD(toBigInt(fZ)), eM) | |
1591 | + | let gb = valueOrElse(getInteger(cm()), (cl + 1)) | |
1592 | + | let hY = toString(gb) | |
1593 | + | let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false) | |
1594 | + | let av = calculateAssetId(gd) | |
1595 | + | let hZ = toBase58String(av) | |
1596 | + | let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_") | |
1597 | + | let ia = bN(b) | |
1598 | + | let ib = valueOrElse(getInteger(ia), 0) | |
1575 | 1599 | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1576 | - | then StringEntry( | |
1577 | - | else DeleteEntry( | |
1600 | + | then StringEntry(hV, makeString_11C(cW._7, "_")) | |
1601 | + | else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib)) | |
1578 | 1602 | then 0 | |
1579 | - | else ( | |
1580 | - | } | |
1581 | - | ||
1582 | - | ||
1583 | - | func | |
1584 | - | ||
1585 | - | ||
1586 | - | func | |
1587 | - | let | |
1603 | + | else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ) | |
1604 | + | } | |
1605 | + | ||
1606 | + | ||
1607 | + | func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0) | |
1608 | + | ||
1609 | + | ||
1610 | + | func id (b,hK,fZ,cY,hg) = { | |
1611 | + | let hj = (cc * 4) | |
1588 | 1612 | if (if (!(cY)) | |
1589 | - | then ( | |
1613 | + | then (hg != hj) | |
1590 | 1614 | else false) | |
1591 | - | then throw(("Payment attached should be " + toString( | |
1592 | - | else | |
1593 | - | } | |
1594 | - | ||
1595 | - | ||
1596 | - | func | |
1597 | - | let | |
1615 | + | then throw(("Payment attached should be " + toString(hj))) | |
1616 | + | else hH("L", 4, "SMM", b, hK, fZ, (be * 4)) | |
1617 | + | } | |
1618 | + | ||
1619 | + | ||
1620 | + | func ie (b,hK,fZ,cY,hg) = { | |
1621 | + | let hj = (cc * 47) | |
1598 | 1622 | if (if (!(cY)) | |
1599 | - | then ( | |
1623 | + | then (hg != hj) | |
1600 | 1624 | else false) | |
1601 | - | then throw(("Payment attached should be " + toString( | |
1602 | - | else | |
1603 | - | } | |
1604 | - | ||
1605 | - | ||
1606 | - | func | |
1607 | - | let | |
1625 | + | then throw(("Payment attached should be " + toString(hj))) | |
1626 | + | else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47)) | |
1627 | + | } | |
1628 | + | ||
1629 | + | ||
1630 | + | func if (b,hK,fZ,cY,hg) = { | |
1631 | + | let hj = (cc * 54) | |
1608 | 1632 | if (if (!(cY)) | |
1609 | - | then ( | |
1633 | + | then (hg != hj) | |
1610 | 1634 | else false) | |
1611 | - | then throw(("Payment attached should be " + toString( | |
1612 | - | else | |
1613 | - | } | |
1614 | - | ||
1615 | - | ||
1616 | - | func | |
1617 | - | let | |
1618 | - | let bc = size( | |
1635 | + | then throw(("Payment attached should be " + toString(hj))) | |
1636 | + | else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54)) | |
1637 | + | } | |
1638 | + | ||
1639 | + | ||
1640 | + | func ig (cY,b,hg,hK,fZ) = { | |
1641 | + | let ih = { | |
1642 | + | let bc = size(hK) | |
1619 | 1643 | if ((4 == bc)) | |
1620 | - | then | |
1644 | + | then ic(b, hK, fZ) | |
1621 | 1645 | else if ((3 == bc)) | |
1622 | - | then | |
1646 | + | then id(b, hK, fZ, cY, hg) | |
1623 | 1647 | else if ((5 == bc)) | |
1624 | - | then | |
1648 | + | then ie(b, hK, fZ, cY, hg) | |
1625 | 1649 | else if ((2 == bc)) | |
1626 | - | then | |
1650 | + | then if(b, hK, fZ, cY, hg) | |
1627 | 1651 | else throw("Unknown merge") | |
1628 | 1652 | } | |
1629 | - | | |
1630 | - | } | |
1631 | - | ||
1632 | - | ||
1633 | - | func | |
1653 | + | ih | |
1654 | + | } | |
1655 | + | ||
1656 | + | ||
1657 | + | func ii (ei) = if (if ((ei.originCaller != bC)) | |
1634 | 1658 | then valueOrElse(getBoolean(aR()), false) | |
1635 | 1659 | else false) | |
1636 | 1660 | then throw("Contracts are under maintenance") | |
1637 | - | else StringEntry(at(toString( | |
1638 | - | ||
1639 | - | ||
1640 | - | @Callable( | |
1641 | - | func constructorV1 ( | |
1661 | + | else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId)) | |
1662 | + | ||
1663 | + | ||
1664 | + | @Callable(ei) | |
1665 | + | func constructorV1 (ij) = if ((ei.caller != this)) | |
1642 | 1666 | then throw("Permission denied") | |
1643 | - | else [StringEntry(bw(), | |
1644 | - | ||
1645 | - | ||
1646 | - | ||
1647 | - | @Callable( | |
1648 | - | func setBlocked ( | |
1667 | + | else [StringEntry(bw(), ij)] | |
1668 | + | ||
1669 | + | ||
1670 | + | ||
1671 | + | @Callable(ei) | |
1672 | + | func setBlocked (ik) = if ((ei.caller != this)) | |
1649 | 1673 | then throw("permission denied") | |
1650 | - | else [BooleanEntry(aR(), | |
1651 | - | ||
1652 | - | ||
1653 | - | ||
1654 | - | @Callable( | |
1674 | + | else [BooleanEntry(aR(), ik)] | |
1675 | + | ||
1676 | + | ||
1677 | + | ||
1678 | + | @Callable(ei) | |
1655 | 1679 | func stakeLand () = { | |
1656 | - | let | |
1657 | - | if ((size( | |
1680 | + | let il = ii(ei) | |
1681 | + | if ((size(ei.payments) != 1)) | |
1658 | 1682 | then throw("Exactly one payment required") | |
1659 | 1683 | else { | |
1660 | - | let | |
1661 | - | let av = value( | |
1662 | - | let bp = toString( | |
1663 | - | if (( | |
1684 | + | let im = value(ei.payments[0]) | |
1685 | + | let av = value(im.assetId) | |
1686 | + | let bp = toString(ei.caller) | |
1687 | + | if ((im.amount != 1)) | |
1664 | 1688 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1665 | 1689 | else { | |
1666 | - | let | |
1667 | - | if (( | |
1690 | + | let gN = value(assetInfo(av)) | |
1691 | + | if ((gN.issuer != this)) | |
1668 | 1692 | then throw("Unknown issuer of token") | |
1669 | - | else if (!(contains( | |
1693 | + | else if (!(contains(gN.name, P))) | |
1670 | 1694 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1671 | 1695 | else { | |
1672 | - | let | |
1673 | - | let co = if (contains( | |
1674 | - | then dropRight( | |
1675 | - | else if (contains( | |
1676 | - | then dropRight( | |
1677 | - | else dropRight( | |
1696 | + | let in = drop(gN.name, 4) | |
1697 | + | let co = if (contains(in, "XXL")) | |
1698 | + | then dropRight(in, 3) | |
1699 | + | else if (contains(in, "XL")) | |
1700 | + | then dropRight(in, 2) | |
1701 | + | else dropRight(in, 1) | |
1678 | 1702 | if (!(isDefined(parseInt(co)))) | |
1679 | - | then throw(("Cannot parse land number from " + | |
1703 | + | then throw(("Cannot parse land number from " + gN.name)) | |
1680 | 1704 | else { | |
1681 | 1705 | let aF = toBase58String(av) | |
1682 | - | let | |
1683 | - | if (isDefined(getInteger( | |
1684 | - | then throw((("NFT " + | |
1706 | + | let gO = ax(aF) | |
1707 | + | if (isDefined(getInteger(gO))) | |
1708 | + | then throw((("NFT " + gN.name) + " is already staked")) | |
1685 | 1709 | else { | |
1686 | - | let | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let cV = | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | then split_51C(value( | |
1710 | + | let gR = split(gN.description, "_") | |
1711 | + | let ee = ek(gR[bJ]) | |
1712 | + | let gC = bT(gR[bI]) | |
1713 | + | let cV = ej(ee, (gC / bj), 1) | |
1714 | + | let gD = valueOrElse(getInteger(az(R, aF)), 0) | |
1715 | + | let hV = bM(bp) | |
1716 | + | let hW = getString(hV) | |
1717 | + | let hR = if (isDefined(hW)) | |
1718 | + | then split_51C(value(hW), "_") | |
1695 | 1719 | else nil | |
1696 | - | if (containsElement( | |
1720 | + | if (containsElement(hR, aF)) | |
1697 | 1721 | then throw(("Your staked lands already contain " + aF)) | |
1698 | 1722 | else { | |
1699 | - | let | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | $Tuple2([IntegerEntry( | |
1723 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1724 | + | let ia = bN(bp) | |
1725 | + | let io = valueOrElse(getInteger(ia), 0) | |
1726 | + | let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1727 | + | $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip) | |
1704 | 1728 | } | |
1705 | 1729 | } | |
1706 | 1730 | } | |
1711 | 1735 | ||
1712 | 1736 | ||
1713 | 1737 | ||
1714 | - | @Callable( | |
1715 | - | func unstakeLand ( | |
1716 | - | let | |
1717 | - | if ((size( | |
1738 | + | @Callable(ei) | |
1739 | + | func unstakeLand (gI) = { | |
1740 | + | let il = ii(ei) | |
1741 | + | if ((size(ei.payments) != 0)) | |
1718 | 1742 | then throw("No payments required") | |
1719 | 1743 | else { | |
1720 | - | let b = toString( | |
1721 | - | let | |
1722 | - | let aF = | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let cV = | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let bB = indexOf( | |
1744 | + | let b = toString(ei.caller) | |
1745 | + | let dM = gG(b, cy, gI) | |
1746 | + | let aF = dM._2 | |
1747 | + | let hV = bM(b) | |
1748 | + | let ee = ek(dM._3[bJ]) | |
1749 | + | let gC = bT(dM._3[bI]) | |
1750 | + | let cV = ej(ee, (gC / bj), -1) | |
1751 | + | let hl = he(b, aF, gC, cy) | |
1752 | + | let hR = split_51C(valueOrElse(getString(hV), ""), "_") | |
1753 | + | let bB = indexOf(hR, aF) | |
1730 | 1754 | if (!(isDefined(bB))) | |
1731 | 1755 | then throw(("Your staked lands don't contain " + aF)) | |
1732 | 1756 | else { | |
1733 | - | let | |
1734 | - | let | |
1735 | - | if (( | |
1736 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1757 | + | let iq = lastBlock.timestamp | |
1758 | + | let ir = valueOrElse(getInteger(bF, aS(b)), 0) | |
1759 | + | if ((ir >= iq)) | |
1760 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir))) | |
1737 | 1761 | else { | |
1738 | - | let | |
1739 | - | if (( | |
1740 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1762 | + | let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1763 | + | if ((is > iq)) | |
1764 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is))) | |
1741 | 1765 | else { | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1766 | + | let ia = bN(b) | |
1767 | + | let ib = valueOrElse(getInteger(ia), 0) | |
1768 | + | let it = if ((gC > ib)) | |
1745 | 1769 | then 0 | |
1746 | - | else ( | |
1747 | - | let | |
1748 | - | $Tuple2([ScriptTransfer( | |
1749 | - | then StringEntry( | |
1750 | - | else DeleteEntry( | |
1770 | + | else (ib - gC) | |
1771 | + | let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1772 | + | $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1)) | |
1773 | + | then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_")) | |
1774 | + | else DeleteEntry(hV), IntegerEntry(ia, it), il], ip) | |
1751 | 1775 | } | |
1752 | 1776 | } | |
1753 | 1777 | } | |
1756 | 1780 | ||
1757 | 1781 | ||
1758 | 1782 | ||
1759 | - | @Callable( | |
1783 | + | @Callable(ei) | |
1760 | 1784 | func stakeDuck () = { | |
1761 | - | let | |
1762 | - | if ((size( | |
1785 | + | let il = ii(ei) | |
1786 | + | if ((size(ei.payments) != 1)) | |
1763 | 1787 | then throw("Exactly one payment required") | |
1764 | 1788 | else { | |
1765 | - | let | |
1766 | - | let av = value( | |
1767 | - | let bp = toString( | |
1768 | - | if (( | |
1789 | + | let im = value(ei.payments[0]) | |
1790 | + | let av = value(im.assetId) | |
1791 | + | let bp = toString(ei.caller) | |
1792 | + | if ((im.amount != 1)) | |
1769 | 1793 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1770 | 1794 | else { | |
1771 | - | let | |
1772 | - | if (if (( | |
1773 | - | then ( | |
1795 | + | let gN = value(assetInfo(av)) | |
1796 | + | if (if ((gN.issuer != bV)) | |
1797 | + | then (gN.issuer != bW) | |
1774 | 1798 | else false) | |
1775 | 1799 | then throw((("Unknown issuer of " + Q) + " token")) | |
1776 | - | else if (!(contains( | |
1800 | + | else if (!(contains(gN.name, Q))) | |
1777 | 1801 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1778 | 1802 | else { | |
1779 | - | let | |
1780 | - | let | |
1781 | - | if (isDefined(getInteger( | |
1782 | - | then throw((("NFT " + | |
1803 | + | let iu = toBase58String(av) | |
1804 | + | let gO = ax(iu) | |
1805 | + | if (isDefined(getInteger(gO))) | |
1806 | + | then throw((("NFT " + gN.name) + " is already staked")) | |
1783 | 1807 | else if (isDefined(getString(aN(bp)))) | |
1784 | - | then throw(("You already staked one duck: " + | |
1808 | + | then throw(("You already staked one duck: " + gN.name)) | |
1785 | 1809 | else { | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | ([IntegerEntry( | |
1810 | + | let iv = aP(iu) | |
1811 | + | let iw = getString(iv) | |
1812 | + | let eR = aO(iu) | |
1813 | + | let ix = getString(eR) | |
1814 | + | let gr = aQ(iu) | |
1815 | + | let gs = J(valueOrElse(getInteger(r(iu)), 0)) | |
1816 | + | let iy = valueOrElse(getInteger(gr), gs) | |
1817 | + | ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw)) | |
1794 | 1818 | then nil | |
1795 | - | else ([StringEntry( | |
1819 | + | else ([StringEntry(iv, W)] ++ (if (isDefined(ix)) | |
1796 | 1820 | then nil | |
1797 | - | else (([StringEntry( | |
1821 | + | else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il))))) | |
1798 | 1822 | } | |
1799 | 1823 | } | |
1800 | 1824 | } | |
1803 | 1827 | ||
1804 | 1828 | ||
1805 | 1829 | ||
1806 | - | @Callable( | |
1807 | - | func unstakeDuck ( | |
1808 | - | let | |
1809 | - | if ((size( | |
1830 | + | @Callable(ei) | |
1831 | + | func unstakeDuck (iu) = { | |
1832 | + | let il = ii(ei) | |
1833 | + | if ((size(ei.payments) != 0)) | |
1810 | 1834 | then throw("No payments required") | |
1811 | 1835 | else { | |
1812 | - | let av = fromBase58String( | |
1813 | - | let bp = toString( | |
1814 | - | let | |
1815 | - | let | |
1816 | - | if (!(isDefined(getInteger( | |
1817 | - | then throw((("NFT " + | |
1836 | + | let av = fromBase58String(iu) | |
1837 | + | let bp = toString(ei.caller) | |
1838 | + | let gN = value(assetInfo(av)) | |
1839 | + | let gO = ax(toBase58String(av)) | |
1840 | + | if (!(isDefined(getInteger(gO)))) | |
1841 | + | then throw((("NFT " + gN.name) + " is not staked")) | |
1818 | 1842 | else if (!(isDefined(getString(aN(bp))))) | |
1819 | - | then throw((("The duck " + | |
1843 | + | then throw((("The duck " + gN.name) + " is not staked")) | |
1820 | 1844 | else { | |
1821 | - | let | |
1822 | - | if (( | |
1845 | + | let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned")) | |
1846 | + | if ((gQ != bp)) | |
1823 | 1847 | then throw("Staked NFT is not yours") | |
1824 | 1848 | else { | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | if (( | |
1829 | - | then throw((("Please heal your duck to " + toString( | |
1830 | - | else [ScriptTransfer( | |
1849 | + | let gr = aQ(iu) | |
1850 | + | let gs = J(valueOrElse(getInteger(r(iu)), 0)) | |
1851 | + | let iz = valueOrElse(getInteger(gr), gs) | |
1852 | + | if ((gs > iz)) | |
1853 | + | then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking")) | |
1854 | + | else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il] | |
1831 | 1855 | } | |
1832 | 1856 | } | |
1833 | 1857 | } | |
1835 | 1859 | ||
1836 | 1860 | ||
1837 | 1861 | ||
1838 | - | @Callable( | |
1839 | - | func claimRes ( | |
1840 | - | let | |
1841 | - | if ((size( | |
1862 | + | @Callable(ei) | |
1863 | + | func claimRes (fy,iA) = { | |
1864 | + | let il = ii(ei) | |
1865 | + | if ((size(ei.payments) != 0)) | |
1842 | 1866 | then throw("No payments required") | |
1843 | 1867 | else { | |
1844 | - | let b = toString( | |
1845 | - | let dd = | |
1868 | + | let b = toString(ei.originCaller) | |
1869 | + | let dd = gS(b, fy, cy, iA) | |
1846 | 1870 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1847 | - | $Tuple2(((((dd._1 ++ | |
1848 | - | } | |
1849 | - | } | |
1850 | - | ||
1851 | - | ||
1852 | - | ||
1853 | - | @Callable( | |
1854 | - | func claimResToWH ( | |
1855 | - | let | |
1856 | - | if ((size( | |
1871 | + | $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq]) | |
1872 | + | } | |
1873 | + | } | |
1874 | + | ||
1875 | + | ||
1876 | + | ||
1877 | + | @Callable(ei) | |
1878 | + | func claimResToWH (fy,iA) = { | |
1879 | + | let il = ii(ei) | |
1880 | + | if ((size(ei.payments) != 0)) | |
1857 | 1881 | then throw("No payments required") | |
1858 | 1882 | else { | |
1859 | - | let b = toString( | |
1860 | - | let dd = | |
1861 | - | $Tuple2(((((dd._1 ++ | |
1862 | - | } | |
1863 | - | } | |
1864 | - | ||
1865 | - | ||
1866 | - | ||
1867 | - | @Callable( | |
1868 | - | func flight ( | |
1869 | - | let | |
1870 | - | if ((size( | |
1883 | + | let b = toString(ei.originCaller) | |
1884 | + | let dd = gS(b, fy, cx, iA) | |
1885 | + | $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah]) | |
1886 | + | } | |
1887 | + | } | |
1888 | + | ||
1889 | + | ||
1890 | + | ||
1891 | + | @Callable(ei) | |
1892 | + | func flight (gg,gh) = { | |
1893 | + | let il = ii(ei) | |
1894 | + | if ((size(ei.payments) != 0)) | |
1871 | 1895 | then throw("No payments required") | |
1872 | 1896 | else { | |
1873 | - | let aT = toString( | |
1874 | - | let | |
1875 | - | let p = | |
1876 | - | let | |
1877 | - | let | |
1878 | - | if (( | |
1897 | + | let aT = toString(ei.caller) | |
1898 | + | let eN = gf(aT, gg, gh) | |
1899 | + | let p = eN._2 | |
1900 | + | let iv = aP(p) | |
1901 | + | let gK = valueOrElse(getString(iv), W) | |
1902 | + | if ((eN._4 == gK)) | |
1879 | 1903 | then throw("You can't fly to the same location") | |
1880 | 1904 | else { | |
1881 | - | let | |
1882 | - | let | |
1883 | - | let dt = de( | |
1884 | - | $Tuple2(([StringEntry( | |
1885 | - | then | |
1886 | - | else | |
1905 | + | let eR = aO(p) | |
1906 | + | let fC = eQ(eR) | |
1907 | + | let dt = de(fC[as], eN._5) | |
1908 | + | $Tuple2(([StringEntry(iv, if ((eN._1 > 0)) | |
1909 | + | then eN._4 | |
1910 | + | else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0)) | |
1887 | 1911 | then y | |
1888 | - | else z)._1), | |
1912 | + | else z)._1), eN._3) | |
1889 | 1913 | } | |
1890 | 1914 | } | |
1891 | 1915 | } | |
1892 | 1916 | ||
1893 | 1917 | ||
1894 | 1918 | ||
1895 | - | @Callable( | |
1896 | - | func heal ( | |
1897 | - | let | |
1898 | - | if (if (if ((0 > | |
1919 | + | @Callable(ei) | |
1920 | + | func heal (iB,iC,iD) = { | |
1921 | + | let il = ii(ei) | |
1922 | + | if (if (if ((0 > iB)) | |
1899 | 1923 | then true | |
1900 | - | else (0 > | |
1924 | + | else (0 > iC)) | |
1901 | 1925 | then true | |
1902 | - | else (0 > | |
1926 | + | else (0 > iD)) | |
1903 | 1927 | then throw("Quantity cannot be negative") | |
1904 | 1928 | else { | |
1905 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1910 | - | if (( | |
1911 | - | then throw((("HP should be < " + toString( | |
1929 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
1930 | + | let iE = [iB, iC, iD] | |
1931 | + | let gr = aQ(p) | |
1932 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1933 | + | let iF = valueOrElse(getInteger(gr), gs) | |
1934 | + | if ((iF >= gs)) | |
1935 | + | then throw((("HP should be < " + toString(gs)) + " to heal")) | |
1912 | 1936 | else { | |
1913 | - | let | |
1914 | - | let | |
1915 | - | let | |
1937 | + | let eR = aO(p) | |
1938 | + | let fC = eQ(eR) | |
1939 | + | let iG = if ((fC[as] == "")) | |
1916 | 1940 | then nil | |
1917 | - | else split( | |
1918 | - | func | |
1941 | + | else split(fC[as], "_") | |
1942 | + | func iH (cL,iI) = { | |
1919 | 1943 | let bS = cL._2 | |
1920 | - | let | |
1921 | - | then parseIntValue( | |
1944 | + | let eE = if ((size(iG) > bS)) | |
1945 | + | then parseIntValue(iG[bS]) | |
1922 | 1946 | else 0 | |
1923 | 1947 | if ((3 > bS)) | |
1924 | 1948 | then { | |
1925 | - | let | |
1926 | - | if (( | |
1927 | - | then throw(((("You have only " + toString( | |
1928 | - | else $Tuple3((cL._1 :+ toString(( | |
1949 | + | let iJ = iE[bS] | |
1950 | + | if ((iJ > eE)) | |
1951 | + | then throw(((("You have only " + toString(eE)) + " of ") + Z[bS])) | |
1952 | + | else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ))) | |
1929 | 1953 | } | |
1930 | - | else $Tuple3((cL._1 :+ toString( | |
1954 | + | else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3) | |
1931 | 1955 | } | |
1932 | 1956 | ||
1933 | 1957 | let dd = { | |
1936 | 1960 | let cP = $Tuple3(nil, 0, 0) | |
1937 | 1961 | func cQ (cR,cS) = if ((cS >= cO)) | |
1938 | 1962 | then cR | |
1939 | - | else | |
1963 | + | else iH(cR, cN[cS]) | |
1940 | 1964 | ||
1941 | 1965 | func cT (cR,cS) = if ((cS >= cO)) | |
1942 | 1966 | then cR | |
1944 | 1968 | ||
1945 | 1969 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1946 | 1970 | } | |
1947 | - | let | |
1948 | - | $Tuple2(([IntegerEntry( | |
1971 | + | let iK = min([gs, (iF + dd._3)]) | |
1972 | + | $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK) | |
1949 | 1973 | } | |
1950 | 1974 | } | |
1951 | 1975 | } | |
1952 | 1976 | ||
1953 | 1977 | ||
1954 | 1978 | ||
1955 | - | @Callable( | |
1979 | + | @Callable(ei) | |
1956 | 1980 | func healES () = { | |
1957 | - | let | |
1958 | - | if ((size( | |
1981 | + | let il = ii(ei) | |
1982 | + | if ((size(ei.payments) != 1)) | |
1959 | 1983 | then throw("Exactly one payment required") | |
1960 | 1984 | else { | |
1961 | - | let | |
1962 | - | if (( | |
1985 | + | let im = value(ei.payments[0]) | |
1986 | + | if ((im.assetId != bb)) | |
1963 | 1987 | then throw("Allowed USDT payment only!") | |
1964 | 1988 | else { | |
1965 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | if (( | |
1989 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
1990 | + | let gr = aQ(p) | |
1991 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1992 | + | let iF = valueOrElse(getInteger(gr), gs) | |
1993 | + | if ((iF > 0)) | |
1970 | 1994 | then throw("HP should be 0 to call Emergency Service") | |
1971 | 1995 | else { | |
1972 | - | let | |
1973 | - | let | |
1974 | - | let | |
1996 | + | let eR = aO(p) | |
1997 | + | let fC = eQ(eR) | |
1998 | + | let iG = if ((fC[as] == "")) | |
1975 | 1999 | then nil | |
1976 | - | else split( | |
1977 | - | let | |
1978 | - | then parseIntValue( | |
2000 | + | else split(fC[as], "_") | |
2001 | + | let iL = if ((size(iG) > 0)) | |
2002 | + | then parseIntValue(iG[0]) | |
1979 | 2003 | else 0 | |
1980 | - | let | |
1981 | - | then parseIntValue( | |
2004 | + | let iM = if ((size(iG) > 1)) | |
2005 | + | then parseIntValue(iG[1]) | |
1982 | 2006 | else 0 | |
1983 | - | let | |
1984 | - | then parseIntValue( | |
2007 | + | let iN = if ((size(iG) > 2)) | |
2008 | + | then parseIntValue(iG[2]) | |
1985 | 2009 | else 0 | |
1986 | - | if (if (if (( | |
2010 | + | if (if (if ((iL > 0)) | |
1987 | 2011 | then true | |
1988 | - | else ( | |
2012 | + | else (iM > 0)) | |
1989 | 2013 | then true | |
1990 | - | else ( | |
2014 | + | else (iN > 0)) | |
1991 | 2015 | then throw("You have to use own Medical Kit") | |
1992 | 2016 | else { | |
1993 | - | let | |
1994 | - | let | |
1995 | - | then split(value( | |
2017 | + | let iO = getString(bE, aU()) | |
2018 | + | let iP = if (isDefined(iO)) | |
2019 | + | then split(value(iO), "_") | |
1996 | 2020 | else nil | |
1997 | - | let | |
1998 | - | then parseIntValue( | |
2021 | + | let iQ = if ((size(iP) > 0)) | |
2022 | + | then parseIntValue(iP[0]) | |
1999 | 2023 | else 0 | |
2000 | - | if ((0 >= | |
2024 | + | if ((0 >= iQ)) | |
2001 | 2025 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2002 | 2026 | else { | |
2003 | - | let | |
2004 | - | let | |
2027 | + | let iK = (iF + bY[0]) | |
2028 | + | let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_") | |
2005 | 2029 | let aY = split(ac[0], "_") | |
2006 | - | let | |
2007 | - | let | |
2008 | - | if (( | |
2009 | - | then throw(("Payment attached should be " + toString( | |
2030 | + | let iS = aX(aY) | |
2031 | + | let iT = fraction((iS * Y), X, (10 * af)) | |
2032 | + | if ((im.amount != iT)) | |
2033 | + | then throw(("Payment attached should be " + toString(iT))) | |
2010 | 2034 | else { | |
2011 | - | let dd = bO(invoke(bE, "updateEsStorage", [ | |
2012 | - | $Tuple2(([IntegerEntry( | |
2035 | + | let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)])) | |
2036 | + | $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd) | |
2013 | 2037 | } | |
2014 | 2038 | } | |
2015 | 2039 | } | |
2020 | 2044 | ||
2021 | 2045 | ||
2022 | 2046 | ||
2023 | - | @Callable( | |
2024 | - | func updateBackpack (p, | |
2047 | + | @Callable(ei) | |
2048 | + | func updateBackpack (p,iU) = if ((ei.caller != bE)) | |
2025 | 2049 | then throw("permission denied") | |
2026 | - | else $Tuple2([StringEntry(aO(p), | |
2027 | - | ||
2028 | - | ||
2029 | - | ||
2030 | - | @Callable( | |
2050 | + | else $Tuple2([StringEntry(aO(p), iU)], iU) | |
2051 | + | ||
2052 | + | ||
2053 | + | ||
2054 | + | @Callable(ei) | |
2031 | 2055 | func buySLand () = { | |
2032 | - | let | |
2033 | - | if ((size( | |
2056 | + | let il = ii(ei) | |
2057 | + | if ((size(ei.payments) != 1)) | |
2034 | 2058 | then throw("Exactly one payment required") | |
2035 | 2059 | else { | |
2036 | - | let | |
2037 | - | if (( | |
2060 | + | let im = value(ei.payments[0]) | |
2061 | + | if ((im.assetId != bb)) | |
2038 | 2062 | then throw("Allowed USDT payment only!") | |
2039 | - | else if (( | |
2063 | + | else if ((im.amount != ce)) | |
2040 | 2064 | then throw(("Payment attached should be " + toString(ce))) | |
2041 | 2065 | else { | |
2042 | - | let dd = | |
2043 | - | $Tuple2((((dd._1 :+ ScriptTransfer(bE, | |
2066 | + | let dd = fX(ei.caller, ei.transactionId) | |
2067 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1) | |
2044 | 2068 | } | |
2045 | 2069 | } | |
2046 | 2070 | } | |
2047 | 2071 | ||
2048 | 2072 | ||
2049 | 2073 | ||
2050 | - | @Callable( | |
2051 | - | func expedition ( | |
2052 | - | let | |
2053 | - | if ((size( | |
2074 | + | @Callable(ei) | |
2075 | + | func expedition (gg,gh) = { | |
2076 | + | let il = ii(ei) | |
2077 | + | if ((size(ei.payments) != 0)) | |
2054 | 2078 | then throw("No payments required") | |
2055 | 2079 | else { | |
2056 | - | let dd = | |
2057 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2058 | - | $Tuple2(((dd._1 ++ | |
2059 | - | } | |
2060 | - | } | |
2061 | - | ||
2062 | - | ||
2063 | - | ||
2064 | - | @Callable( | |
2080 | + | let dd = gx(ei.caller, ei.transactionId, gg, gh) | |
2081 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
2082 | + | $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3)) | |
2083 | + | } | |
2084 | + | } | |
2085 | + | ||
2086 | + | ||
2087 | + | ||
2088 | + | @Callable(ei) | |
2065 | 2089 | func upgradeInfra (aF) = { | |
2066 | - | let | |
2067 | - | if ((size( | |
2090 | + | let il = ii(ei) | |
2091 | + | if ((size(ei.payments) != 0)) | |
2068 | 2092 | then throw("No payments required") | |
2069 | 2093 | else { | |
2070 | - | let dd = | |
2071 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2072 | - | $Tuple2(((dd._1 :+ | |
2073 | - | } | |
2074 | - | } | |
2075 | - | ||
2076 | - | ||
2077 | - | ||
2078 | - | @Callable( | |
2079 | - | func upgradeInfraUsdt (aF) = if (( | |
2094 | + | let dd = hf(true, ei.caller, 0, aF) | |
2095 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
2096 | + | $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2) | |
2097 | + | } | |
2098 | + | } | |
2099 | + | ||
2100 | + | ||
2101 | + | ||
2102 | + | @Callable(ei) | |
2103 | + | func upgradeInfraUsdt (aF) = if ((ei.caller != this)) | |
2080 | 2104 | then throw("Permission denied") | |
2081 | 2105 | else { | |
2082 | - | let | |
2083 | - | if ((size( | |
2106 | + | let il = ii(ei) | |
2107 | + | if ((size(ei.payments) != 1)) | |
2084 | 2108 | then throw("Exactly one payment required") | |
2085 | 2109 | else { | |
2086 | - | let | |
2087 | - | if (( | |
2110 | + | let im = value(ei.payments[0]) | |
2111 | + | if ((im.assetId != bb)) | |
2088 | 2112 | then throw("Allowed USDT payment only!") | |
2089 | 2113 | else { | |
2090 | - | let dd = | |
2091 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2114 | + | let dd = hf(false, ei.caller, im.amount, aF) | |
2115 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2) | |
2092 | 2116 | } | |
2093 | 2117 | } | |
2094 | 2118 | } | |
2095 | 2119 | ||
2096 | 2120 | ||
2097 | 2121 | ||
2098 | - | @Callable( | |
2099 | - | func activateArtifact ( | |
2100 | - | let | |
2101 | - | if ((size( | |
2122 | + | @Callable(ei) | |
2123 | + | func activateArtifact (iV,iW) = { | |
2124 | + | let il = ii(ei) | |
2125 | + | if ((size(ei.payments) != 0)) | |
2102 | 2126 | then throw("No payments required") | |
2103 | 2127 | else { | |
2104 | - | let b = toString( | |
2128 | + | let b = toString(ei.caller) | |
2105 | 2129 | let dd = { | |
2106 | - | let bc = | |
2130 | + | let bc = iV | |
2107 | 2131 | if (("PRESALE" == bc)) | |
2108 | - | then | |
2132 | + | then hF(b, iW) | |
2109 | 2133 | else if (("ONBOARD" == bc)) | |
2110 | - | then | |
2134 | + | then hy(b) | |
2111 | 2135 | else throw("Unknown artifact") | |
2112 | 2136 | } | |
2113 | - | (dd :+ | |
2114 | - | } | |
2115 | - | } | |
2116 | - | ||
2117 | - | ||
2118 | - | ||
2119 | - | @Callable( | |
2120 | - | func mergeLands ( | |
2121 | - | let | |
2122 | - | if ((size( | |
2137 | + | (dd :+ il) | |
2138 | + | } | |
2139 | + | } | |
2140 | + | ||
2141 | + | ||
2142 | + | ||
2143 | + | @Callable(ei) | |
2144 | + | func mergeLands (hK) = { | |
2145 | + | let il = ii(ei) | |
2146 | + | if ((size(ei.payments) != 0)) | |
2123 | 2147 | then throw("No payments required") | |
2124 | 2148 | else { | |
2125 | - | let dd = | |
2126 | - | $Tuple2(((dd._1 :+ | |
2127 | - | } | |
2128 | - | } | |
2129 | - | ||
2130 | - | ||
2131 | - | ||
2132 | - | @Callable( | |
2133 | - | func mergeLandsUsdt ( | |
2134 | - | let | |
2135 | - | if ((size( | |
2149 | + | let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId) | |
2150 | + | $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2) | |
2151 | + | } | |
2152 | + | } | |
2153 | + | ||
2154 | + | ||
2155 | + | ||
2156 | + | @Callable(ei) | |
2157 | + | func mergeLandsUsdt (hK) = { | |
2158 | + | let il = ii(ei) | |
2159 | + | if ((size(ei.payments) != 1)) | |
2136 | 2160 | then throw("Exactly one payment required") | |
2137 | 2161 | else { | |
2138 | - | let | |
2139 | - | if (( | |
2162 | + | let im = value(ei.payments[0]) | |
2163 | + | if ((im.assetId != bb)) | |
2140 | 2164 | then throw("Allowed USDT payment only!") | |
2141 | 2165 | else { | |
2142 | - | let dd = | |
2143 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2166 | + | let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId) | |
2167 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2) | |
2144 | 2168 | } | |
2145 | 2169 | } | |
2146 | 2170 | } | |
2147 | 2171 | ||
2148 | 2172 | ||
2149 | 2173 | ||
2150 | - | @Callable( | |
2151 | - | func cargoExchange ( | |
2152 | - | let | |
2153 | - | if ((size( | |
2174 | + | @Callable(ei) | |
2175 | + | func cargoExchange (iX,aF) = { | |
2176 | + | let il = ii(ei) | |
2177 | + | if ((size(ei.payments) != 0)) | |
2154 | 2178 | then throw("No payments required") | |
2155 | 2179 | else { | |
2156 | - | let | |
2157 | - | let b = toString( | |
2158 | - | let | |
2159 | - | let | |
2160 | - | if (!(isDefined(getInteger( | |
2161 | - | then throw(( | |
2180 | + | let fB = split_4C(iX, ":") | |
2181 | + | let b = toString(ei.originCaller) | |
2182 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2183 | + | let gO = ax(aF) | |
2184 | + | if (!(isDefined(getInteger(gO)))) | |
2185 | + | then throw((gN.name + " is not staked")) | |
2162 | 2186 | else { | |
2163 | - | let | |
2164 | - | if (( | |
2187 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
2188 | + | if ((gQ != b)) | |
2165 | 2189 | then throw((P + " is not yours")) | |
2166 | 2190 | else { | |
2167 | - | let | |
2168 | - | let | |
2191 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2192 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2169 | 2193 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2170 | - | let | |
2171 | - | let | |
2172 | - | if (( | |
2173 | - | then throw((("Duck location type is " + | |
2174 | - | else if (( | |
2194 | + | let gK = valueOrElse(getString(aP(p)), W) | |
2195 | + | let gL = split(value(gK), "_") | |
2196 | + | if ((gL[aV] != "L")) | |
2197 | + | then throw((("Duck location type is " + gL[aV]) + ", but should be L")) | |
2198 | + | else if ((gL[aW] != aF)) | |
2175 | 2199 | then throw(("Duck should be on the land " + aF)) | |
2176 | 2200 | else { | |
2177 | - | let | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | let dd = | |
2182 | - | let | |
2183 | - | let | |
2184 | - | let | |
2185 | - | [StringEntry( | |
2201 | + | let fj = aE(aF) | |
2202 | + | let eW = fi(fj, fk, fl) | |
2203 | + | let eR = aO(p) | |
2204 | + | let fC = eQ(eR) | |
2205 | + | let dd = fA(fB, eW, fC) | |
2206 | + | let fr = split(eW[ak], "_") | |
2207 | + | let hc = (parseIntValue(fr[am]) + dd._7) | |
2208 | + | let hd = (parseIntValue(fr[an]) - dd._7) | |
2209 | + | [StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il] | |
2186 | 2210 | } | |
2187 | 2211 | } | |
2188 | 2212 | } | |
2191 | 2215 | ||
2192 | 2216 | ||
2193 | 2217 | ||
2194 | - | @Callable( | |
2195 | - | func saveWarehouse ( | |
2218 | + | @Callable(ei) | |
2219 | + | func saveWarehouse (fn,aF) = if ((ei.caller != bE)) | |
2196 | 2220 | then throw("Access denied") | |
2197 | 2221 | else { | |
2198 | - | let | |
2199 | - | let | |
2200 | - | if ((size( | |
2222 | + | let fj = aE(aF) | |
2223 | + | let fo = split_4C(fn, ":") | |
2224 | + | if ((size(fo) != 5)) | |
2201 | 2225 | then throw("warehouse string should contain 4 ':' separators") | |
2202 | 2226 | else { | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | $Tuple2([StringEntry( | |
2227 | + | let iY = split(fo[ak], "_")[al] | |
2228 | + | let hc = eV(fo) | |
2229 | + | let iZ = eT(fo[ag]) | |
2230 | + | let hd = ((iZ - parseIntValue(iY)) - hc) | |
2231 | + | let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":") | |
2232 | + | $Tuple2([StringEntry(fj, ja)], ja) | |
2209 | 2233 | } | |
2210 | 2234 | } | |
2211 | 2235 | ||
2212 | 2236 | ||
2213 | 2237 | ||
2214 | - | @Callable( | |
2215 | - | func fixWarehouseFormat (aF) = if (( | |
2238 | + | @Callable(ei) | |
2239 | + | func fixWarehouseFormat (aF) = if ((ei.caller != bC)) | |
2216 | 2240 | then throw("Access denied") | |
2217 | 2241 | else { | |
2218 | - | let | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | let | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | $Tuple2([StringEntry( | |
2229 | - | } | |
2230 | - | ||
2231 | - | ||
2232 | - | ||
2233 | - | @Callable( | |
2234 | - | func fixStakedPieces (bp) = if (( | |
2242 | + | let fj = aE(aF) | |
2243 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2244 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2245 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2246 | + | let fo = fi(fj, fk, fl) | |
2247 | + | let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil)) | |
2248 | + | let hc = eV(fo) | |
2249 | + | let iZ = eT(fo[ag]) | |
2250 | + | let hd = ((iZ - iY) - hc) | |
2251 | + | let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":") | |
2252 | + | $Tuple2([StringEntry(fj, ja)], ja) | |
2253 | + | } | |
2254 | + | ||
2255 | + | ||
2256 | + | ||
2257 | + | @Callable(ei) | |
2258 | + | func fixStakedPieces (bp) = if ((ei.caller != bC)) | |
2235 | 2259 | then throw("Access denied") | |
2236 | 2260 | else { | |
2237 | - | let | |
2261 | + | let ib = if ((bp == "")) | |
2238 | 2262 | then 0 | |
2239 | 2263 | else { | |
2240 | - | let | |
2241 | - | let | |
2242 | - | then split_51C(value( | |
2264 | + | let hW = getString(bD, bM(bp)) | |
2265 | + | let hR = if (isDefined(hW)) | |
2266 | + | then split_51C(value(hW), "_") | |
2243 | 2267 | else nil | |
2244 | - | func | |
2245 | - | let | |
2246 | - | let bU = split( | |
2268 | + | func jb (cL,aF) = { | |
2269 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2270 | + | let bU = split(gN.description, "_")[bI] | |
2247 | 2271 | (cL + bT(bU)) | |
2248 | 2272 | } | |
2249 | 2273 | ||
2250 | - | let cN = | |
2274 | + | let cN = hR | |
2251 | 2275 | let cO = size(cN) | |
2252 | 2276 | let cP = 0 | |
2253 | 2277 | func cQ (cR,cS) = if ((cS >= cO)) | |
2254 | 2278 | then cR | |
2255 | - | else | |
2279 | + | else jb(cR, cN[cS]) | |
2256 | 2280 | ||
2257 | 2281 | func cT (cR,cS) = if ((cS >= cO)) | |
2258 | 2282 | then cR | |
2260 | 2284 | ||
2261 | 2285 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2262 | 2286 | } | |
2263 | - | $Tuple2([IntegerEntry(bN(bp), | |
2264 | - | } | |
2265 | - | ||
2266 | - | ||
2267 | - | ||
2268 | - | @Callable( | |
2269 | - | func setCustomName (av, | |
2270 | - | let | |
2271 | - | if ((size( | |
2287 | + | $Tuple2([IntegerEntry(bN(bp), ib)], ib) | |
2288 | + | } | |
2289 | + | ||
2290 | + | ||
2291 | + | ||
2292 | + | @Callable(ei) | |
2293 | + | func setCustomName (av,hT,aA) = { | |
2294 | + | let il = ii(ei) | |
2295 | + | if ((size(ei.payments) != 1)) | |
2272 | 2296 | then throw("Exactly one payment required") | |
2273 | 2297 | else { | |
2274 | - | let | |
2275 | - | if (( | |
2298 | + | let im = value(ei.payments[0]) | |
2299 | + | if ((im.assetId != bb)) | |
2276 | 2300 | then throw("Allowed USDT payment only!") | |
2277 | - | else if (( | |
2301 | + | else if ((im.amount != ca)) | |
2278 | 2302 | then throw(("Payment should be " + toString(ca))) | |
2279 | - | else if (contains( | |
2280 | - | then throw(("Name should not contain '__': " + | |
2281 | - | else if ((size( | |
2303 | + | else if (contains(hT, "__")) | |
2304 | + | then throw(("Name should not contain '__': " + hT)) | |
2305 | + | else if ((size(hT) > cb)) | |
2282 | 2306 | then throw(("Name too long, maxLength=" + toString(cb))) | |
2283 | 2307 | else { | |
2284 | - | let b = toString( | |
2285 | - | let | |
2308 | + | let b = toString(ei.originCaller) | |
2309 | + | let jc = { | |
2286 | 2310 | let bc = aA | |
2287 | 2311 | if (("ACCOUNT" == bc)) | |
2288 | 2312 | then { | |
2289 | - | let | |
2290 | - | let | |
2291 | - | if (isDefined( | |
2292 | - | then throw(("Name already registered: " + | |
2313 | + | let jd = cv(hT) | |
2314 | + | let je = getString(jd) | |
2315 | + | if (isDefined(je)) | |
2316 | + | then throw(("Name already registered: " + hT)) | |
2293 | 2317 | else { | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | then [DeleteEntry(cv(value( | |
2318 | + | let jf = aH(b) | |
2319 | + | let jg = getString(jf) | |
2320 | + | let jh = if (isDefined(jg)) | |
2321 | + | then [DeleteEntry(cv(value(jg)))] | |
2298 | 2322 | else nil | |
2299 | - | ((( | |
2323 | + | (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1) | |
2300 | 2324 | } | |
2301 | 2325 | } | |
2302 | 2326 | else if (("LAND" == bc)) | |
2303 | 2327 | then { | |
2304 | - | let | |
2305 | - | let | |
2306 | - | if (!(isDefined(getInteger( | |
2307 | - | then throw(( | |
2328 | + | let gN = value(assetInfo(fromBase58String(av))) | |
2329 | + | let gO = ax(av) | |
2330 | + | if (!(isDefined(getInteger(gO)))) | |
2331 | + | then throw((gN.name + " is not staked")) | |
2308 | 2332 | else { | |
2309 | - | let | |
2310 | - | if (( | |
2333 | + | let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned")) | |
2334 | + | if ((gQ != b)) | |
2311 | 2335 | then throw((P + " is not yours")) | |
2312 | 2336 | else { | |
2313 | - | let | |
2314 | - | let | |
2315 | - | if (isDefined( | |
2316 | - | then throw(("Name already registered: " + | |
2337 | + | let jd = cp(hT) | |
2338 | + | let je = getString(jd) | |
2339 | + | if (isDefined(je)) | |
2340 | + | then throw(("Name already registered: " + hT)) | |
2317 | 2341 | else { | |
2318 | - | let | |
2319 | - | let | |
2320 | - | let | |
2321 | - | then [DeleteEntry(cp(value( | |
2342 | + | let ji = aw(av) | |
2343 | + | let jg = getString(ji) | |
2344 | + | let jh = if (isDefined(jg)) | |
2345 | + | then [DeleteEntry(cp(value(jg)))] | |
2322 | 2346 | else nil | |
2323 | - | ((( | |
2347 | + | (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1) | |
2324 | 2348 | } | |
2325 | 2349 | } | |
2326 | 2350 | } | |
2327 | 2351 | } | |
2328 | 2352 | else if (("DUCK" == bc)) | |
2329 | 2353 | then { | |
2330 | - | let | |
2331 | - | let | |
2332 | - | if (if (!(isDefined(getInteger( | |
2354 | + | let gN = value(assetInfo(fromBase58String(av))) | |
2355 | + | let gO = ax(av) | |
2356 | + | if (if (!(isDefined(getInteger(gO)))) | |
2333 | 2357 | then true | |
2334 | 2358 | else !(isDefined(getString(aN(b))))) | |
2335 | - | then throw(( | |
2359 | + | then throw((gN.name + " is not staked")) | |
2336 | 2360 | else { | |
2337 | - | let | |
2338 | - | if (( | |
2361 | + | let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned")) | |
2362 | + | if ((gQ != b)) | |
2339 | 2363 | then throw((Q + " is not yours")) | |
2340 | 2364 | else { | |
2341 | - | let | |
2342 | - | let | |
2343 | - | if (isDefined( | |
2344 | - | then throw(("Name already registered: " + | |
2365 | + | let jd = cu(hT) | |
2366 | + | let je = getString(jd) | |
2367 | + | if (isDefined(je)) | |
2368 | + | then throw(("Name already registered: " + hT)) | |
2345 | 2369 | else { | |
2346 | - | let | |
2347 | - | let | |
2348 | - | let | |
2349 | - | then [DeleteEntry(cu(value( | |
2370 | + | let ji = aG(av) | |
2371 | + | let jg = getString(ji) | |
2372 | + | let jh = if (isDefined(jg)) | |
2373 | + | then [DeleteEntry(cu(value(jg)))] | |
2350 | 2374 | else nil | |
2351 | - | ((( | |
2375 | + | (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1) | |
2352 | 2376 | } | |
2353 | 2377 | } | |
2354 | 2378 | } | |
2355 | 2379 | } | |
2356 | 2380 | else throw("Unknown entity type") | |
2357 | 2381 | } | |
2358 | - | $Tuple2((( | |
2382 | + | $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0) | |
2359 | 2383 | } | |
2360 | 2384 | } | |
2361 | 2385 | } | |
2362 | 2386 | ||
2363 | 2387 | ||
2364 | 2388 | ||
2365 | - | @Callable( | |
2366 | - | func setReferrals ( | |
2389 | + | @Callable(ei) | |
2390 | + | func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX)) | |
2367 | 2391 | then throw("Permission denied") | |
2368 | 2392 | else { | |
2369 | - | let | |
2370 | - | if ((size( | |
2393 | + | let il = ii(ei) | |
2394 | + | if ((size(ei.payments) != 0)) | |
2371 | 2395 | then throw("No payments required") | |
2372 | - | else if (!(isDefined(addressFromString( | |
2373 | - | then throw(("Invalid address: " + | |
2374 | - | else if (!(isDefined(addressFromString( | |
2375 | - | then throw(("Invalid address: " + | |
2396 | + | else if (!(isDefined(addressFromString(jj)))) | |
2397 | + | then throw(("Invalid address: " + jj)) | |
2398 | + | else if (!(isDefined(addressFromString(jk)))) | |
2399 | + | then throw(("Invalid address: " + jk)) | |
2376 | 2400 | else { | |
2377 | - | let | |
2378 | - | let | |
2379 | - | let | |
2380 | - | then split_4C(value( | |
2401 | + | let jl = cw() | |
2402 | + | let jm = getString(jl) | |
2403 | + | let jn = if (isDefined(jm)) | |
2404 | + | then split_4C(value(jm), "_") | |
2381 | 2405 | else nil | |
2382 | - | if (containsElement( | |
2383 | - | then throw(( | |
2406 | + | if (containsElement(jn, jk)) | |
2407 | + | then throw((jk + " is not newbie (already has referrals)")) | |
2384 | 2408 | else { | |
2385 | - | let | |
2386 | - | let | |
2387 | - | if (if (isDefined( | |
2388 | - | then isDefined(addressFromString(value( | |
2409 | + | let hz = aI(jk) | |
2410 | + | let hA = getString(hz) | |
2411 | + | if (if (isDefined(hA)) | |
2412 | + | then isDefined(addressFromString(value(hA))) | |
2389 | 2413 | else false) | |
2390 | - | then throw((( | |
2414 | + | then throw(((jk + " already has refBy: ") + value(hA))) | |
2391 | 2415 | else { | |
2392 | - | let | |
2393 | - | let | |
2394 | - | let | |
2395 | - | then split_4C(value( | |
2416 | + | let jo = aL(jj) | |
2417 | + | let jp = getString(jo) | |
2418 | + | let jq = if (isDefined(jp)) | |
2419 | + | then split_4C(value(jp), "_") | |
2396 | 2420 | else nil | |
2397 | - | if (containsElement( | |
2398 | - | then throw(((( | |
2421 | + | if (containsElement(jq, jk)) | |
2422 | + | then throw((((jj + " already contains ") + jk) + " within referrals")) | |
2399 | 2423 | else { | |
2400 | - | let | |
2401 | - | let | |
2402 | - | then value( | |
2403 | - | else makeString_2C(( | |
2404 | - | $Tuple2([StringEntry( | |
2424 | + | let jr = makeString_2C((jq :+ jk), "_") | |
2425 | + | let js = if (containsElement(jn, jj)) | |
2426 | + | then value(jm) | |
2427 | + | else makeString_2C((jn :+ jj), "_") | |
2428 | + | $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0) | |
2405 | 2429 | } | |
2406 | 2430 | } | |
2407 | 2431 | } | |
2410 | 2434 | ||
2411 | 2435 | ||
2412 | 2436 | ||
2413 | - | @Callable( | |
2414 | - | func distributePoints ( | |
2415 | - | let | |
2416 | - | if ((size( | |
2437 | + | @Callable(ei) | |
2438 | + | func distributePoints (jt,ju,jv,jw,jx) = { | |
2439 | + | let il = ii(ei) | |
2440 | + | if ((size(ei.payments) != 0)) | |
2417 | 2441 | then throw("No payments required") | |
2418 | 2442 | else { | |
2419 | - | let b = toString( | |
2443 | + | let b = toString(ei.originCaller) | |
2420 | 2444 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2421 | - | let | |
2422 | - | let | |
2423 | - | let | |
2424 | - | let | |
2425 | - | let | |
2426 | - | let | |
2427 | - | if (( | |
2428 | - | then throw((("There are only " + toString( | |
2445 | + | let jy = w(b) | |
2446 | + | let jz = valueOrElse(getInteger(bD, jy), 0) | |
2447 | + | let jA = s(p) | |
2448 | + | let jB = valueOrElse(getInteger(bD, jA), 0) | |
2449 | + | let jC = (jz + jB) | |
2450 | + | let jD = ((((jt + ju) + jv) + jw) + jx) | |
2451 | + | if ((jD > jC)) | |
2452 | + | then throw((("There are only " + toString(jC)) + " free points to distribute")) | |
2429 | 2453 | else { | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | $Tuple2([IntegerEntry( | |
2454 | + | let jE = o(p) | |
2455 | + | let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_") | |
2456 | + | let jG = (jz - jD) | |
2457 | + | $Tuple2([IntegerEntry(jy, if ((0 > jG)) | |
2434 | 2458 | then 0 | |
2435 | - | else | |
2436 | - | then ( | |
2437 | - | else | |
2459 | + | else jG), IntegerEntry(jA, if ((0 > jG)) | |
2460 | + | then (jB + jG) | |
2461 | + | else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0) | |
2438 | 2462 | } | |
2439 | 2463 | } | |
2440 | 2464 | } | |
2441 | 2465 | ||
2442 | 2466 | ||
2443 | 2467 | ||
2444 | - | @Callable( | |
2445 | - | func splitByGlobalWeightsREADONLY ( | |
2446 | - | ||
2447 | - | ||
2448 | - | ||
2449 | - | @Callable( | |
2450 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2451 | - | let | |
2452 | - | $Tuple2(nil, $Tuple2(cU( | |
2453 | - | } | |
2454 | - | ||
2455 | - | ||
2456 | - | ||
2457 | - | @Callable( | |
2458 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2459 | - | ||
2460 | - | ||
2461 | - | ||
2462 | - | @Callable( | |
2468 | + | @Callable(ei) | |
2469 | + | func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy)) | |
2470 | + | ||
2471 | + | ||
2472 | + | ||
2473 | + | @Callable(ei) | |
2474 | + | func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = { | |
2475 | + | let ee = ek(el) | |
2476 | + | $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee))) | |
2477 | + | } | |
2478 | + | ||
2479 | + | ||
2480 | + | ||
2481 | + | @Callable(ei) | |
2482 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":")) | |
2483 | + | ||
2484 | + | ||
2485 | + | ||
2486 | + | @Callable(ei) | |
2463 | 2487 | func getWarehouseREADONLY (aF) = { | |
2464 | - | let | |
2465 | - | let | |
2466 | - | let | |
2467 | - | $Tuple2(nil, makeString_2C( | |
2468 | - | } | |
2469 | - | ||
2470 | - | ||
2471 | - | ||
2472 | - | @Callable( | |
2473 | - | func saveLastTx () = if (if (( | |
2474 | - | then ( | |
2488 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2489 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2490 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2491 | + | $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":")) | |
2492 | + | } | |
2493 | + | ||
2494 | + | ||
2495 | + | ||
2496 | + | @Callable(ei) | |
2497 | + | func saveLastTx () = if (if ((ei.caller != bG)) | |
2498 | + | then (ei.caller != bE) | |
2475 | 2499 | else false) | |
2476 | 2500 | then throw("Access denied") | |
2477 | - | else $Tuple2([ | |
2478 | - | ||
2479 | - | ||
2480 | - | ||
2481 | - | @Callable( | |
2482 | - | func updateDuckStats (p, | |
2501 | + | else $Tuple2([ii(ei)], 42) | |
2502 | + | ||
2503 | + | ||
2504 | + | ||
2505 | + | @Callable(ei) | |
2506 | + | func updateDuckStats (p,hs) = if ((ei.caller != bE)) | |
2483 | 2507 | then throw("Access denied") | |
2484 | - | else | |
2485 | - | ||
2486 | - | ||
2487 | - | ||
2488 | - | @Callable( | |
2489 | - | func updateAccStats (b, | |
2508 | + | else hr(p, hs) | |
2509 | + | ||
2510 | + | ||
2511 | + | ||
2512 | + | @Callable(ei) | |
2513 | + | func updateAccStats (b,hs) = if ((ei.caller != bE)) | |
2490 | 2514 | then throw("Access denied") | |
2491 | - | else | |
2492 | - | ||
2493 | - | ||
2494 | - | ||
2495 | - | @Callable( | |
2496 | - | func equipDuck ( | |
2497 | - | let | |
2498 | - | if ((size( | |
2515 | + | else hx(b, hs) | |
2516 | + | ||
2517 | + | ||
2518 | + | ||
2519 | + | @Callable(ei) | |
2520 | + | func equipDuck (jJ) = { | |
2521 | + | let il = ii(ei) | |
2522 | + | if ((size(ei.payments) != 0)) | |
2499 | 2523 | then throw("No payments required") | |
2500 | 2524 | else { | |
2501 | - | let b = toString( | |
2525 | + | let b = toString(ei.originCaller) | |
2502 | 2526 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2503 | - | let | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | if ((size( | |
2527 | + | let jK = t(p) | |
2528 | + | let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2529 | + | let eR = aO(p) | |
2530 | + | let fC = eQ(eR) | |
2531 | + | let jM = split(jJ, "_") | |
2532 | + | if ((size(jM) != l)) | |
2509 | 2533 | then throw("Wrong equipment string") | |
2510 | 2534 | else { | |
2511 | - | let | |
2512 | - | let dh = if (( | |
2535 | + | let jN = fC[as] | |
2536 | + | let dh = if ((jN == "")) | |
2513 | 2537 | then nil | |
2514 | - | else split( | |
2515 | - | let | |
2516 | - | let dt = | |
2517 | - | $Tuple2([StringEntry( | |
2538 | + | else split(jN, "_") | |
2539 | + | let jO = dX(jL, dh, true) | |
2540 | + | let dt = dX(jM, jO, false) | |
2541 | + | $Tuple2([StringEntry(jK, jJ), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dt, "_")], ":")), il], 0) | |
2518 | 2542 | } | |
2519 | 2543 | } | |
2520 | 2544 | } | |
2521 | 2545 | ||
2522 | 2546 | ||
2523 | 2547 | ||
2524 | - | @Callable( | |
2525 | - | func test () = if (( | |
2548 | + | @Callable(ei) | |
2549 | + | func test () = if ((ei.caller != this)) | |
2526 | 2550 | then throw("Access denied") | |
2527 | - | else $Tuple2(nil, du("")) | |
2551 | + | else { | |
2552 | + | let dq = du("") | |
2553 | + | let dA = dx(dq) | |
2554 | + | $Tuple2(nil, dA) | |
2555 | + | } | |
2528 | 2556 | ||
2529 | 2557 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = 0 | |
16 | 16 | ||
17 | 17 | let h = 1 | |
18 | 18 | ||
19 | 19 | let i = 2 | |
20 | 20 | ||
21 | 21 | let j = 3 | |
22 | 22 | ||
23 | 23 | let k = 4 | |
24 | 24 | ||
25 | 25 | let l = 6 | |
26 | 26 | ||
27 | 27 | let m = 2 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
31 | 31 | func o (p) = ("duckChars_" + p) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func q (p) = ("duckXP_" + p) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func r (p) = ("duckLevel_" + p) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func s (p) = ("duckFreePoints_" + p) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func t (p) = ("duckEquipment_" + p) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func u (b) = ("userXP_" + b) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func v (b) = ("userLevel_" + b) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func w (b) = ("userFreePoints_" + b) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | let x = 100000 | |
56 | 56 | ||
57 | 57 | let y = 50000 | |
58 | 58 | ||
59 | 59 | let z = 10000 | |
60 | 60 | ||
61 | 61 | let A = 100000 | |
62 | 62 | ||
63 | 63 | let B = 5000000 | |
64 | 64 | ||
65 | 65 | let C = 50000000 | |
66 | 66 | ||
67 | 67 | let D = 100000 | |
68 | 68 | ||
69 | 69 | let E = 10000000 | |
70 | 70 | ||
71 | 71 | let F = 10000000 | |
72 | 72 | ||
73 | 73 | let G = 10000 | |
74 | 74 | ||
75 | 75 | func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func J (K) = (100 + K) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func L (M,N) = { | |
82 | 82 | let O = H(N) | |
83 | 83 | [O, (f * (O - M))] | |
84 | 84 | } | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | let P = "LAND" | |
88 | 88 | ||
89 | 89 | let Q = "DUCK" | |
90 | 90 | ||
91 | 91 | let R = "PRESALE" | |
92 | 92 | ||
93 | 93 | let S = 6 | |
94 | 94 | ||
95 | 95 | let T = 3456000 | |
96 | 96 | ||
97 | 97 | let U = 86400000 | |
98 | 98 | ||
99 | 99 | let V = 10000000000 | |
100 | 100 | ||
101 | 101 | let W = "Africa_F_Africa" | |
102 | 102 | ||
103 | 103 | let X = 39637 | |
104 | 104 | ||
105 | 105 | let Y = 10 | |
106 | 106 | ||
107 | 107 | let Z = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
108 | 108 | ||
109 | 109 | let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
110 | 110 | ||
111 | 111 | let ab = 10000000 | |
112 | 112 | ||
113 | 113 | let ac = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
114 | 114 | ||
115 | 115 | let ad = 6 | |
116 | 116 | ||
117 | 117 | let ae = 10 | |
118 | 118 | ||
119 | 119 | let af = 10 | |
120 | 120 | ||
121 | 121 | let ag = 0 | |
122 | 122 | ||
123 | 123 | let ah = 1 | |
124 | 124 | ||
125 | 125 | let ai = 2 | |
126 | 126 | ||
127 | 127 | let aj = 3 | |
128 | 128 | ||
129 | 129 | let ak = 4 | |
130 | 130 | ||
131 | 131 | let al = 0 | |
132 | 132 | ||
133 | 133 | let am = 1 | |
134 | 134 | ||
135 | 135 | let an = 2 | |
136 | 136 | ||
137 | 137 | let ao = 3 | |
138 | 138 | ||
139 | 139 | let ap = 0 | |
140 | 140 | ||
141 | 141 | let aq = 1 | |
142 | 142 | ||
143 | 143 | let ar = 2 | |
144 | 144 | ||
145 | 145 | let as = 3 | |
146 | 146 | ||
147 | 147 | func at (b) = ("lastTxIdByUser_" + b) | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | func au (av) = ("nftOwner_" + av) | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func aw (av) = ("landCustomNameByAssetId_" + av) | |
154 | 154 | ||
155 | 155 | ||
156 | 156 | func ax (av) = ("stakedTime_" + av) | |
157 | 157 | ||
158 | 158 | ||
159 | 159 | func ay (av) = ("infraLevel_" + av) | |
160 | 160 | ||
161 | 161 | ||
162 | 162 | func az (aA,av) = makeString(["landArtStatus", aA, av], "_") | |
163 | 163 | ||
164 | 164 | ||
165 | 165 | func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD) | |
166 | 166 | ||
167 | 167 | ||
168 | 168 | func aE (aF) = ("wareHouse_" + aF) | |
169 | 169 | ||
170 | 170 | ||
171 | 171 | func aG (av) = ("duckCustomNameByAssetId_" + av) | |
172 | 172 | ||
173 | 173 | ||
174 | 174 | func aH (b) = ("accountCustomNameByAddr_" + b) | |
175 | 175 | ||
176 | 176 | ||
177 | 177 | func aI (b) = ("accRefBy_" + b) | |
178 | 178 | ||
179 | 179 | ||
180 | 180 | func aJ (p) = ("onboardArtActivatedOnDuck_" + p) | |
181 | 181 | ||
182 | 182 | ||
183 | 183 | func aK (b) = ("onboardArtActivatedDuckBy_" + b) | |
184 | 184 | ||
185 | 185 | ||
186 | 186 | func aL (b) = ("accReferrals_" + b) | |
187 | 187 | ||
188 | 188 | ||
189 | 189 | func aM (av) = ("duckOwner_" + av) | |
190 | 190 | ||
191 | 191 | ||
192 | 192 | func aN (aD) = ("stakedDuckByOwner_" + aD) | |
193 | 193 | ||
194 | 194 | ||
195 | 195 | func aO (p) = ("backPack_" + p) | |
196 | 196 | ||
197 | 197 | ||
198 | 198 | func aP (p) = ("duckLocation_" + p) | |
199 | 199 | ||
200 | 200 | ||
201 | 201 | func aQ (p) = ("duckHealth_" + p) | |
202 | 202 | ||
203 | 203 | ||
204 | 204 | func aR () = "contractsBlocked" | |
205 | 205 | ||
206 | 206 | ||
207 | 207 | func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT) | |
208 | 208 | ||
209 | 209 | ||
210 | 210 | func aU () = "emergencyWarehouseProducts" | |
211 | 211 | ||
212 | 212 | ||
213 | 213 | let aV = 1 | |
214 | 214 | ||
215 | 215 | let aW = 2 | |
216 | 216 | ||
217 | 217 | func aX (aY) = (parseIntValue(aY[ad]) * ab) | |
218 | 218 | ||
219 | 219 | ||
220 | 220 | let aZ = true | |
221 | 221 | ||
222 | 222 | let ba = take(drop(this.bytes, 1), 1) | |
223 | 223 | ||
224 | 224 | let bb = { | |
225 | 225 | let bc = ba | |
226 | 226 | if ((base58'2W' == bc)) | |
227 | 227 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
228 | 228 | else if ((base58'2T' == bc)) | |
229 | 229 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
230 | 230 | else throw("Unknown chain") | |
231 | 231 | } | |
232 | 232 | ||
233 | 233 | let bd = { | |
234 | 234 | let bc = ba | |
235 | 235 | if ((base58'2W' == bc)) | |
236 | 236 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
237 | 237 | else if ((base58'2T' == bc)) | |
238 | 238 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
239 | 239 | else throw("Unknown chain") | |
240 | 240 | } | |
241 | 241 | ||
242 | 242 | let be = { | |
243 | 243 | let bc = ba | |
244 | 244 | if ((base58'2W' == bc)) | |
245 | 245 | then 10000000000 | |
246 | 246 | else if ((base58'2T' == bc)) | |
247 | 247 | then 100000000 | |
248 | 248 | else throw("Unknown chain") | |
249 | 249 | } | |
250 | 250 | ||
251 | 251 | let bf = { | |
252 | 252 | let bc = ba | |
253 | 253 | if ((base58'2W' == bc)) | |
254 | 254 | then 600000 | |
255 | 255 | else if ((base58'2T' == bc)) | |
256 | 256 | then 60000 | |
257 | 257 | else throw("Unknown chain") | |
258 | 258 | } | |
259 | 259 | ||
260 | 260 | let bg = "__" | |
261 | 261 | ||
262 | 262 | let bh = 1000000 | |
263 | 263 | ||
264 | 264 | let bi = 100000000 | |
265 | 265 | ||
266 | 266 | let bj = 25 | |
267 | 267 | ||
268 | 268 | let bk = 100 | |
269 | 269 | ||
270 | 270 | let bl = 225 | |
271 | 271 | ||
272 | 272 | let bm = 400 | |
273 | 273 | ||
274 | 274 | let bn = 625 | |
275 | 275 | ||
276 | 276 | func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], "")) | |
277 | 277 | ||
278 | 278 | ||
279 | 279 | let br = 1 | |
280 | 280 | ||
281 | 281 | let bs = 2 | |
282 | 282 | ||
283 | 283 | let bt = 3 | |
284 | 284 | ||
285 | 285 | let bu = 4 | |
286 | 286 | ||
287 | 287 | func bv () = "%s__restConfig" | |
288 | 288 | ||
289 | 289 | ||
290 | 290 | func bw () = "%s__restAddr" | |
291 | 291 | ||
292 | 292 | ||
293 | 293 | func bx (by) = split_4C(bo(by, bv()), bg) | |
294 | 294 | ||
295 | 295 | ||
296 | 296 | func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB))) | |
297 | 297 | ||
298 | 298 | ||
299 | 299 | let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd)) | |
300 | 300 | ||
301 | 301 | let bA = bx(bC) | |
302 | 302 | ||
303 | 303 | let bD = bz(bA, br) | |
304 | 304 | ||
305 | 305 | let bE = bz(bA, bs) | |
306 | 306 | ||
307 | 307 | let bF = bz(bA, bt) | |
308 | 308 | ||
309 | 309 | let bG = bz(bA, bu) | |
310 | 310 | ||
311 | 311 | let bH = 0 | |
312 | 312 | ||
313 | 313 | let bI = 1 | |
314 | 314 | ||
315 | 315 | let bJ = 2 | |
316 | 316 | ||
317 | 317 | let bK = 3 | |
318 | 318 | ||
319 | 319 | func bL () = "resTypesProportions" | |
320 | 320 | ||
321 | 321 | ||
322 | 322 | func bM (aD) = ("stakedLandsByOwner_" + aD) | |
323 | 323 | ||
324 | 324 | ||
325 | 325 | func bN (aD) = ("stakedPiecesByOwner_" + aD) | |
326 | 326 | ||
327 | 327 | ||
328 | 328 | func bO (bP) = { | |
329 | 329 | let bc = bP | |
330 | 330 | if ($isInstanceOf(bc, "String")) | |
331 | 331 | then { | |
332 | 332 | let bQ = bc | |
333 | 333 | bQ | |
334 | 334 | } | |
335 | 335 | else throw("fail to cast into String") | |
336 | 336 | } | |
337 | 337 | ||
338 | 338 | ||
339 | 339 | func bR (bP) = { | |
340 | 340 | let bc = bP | |
341 | 341 | if ($isInstanceOf(bc, "Int")) | |
342 | 342 | then { | |
343 | 343 | let bS = bc | |
344 | 344 | bS | |
345 | 345 | } | |
346 | 346 | else throw("fail to cast into Int") | |
347 | 347 | } | |
348 | 348 | ||
349 | 349 | ||
350 | 350 | func bT (bU) = { | |
351 | 351 | let bc = bU | |
352 | 352 | if (("S" == bc)) | |
353 | 353 | then bj | |
354 | 354 | else if (("M" == bc)) | |
355 | 355 | then bk | |
356 | 356 | else if (("L" == bc)) | |
357 | 357 | then bl | |
358 | 358 | else if (("XL" == bc)) | |
359 | 359 | then bm | |
360 | 360 | else if (("XXL" == bc)) | |
361 | 361 | then bn | |
362 | 362 | else throw("Unknown land size") | |
363 | 363 | } | |
364 | 364 | ||
365 | 365 | ||
366 | 366 | let bV = { | |
367 | 367 | let bc = ba | |
368 | 368 | if ((base58'2W' == bc)) | |
369 | 369 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
370 | 370 | else if ((base58'2T' == bc)) | |
371 | 371 | then this | |
372 | 372 | else throw("Unknown chain") | |
373 | 373 | } | |
374 | 374 | ||
375 | 375 | let bW = { | |
376 | 376 | let bc = ba | |
377 | 377 | if ((base58'2W' == bc)) | |
378 | 378 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
379 | 379 | else if ((base58'2T' == bc)) | |
380 | 380 | then this | |
381 | 381 | else throw("Unknown chain") | |
382 | 382 | } | |
383 | 383 | ||
384 | 384 | let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
385 | 385 | ||
386 | 386 | let bY = [30, 60, 120] | |
387 | 387 | ||
388 | 388 | let bZ = 300000 | |
389 | 389 | ||
390 | 390 | let ca = 5000000 | |
391 | 391 | ||
392 | 392 | let cb = 50 | |
393 | 393 | ||
394 | 394 | let cc = 10000000 | |
395 | 395 | ||
396 | 396 | let cd = { | |
397 | 397 | let bc = ba | |
398 | 398 | if ((base58'2W' == bc)) | |
399 | 399 | then 252289527462 | |
400 | 400 | else if ((base58'2T' == bc)) | |
401 | 401 | then 2522895274 | |
402 | 402 | else throw("Unknown chain") | |
403 | 403 | } | |
404 | 404 | ||
405 | 405 | let ce = { | |
406 | 406 | let bc = ba | |
407 | 407 | if ((base58'2W' == bc)) | |
408 | 408 | then 250000000 | |
409 | 409 | else if ((base58'2T' == bc)) | |
410 | 410 | then 250000000 | |
411 | 411 | else throw("Unknown chain") | |
412 | 412 | } | |
413 | 413 | ||
414 | 414 | let cf = toBigInt(5) | |
415 | 415 | ||
416 | 416 | let cg = toBigInt(20) | |
417 | 417 | ||
418 | 418 | let ch = toBigInt((20 * 20)) | |
419 | 419 | ||
420 | 420 | let ci = toBigInt(((20 * 20) * 20)) | |
421 | 421 | ||
422 | 422 | let cj = toBigInt((((20 * 20) * 20) * 20)) | |
423 | 423 | ||
424 | 424 | let ck = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
425 | 425 | ||
426 | 426 | let cl = 500 | |
427 | 427 | ||
428 | 428 | func cm () = "nextLandNum" | |
429 | 429 | ||
430 | 430 | ||
431 | 431 | func cn (co) = ("landToAsset_" + co) | |
432 | 432 | ||
433 | 433 | ||
434 | 434 | func cp (cq) = ("landByCustomName_" + cq) | |
435 | 435 | ||
436 | 436 | ||
437 | 437 | func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD) | |
438 | 438 | ||
439 | 439 | ||
440 | 440 | func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_") | |
441 | 441 | ||
442 | 442 | ||
443 | 443 | func ct (co) = ("landOwner_" + co) | |
444 | 444 | ||
445 | 445 | ||
446 | 446 | func cu (cq) = ("duckByCustomName_" + cq) | |
447 | 447 | ||
448 | 448 | ||
449 | 449 | func cv (cq) = ("accountByCustomName_" + cq) | |
450 | 450 | ||
451 | 451 | ||
452 | 452 | func cw () = "oldiesList" | |
453 | 453 | ||
454 | 454 | ||
455 | 455 | let cx = 0 | |
456 | 456 | ||
457 | 457 | let cy = 1 | |
458 | 458 | ||
459 | 459 | let cz = 2 | |
460 | 460 | ||
461 | 461 | let cA = 0 | |
462 | 462 | ||
463 | 463 | let cB = 5 | |
464 | 464 | ||
465 | 465 | let cC = 6 | |
466 | 466 | ||
467 | 467 | let cD = 7 | |
468 | 468 | ||
469 | 469 | func cE (co,bU) = ((P + co) + bU) | |
470 | 470 | ||
471 | 471 | ||
472 | 472 | func cF (cG,cH) = { | |
473 | 473 | let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5]) | |
474 | 474 | if ((0 >= cI)) | |
475 | 475 | then throw("Zero weights sum") | |
476 | 476 | else { | |
477 | 477 | let cJ = fraction(cG, bh, cI) | |
478 | 478 | func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh)) | |
479 | 479 | ||
480 | 480 | let cN = cH | |
481 | 481 | let cO = size(cN) | |
482 | 482 | let cP = nil | |
483 | 483 | func cQ (cR,cS) = if ((cS >= cO)) | |
484 | 484 | then cR | |
485 | 485 | else cK(cR, cN[cS]) | |
486 | 486 | ||
487 | 487 | func cT (cR,cS) = if ((cS >= cO)) | |
488 | 488 | then cR | |
489 | 489 | else throw("List size exceeds 6") | |
490 | 490 | ||
491 | 491 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
492 | 492 | } | |
493 | 493 | } | |
494 | 494 | ||
495 | 495 | ||
496 | 496 | func cU (cG) = { | |
497 | 497 | let cV = split(value(getString(bL())), "_") | |
498 | 498 | if ((size(cV) != S)) | |
499 | 499 | then throw("Wrong proportions data") | |
500 | 500 | else { | |
501 | 501 | let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])] | |
502 | 502 | cF(cG, cW) | |
503 | 503 | } | |
504 | 504 | } | |
505 | 505 | ||
506 | 506 | ||
507 | 507 | func cX (cY,cZ,da) = { | |
508 | 508 | let db = cU(da) | |
509 | 509 | func dc (cL,bB) = { | |
510 | 510 | let dd = (parseIntValue(cZ[bB]) - db[bB]) | |
511 | 511 | if ((0 > dd)) | |
512 | 512 | then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB]))) | |
513 | 513 | else (cL :+ toString(dd)) | |
514 | 514 | } | |
515 | 515 | ||
516 | 516 | if (cY) | |
517 | 517 | then { | |
518 | 518 | let cN = [0, 1, 2, 3, 4, 5] | |
519 | 519 | let cO = size(cN) | |
520 | 520 | let cP = nil | |
521 | 521 | func cQ (cR,cS) = if ((cS >= cO)) | |
522 | 522 | then cR | |
523 | 523 | else dc(cR, cN[cS]) | |
524 | 524 | ||
525 | 525 | func cT (cR,cS) = if ((cS >= cO)) | |
526 | 526 | then cR | |
527 | 527 | else throw("List size exceeds 6") | |
528 | 528 | ||
529 | 529 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
530 | 530 | } | |
531 | 531 | else cZ | |
532 | 532 | } | |
533 | 533 | ||
534 | 534 | ||
535 | 535 | func de (df,dg) = if ((dg == "")) | |
536 | 536 | then df | |
537 | 537 | else { | |
538 | 538 | let dh = if ((df == "")) | |
539 | 539 | then nil | |
540 | 540 | else split(df, "_") | |
541 | 541 | func di (cL,dj) = { | |
542 | 542 | let dk = cL._1 | |
543 | 543 | func dl (dm,dn) = { | |
544 | 544 | let do = split(dn, ",") | |
545 | 545 | if ((size(do) != 2)) | |
546 | 546 | then throw("Incorrect format, should be index,amount") | |
547 | 547 | else { | |
548 | 548 | let bB = parseIntValue(do[0]) | |
549 | 549 | if (if ((0 > bB)) | |
550 | 550 | then true | |
551 | 551 | else (bB >= size(ac))) | |
552 | 552 | then throw("Unknown product idx") | |
553 | 553 | else if ((bB != dk)) | |
554 | 554 | then dm | |
555 | 555 | else { | |
556 | 556 | let dp = parseIntValue(do[1]) | |
557 | 557 | if ((0 >= dp)) | |
558 | 558 | then throw("Pass only positive amounts") | |
559 | 559 | else (dm + dp) | |
560 | 560 | } | |
561 | 561 | } | |
562 | 562 | } | |
563 | 563 | ||
564 | 564 | let dq = { | |
565 | 565 | let cN = split(dg, "_") | |
566 | 566 | let cO = size(cN) | |
567 | 567 | let cP = 0 | |
568 | 568 | func cQ (cR,cS) = if ((cS >= cO)) | |
569 | 569 | then cR | |
570 | 570 | else dl(cR, cN[cS]) | |
571 | 571 | ||
572 | 572 | func cT (cR,cS) = if ((cS >= cO)) | |
573 | 573 | then cR | |
574 | 574 | else throw("List size exceeds 10") | |
575 | 575 | ||
576 | 576 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
577 | 577 | } | |
578 | 578 | let dr = if ((size(dh) > dk)) | |
579 | 579 | then parseIntValue(dh[dk]) | |
580 | 580 | else 0 | |
581 | 581 | let ds = if ((dr >= dq)) | |
582 | 582 | then (dr - dq) | |
583 | 583 | else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq))) | |
584 | 584 | $Tuple2((dk + 1), (cL._2 :+ toString(ds))) | |
585 | 585 | } | |
586 | 586 | ||
587 | 587 | let dt = { | |
588 | 588 | let cN = ac | |
589 | 589 | let cO = size(cN) | |
590 | 590 | let cP = $Tuple2(0, nil) | |
591 | 591 | func cQ (cR,cS) = if ((cS >= cO)) | |
592 | 592 | then cR | |
593 | 593 | else di(cR, cN[cS]) | |
594 | 594 | ||
595 | 595 | func cT (cR,cS) = if ((cS >= cO)) | |
596 | 596 | then cR | |
597 | 597 | else throw("List size exceeds 50") | |
598 | 598 | ||
599 | 599 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
600 | 600 | } | |
601 | 601 | makeString(dt._2, "_") | |
602 | 602 | } | |
603 | 603 | ||
604 | 604 | ||
605 | 605 | func du (dv) = { | |
606 | 606 | let dh = if ((dv == "")) | |
607 | 607 | then nil | |
608 | 608 | else split(dv, "_") | |
609 | 609 | func dw (cL,aY) = { | |
610 | 610 | let dk = (size(cL) / 8) | |
611 | 611 | let dr = if ((size(dh) > dk)) | |
612 | 612 | then parseIntValue(dh[dk]) | |
613 | 613 | else 0 | |
614 | 614 | (cL + toBytes(dr)) | |
615 | 615 | } | |
616 | 616 | ||
617 | 617 | let cN = ac | |
618 | 618 | let cO = size(cN) | |
619 | 619 | let cP = base58'' | |
620 | 620 | func cQ (cR,cS) = if ((cS >= cO)) | |
621 | 621 | then cR | |
622 | 622 | else dw(cR, cN[cS]) | |
623 | 623 | ||
624 | 624 | func cT (cR,cS) = if ((cS >= cO)) | |
625 | 625 | then cR | |
626 | 626 | else throw("List size exceeds 50") | |
627 | 627 | ||
628 | 628 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
629 | 629 | } | |
630 | 630 | ||
631 | 631 | ||
632 | - | func dx (dy,dh,dz,dA,dB,dC) = { | |
633 | - | let do = split(dy, ":") | |
632 | + | func dx (dy) = { | |
633 | + | func dz (cL,aY) = { | |
634 | + | let dk = size(cL) | |
635 | + | let dA = take(drop(dy, (8 * dk)), 8) | |
636 | + | (cL :+ toString(toInt(dA))) | |
637 | + | } | |
638 | + | ||
639 | + | makeString({ | |
640 | + | let cN = ac | |
641 | + | let cO = size(cN) | |
642 | + | let cP = nil | |
643 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
644 | + | then cR | |
645 | + | else dz(cR, cN[cS]) | |
646 | + | ||
647 | + | func cT (cR,cS) = if ((cS >= cO)) | |
648 | + | then cR | |
649 | + | else throw("List size exceeds 50") | |
650 | + | ||
651 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
652 | + | }, "_") | |
653 | + | } | |
654 | + | ||
655 | + | ||
656 | + | func dB (dC,dh,dD,dE,dF,dG) = { | |
657 | + | let do = split(dC, ":") | |
634 | 658 | if ((size(do) != 2)) | |
635 | 659 | then throw("Incorrect format, should be index:amount") | |
636 | 660 | else { | |
637 | - | let | |
638 | - | let | |
639 | - | if (if ((0 > | |
661 | + | let dH = parseIntValue(do[0]) | |
662 | + | let dI = parseIntValue(do[1]) | |
663 | + | if (if ((0 > dH)) | |
640 | 664 | then true | |
641 | - | else ( | |
665 | + | else (dH >= size(ac))) | |
642 | 666 | then throw("Unknown product idx") | |
643 | - | else if ((0 > | |
667 | + | else if ((0 > dI)) | |
644 | 668 | then throw("Count can't be negative") | |
645 | - | else if (( | |
669 | + | else if ((dI == 0)) | |
646 | 670 | then $Tuple2(dh, false) | |
647 | 671 | else { | |
648 | - | func | |
672 | + | func dJ (cL,dj) = { | |
649 | 673 | let dk = cL._1 | |
650 | 674 | let dr = if ((size(dh) > dk)) | |
651 | 675 | then parseIntValue(dh[dk]) | |
652 | 676 | else 0 | |
653 | - | if (( | |
677 | + | if ((dH != dk)) | |
654 | 678 | then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3) | |
655 | - | else if (if (!( | |
656 | - | then ( | |
679 | + | else if (if (!(dD)) | |
680 | + | then (dI > dr) | |
657 | 681 | else false) | |
658 | - | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString( | |
682 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dI))) | |
659 | 683 | else { | |
660 | - | let | |
684 | + | let dK = if (!(dD)) | |
661 | 685 | then { | |
662 | - | let | |
663 | - | if (( | |
686 | + | let dL = split(dj, "_")[ae] | |
687 | + | if ((dL == "")) | |
664 | 688 | then throw("Item cannot be equipped") | |
665 | 689 | else { | |
666 | - | let | |
667 | - | let | |
668 | - | if (( | |
690 | + | let dM = parseIntValue(dL) | |
691 | + | let dN = (dM / 100) | |
692 | + | if ((dE != dN)) | |
669 | 693 | then throw("Segment incompatible") | |
670 | 694 | else { | |
671 | - | let | |
672 | - | if (( | |
695 | + | let dO = ((dM % 100) / 10) | |
696 | + | if ((dF != dO)) | |
673 | 697 | then throw("Slot incompatible") | |
674 | 698 | else { | |
675 | - | let | |
676 | - | if (if (( | |
677 | - | then ( | |
699 | + | let dP = (dM % 10) | |
700 | + | if (if ((dG != 0)) | |
701 | + | then (dP > 1) | |
678 | 702 | else false) | |
679 | 703 | then throw("Big items should occupy slot 0") | |
680 | - | else ( | |
704 | + | else (dP > 1) | |
681 | 705 | } | |
682 | 706 | } | |
683 | 707 | } | |
684 | 708 | } | |
685 | 709 | else false | |
686 | - | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if ( | |
687 | - | then | |
688 | - | else -( | |
710 | + | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dD) | |
711 | + | then dI | |
712 | + | else -(dI))))), if (cL._3) | |
689 | 713 | then true | |
690 | - | else | |
714 | + | else dK) | |
691 | 715 | } | |
692 | 716 | } | |
693 | 717 | ||
694 | 718 | let dd = { | |
695 | 719 | let cN = ac | |
696 | 720 | let cO = size(cN) | |
697 | 721 | let cP = $Tuple3(0, nil, false) | |
698 | 722 | func cQ (cR,cS) = if ((cS >= cO)) | |
699 | 723 | then cR | |
700 | - | else | |
724 | + | else dJ(cR, cN[cS]) | |
701 | 725 | ||
702 | 726 | func cT (cR,cS) = if ((cS >= cO)) | |
703 | 727 | then cR | |
704 | 728 | else throw("List size exceeds 27") | |
705 | 729 | ||
706 | 730 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27) | |
707 | 731 | } | |
708 | 732 | $Tuple2(dd._2, dd._3) | |
709 | 733 | } | |
710 | 734 | } | |
711 | 735 | } | |
712 | 736 | ||
713 | 737 | ||
714 | - | func | |
738 | + | func dQ (dR,dS,dD,dE,dF) = if ((dR != "")) | |
715 | 739 | then { | |
716 | - | let | |
717 | - | if ((size( | |
740 | + | let dT = split(dR, ",") | |
741 | + | if ((size(dT) > n)) | |
718 | 742 | then throw("Wrong slots format") | |
719 | 743 | else { | |
720 | - | let | |
721 | - | let | |
722 | - | then | |
744 | + | let dU = dT[0] | |
745 | + | let dV = if ((size(dT) > 1)) | |
746 | + | then dT[1] | |
723 | 747 | else "" | |
724 | - | if (if (( | |
725 | - | then ( | |
748 | + | if (if ((dU == "")) | |
749 | + | then (dV == "") | |
726 | 750 | else false) | |
727 | - | then | |
751 | + | then dS | |
728 | 752 | else { | |
729 | - | let | |
730 | - | then | |
731 | - | else $Tuple2( | |
732 | - | if (( | |
733 | - | then if ( | |
753 | + | let dW = if ((dU != "")) | |
754 | + | then dB(dU, dS, dD, dE, dF, 0) | |
755 | + | else $Tuple2(dS, false) | |
756 | + | if ((dV != "")) | |
757 | + | then if (dW._2) | |
734 | 758 | then throw("Big item already occupies slot") | |
735 | - | else | |
736 | - | else | |
759 | + | else dB(dV, dW._1, dD, dE, dF, 1)._1 | |
760 | + | else dW._1 | |
737 | 761 | } | |
738 | 762 | } | |
739 | 763 | } | |
740 | - | else | |
741 | - | ||
742 | - | ||
743 | - | func | |
744 | - | func | |
764 | + | else dS | |
765 | + | ||
766 | + | ||
767 | + | func dX (dY,dh,dD) = { | |
768 | + | func dE (cL,dZ) = { | |
745 | 769 | let dk = cL._1 | |
746 | - | let | |
747 | - | if ((size( | |
770 | + | let dF = split(dZ, ";") | |
771 | + | if ((size(dF) != m)) | |
748 | 772 | then throw("Wrong segment format") | |
749 | 773 | else { | |
750 | - | let | |
751 | - | let dq = | |
752 | - | if (if (( | |
774 | + | let ea = dF[0] | |
775 | + | let dq = dF[1] | |
776 | + | if (if ((ea == "")) | |
753 | 777 | then (dq == "") | |
754 | 778 | else false) | |
755 | 779 | then $Tuple2((dk + 1), cL._2) | |
756 | 780 | else { | |
757 | - | let | |
758 | - | $Tuple2((dk + 1), | |
781 | + | let eb = dQ(ea, cL._2, dD, dk, 0) | |
782 | + | $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1)) | |
759 | 783 | } | |
760 | 784 | } | |
761 | 785 | } | |
762 | 786 | ||
763 | - | ( let cN = | |
787 | + | ( let cN = dY | |
764 | 788 | let cO = size(cN) | |
765 | 789 | let cP = $Tuple2(0, dh) | |
766 | 790 | func cQ (cR,cS) = if ((cS >= cO)) | |
767 | 791 | then cR | |
768 | - | else | |
792 | + | else dE(cR, cN[cS]) | |
769 | 793 | ||
770 | 794 | func cT (cR,cS) = if ((cS >= cO)) | |
771 | 795 | then cR | |
772 | 796 | else throw("List size exceeds 6") | |
773 | 797 | ||
774 | 798 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2 | |
775 | 799 | } | |
776 | 800 | ||
777 | 801 | ||
778 | - | func | |
802 | + | func ec (ed,ee,ef,eg) = if ((size(ed) != S)) | |
779 | 803 | then throw("Wrong proportions data") | |
780 | 804 | else { | |
781 | - | func | |
782 | - | let dd = (parseIntValue( | |
805 | + | func eh (cL,ei) = { | |
806 | + | let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef)) | |
783 | 807 | if ((0 > dd)) | |
784 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
808 | + | then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef))) | |
785 | 809 | else (cL :+ toString(dd)) | |
786 | 810 | } | |
787 | 811 | ||
788 | 812 | let cW = { | |
789 | 813 | let cN = [0, 1, 2, 3, 4, 5] | |
790 | 814 | let cO = size(cN) | |
791 | 815 | let cP = nil | |
792 | 816 | func cQ (cR,cS) = if ((cS >= cO)) | |
793 | 817 | then cR | |
794 | - | else | |
818 | + | else eh(cR, cN[cS]) | |
795 | 819 | ||
796 | 820 | func cT (cR,cS) = if ((cS >= cO)) | |
797 | 821 | then cR | |
798 | 822 | else throw("List size exceeds 6") | |
799 | 823 | ||
800 | 824 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
801 | 825 | } | |
802 | 826 | makeString(cW, "_") | |
803 | 827 | } | |
804 | 828 | ||
805 | 829 | ||
806 | - | func | |
807 | - | let | |
808 | - | | |
809 | - | } | |
810 | - | ||
811 | - | ||
812 | - | func | |
813 | - | ||
814 | - | ||
815 | - | func | |
816 | - | func | |
817 | - | let | |
818 | - | (cL :+ toString((parseIntValue( | |
830 | + | func ej (ee,ef,eg) = { | |
831 | + | let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
832 | + | ec(ed, ee, ef, eg) | |
833 | + | } | |
834 | + | ||
835 | + | ||
836 | + | func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)] | |
837 | + | ||
838 | + | ||
839 | + | func em (en,ee,eo,ef,ep) = { | |
840 | + | func eq (cL,ei) = { | |
841 | + | let er = ((fraction(eo, ep, U) * ee[ei]) * ef) | |
842 | + | (cL :+ toString((parseIntValue(en[ei]) + er))) | |
819 | 843 | } | |
820 | 844 | ||
821 | 845 | let cW = { | |
822 | 846 | let cN = [0, 1, 2, 3, 4, 5] | |
823 | 847 | let cO = size(cN) | |
824 | 848 | let cP = nil | |
825 | 849 | func cQ (cR,cS) = if ((cS >= cO)) | |
826 | 850 | then cR | |
827 | - | else | |
851 | + | else eq(cR, cN[cS]) | |
828 | 852 | ||
829 | 853 | func cT (cR,cS) = if ((cS >= cO)) | |
830 | 854 | then cR | |
831 | 855 | else throw("List size exceeds 6") | |
832 | 856 | ||
833 | 857 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
834 | 858 | } | |
835 | 859 | makeString(cW, "_") | |
836 | 860 | } | |
837 | 861 | ||
838 | 862 | ||
839 | - | func | |
840 | - | func | |
841 | - | let | |
842 | - | $Tuple2((cL._1 :+ | |
863 | + | func es (ee,eo,ef,ep) = { | |
864 | + | func eq (cL,ei) = { | |
865 | + | let er = ((fraction(eo, ep, U) * ee[ei]) * ef) | |
866 | + | $Tuple2((cL._1 :+ er), (cL._2 + er)) | |
843 | 867 | } | |
844 | 868 | ||
845 | 869 | let cN = [0, 1, 2, 3, 4, 5] | |
846 | 870 | let cO = size(cN) | |
847 | 871 | let cP = $Tuple2(nil, 0) | |
848 | 872 | func cQ (cR,cS) = if ((cS >= cO)) | |
849 | 873 | then cR | |
850 | - | else | |
874 | + | else eq(cR, cN[cS]) | |
851 | 875 | ||
852 | 876 | func cT (cR,cS) = if ((cS >= cO)) | |
853 | 877 | then cR | |
854 | 878 | else throw("List size exceeds 6") | |
855 | 879 | ||
856 | 880 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
857 | 881 | } | |
858 | 882 | ||
859 | 883 | ||
860 | - | func | |
861 | - | let | |
862 | - | let | |
863 | - | if (( | |
864 | - | then $Tuple2(makeString( | |
865 | - | else if (( | |
884 | + | func et (eu,ev,ew,ex) = { | |
885 | + | let ey = ew._1 | |
886 | + | let ez = ew._2 | |
887 | + | if ((ez == 0)) | |
888 | + | then $Tuple2(makeString(eu, "_"), makeString(ev, "_")) | |
889 | + | else if ((ex >= ez)) | |
866 | 890 | then { | |
867 | - | func | |
891 | + | func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei]))) | |
868 | 892 | ||
869 | 893 | let cW = { | |
870 | 894 | let cN = [0, 1, 2, 3, 4, 5] | |
871 | 895 | let cO = size(cN) | |
872 | 896 | let cP = nil | |
873 | 897 | func cQ (cR,cS) = if ((cS >= cO)) | |
874 | 898 | then cR | |
875 | - | else | |
899 | + | else eA(cR, cN[cS]) | |
876 | 900 | ||
877 | 901 | func cT (cR,cS) = if ((cS >= cO)) | |
878 | 902 | then cR | |
879 | 903 | else throw("List size exceeds 6") | |
880 | 904 | ||
881 | 905 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
882 | 906 | } | |
883 | - | $Tuple2(makeString(cW, "_"), makeString( | |
907 | + | $Tuple2(makeString(cW, "_"), makeString(ev, "_")) | |
884 | 908 | } | |
885 | 909 | else { | |
886 | - | func | |
887 | - | let | |
888 | - | $Tuple2((cL._1 :+ toString((parseIntValue( | |
910 | + | func eB (cL,ei) = { | |
911 | + | let eC = fraction(ey[ei], ex, ez) | |
912 | + | $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC)))) | |
889 | 913 | } | |
890 | 914 | ||
891 | 915 | let cW = { | |
892 | 916 | let cN = [0, 1, 2, 3, 4, 5] | |
893 | 917 | let cO = size(cN) | |
894 | 918 | let cP = $Tuple2(nil, nil) | |
895 | 919 | func cQ (cR,cS) = if ((cS >= cO)) | |
896 | 920 | then cR | |
897 | - | else | |
921 | + | else eB(cR, cN[cS]) | |
898 | 922 | ||
899 | 923 | func cT (cR,cS) = if ((cS >= cO)) | |
900 | 924 | then cR | |
901 | 925 | else throw("List size exceeds 6") | |
902 | 926 | ||
903 | 927 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
904 | 928 | } | |
905 | 929 | $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_")) | |
906 | 930 | } | |
907 | 931 | } | |
908 | 932 | ||
909 | 933 | ||
910 | - | func | |
911 | - | then | |
912 | - | else -( | |
913 | - | ||
914 | - | ||
915 | - | let | |
916 | - | ||
917 | - | func | |
918 | - | let | |
919 | - | let | |
934 | + | func eD (eE) = if ((eE >= toBigInt(0))) | |
935 | + | then eE | |
936 | + | else -(eE) | |
937 | + | ||
938 | + | ||
939 | + | let eF = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
940 | + | ||
941 | + | func eG (bS,eH) = { | |
942 | + | let eI = toInt((bS % cg)) | |
943 | + | let eJ = if ((eH[0] > eI)) | |
920 | 944 | then "A" | |
921 | - | else if (( | |
945 | + | else if ((eH[1] > eI)) | |
922 | 946 | then "B" | |
923 | - | else if (( | |
947 | + | else if ((eH[2] > eI)) | |
924 | 948 | then "C" | |
925 | - | else if (( | |
949 | + | else if ((eH[3] > eI)) | |
926 | 950 | then "D" | |
927 | - | else if (( | |
951 | + | else if ((eH[4] > eI)) | |
928 | 952 | then "E" | |
929 | 953 | else "F" | |
930 | - | | |
931 | - | } | |
932 | - | ||
933 | - | ||
934 | - | func | |
935 | - | let | |
936 | - | func | |
937 | - | ||
938 | - | let | |
954 | + | eJ | |
955 | + | } | |
956 | + | ||
957 | + | ||
958 | + | func eK (eL,eM) = { | |
959 | + | let eN = eF[eM] | |
960 | + | func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck)) | |
961 | + | ||
962 | + | let eP = { | |
939 | 963 | let cN = [1, 2, 3, 4, 5] | |
940 | 964 | let cO = size(cN) | |
941 | - | let cP = $Tuple2("", ( | |
965 | + | let cP = $Tuple2("", (eL / cf)) | |
942 | 966 | func cQ (cR,cS) = if ((cS >= cO)) | |
943 | 967 | then cR | |
944 | - | else | |
968 | + | else eO(cR, cN[cS]) | |
945 | 969 | ||
946 | 970 | func cT (cR,cS) = if ((cS >= cO)) | |
947 | 971 | then cR | |
948 | 972 | else throw("List size exceeds 5") | |
949 | 973 | ||
950 | 974 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
951 | 975 | } | |
952 | - | | |
953 | - | } | |
954 | - | ||
955 | - | ||
956 | - | func | |
957 | - | let | |
958 | - | [toString(valueOrElse(parseInt( | |
959 | - | then | |
960 | - | else "0_0_0_0_0_0", if ((size(split( | |
961 | - | then | |
962 | - | else "0_0_0_0_0_0", | |
963 | - | } | |
964 | - | ||
965 | - | ||
966 | - | func | |
967 | - | let do = split( | |
976 | + | eP._1 | |
977 | + | } | |
978 | + | ||
979 | + | ||
980 | + | func eQ (eR) = { | |
981 | + | let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
982 | + | [toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S)) | |
983 | + | then eS[aq] | |
984 | + | else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S)) | |
985 | + | then eS[ar] | |
986 | + | else "0_0_0_0_0_0", eS[as]] | |
987 | + | } | |
988 | + | ||
989 | + | ||
990 | + | func eT (eU) = { | |
991 | + | let do = split(eU, "_") | |
968 | 992 | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
969 | 993 | } | |
970 | 994 | ||
971 | 995 | ||
972 | - | func | |
973 | - | let | |
974 | - | func | |
975 | - | ||
976 | - | func | |
996 | + | func eV (eW) = { | |
997 | + | let eX = eW[aj] | |
998 | + | func eY (cL,dj) = (cL + parseIntValue(dj)) | |
999 | + | ||
1000 | + | func eZ (cL,dj) = { | |
977 | 1001 | let bB = cL._1 | |
978 | - | let | |
979 | - | $Tuple2((bB + 1), (cL._2 + ( | |
980 | - | } | |
981 | - | ||
982 | - | let | |
983 | - | let cN = split( | |
1002 | + | let fa = (((parseIntValue(dj) + af) - 1) / af) | |
1003 | + | $Tuple2((bB + 1), (cL._2 + (fa * bi))) | |
1004 | + | } | |
1005 | + | ||
1006 | + | let fb = { | |
1007 | + | let cN = split(eW[ah], "_") | |
984 | 1008 | let cO = size(cN) | |
985 | 1009 | let cP = 0 | |
986 | 1010 | func cQ (cR,cS) = if ((cS >= cO)) | |
987 | 1011 | then cR | |
988 | - | else | |
1012 | + | else eY(cR, cN[cS]) | |
989 | 1013 | ||
990 | 1014 | func cT (cR,cS) = if ((cS >= cO)) | |
991 | 1015 | then cR | |
992 | 1016 | else throw("List size exceeds 6") | |
993 | 1017 | ||
994 | 1018 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
995 | 1019 | } | |
996 | - | let | |
997 | - | let cN = split( | |
1020 | + | let fc = { | |
1021 | + | let cN = split(eW[ai], "_") | |
998 | 1022 | let cO = size(cN) | |
999 | 1023 | let cP = 0 | |
1000 | - | func | |
1024 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1001 | 1025 | then cR | |
1002 | - | else | |
1003 | - | ||
1004 | - | func | |
1026 | + | else eY(cR, cN[cS]) | |
1027 | + | ||
1028 | + | func fe (cR,cS) = if ((cS >= cO)) | |
1005 | 1029 | then cR | |
1006 | 1030 | else throw("List size exceeds 6") | |
1007 | 1031 | ||
1008 | - | | |
1009 | - | } | |
1010 | - | let | |
1032 | + | fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6) | |
1033 | + | } | |
1034 | + | let ff = if ((eX == "")) | |
1011 | 1035 | then 0 | |
1012 | - | else ( let cN = split_4C( | |
1036 | + | else ( let cN = split_4C(eX, "_") | |
1013 | 1037 | let cO = size(cN) | |
1014 | 1038 | let cP = $Tuple2(0, 0) | |
1015 | - | func | |
1039 | + | func fg (cR,cS) = if ((cS >= cO)) | |
1016 | 1040 | then cR | |
1017 | - | else | |
1018 | - | ||
1019 | - | func | |
1041 | + | else eZ(cR, cN[cS]) | |
1042 | + | ||
1043 | + | func fh (cR,cS) = if ((cS >= cO)) | |
1020 | 1044 | then cR | |
1021 | 1045 | else throw("List size exceeds 50") | |
1022 | 1046 | ||
1023 | - | | |
1024 | - | (( | |
1025 | - | } | |
1026 | - | ||
1027 | - | ||
1028 | - | func | |
1029 | - | let | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | then makeString(["0", toString( | |
1036 | - | else { | |
1037 | - | let | |
1038 | - | let | |
1039 | - | let | |
1040 | - | then parseIntValue( | |
1041 | - | else | |
1042 | - | makeString([toString( | |
1043 | - | } | |
1044 | - | [ | |
1045 | - | then | |
1046 | - | else "0_0_0_0_0_0", if ((size(split( | |
1047 | - | then | |
1048 | - | else "0_0_0_0_0_0", | |
1049 | - | } | |
1050 | - | ||
1051 | - | ||
1052 | - | func | |
1053 | - | let | |
1054 | - | let | |
1055 | - | (( | |
1056 | - | } | |
1057 | - | ||
1058 | - | ||
1059 | - | func | |
1060 | - | let | |
1061 | - | then ((( | |
1062 | - | else -((((-( | |
1063 | - | ( | |
1064 | - | } | |
1065 | - | ||
1066 | - | ||
1067 | - | func | |
1047 | + | fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1048 | + | ((fb + fc) + ff) | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func fi (fj,fk,fl) = { | |
1053 | + | let eU = ((toString(fk) + "_") + toString(fl)) | |
1054 | + | let fm = eT(eU) | |
1055 | + | let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1056 | + | let fo = split_4C(fn, ":") | |
1057 | + | let fp = eV(fo) | |
1058 | + | let fq = if ((5 > size(fo))) | |
1059 | + | then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_") | |
1060 | + | else { | |
1061 | + | let fr = split(fo[ak], "_") | |
1062 | + | let fs = parseIntValue(fr[al]) | |
1063 | + | let ft = if ((size(fr) > 1)) | |
1064 | + | then parseIntValue(fr[am]) | |
1065 | + | else fp | |
1066 | + | makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_") | |
1067 | + | } | |
1068 | + | [fo[ag], if ((size(split(fo[ah], "_")) == S)) | |
1069 | + | then fo[ah] | |
1070 | + | else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S)) | |
1071 | + | then fo[ai] | |
1072 | + | else "0_0_0_0_0_0", fo[aj], fq] | |
1073 | + | } | |
1074 | + | ||
1075 | + | ||
1076 | + | func fu (eW) = { | |
1077 | + | let fv = eV(eW) | |
1078 | + | let fw = parseIntValue(split(eW[ak], "_")[al]) | |
1079 | + | ((eT(eW[ag]) - fv) - fw) | |
1080 | + | } | |
1081 | + | ||
1082 | + | ||
1083 | + | func fx (fy,fz) = { | |
1084 | + | let fa = if ((fy >= 0)) | |
1085 | + | then (((fy + fz) - 1) / fz) | |
1086 | + | else -((((-(fy) + fz) - 1) / fz)) | |
1087 | + | (fa * bi) | |
1088 | + | } | |
1089 | + | ||
1090 | + | ||
1091 | + | func fA (fB,eW,fC) = if ((size(fB) != 3)) | |
1068 | 1092 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1069 | 1093 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1094 | + | let fD = split(fB[0], "_") | |
1095 | + | let fE = split(fB[1], "_") | |
1096 | + | let fF = if ((fB[2] == "")) | |
1073 | 1097 | then nil | |
1074 | - | else split( | |
1075 | - | if ((size( | |
1098 | + | else split(fB[2], "_") | |
1099 | + | if ((size(fD) != S)) | |
1076 | 1100 | then throw("All 6 resources should be passed") | |
1077 | - | else if ((size( | |
1101 | + | else if ((size(fE) != S)) | |
1078 | 1102 | then throw("All 6 materials should be passed") | |
1079 | 1103 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1104 | + | let ex = fu(eW) | |
1105 | + | let fG = split(eW[ah], "_") | |
1106 | + | let fH = split(eW[ai], "_") | |
1107 | + | let fI = if ((eW[aj] == "")) | |
1084 | 1108 | then nil | |
1085 | - | else split( | |
1086 | - | let | |
1087 | - | let | |
1088 | - | let | |
1109 | + | else split(eW[aj], "_") | |
1110 | + | let ev = split(fC[aq], "_") | |
1111 | + | let fJ = split(fC[ar], "_") | |
1112 | + | let fK = if ((fC[as] == "")) | |
1089 | 1113 | then nil | |
1090 | - | else split( | |
1091 | - | func | |
1092 | - | let | |
1093 | - | let | |
1094 | - | let | |
1095 | - | let | |
1096 | - | if (( | |
1097 | - | then $Tuple4(( | |
1098 | - | else if (( | |
1099 | - | then if (( | |
1100 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1101 | - | else $Tuple4(( | |
1102 | - | else if ((-( | |
1103 | - | then throw((((("Attempt to take " + toString(-( | |
1104 | - | else $Tuple4(( | |
1114 | + | else split(fC[as], "_") | |
1115 | + | func fL (cL,dj) = { | |
1116 | + | let ei = cL._1 | |
1117 | + | let fM = parseIntValue(dj) | |
1118 | + | let fN = parseIntValue(fG[ei]) | |
1119 | + | let fO = parseIntValue(ev[ei]) | |
1120 | + | if ((fM == 0)) | |
1121 | + | then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4) | |
1122 | + | else if ((fM > 0)) | |
1123 | + | then if ((fM > fO)) | |
1124 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available")) | |
1125 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM)) | |
1126 | + | else if ((-(fM) > fN)) | |
1127 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available")) | |
1128 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM)) | |
1105 | 1129 | } | |
1106 | 1130 | ||
1107 | 1131 | let cW = { | |
1108 | - | let cN = | |
1132 | + | let cN = fD | |
1109 | 1133 | let cO = size(cN) | |
1110 | 1134 | let cP = $Tuple4(0, nil, nil, 0) | |
1111 | 1135 | func cQ (cR,cS) = if ((cS >= cO)) | |
1112 | 1136 | then cR | |
1113 | - | else | |
1137 | + | else fL(cR, cN[cS]) | |
1114 | 1138 | ||
1115 | 1139 | func cT (cR,cS) = if ((cS >= cO)) | |
1116 | 1140 | then cR | |
1117 | 1141 | else throw("List size exceeds 6") | |
1118 | 1142 | ||
1119 | 1143 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1120 | 1144 | } | |
1121 | - | func | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then $Tuple4(( | |
1128 | - | else if (( | |
1129 | - | then if (( | |
1130 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1131 | - | else $Tuple4(( | |
1132 | - | else if ((-( | |
1133 | - | then throw((((("Attempt to take " + toString(-( | |
1134 | - | else $Tuple4(( | |
1145 | + | func fP (cL,dj) = { | |
1146 | + | let ei = cL._1 | |
1147 | + | let fM = parseIntValue(dj) | |
1148 | + | let fQ = parseIntValue(fH[ei]) | |
1149 | + | let fR = parseIntValue(fJ[ei]) | |
1150 | + | if ((fM == 0)) | |
1151 | + | then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4) | |
1152 | + | else if ((fM > 0)) | |
1153 | + | then if ((fM > fR)) | |
1154 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available")) | |
1155 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM)) | |
1156 | + | else if ((-(fM) > fQ)) | |
1157 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available")) | |
1158 | + | else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM)) | |
1135 | 1159 | } | |
1136 | 1160 | ||
1137 | - | let | |
1138 | - | let cN = | |
1161 | + | let ea = { | |
1162 | + | let cN = fE | |
1139 | 1163 | let cO = size(cN) | |
1140 | 1164 | let cP = $Tuple4(0, nil, nil, cW._4) | |
1141 | - | func | |
1165 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1142 | 1166 | then cR | |
1143 | - | else | |
1144 | - | ||
1145 | - | func | |
1167 | + | else fP(cR, cN[cS]) | |
1168 | + | ||
1169 | + | func fe (cR,cS) = if ((cS >= cO)) | |
1146 | 1170 | then cR | |
1147 | 1171 | else throw("List size exceeds 6") | |
1148 | 1172 | ||
1149 | - | | |
1173 | + | fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6) | |
1150 | 1174 | } | |
1151 | - | func | |
1152 | - | let | |
1153 | - | let | |
1154 | - | let | |
1155 | - | then parseIntValue( | |
1175 | + | func fS (cL,dj) = { | |
1176 | + | let ei = cL._1 | |
1177 | + | let fM = parseIntValue(dj) | |
1178 | + | let fT = if ((size(fI) > ei)) | |
1179 | + | then parseIntValue(fI[ei]) | |
1156 | 1180 | else 0 | |
1157 | - | let | |
1158 | - | then parseIntValue( | |
1181 | + | let fU = if ((size(fK) > ei)) | |
1182 | + | then parseIntValue(fK[ei]) | |
1159 | 1183 | else 0 | |
1160 | - | if (( | |
1161 | - | then $Tuple4(( | |
1162 | - | else if (( | |
1163 | - | then if (( | |
1164 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1184 | + | if ((fM == 0)) | |
1185 | + | then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4) | |
1186 | + | else if ((fM > 0)) | |
1187 | + | then if ((fM > fU)) | |
1188 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available")) | |
1165 | 1189 | else { | |
1166 | - | let | |
1167 | - | $Tuple4(( | |
1190 | + | let fV = (fx((fT + fM), af) - fx(fT, af)) | |
1191 | + | $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV)) | |
1168 | 1192 | } | |
1169 | - | else if ((-( | |
1170 | - | then throw((((("Attempt to take " + toString(-( | |
1193 | + | else if ((-(fM) > fT)) | |
1194 | + | then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available")) | |
1171 | 1195 | else { | |
1172 | - | let | |
1173 | - | $Tuple4(( | |
1196 | + | let fV = (fx((fT + fM), af) - fx(fT, af)) | |
1197 | + | $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV)) | |
1174 | 1198 | } | |
1175 | 1199 | } | |
1176 | 1200 | ||
1177 | - | let | |
1201 | + | let eS = if ((size(fF) != 0)) | |
1178 | 1202 | then { | |
1179 | - | let cN = | |
1203 | + | let cN = fF | |
1180 | 1204 | let cO = size(cN) | |
1181 | - | let cP = $Tuple4(0, nil, nil, | |
1182 | - | func | |
1205 | + | let cP = $Tuple4(0, nil, nil, ea._4) | |
1206 | + | func fg (cR,cS) = if ((cS >= cO)) | |
1183 | 1207 | then cR | |
1184 | - | else | |
1185 | - | ||
1186 | - | func | |
1208 | + | else fS(cR, cN[cS]) | |
1209 | + | ||
1210 | + | func fh (cR,cS) = if ((cS >= cO)) | |
1187 | 1211 | then cR | |
1188 | 1212 | else throw("List size exceeds 50") | |
1189 | 1213 | ||
1190 | - | | |
1214 | + | fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1191 | 1215 | } | |
1192 | - | else $Tuple4(0, | |
1193 | - | let | |
1194 | - | if (( | |
1195 | - | then throw((((("Attempt to put total " + toString( | |
1196 | - | else $Tuple7(makeString(cW._2, "_"), makeString( | |
1216 | + | else $Tuple4(0, fI, fK, ea._4) | |
1217 | + | let fW = eS._4 | |
1218 | + | if ((fW > ex)) | |
1219 | + | then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left")) | |
1220 | + | else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW) | |
1197 | 1221 | } | |
1198 | 1222 | } | |
1199 | 1223 | ||
1200 | 1224 | ||
1201 | - | func | |
1202 | - | let aT = toString( | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let co = toString( | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let av = calculateAssetId( | |
1211 | - | let | |
1212 | - | $Tuple2([IntegerEntry(cm(), ( | |
1213 | - | } | |
1214 | - | ||
1215 | - | ||
1216 | - | func | |
1225 | + | func fX (fY,fZ) = { | |
1226 | + | let aT = toString(fY) | |
1227 | + | let ga = eD(toBigInt(fZ)) | |
1228 | + | let gb = valueOrElse(getInteger(cm()), (cl + 1)) | |
1229 | + | let co = toString(gb) | |
1230 | + | let eM = toInt((ga % cf)) | |
1231 | + | let el = eK(ga, eM) | |
1232 | + | let gc = aa[eM] | |
1233 | + | let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false) | |
1234 | + | let av = calculateAssetId(gd) | |
1235 | + | let ge = toBase58String(av) | |
1236 | + | $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc)) | |
1237 | + | } | |
1238 | + | ||
1239 | + | ||
1240 | + | func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX))) | |
1217 | 1241 | then throw("signature does not match") | |
1218 | 1242 | else { | |
1219 | - | let do = split(toUtf8String( | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | let | |
1224 | - | let | |
1225 | - | let | |
1226 | - | let | |
1227 | - | if (if (( | |
1243 | + | let do = split(toUtf8String(gg), ";") | |
1244 | + | let gi = split(do[0], "|") | |
1245 | + | let gj = split(gi[cA], "_") | |
1246 | + | let gk = parseIntValue(gj[0]) | |
1247 | + | let gl = parseIntValue(gj[1]) | |
1248 | + | let gm = split(do[1], ":") | |
1249 | + | let gn = gm[0] | |
1250 | + | let go = parseIntValue(gi[cB]) | |
1251 | + | if (if ((go > (lastBlock.timestamp + bZ))) | |
1228 | 1252 | then true | |
1229 | - | else ((lastBlock.timestamp - bZ) > | |
1230 | - | then throw(((("signature outdated: logTime=" + toString( | |
1253 | + | else ((lastBlock.timestamp - bZ) > go)) | |
1254 | + | then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1231 | 1255 | else { | |
1232 | - | let | |
1233 | - | let | |
1234 | - | if (( | |
1235 | - | then throw(((("Tx ids don't match! In state: " + | |
1256 | + | let gp = gm[1] | |
1257 | + | let gq = valueOrElse(getString(at(aT)), "") | |
1258 | + | if ((gq != gp)) | |
1259 | + | then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp)) | |
1236 | 1260 | else { | |
1237 | 1261 | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | if (( | |
1242 | - | then throw(((("oldHealth=" + toString( | |
1243 | - | else if ((0 >= | |
1262 | + | let gr = aQ(p) | |
1263 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1264 | + | let gt = valueOrElse(getInteger(gr), gs) | |
1265 | + | if ((gt != gk)) | |
1266 | + | then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk))) | |
1267 | + | else if ((0 >= gk)) | |
1244 | 1268 | then throw("You can't fly with zero health") | |
1245 | 1269 | else { | |
1246 | - | let | |
1247 | - | then | |
1270 | + | let gu = if ((size(gi) > cC)) | |
1271 | + | then gi[cC] | |
1248 | 1272 | else "" | |
1249 | - | let | |
1250 | - | then | |
1273 | + | let gv = if ((size(gi) > cD)) | |
1274 | + | then gi[cD] | |
1251 | 1275 | else "" | |
1252 | - | let | |
1253 | - | then ( | |
1276 | + | let gw = if (if ((gl > 0)) | |
1277 | + | then (gu == "$") | |
1254 | 1278 | else false) | |
1255 | 1279 | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1256 | 1280 | else 0 | |
1257 | - | $Tuple5( | |
1281 | + | $Tuple5(gl, p, gw, gn, gv) | |
1258 | 1282 | } | |
1259 | 1283 | } | |
1260 | 1284 | } | |
1261 | 1285 | } | |
1262 | 1286 | ||
1263 | 1287 | ||
1264 | - | func | |
1265 | - | let aT = toString( | |
1266 | - | let | |
1267 | - | let | |
1268 | - | let | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let dt = de( | |
1273 | - | if ((0 >= | |
1274 | - | then $Tuple3([IntegerEntry( | |
1275 | - | else { | |
1276 | - | let | |
1277 | - | let | |
1278 | - | $Tuple3(((( | |
1279 | - | } | |
1280 | - | } | |
1281 | - | ||
1282 | - | ||
1283 | - | func | |
1284 | - | let | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | ((T + fraction(T, (( | |
1289 | - | } | |
1290 | - | ||
1291 | - | ||
1292 | - | func | |
1293 | - | let | |
1294 | - | then $Tuple2( | |
1288 | + | func gx (fY,fZ,gg,gh) = { | |
1289 | + | let aT = toString(fY) | |
1290 | + | let eN = gf(aT, gg, gh) | |
1291 | + | let gr = aQ(eN._2) | |
1292 | + | let eR = aO(eN._2) | |
1293 | + | let fC = eQ(eR) | |
1294 | + | let gy = split(fC[ar], "_") | |
1295 | + | let gz = makeString(cX(true, gy, cd), "_") | |
1296 | + | let dt = de(fC[as], eN._5) | |
1297 | + | if ((0 >= eN._1)) | |
1298 | + | then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0) | |
1299 | + | else { | |
1300 | + | let gA = fX(fY, fZ) | |
1301 | + | let ge = gA._2._1 | |
1302 | + | $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3) | |
1303 | + | } | |
1304 | + | } | |
1305 | + | ||
1306 | + | ||
1307 | + | func gB (aF,gC) = { | |
1308 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1309 | + | let gD = valueOrElse(getInteger(az(R, aF)), 0) | |
1310 | + | let gE = (fl / 6) | |
1311 | + | let gF = (fl / 7) | |
1312 | + | ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5))) | |
1313 | + | } | |
1314 | + | ||
1315 | + | ||
1316 | + | func gG (b,gH,gI) = { | |
1317 | + | let gJ = if ((gH == cx)) | |
1318 | + | then $Tuple2(gI, valueOrElse(getString(aN(b)), "")) | |
1295 | 1319 | else { | |
1296 | 1320 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1297 | - | let | |
1298 | - | let | |
1299 | - | if (( | |
1300 | - | then throw((("Duck location type is " + | |
1301 | - | else $Tuple2( | |
1302 | - | } | |
1303 | - | let aF = | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | if (( | |
1321 | + | let gK = valueOrElse(getString(aP(p)), W) | |
1322 | + | let gL = split(value(gK), "_") | |
1323 | + | if ((gL[aV] != "L")) | |
1324 | + | then throw((("Duck location type is " + gL[aV]) + ", but should be L")) | |
1325 | + | else $Tuple2(gL[aW], p) | |
1326 | + | } | |
1327 | + | let aF = gJ._1 | |
1328 | + | let gM = gJ._2 | |
1329 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
1330 | + | let gO = ax(aF) | |
1331 | + | let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked")) | |
1332 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
1333 | + | if ((gQ != b)) | |
1310 | 1334 | then throw((P + " is not yours")) | |
1311 | 1335 | else { | |
1312 | - | let | |
1313 | - | $Tuple4( | |
1314 | - | } | |
1315 | - | } | |
1316 | - | ||
1317 | - | ||
1318 | - | func | |
1336 | + | let gR = split(gN.description, "_") | |
1337 | + | $Tuple4(gM, aF, gR, gP) | |
1338 | + | } | |
1339 | + | } | |
1340 | + | ||
1341 | + | ||
1342 | + | func gS (b,fy,gH,gI) = if ((0 > fy)) | |
1319 | 1343 | then throw("Negative amount") | |
1320 | 1344 | else { | |
1321 | - | let | |
1322 | - | let bU = | |
1323 | - | let | |
1324 | - | let | |
1325 | - | if ((0 > | |
1326 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1345 | + | let dM = gG(b, gH, gI) | |
1346 | + | let bU = dM._3[bI] | |
1347 | + | let ee = ek(dM._3[bJ]) | |
1348 | + | let eo = (lastBlock.timestamp - dM._4) | |
1349 | + | if ((0 > eo)) | |
1350 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1327 | 1351 | else { | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | if (( | |
1332 | - | then throw(((("Not enough resources, available = " + toString( | |
1352 | + | let gC = bT(bU) | |
1353 | + | let gT = gB(dM._2, gC) | |
1354 | + | let gU = fraction(eo, (gT * gC), U) | |
1355 | + | if ((fy > gU)) | |
1356 | + | then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy))) | |
1333 | 1357 | else { | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | if (if (( | |
1344 | - | then ( | |
1358 | + | let gV = fraction((gU - fy), U, (gT * gC)) | |
1359 | + | let gW = (lastBlock.timestamp - gV) | |
1360 | + | let fk = (gC / bj) | |
1361 | + | let ew = es(ee, (eo - gV), fk, gT) | |
1362 | + | let fj = aE(dM._2) | |
1363 | + | let fl = valueOrElse(getInteger(ay(dM._2)), 0) | |
1364 | + | let eW = fi(fj, fk, fl) | |
1365 | + | let fr = split(eW[ak], "_") | |
1366 | + | let ex = parseIntValue(fr[an]) | |
1367 | + | if (if ((gH == cx)) | |
1368 | + | then (fy > ex) | |
1345 | 1369 | else false) | |
1346 | - | then throw((("Only " + toString( | |
1370 | + | then throw((("Only " + toString(ex)) + " space left in warehouse")) | |
1347 | 1371 | else { | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | then $Tuple4( | |
1354 | - | else if (( | |
1355 | - | then $Tuple4( | |
1372 | + | let eR = aO(dM._1) | |
1373 | + | let fC = eQ(eR) | |
1374 | + | let ev = split(fC[aq], "_") | |
1375 | + | let eu = split(eW[ah], "_") | |
1376 | + | let gX = if ((gH == cx)) | |
1377 | + | then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2)) | |
1378 | + | else if ((gH == cy)) | |
1379 | + | then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an])) | |
1356 | 1380 | else { | |
1357 | - | let | |
1358 | - | let | |
1359 | - | $Tuple4( | |
1381 | + | let gY = et(eu, ev, ew, ex) | |
1382 | + | let gZ = min([parseIntValue(fr[an]), ew._2]) | |
1383 | + | $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ)) | |
1360 | 1384 | } | |
1361 | - | let | |
1362 | - | let | |
1363 | - | let | |
1364 | - | let | |
1365 | - | $Tuple5([IntegerEntry(ax( | |
1385 | + | let ha = gX._1 | |
1386 | + | let hb = gX._2 | |
1387 | + | let hc = gX._3 | |
1388 | + | let hd = gX._4 | |
1389 | + | $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")]) | |
1366 | 1390 | } | |
1367 | 1391 | } | |
1368 | 1392 | } | |
1369 | 1393 | } | |
1370 | 1394 | ||
1371 | 1395 | ||
1372 | - | func | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | | |
1377 | - | } | |
1378 | - | ||
1379 | - | ||
1380 | - | func | |
1381 | - | let b = toString( | |
1382 | - | let | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | if (( | |
1396 | + | func he (b,aF,gC,gH) = { | |
1397 | + | let gO = ax(aF) | |
1398 | + | let gP = value(getInteger(gO)) | |
1399 | + | let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC) | |
1400 | + | gS(b, gU, gH, aF) | |
1401 | + | } | |
1402 | + | ||
1403 | + | ||
1404 | + | func hf (cY,fY,hg,aF) = { | |
1405 | + | let b = toString(fY) | |
1406 | + | let dM = gG(b, cz, aF) | |
1407 | + | let gC = bT(dM._3[bI]) | |
1408 | + | let hh = ay(dM._2) | |
1409 | + | let hi = valueOrElse(getInteger(hh), 0) | |
1410 | + | if ((hi >= 3)) | |
1387 | 1411 | then throw("Currently max infrastructure level = 3") | |
1388 | 1412 | else { | |
1389 | - | let O = ( | |
1390 | - | let | |
1413 | + | let O = (hi + 1) | |
1414 | + | let hj = fraction(cc, (gC * O), bj) | |
1391 | 1415 | if (if (!(cY)) | |
1392 | - | then ( | |
1416 | + | then (hg != hj) | |
1393 | 1417 | else false) | |
1394 | - | then throw(("Payment attached should be " + toString( | |
1418 | + | then throw(("Payment attached should be " + toString(hj))) | |
1395 | 1419 | else { | |
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | $Tuple3(([IntegerEntry( | |
1420 | + | let eR = aO(dM._1) | |
1421 | + | let fC = eQ(eR) | |
1422 | + | let gy = split(fC[ar], "_") | |
1423 | + | let hk = fraction(be, (gC * O), bj) | |
1424 | + | let gz = makeString(cX(cY, gy, hk), "_") | |
1425 | + | let hl = he(b, dM._2, gC, cz) | |
1426 | + | let hm = hl._5 | |
1427 | + | let hn = eT(hm[ag]) | |
1428 | + | let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_") | |
1429 | + | let hp = eT(ho) | |
1430 | + | let fr = split(hm[ak], "_") | |
1431 | + | let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_") | |
1432 | + | $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk) | |
1409 | 1433 | } | |
1410 | 1434 | } | |
1411 | 1435 | } | |
1412 | 1436 | ||
1413 | 1437 | ||
1414 | - | func | |
1438 | + | func hr (p,hs) = if (!(aZ)) | |
1415 | 1439 | then $Tuple2(nil, 0) | |
1416 | 1440 | else { | |
1417 | - | let | |
1418 | - | let | |
1419 | - | let I = valueOrElse(getInteger(bD, | |
1420 | - | let N = (I + | |
1421 | - | let | |
1422 | - | let | |
1423 | - | $Tuple2([IntegerEntry( | |
1424 | - | } | |
1425 | - | ||
1426 | - | ||
1427 | - | func | |
1441 | + | let ht = r(p) | |
1442 | + | let hu = q(p) | |
1443 | + | let I = valueOrElse(getInteger(bD, hu), 0) | |
1444 | + | let N = (I + hs) | |
1445 | + | let hv = L(valueOrElse(getInteger(bD, ht), 0), N) | |
1446 | + | let hw = s(p) | |
1447 | + | $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N) | |
1448 | + | } | |
1449 | + | ||
1450 | + | ||
1451 | + | func hx (b,hs) = if (!(aZ)) | |
1428 | 1452 | then $Tuple2(nil, 0) | |
1429 | 1453 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let I = valueOrElse(getInteger(bD, | |
1433 | - | let N = (I + | |
1434 | - | let | |
1435 | - | let | |
1436 | - | $Tuple2([IntegerEntry( | |
1437 | - | } | |
1438 | - | ||
1439 | - | ||
1440 | - | func | |
1454 | + | let ht = v(b) | |
1455 | + | let hu = u(b) | |
1456 | + | let I = valueOrElse(getInteger(bD, hu), 0) | |
1457 | + | let N = (I + hs) | |
1458 | + | let hv = L(valueOrElse(getInteger(bD, ht), 0), N) | |
1459 | + | let hw = w(b) | |
1460 | + | $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N) | |
1461 | + | } | |
1462 | + | ||
1463 | + | ||
1464 | + | func hy (b) = { | |
1441 | 1465 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1442 | - | let | |
1443 | - | let | |
1444 | - | if (!(isDefined( | |
1466 | + | let hz = aI(b) | |
1467 | + | let hA = getString(hz) | |
1468 | + | if (!(isDefined(hA))) | |
1445 | 1469 | then throw("You are not eligible for ONBOARD artifact") | |
1446 | 1470 | else { | |
1447 | - | let | |
1448 | - | let | |
1449 | - | if (isDefined( | |
1450 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1471 | + | let hB = aK(b) | |
1472 | + | let hC = getString(hB) | |
1473 | + | if (isDefined(hC)) | |
1474 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hC))) | |
1451 | 1475 | else { | |
1452 | - | let | |
1453 | - | let | |
1454 | - | if (isDefined( | |
1455 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1456 | - | else ([StringEntry( | |
1476 | + | let hD = aJ(p) | |
1477 | + | let hE = getString(hD) | |
1478 | + | if (isDefined(hE)) | |
1479 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE))) | |
1480 | + | else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1) | |
1457 | 1481 | } | |
1458 | 1482 | } | |
1459 | 1483 | } | |
1460 | 1484 | ||
1461 | 1485 | ||
1462 | - | func | |
1463 | - | let | |
1464 | - | let aF = | |
1465 | - | let | |
1466 | - | let | |
1467 | - | if ((valueOrElse(getInteger( | |
1486 | + | func hF (b,gI) = { | |
1487 | + | let dM = gG(b, cz, gI) | |
1488 | + | let aF = dM._2 | |
1489 | + | let gC = bT(dM._3[bI]) | |
1490 | + | let hG = az(R, aF) | |
1491 | + | if ((valueOrElse(getInteger(hG), 0) > 0)) | |
1468 | 1492 | then throw("Presale artifact is already activated") | |
1469 | - | else if ((parseIntValue( | |
1493 | + | else if ((parseIntValue(dM._3[bH]) > cl)) | |
1470 | 1494 | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1471 | 1495 | else { | |
1472 | - | let | |
1473 | - | (((( | |
1496 | + | let hl = he(b, aF, gC, cz) | |
1497 | + | ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":"))) | |
1474 | 1498 | } | |
1475 | 1499 | } | |
1476 | 1500 | ||
1477 | 1501 | ||
1478 | - | func | |
1502 | + | func hH (hI,O,hJ,b,hK,fZ,hL) = { | |
1479 | 1503 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1480 | - | func | |
1481 | - | let | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (( | |
1504 | + | func hM (cL,aF) = { | |
1505 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
1506 | + | let gO = ax(aF) | |
1507 | + | let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked")) | |
1508 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
1509 | + | if ((gQ != b)) | |
1486 | 1510 | then throw((P + " is not yours")) | |
1487 | 1511 | else { | |
1488 | - | let | |
1489 | - | let | |
1512 | + | let gR = split(gN.description, "_") | |
1513 | + | let gc = gR[bK] | |
1490 | 1514 | if (if ((cL._3 != "")) | |
1491 | - | then (cL._3 != | |
1515 | + | then (cL._3 != gc) | |
1492 | 1516 | else false) | |
1493 | 1517 | then throw("Lands should be on the same continent to merge") | |
1494 | 1518 | else { | |
1495 | - | let bU = | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1519 | + | let bU = gR[bI] | |
1520 | + | let hN = cL._1 | |
1521 | + | let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed") | |
1522 | + | let hO = (take(hN, ei) + drop(hN, (ei + 1))) | |
1523 | + | let gC = bT(bU) | |
1524 | + | let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1525 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1526 | + | let hQ = { | |
1503 | 1527 | let bc = bU | |
1504 | 1528 | if (("S" == bc)) | |
1505 | 1529 | then 3 | |
1506 | 1530 | else if (("M" == bc)) | |
1507 | 1531 | then 4 | |
1508 | 1532 | else if (("L" == bc)) | |
1509 | 1533 | then 5 | |
1510 | 1534 | else if (("XL" == bc)) | |
1511 | 1535 | then 6 | |
1512 | 1536 | else throw("Only S, M, L, XL can merge") | |
1513 | 1537 | } | |
1514 | - | if (( | |
1538 | + | if ((fl != hQ)) | |
1515 | 1539 | then throw("All lands should be maxed to merge") | |
1516 | 1540 | else { | |
1517 | - | let co = | |
1518 | - | let | |
1519 | - | let | |
1520 | - | if ((0 > | |
1521 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1541 | + | let co = gR[bH] | |
1542 | + | let ee = ek(gR[bJ]) | |
1543 | + | let eo = (lastBlock.timestamp - gP) | |
1544 | + | if ((0 > eo)) | |
1545 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp))) | |
1522 | 1546 | else { | |
1523 | - | let | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let cV = | |
1527 | - | let | |
1528 | - | let bB = indexOf( | |
1547 | + | let gT = gB(aF, gC) | |
1548 | + | let fk = (gC / bj) | |
1549 | + | let hb = em(split(cL._4, "_"), ee, eo, fk, gT) | |
1550 | + | let cV = ec(split(cL._6, "_"), ee, fk, -1) | |
1551 | + | let hR = cL._7 | |
1552 | + | let bB = indexOf(hR, aF) | |
1529 | 1553 | if (!(isDefined(bB))) | |
1530 | 1554 | then throw(("Your staked lands don't contain " + aF)) | |
1531 | 1555 | else { | |
1532 | - | let | |
1533 | - | let | |
1534 | - | $Tuple8( | |
1556 | + | let hS = aw(aF) | |
1557 | + | let hT = valueOrElse(getString(hS), "") | |
1558 | + | $Tuple8(hO, hP, gc, hb, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC)) | |
1535 | 1559 | } | |
1536 | 1560 | } | |
1537 | 1561 | } | |
1538 | 1562 | } | |
1539 | 1563 | } | |
1540 | 1564 | } | |
1541 | 1565 | ||
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | then split_51C(value( | |
1566 | + | let eR = aO(p) | |
1567 | + | let fC = eQ(eR) | |
1568 | + | let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1569 | + | let hV = bM(b) | |
1570 | + | let hW = getString(hV) | |
1571 | + | let hX = if (isDefined(hW)) | |
1572 | + | then split_51C(value(hW), "_") | |
1549 | 1573 | else nil | |
1550 | 1574 | let cW = { | |
1551 | - | let cN = | |
1575 | + | let cN = hK | |
1552 | 1576 | let cO = size(cN) | |
1553 | - | let cP = $Tuple8( | |
1577 | + | let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0) | |
1554 | 1578 | func cQ (cR,cS) = if ((cS >= cO)) | |
1555 | 1579 | then cR | |
1556 | - | else | |
1580 | + | else hM(cR, cN[cS]) | |
1557 | 1581 | ||
1558 | 1582 | func cT (cR,cS) = if ((cS >= cO)) | |
1559 | 1583 | then cR | |
1560 | 1584 | else throw("List size exceeds 5") | |
1561 | 1585 | ||
1562 | 1586 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1563 | 1587 | } | |
1564 | - | let | |
1565 | - | let | |
1566 | - | let | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let av = calculateAssetId( | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1588 | + | let gc = cW._3 | |
1589 | + | let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc)) | |
1590 | + | let el = eK(eD(toBigInt(fZ)), eM) | |
1591 | + | let gb = valueOrElse(getInteger(cm()), (cl + 1)) | |
1592 | + | let hY = toString(gb) | |
1593 | + | let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false) | |
1594 | + | let av = calculateAssetId(gd) | |
1595 | + | let hZ = toBase58String(av) | |
1596 | + | let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_") | |
1597 | + | let ia = bN(b) | |
1598 | + | let ib = valueOrElse(getInteger(ia), 0) | |
1575 | 1599 | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1576 | - | then StringEntry( | |
1577 | - | else DeleteEntry( | |
1600 | + | then StringEntry(hV, makeString_11C(cW._7, "_")) | |
1601 | + | else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib)) | |
1578 | 1602 | then 0 | |
1579 | - | else ( | |
1580 | - | } | |
1581 | - | ||
1582 | - | ||
1583 | - | func | |
1584 | - | ||
1585 | - | ||
1586 | - | func | |
1587 | - | let | |
1603 | + | else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ) | |
1604 | + | } | |
1605 | + | ||
1606 | + | ||
1607 | + | func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0) | |
1608 | + | ||
1609 | + | ||
1610 | + | func id (b,hK,fZ,cY,hg) = { | |
1611 | + | let hj = (cc * 4) | |
1588 | 1612 | if (if (!(cY)) | |
1589 | - | then ( | |
1613 | + | then (hg != hj) | |
1590 | 1614 | else false) | |
1591 | - | then throw(("Payment attached should be " + toString( | |
1592 | - | else | |
1593 | - | } | |
1594 | - | ||
1595 | - | ||
1596 | - | func | |
1597 | - | let | |
1615 | + | then throw(("Payment attached should be " + toString(hj))) | |
1616 | + | else hH("L", 4, "SMM", b, hK, fZ, (be * 4)) | |
1617 | + | } | |
1618 | + | ||
1619 | + | ||
1620 | + | func ie (b,hK,fZ,cY,hg) = { | |
1621 | + | let hj = (cc * 47) | |
1598 | 1622 | if (if (!(cY)) | |
1599 | - | then ( | |
1623 | + | then (hg != hj) | |
1600 | 1624 | else false) | |
1601 | - | then throw(("Payment attached should be " + toString( | |
1602 | - | else | |
1603 | - | } | |
1604 | - | ||
1605 | - | ||
1606 | - | func | |
1607 | - | let | |
1625 | + | then throw(("Payment attached should be " + toString(hj))) | |
1626 | + | else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47)) | |
1627 | + | } | |
1628 | + | ||
1629 | + | ||
1630 | + | func if (b,hK,fZ,cY,hg) = { | |
1631 | + | let hj = (cc * 54) | |
1608 | 1632 | if (if (!(cY)) | |
1609 | - | then ( | |
1633 | + | then (hg != hj) | |
1610 | 1634 | else false) | |
1611 | - | then throw(("Payment attached should be " + toString( | |
1612 | - | else | |
1613 | - | } | |
1614 | - | ||
1615 | - | ||
1616 | - | func | |
1617 | - | let | |
1618 | - | let bc = size( | |
1635 | + | then throw(("Payment attached should be " + toString(hj))) | |
1636 | + | else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54)) | |
1637 | + | } | |
1638 | + | ||
1639 | + | ||
1640 | + | func ig (cY,b,hg,hK,fZ) = { | |
1641 | + | let ih = { | |
1642 | + | let bc = size(hK) | |
1619 | 1643 | if ((4 == bc)) | |
1620 | - | then | |
1644 | + | then ic(b, hK, fZ) | |
1621 | 1645 | else if ((3 == bc)) | |
1622 | - | then | |
1646 | + | then id(b, hK, fZ, cY, hg) | |
1623 | 1647 | else if ((5 == bc)) | |
1624 | - | then | |
1648 | + | then ie(b, hK, fZ, cY, hg) | |
1625 | 1649 | else if ((2 == bc)) | |
1626 | - | then | |
1650 | + | then if(b, hK, fZ, cY, hg) | |
1627 | 1651 | else throw("Unknown merge") | |
1628 | 1652 | } | |
1629 | - | | |
1630 | - | } | |
1631 | - | ||
1632 | - | ||
1633 | - | func | |
1653 | + | ih | |
1654 | + | } | |
1655 | + | ||
1656 | + | ||
1657 | + | func ii (ei) = if (if ((ei.originCaller != bC)) | |
1634 | 1658 | then valueOrElse(getBoolean(aR()), false) | |
1635 | 1659 | else false) | |
1636 | 1660 | then throw("Contracts are under maintenance") | |
1637 | - | else StringEntry(at(toString( | |
1638 | - | ||
1639 | - | ||
1640 | - | @Callable( | |
1641 | - | func constructorV1 ( | |
1661 | + | else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId)) | |
1662 | + | ||
1663 | + | ||
1664 | + | @Callable(ei) | |
1665 | + | func constructorV1 (ij) = if ((ei.caller != this)) | |
1642 | 1666 | then throw("Permission denied") | |
1643 | - | else [StringEntry(bw(), | |
1644 | - | ||
1645 | - | ||
1646 | - | ||
1647 | - | @Callable( | |
1648 | - | func setBlocked ( | |
1667 | + | else [StringEntry(bw(), ij)] | |
1668 | + | ||
1669 | + | ||
1670 | + | ||
1671 | + | @Callable(ei) | |
1672 | + | func setBlocked (ik) = if ((ei.caller != this)) | |
1649 | 1673 | then throw("permission denied") | |
1650 | - | else [BooleanEntry(aR(), | |
1651 | - | ||
1652 | - | ||
1653 | - | ||
1654 | - | @Callable( | |
1674 | + | else [BooleanEntry(aR(), ik)] | |
1675 | + | ||
1676 | + | ||
1677 | + | ||
1678 | + | @Callable(ei) | |
1655 | 1679 | func stakeLand () = { | |
1656 | - | let | |
1657 | - | if ((size( | |
1680 | + | let il = ii(ei) | |
1681 | + | if ((size(ei.payments) != 1)) | |
1658 | 1682 | then throw("Exactly one payment required") | |
1659 | 1683 | else { | |
1660 | - | let | |
1661 | - | let av = value( | |
1662 | - | let bp = toString( | |
1663 | - | if (( | |
1684 | + | let im = value(ei.payments[0]) | |
1685 | + | let av = value(im.assetId) | |
1686 | + | let bp = toString(ei.caller) | |
1687 | + | if ((im.amount != 1)) | |
1664 | 1688 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1665 | 1689 | else { | |
1666 | - | let | |
1667 | - | if (( | |
1690 | + | let gN = value(assetInfo(av)) | |
1691 | + | if ((gN.issuer != this)) | |
1668 | 1692 | then throw("Unknown issuer of token") | |
1669 | - | else if (!(contains( | |
1693 | + | else if (!(contains(gN.name, P))) | |
1670 | 1694 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1671 | 1695 | else { | |
1672 | - | let | |
1673 | - | let co = if (contains( | |
1674 | - | then dropRight( | |
1675 | - | else if (contains( | |
1676 | - | then dropRight( | |
1677 | - | else dropRight( | |
1696 | + | let in = drop(gN.name, 4) | |
1697 | + | let co = if (contains(in, "XXL")) | |
1698 | + | then dropRight(in, 3) | |
1699 | + | else if (contains(in, "XL")) | |
1700 | + | then dropRight(in, 2) | |
1701 | + | else dropRight(in, 1) | |
1678 | 1702 | if (!(isDefined(parseInt(co)))) | |
1679 | - | then throw(("Cannot parse land number from " + | |
1703 | + | then throw(("Cannot parse land number from " + gN.name)) | |
1680 | 1704 | else { | |
1681 | 1705 | let aF = toBase58String(av) | |
1682 | - | let | |
1683 | - | if (isDefined(getInteger( | |
1684 | - | then throw((("NFT " + | |
1706 | + | let gO = ax(aF) | |
1707 | + | if (isDefined(getInteger(gO))) | |
1708 | + | then throw((("NFT " + gN.name) + " is already staked")) | |
1685 | 1709 | else { | |
1686 | - | let | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let cV = | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | then split_51C(value( | |
1710 | + | let gR = split(gN.description, "_") | |
1711 | + | let ee = ek(gR[bJ]) | |
1712 | + | let gC = bT(gR[bI]) | |
1713 | + | let cV = ej(ee, (gC / bj), 1) | |
1714 | + | let gD = valueOrElse(getInteger(az(R, aF)), 0) | |
1715 | + | let hV = bM(bp) | |
1716 | + | let hW = getString(hV) | |
1717 | + | let hR = if (isDefined(hW)) | |
1718 | + | then split_51C(value(hW), "_") | |
1695 | 1719 | else nil | |
1696 | - | if (containsElement( | |
1720 | + | if (containsElement(hR, aF)) | |
1697 | 1721 | then throw(("Your staked lands already contain " + aF)) | |
1698 | 1722 | else { | |
1699 | - | let | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | $Tuple2([IntegerEntry( | |
1723 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
1724 | + | let ia = bN(bp) | |
1725 | + | let io = valueOrElse(getInteger(ia), 0) | |
1726 | + | let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1727 | + | $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip) | |
1704 | 1728 | } | |
1705 | 1729 | } | |
1706 | 1730 | } | |
1707 | 1731 | } | |
1708 | 1732 | } | |
1709 | 1733 | } | |
1710 | 1734 | } | |
1711 | 1735 | ||
1712 | 1736 | ||
1713 | 1737 | ||
1714 | - | @Callable( | |
1715 | - | func unstakeLand ( | |
1716 | - | let | |
1717 | - | if ((size( | |
1738 | + | @Callable(ei) | |
1739 | + | func unstakeLand (gI) = { | |
1740 | + | let il = ii(ei) | |
1741 | + | if ((size(ei.payments) != 0)) | |
1718 | 1742 | then throw("No payments required") | |
1719 | 1743 | else { | |
1720 | - | let b = toString( | |
1721 | - | let | |
1722 | - | let aF = | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let cV = | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let bB = indexOf( | |
1744 | + | let b = toString(ei.caller) | |
1745 | + | let dM = gG(b, cy, gI) | |
1746 | + | let aF = dM._2 | |
1747 | + | let hV = bM(b) | |
1748 | + | let ee = ek(dM._3[bJ]) | |
1749 | + | let gC = bT(dM._3[bI]) | |
1750 | + | let cV = ej(ee, (gC / bj), -1) | |
1751 | + | let hl = he(b, aF, gC, cy) | |
1752 | + | let hR = split_51C(valueOrElse(getString(hV), ""), "_") | |
1753 | + | let bB = indexOf(hR, aF) | |
1730 | 1754 | if (!(isDefined(bB))) | |
1731 | 1755 | then throw(("Your staked lands don't contain " + aF)) | |
1732 | 1756 | else { | |
1733 | - | let | |
1734 | - | let | |
1735 | - | if (( | |
1736 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1757 | + | let iq = lastBlock.timestamp | |
1758 | + | let ir = valueOrElse(getInteger(bF, aS(b)), 0) | |
1759 | + | if ((ir >= iq)) | |
1760 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir))) | |
1737 | 1761 | else { | |
1738 | - | let | |
1739 | - | if (( | |
1740 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1762 | + | let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1763 | + | if ((is > iq)) | |
1764 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is))) | |
1741 | 1765 | else { | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1766 | + | let ia = bN(b) | |
1767 | + | let ib = valueOrElse(getInteger(ia), 0) | |
1768 | + | let it = if ((gC > ib)) | |
1745 | 1769 | then 0 | |
1746 | - | else ( | |
1747 | - | let | |
1748 | - | $Tuple2([ScriptTransfer( | |
1749 | - | then StringEntry( | |
1750 | - | else DeleteEntry( | |
1770 | + | else (ib - gC) | |
1771 | + | let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1772 | + | $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1)) | |
1773 | + | then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_")) | |
1774 | + | else DeleteEntry(hV), IntegerEntry(ia, it), il], ip) | |
1751 | 1775 | } | |
1752 | 1776 | } | |
1753 | 1777 | } | |
1754 | 1778 | } | |
1755 | 1779 | } | |
1756 | 1780 | ||
1757 | 1781 | ||
1758 | 1782 | ||
1759 | - | @Callable( | |
1783 | + | @Callable(ei) | |
1760 | 1784 | func stakeDuck () = { | |
1761 | - | let | |
1762 | - | if ((size( | |
1785 | + | let il = ii(ei) | |
1786 | + | if ((size(ei.payments) != 1)) | |
1763 | 1787 | then throw("Exactly one payment required") | |
1764 | 1788 | else { | |
1765 | - | let | |
1766 | - | let av = value( | |
1767 | - | let bp = toString( | |
1768 | - | if (( | |
1789 | + | let im = value(ei.payments[0]) | |
1790 | + | let av = value(im.assetId) | |
1791 | + | let bp = toString(ei.caller) | |
1792 | + | if ((im.amount != 1)) | |
1769 | 1793 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1770 | 1794 | else { | |
1771 | - | let | |
1772 | - | if (if (( | |
1773 | - | then ( | |
1795 | + | let gN = value(assetInfo(av)) | |
1796 | + | if (if ((gN.issuer != bV)) | |
1797 | + | then (gN.issuer != bW) | |
1774 | 1798 | else false) | |
1775 | 1799 | then throw((("Unknown issuer of " + Q) + " token")) | |
1776 | - | else if (!(contains( | |
1800 | + | else if (!(contains(gN.name, Q))) | |
1777 | 1801 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1778 | 1802 | else { | |
1779 | - | let | |
1780 | - | let | |
1781 | - | if (isDefined(getInteger( | |
1782 | - | then throw((("NFT " + | |
1803 | + | let iu = toBase58String(av) | |
1804 | + | let gO = ax(iu) | |
1805 | + | if (isDefined(getInteger(gO))) | |
1806 | + | then throw((("NFT " + gN.name) + " is already staked")) | |
1783 | 1807 | else if (isDefined(getString(aN(bp)))) | |
1784 | - | then throw(("You already staked one duck: " + | |
1808 | + | then throw(("You already staked one duck: " + gN.name)) | |
1785 | 1809 | else { | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | ([IntegerEntry( | |
1810 | + | let iv = aP(iu) | |
1811 | + | let iw = getString(iv) | |
1812 | + | let eR = aO(iu) | |
1813 | + | let ix = getString(eR) | |
1814 | + | let gr = aQ(iu) | |
1815 | + | let gs = J(valueOrElse(getInteger(r(iu)), 0)) | |
1816 | + | let iy = valueOrElse(getInteger(gr), gs) | |
1817 | + | ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw)) | |
1794 | 1818 | then nil | |
1795 | - | else ([StringEntry( | |
1819 | + | else ([StringEntry(iv, W)] ++ (if (isDefined(ix)) | |
1796 | 1820 | then nil | |
1797 | - | else (([StringEntry( | |
1821 | + | else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il))))) | |
1798 | 1822 | } | |
1799 | 1823 | } | |
1800 | 1824 | } | |
1801 | 1825 | } | |
1802 | 1826 | } | |
1803 | 1827 | ||
1804 | 1828 | ||
1805 | 1829 | ||
1806 | - | @Callable( | |
1807 | - | func unstakeDuck ( | |
1808 | - | let | |
1809 | - | if ((size( | |
1830 | + | @Callable(ei) | |
1831 | + | func unstakeDuck (iu) = { | |
1832 | + | let il = ii(ei) | |
1833 | + | if ((size(ei.payments) != 0)) | |
1810 | 1834 | then throw("No payments required") | |
1811 | 1835 | else { | |
1812 | - | let av = fromBase58String( | |
1813 | - | let bp = toString( | |
1814 | - | let | |
1815 | - | let | |
1816 | - | if (!(isDefined(getInteger( | |
1817 | - | then throw((("NFT " + | |
1836 | + | let av = fromBase58String(iu) | |
1837 | + | let bp = toString(ei.caller) | |
1838 | + | let gN = value(assetInfo(av)) | |
1839 | + | let gO = ax(toBase58String(av)) | |
1840 | + | if (!(isDefined(getInteger(gO)))) | |
1841 | + | then throw((("NFT " + gN.name) + " is not staked")) | |
1818 | 1842 | else if (!(isDefined(getString(aN(bp))))) | |
1819 | - | then throw((("The duck " + | |
1843 | + | then throw((("The duck " + gN.name) + " is not staked")) | |
1820 | 1844 | else { | |
1821 | - | let | |
1822 | - | if (( | |
1845 | + | let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned")) | |
1846 | + | if ((gQ != bp)) | |
1823 | 1847 | then throw("Staked NFT is not yours") | |
1824 | 1848 | else { | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | if (( | |
1829 | - | then throw((("Please heal your duck to " + toString( | |
1830 | - | else [ScriptTransfer( | |
1849 | + | let gr = aQ(iu) | |
1850 | + | let gs = J(valueOrElse(getInteger(r(iu)), 0)) | |
1851 | + | let iz = valueOrElse(getInteger(gr), gs) | |
1852 | + | if ((gs > iz)) | |
1853 | + | then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking")) | |
1854 | + | else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il] | |
1831 | 1855 | } | |
1832 | 1856 | } | |
1833 | 1857 | } | |
1834 | 1858 | } | |
1835 | 1859 | ||
1836 | 1860 | ||
1837 | 1861 | ||
1838 | - | @Callable( | |
1839 | - | func claimRes ( | |
1840 | - | let | |
1841 | - | if ((size( | |
1862 | + | @Callable(ei) | |
1863 | + | func claimRes (fy,iA) = { | |
1864 | + | let il = ii(ei) | |
1865 | + | if ((size(ei.payments) != 0)) | |
1842 | 1866 | then throw("No payments required") | |
1843 | 1867 | else { | |
1844 | - | let b = toString( | |
1845 | - | let dd = | |
1868 | + | let b = toString(ei.originCaller) | |
1869 | + | let dd = gS(b, fy, cy, iA) | |
1846 | 1870 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1847 | - | $Tuple2(((((dd._1 ++ | |
1848 | - | } | |
1849 | - | } | |
1850 | - | ||
1851 | - | ||
1852 | - | ||
1853 | - | @Callable( | |
1854 | - | func claimResToWH ( | |
1855 | - | let | |
1856 | - | if ((size( | |
1871 | + | $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq]) | |
1872 | + | } | |
1873 | + | } | |
1874 | + | ||
1875 | + | ||
1876 | + | ||
1877 | + | @Callable(ei) | |
1878 | + | func claimResToWH (fy,iA) = { | |
1879 | + | let il = ii(ei) | |
1880 | + | if ((size(ei.payments) != 0)) | |
1857 | 1881 | then throw("No payments required") | |
1858 | 1882 | else { | |
1859 | - | let b = toString( | |
1860 | - | let dd = | |
1861 | - | $Tuple2(((((dd._1 ++ | |
1862 | - | } | |
1863 | - | } | |
1864 | - | ||
1865 | - | ||
1866 | - | ||
1867 | - | @Callable( | |
1868 | - | func flight ( | |
1869 | - | let | |
1870 | - | if ((size( | |
1883 | + | let b = toString(ei.originCaller) | |
1884 | + | let dd = gS(b, fy, cx, iA) | |
1885 | + | $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah]) | |
1886 | + | } | |
1887 | + | } | |
1888 | + | ||
1889 | + | ||
1890 | + | ||
1891 | + | @Callable(ei) | |
1892 | + | func flight (gg,gh) = { | |
1893 | + | let il = ii(ei) | |
1894 | + | if ((size(ei.payments) != 0)) | |
1871 | 1895 | then throw("No payments required") | |
1872 | 1896 | else { | |
1873 | - | let aT = toString( | |
1874 | - | let | |
1875 | - | let p = | |
1876 | - | let | |
1877 | - | let | |
1878 | - | if (( | |
1897 | + | let aT = toString(ei.caller) | |
1898 | + | let eN = gf(aT, gg, gh) | |
1899 | + | let p = eN._2 | |
1900 | + | let iv = aP(p) | |
1901 | + | let gK = valueOrElse(getString(iv), W) | |
1902 | + | if ((eN._4 == gK)) | |
1879 | 1903 | then throw("You can't fly to the same location") | |
1880 | 1904 | else { | |
1881 | - | let | |
1882 | - | let | |
1883 | - | let dt = de( | |
1884 | - | $Tuple2(([StringEntry( | |
1885 | - | then | |
1886 | - | else | |
1905 | + | let eR = aO(p) | |
1906 | + | let fC = eQ(eR) | |
1907 | + | let dt = de(fC[as], eN._5) | |
1908 | + | $Tuple2(([StringEntry(iv, if ((eN._1 > 0)) | |
1909 | + | then eN._4 | |
1910 | + | else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0)) | |
1887 | 1911 | then y | |
1888 | - | else z)._1), | |
1912 | + | else z)._1), eN._3) | |
1889 | 1913 | } | |
1890 | 1914 | } | |
1891 | 1915 | } | |
1892 | 1916 | ||
1893 | 1917 | ||
1894 | 1918 | ||
1895 | - | @Callable( | |
1896 | - | func heal ( | |
1897 | - | let | |
1898 | - | if (if (if ((0 > | |
1919 | + | @Callable(ei) | |
1920 | + | func heal (iB,iC,iD) = { | |
1921 | + | let il = ii(ei) | |
1922 | + | if (if (if ((0 > iB)) | |
1899 | 1923 | then true | |
1900 | - | else (0 > | |
1924 | + | else (0 > iC)) | |
1901 | 1925 | then true | |
1902 | - | else (0 > | |
1926 | + | else (0 > iD)) | |
1903 | 1927 | then throw("Quantity cannot be negative") | |
1904 | 1928 | else { | |
1905 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1910 | - | if (( | |
1911 | - | then throw((("HP should be < " + toString( | |
1929 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
1930 | + | let iE = [iB, iC, iD] | |
1931 | + | let gr = aQ(p) | |
1932 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1933 | + | let iF = valueOrElse(getInteger(gr), gs) | |
1934 | + | if ((iF >= gs)) | |
1935 | + | then throw((("HP should be < " + toString(gs)) + " to heal")) | |
1912 | 1936 | else { | |
1913 | - | let | |
1914 | - | let | |
1915 | - | let | |
1937 | + | let eR = aO(p) | |
1938 | + | let fC = eQ(eR) | |
1939 | + | let iG = if ((fC[as] == "")) | |
1916 | 1940 | then nil | |
1917 | - | else split( | |
1918 | - | func | |
1941 | + | else split(fC[as], "_") | |
1942 | + | func iH (cL,iI) = { | |
1919 | 1943 | let bS = cL._2 | |
1920 | - | let | |
1921 | - | then parseIntValue( | |
1944 | + | let eE = if ((size(iG) > bS)) | |
1945 | + | then parseIntValue(iG[bS]) | |
1922 | 1946 | else 0 | |
1923 | 1947 | if ((3 > bS)) | |
1924 | 1948 | then { | |
1925 | - | let | |
1926 | - | if (( | |
1927 | - | then throw(((("You have only " + toString( | |
1928 | - | else $Tuple3((cL._1 :+ toString(( | |
1949 | + | let iJ = iE[bS] | |
1950 | + | if ((iJ > eE)) | |
1951 | + | then throw(((("You have only " + toString(eE)) + " of ") + Z[bS])) | |
1952 | + | else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ))) | |
1929 | 1953 | } | |
1930 | - | else $Tuple3((cL._1 :+ toString( | |
1954 | + | else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3) | |
1931 | 1955 | } | |
1932 | 1956 | ||
1933 | 1957 | let dd = { | |
1934 | 1958 | let cN = ac | |
1935 | 1959 | let cO = size(cN) | |
1936 | 1960 | let cP = $Tuple3(nil, 0, 0) | |
1937 | 1961 | func cQ (cR,cS) = if ((cS >= cO)) | |
1938 | 1962 | then cR | |
1939 | - | else | |
1963 | + | else iH(cR, cN[cS]) | |
1940 | 1964 | ||
1941 | 1965 | func cT (cR,cS) = if ((cS >= cO)) | |
1942 | 1966 | then cR | |
1943 | 1967 | else throw("List size exceeds 50") | |
1944 | 1968 | ||
1945 | 1969 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1946 | 1970 | } | |
1947 | - | let | |
1948 | - | $Tuple2(([IntegerEntry( | |
1971 | + | let iK = min([gs, (iF + dd._3)]) | |
1972 | + | $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK) | |
1949 | 1973 | } | |
1950 | 1974 | } | |
1951 | 1975 | } | |
1952 | 1976 | ||
1953 | 1977 | ||
1954 | 1978 | ||
1955 | - | @Callable( | |
1979 | + | @Callable(ei) | |
1956 | 1980 | func healES () = { | |
1957 | - | let | |
1958 | - | if ((size( | |
1981 | + | let il = ii(ei) | |
1982 | + | if ((size(ei.payments) != 1)) | |
1959 | 1983 | then throw("Exactly one payment required") | |
1960 | 1984 | else { | |
1961 | - | let | |
1962 | - | if (( | |
1985 | + | let im = value(ei.payments[0]) | |
1986 | + | if ((im.assetId != bb)) | |
1963 | 1987 | then throw("Allowed USDT payment only!") | |
1964 | 1988 | else { | |
1965 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | if (( | |
1989 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
1990 | + | let gr = aQ(p) | |
1991 | + | let gs = J(valueOrElse(getInteger(r(p)), 0)) | |
1992 | + | let iF = valueOrElse(getInteger(gr), gs) | |
1993 | + | if ((iF > 0)) | |
1970 | 1994 | then throw("HP should be 0 to call Emergency Service") | |
1971 | 1995 | else { | |
1972 | - | let | |
1973 | - | let | |
1974 | - | let | |
1996 | + | let eR = aO(p) | |
1997 | + | let fC = eQ(eR) | |
1998 | + | let iG = if ((fC[as] == "")) | |
1975 | 1999 | then nil | |
1976 | - | else split( | |
1977 | - | let | |
1978 | - | then parseIntValue( | |
2000 | + | else split(fC[as], "_") | |
2001 | + | let iL = if ((size(iG) > 0)) | |
2002 | + | then parseIntValue(iG[0]) | |
1979 | 2003 | else 0 | |
1980 | - | let | |
1981 | - | then parseIntValue( | |
2004 | + | let iM = if ((size(iG) > 1)) | |
2005 | + | then parseIntValue(iG[1]) | |
1982 | 2006 | else 0 | |
1983 | - | let | |
1984 | - | then parseIntValue( | |
2007 | + | let iN = if ((size(iG) > 2)) | |
2008 | + | then parseIntValue(iG[2]) | |
1985 | 2009 | else 0 | |
1986 | - | if (if (if (( | |
2010 | + | if (if (if ((iL > 0)) | |
1987 | 2011 | then true | |
1988 | - | else ( | |
2012 | + | else (iM > 0)) | |
1989 | 2013 | then true | |
1990 | - | else ( | |
2014 | + | else (iN > 0)) | |
1991 | 2015 | then throw("You have to use own Medical Kit") | |
1992 | 2016 | else { | |
1993 | - | let | |
1994 | - | let | |
1995 | - | then split(value( | |
2017 | + | let iO = getString(bE, aU()) | |
2018 | + | let iP = if (isDefined(iO)) | |
2019 | + | then split(value(iO), "_") | |
1996 | 2020 | else nil | |
1997 | - | let | |
1998 | - | then parseIntValue( | |
2021 | + | let iQ = if ((size(iP) > 0)) | |
2022 | + | then parseIntValue(iP[0]) | |
1999 | 2023 | else 0 | |
2000 | - | if ((0 >= | |
2024 | + | if ((0 >= iQ)) | |
2001 | 2025 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2002 | 2026 | else { | |
2003 | - | let | |
2004 | - | let | |
2027 | + | let iK = (iF + bY[0]) | |
2028 | + | let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_") | |
2005 | 2029 | let aY = split(ac[0], "_") | |
2006 | - | let | |
2007 | - | let | |
2008 | - | if (( | |
2009 | - | then throw(("Payment attached should be " + toString( | |
2030 | + | let iS = aX(aY) | |
2031 | + | let iT = fraction((iS * Y), X, (10 * af)) | |
2032 | + | if ((im.amount != iT)) | |
2033 | + | then throw(("Payment attached should be " + toString(iT))) | |
2010 | 2034 | else { | |
2011 | - | let dd = bO(invoke(bE, "updateEsStorage", [ | |
2012 | - | $Tuple2(([IntegerEntry( | |
2035 | + | let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)])) | |
2036 | + | $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd) | |
2013 | 2037 | } | |
2014 | 2038 | } | |
2015 | 2039 | } | |
2016 | 2040 | } | |
2017 | 2041 | } | |
2018 | 2042 | } | |
2019 | 2043 | } | |
2020 | 2044 | ||
2021 | 2045 | ||
2022 | 2046 | ||
2023 | - | @Callable( | |
2024 | - | func updateBackpack (p, | |
2047 | + | @Callable(ei) | |
2048 | + | func updateBackpack (p,iU) = if ((ei.caller != bE)) | |
2025 | 2049 | then throw("permission denied") | |
2026 | - | else $Tuple2([StringEntry(aO(p), | |
2027 | - | ||
2028 | - | ||
2029 | - | ||
2030 | - | @Callable( | |
2050 | + | else $Tuple2([StringEntry(aO(p), iU)], iU) | |
2051 | + | ||
2052 | + | ||
2053 | + | ||
2054 | + | @Callable(ei) | |
2031 | 2055 | func buySLand () = { | |
2032 | - | let | |
2033 | - | if ((size( | |
2056 | + | let il = ii(ei) | |
2057 | + | if ((size(ei.payments) != 1)) | |
2034 | 2058 | then throw("Exactly one payment required") | |
2035 | 2059 | else { | |
2036 | - | let | |
2037 | - | if (( | |
2060 | + | let im = value(ei.payments[0]) | |
2061 | + | if ((im.assetId != bb)) | |
2038 | 2062 | then throw("Allowed USDT payment only!") | |
2039 | - | else if (( | |
2063 | + | else if ((im.amount != ce)) | |
2040 | 2064 | then throw(("Payment attached should be " + toString(ce))) | |
2041 | 2065 | else { | |
2042 | - | let dd = | |
2043 | - | $Tuple2((((dd._1 :+ ScriptTransfer(bE, | |
2066 | + | let dd = fX(ei.caller, ei.transactionId) | |
2067 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1) | |
2044 | 2068 | } | |
2045 | 2069 | } | |
2046 | 2070 | } | |
2047 | 2071 | ||
2048 | 2072 | ||
2049 | 2073 | ||
2050 | - | @Callable( | |
2051 | - | func expedition ( | |
2052 | - | let | |
2053 | - | if ((size( | |
2074 | + | @Callable(ei) | |
2075 | + | func expedition (gg,gh) = { | |
2076 | + | let il = ii(ei) | |
2077 | + | if ((size(ei.payments) != 0)) | |
2054 | 2078 | then throw("No payments required") | |
2055 | 2079 | else { | |
2056 | - | let dd = | |
2057 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2058 | - | $Tuple2(((dd._1 ++ | |
2059 | - | } | |
2060 | - | } | |
2061 | - | ||
2062 | - | ||
2063 | - | ||
2064 | - | @Callable( | |
2080 | + | let dd = gx(ei.caller, ei.transactionId, gg, gh) | |
2081 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
2082 | + | $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3)) | |
2083 | + | } | |
2084 | + | } | |
2085 | + | ||
2086 | + | ||
2087 | + | ||
2088 | + | @Callable(ei) | |
2065 | 2089 | func upgradeInfra (aF) = { | |
2066 | - | let | |
2067 | - | if ((size( | |
2090 | + | let il = ii(ei) | |
2091 | + | if ((size(ei.payments) != 0)) | |
2068 | 2092 | then throw("No payments required") | |
2069 | 2093 | else { | |
2070 | - | let dd = | |
2071 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2072 | - | $Tuple2(((dd._1 :+ | |
2073 | - | } | |
2074 | - | } | |
2075 | - | ||
2076 | - | ||
2077 | - | ||
2078 | - | @Callable( | |
2079 | - | func upgradeInfraUsdt (aF) = if (( | |
2094 | + | let dd = hf(true, ei.caller, 0, aF) | |
2095 | + | let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked") | |
2096 | + | $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2) | |
2097 | + | } | |
2098 | + | } | |
2099 | + | ||
2100 | + | ||
2101 | + | ||
2102 | + | @Callable(ei) | |
2103 | + | func upgradeInfraUsdt (aF) = if ((ei.caller != this)) | |
2080 | 2104 | then throw("Permission denied") | |
2081 | 2105 | else { | |
2082 | - | let | |
2083 | - | if ((size( | |
2106 | + | let il = ii(ei) | |
2107 | + | if ((size(ei.payments) != 1)) | |
2084 | 2108 | then throw("Exactly one payment required") | |
2085 | 2109 | else { | |
2086 | - | let | |
2087 | - | if (( | |
2110 | + | let im = value(ei.payments[0]) | |
2111 | + | if ((im.assetId != bb)) | |
2088 | 2112 | then throw("Allowed USDT payment only!") | |
2089 | 2113 | else { | |
2090 | - | let dd = | |
2091 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2114 | + | let dd = hf(false, ei.caller, im.amount, aF) | |
2115 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2) | |
2092 | 2116 | } | |
2093 | 2117 | } | |
2094 | 2118 | } | |
2095 | 2119 | ||
2096 | 2120 | ||
2097 | 2121 | ||
2098 | - | @Callable( | |
2099 | - | func activateArtifact ( | |
2100 | - | let | |
2101 | - | if ((size( | |
2122 | + | @Callable(ei) | |
2123 | + | func activateArtifact (iV,iW) = { | |
2124 | + | let il = ii(ei) | |
2125 | + | if ((size(ei.payments) != 0)) | |
2102 | 2126 | then throw("No payments required") | |
2103 | 2127 | else { | |
2104 | - | let b = toString( | |
2128 | + | let b = toString(ei.caller) | |
2105 | 2129 | let dd = { | |
2106 | - | let bc = | |
2130 | + | let bc = iV | |
2107 | 2131 | if (("PRESALE" == bc)) | |
2108 | - | then | |
2132 | + | then hF(b, iW) | |
2109 | 2133 | else if (("ONBOARD" == bc)) | |
2110 | - | then | |
2134 | + | then hy(b) | |
2111 | 2135 | else throw("Unknown artifact") | |
2112 | 2136 | } | |
2113 | - | (dd :+ | |
2114 | - | } | |
2115 | - | } | |
2116 | - | ||
2117 | - | ||
2118 | - | ||
2119 | - | @Callable( | |
2120 | - | func mergeLands ( | |
2121 | - | let | |
2122 | - | if ((size( | |
2137 | + | (dd :+ il) | |
2138 | + | } | |
2139 | + | } | |
2140 | + | ||
2141 | + | ||
2142 | + | ||
2143 | + | @Callable(ei) | |
2144 | + | func mergeLands (hK) = { | |
2145 | + | let il = ii(ei) | |
2146 | + | if ((size(ei.payments) != 0)) | |
2123 | 2147 | then throw("No payments required") | |
2124 | 2148 | else { | |
2125 | - | let dd = | |
2126 | - | $Tuple2(((dd._1 :+ | |
2127 | - | } | |
2128 | - | } | |
2129 | - | ||
2130 | - | ||
2131 | - | ||
2132 | - | @Callable( | |
2133 | - | func mergeLandsUsdt ( | |
2134 | - | let | |
2135 | - | if ((size( | |
2149 | + | let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId) | |
2150 | + | $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2) | |
2151 | + | } | |
2152 | + | } | |
2153 | + | ||
2154 | + | ||
2155 | + | ||
2156 | + | @Callable(ei) | |
2157 | + | func mergeLandsUsdt (hK) = { | |
2158 | + | let il = ii(ei) | |
2159 | + | if ((size(ei.payments) != 1)) | |
2136 | 2160 | then throw("Exactly one payment required") | |
2137 | 2161 | else { | |
2138 | - | let | |
2139 | - | if (( | |
2162 | + | let im = value(ei.payments[0]) | |
2163 | + | if ((im.assetId != bb)) | |
2140 | 2164 | then throw("Allowed USDT payment only!") | |
2141 | 2165 | else { | |
2142 | - | let dd = | |
2143 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2166 | + | let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId) | |
2167 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2) | |
2144 | 2168 | } | |
2145 | 2169 | } | |
2146 | 2170 | } | |
2147 | 2171 | ||
2148 | 2172 | ||
2149 | 2173 | ||
2150 | - | @Callable( | |
2151 | - | func cargoExchange ( | |
2152 | - | let | |
2153 | - | if ((size( | |
2174 | + | @Callable(ei) | |
2175 | + | func cargoExchange (iX,aF) = { | |
2176 | + | let il = ii(ei) | |
2177 | + | if ((size(ei.payments) != 0)) | |
2154 | 2178 | then throw("No payments required") | |
2155 | 2179 | else { | |
2156 | - | let | |
2157 | - | let b = toString( | |
2158 | - | let | |
2159 | - | let | |
2160 | - | if (!(isDefined(getInteger( | |
2161 | - | then throw(( | |
2180 | + | let fB = split_4C(iX, ":") | |
2181 | + | let b = toString(ei.originCaller) | |
2182 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2183 | + | let gO = ax(aF) | |
2184 | + | if (!(isDefined(getInteger(gO)))) | |
2185 | + | then throw((gN.name + " is not staked")) | |
2162 | 2186 | else { | |
2163 | - | let | |
2164 | - | if (( | |
2187 | + | let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned")) | |
2188 | + | if ((gQ != b)) | |
2165 | 2189 | then throw((P + " is not yours")) | |
2166 | 2190 | else { | |
2167 | - | let | |
2168 | - | let | |
2191 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2192 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2169 | 2193 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2170 | - | let | |
2171 | - | let | |
2172 | - | if (( | |
2173 | - | then throw((("Duck location type is " + | |
2174 | - | else if (( | |
2194 | + | let gK = valueOrElse(getString(aP(p)), W) | |
2195 | + | let gL = split(value(gK), "_") | |
2196 | + | if ((gL[aV] != "L")) | |
2197 | + | then throw((("Duck location type is " + gL[aV]) + ", but should be L")) | |
2198 | + | else if ((gL[aW] != aF)) | |
2175 | 2199 | then throw(("Duck should be on the land " + aF)) | |
2176 | 2200 | else { | |
2177 | - | let | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | let dd = | |
2182 | - | let | |
2183 | - | let | |
2184 | - | let | |
2185 | - | [StringEntry( | |
2201 | + | let fj = aE(aF) | |
2202 | + | let eW = fi(fj, fk, fl) | |
2203 | + | let eR = aO(p) | |
2204 | + | let fC = eQ(eR) | |
2205 | + | let dd = fA(fB, eW, fC) | |
2206 | + | let fr = split(eW[ak], "_") | |
2207 | + | let hc = (parseIntValue(fr[am]) + dd._7) | |
2208 | + | let hd = (parseIntValue(fr[an]) - dd._7) | |
2209 | + | [StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il] | |
2186 | 2210 | } | |
2187 | 2211 | } | |
2188 | 2212 | } | |
2189 | 2213 | } | |
2190 | 2214 | } | |
2191 | 2215 | ||
2192 | 2216 | ||
2193 | 2217 | ||
2194 | - | @Callable( | |
2195 | - | func saveWarehouse ( | |
2218 | + | @Callable(ei) | |
2219 | + | func saveWarehouse (fn,aF) = if ((ei.caller != bE)) | |
2196 | 2220 | then throw("Access denied") | |
2197 | 2221 | else { | |
2198 | - | let | |
2199 | - | let | |
2200 | - | if ((size( | |
2222 | + | let fj = aE(aF) | |
2223 | + | let fo = split_4C(fn, ":") | |
2224 | + | if ((size(fo) != 5)) | |
2201 | 2225 | then throw("warehouse string should contain 4 ':' separators") | |
2202 | 2226 | else { | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | $Tuple2([StringEntry( | |
2227 | + | let iY = split(fo[ak], "_")[al] | |
2228 | + | let hc = eV(fo) | |
2229 | + | let iZ = eT(fo[ag]) | |
2230 | + | let hd = ((iZ - parseIntValue(iY)) - hc) | |
2231 | + | let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":") | |
2232 | + | $Tuple2([StringEntry(fj, ja)], ja) | |
2209 | 2233 | } | |
2210 | 2234 | } | |
2211 | 2235 | ||
2212 | 2236 | ||
2213 | 2237 | ||
2214 | - | @Callable( | |
2215 | - | func fixWarehouseFormat (aF) = if (( | |
2238 | + | @Callable(ei) | |
2239 | + | func fixWarehouseFormat (aF) = if ((ei.caller != bC)) | |
2216 | 2240 | then throw("Access denied") | |
2217 | 2241 | else { | |
2218 | - | let | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | let | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | $Tuple2([StringEntry( | |
2229 | - | } | |
2230 | - | ||
2231 | - | ||
2232 | - | ||
2233 | - | @Callable( | |
2234 | - | func fixStakedPieces (bp) = if (( | |
2242 | + | let fj = aE(aF) | |
2243 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2244 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2245 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2246 | + | let fo = fi(fj, fk, fl) | |
2247 | + | let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil)) | |
2248 | + | let hc = eV(fo) | |
2249 | + | let iZ = eT(fo[ag]) | |
2250 | + | let hd = ((iZ - iY) - hc) | |
2251 | + | let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":") | |
2252 | + | $Tuple2([StringEntry(fj, ja)], ja) | |
2253 | + | } | |
2254 | + | ||
2255 | + | ||
2256 | + | ||
2257 | + | @Callable(ei) | |
2258 | + | func fixStakedPieces (bp) = if ((ei.caller != bC)) | |
2235 | 2259 | then throw("Access denied") | |
2236 | 2260 | else { | |
2237 | - | let | |
2261 | + | let ib = if ((bp == "")) | |
2238 | 2262 | then 0 | |
2239 | 2263 | else { | |
2240 | - | let | |
2241 | - | let | |
2242 | - | then split_51C(value( | |
2264 | + | let hW = getString(bD, bM(bp)) | |
2265 | + | let hR = if (isDefined(hW)) | |
2266 | + | then split_51C(value(hW), "_") | |
2243 | 2267 | else nil | |
2244 | - | func | |
2245 | - | let | |
2246 | - | let bU = split( | |
2268 | + | func jb (cL,aF) = { | |
2269 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2270 | + | let bU = split(gN.description, "_")[bI] | |
2247 | 2271 | (cL + bT(bU)) | |
2248 | 2272 | } | |
2249 | 2273 | ||
2250 | - | let cN = | |
2274 | + | let cN = hR | |
2251 | 2275 | let cO = size(cN) | |
2252 | 2276 | let cP = 0 | |
2253 | 2277 | func cQ (cR,cS) = if ((cS >= cO)) | |
2254 | 2278 | then cR | |
2255 | - | else | |
2279 | + | else jb(cR, cN[cS]) | |
2256 | 2280 | ||
2257 | 2281 | func cT (cR,cS) = if ((cS >= cO)) | |
2258 | 2282 | then cR | |
2259 | 2283 | else throw("List size exceeds 100") | |
2260 | 2284 | ||
2261 | 2285 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2262 | 2286 | } | |
2263 | - | $Tuple2([IntegerEntry(bN(bp), | |
2264 | - | } | |
2265 | - | ||
2266 | - | ||
2267 | - | ||
2268 | - | @Callable( | |
2269 | - | func setCustomName (av, | |
2270 | - | let | |
2271 | - | if ((size( | |
2287 | + | $Tuple2([IntegerEntry(bN(bp), ib)], ib) | |
2288 | + | } | |
2289 | + | ||
2290 | + | ||
2291 | + | ||
2292 | + | @Callable(ei) | |
2293 | + | func setCustomName (av,hT,aA) = { | |
2294 | + | let il = ii(ei) | |
2295 | + | if ((size(ei.payments) != 1)) | |
2272 | 2296 | then throw("Exactly one payment required") | |
2273 | 2297 | else { | |
2274 | - | let | |
2275 | - | if (( | |
2298 | + | let im = value(ei.payments[0]) | |
2299 | + | if ((im.assetId != bb)) | |
2276 | 2300 | then throw("Allowed USDT payment only!") | |
2277 | - | else if (( | |
2301 | + | else if ((im.amount != ca)) | |
2278 | 2302 | then throw(("Payment should be " + toString(ca))) | |
2279 | - | else if (contains( | |
2280 | - | then throw(("Name should not contain '__': " + | |
2281 | - | else if ((size( | |
2303 | + | else if (contains(hT, "__")) | |
2304 | + | then throw(("Name should not contain '__': " + hT)) | |
2305 | + | else if ((size(hT) > cb)) | |
2282 | 2306 | then throw(("Name too long, maxLength=" + toString(cb))) | |
2283 | 2307 | else { | |
2284 | - | let b = toString( | |
2285 | - | let | |
2308 | + | let b = toString(ei.originCaller) | |
2309 | + | let jc = { | |
2286 | 2310 | let bc = aA | |
2287 | 2311 | if (("ACCOUNT" == bc)) | |
2288 | 2312 | then { | |
2289 | - | let | |
2290 | - | let | |
2291 | - | if (isDefined( | |
2292 | - | then throw(("Name already registered: " + | |
2313 | + | let jd = cv(hT) | |
2314 | + | let je = getString(jd) | |
2315 | + | if (isDefined(je)) | |
2316 | + | then throw(("Name already registered: " + hT)) | |
2293 | 2317 | else { | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | then [DeleteEntry(cv(value( | |
2318 | + | let jf = aH(b) | |
2319 | + | let jg = getString(jf) | |
2320 | + | let jh = if (isDefined(jg)) | |
2321 | + | then [DeleteEntry(cv(value(jg)))] | |
2298 | 2322 | else nil | |
2299 | - | ((( | |
2323 | + | (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1) | |
2300 | 2324 | } | |
2301 | 2325 | } | |
2302 | 2326 | else if (("LAND" == bc)) | |
2303 | 2327 | then { | |
2304 | - | let | |
2305 | - | let | |
2306 | - | if (!(isDefined(getInteger( | |
2307 | - | then throw(( | |
2328 | + | let gN = value(assetInfo(fromBase58String(av))) | |
2329 | + | let gO = ax(av) | |
2330 | + | if (!(isDefined(getInteger(gO)))) | |
2331 | + | then throw((gN.name + " is not staked")) | |
2308 | 2332 | else { | |
2309 | - | let | |
2310 | - | if (( | |
2333 | + | let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned")) | |
2334 | + | if ((gQ != b)) | |
2311 | 2335 | then throw((P + " is not yours")) | |
2312 | 2336 | else { | |
2313 | - | let | |
2314 | - | let | |
2315 | - | if (isDefined( | |
2316 | - | then throw(("Name already registered: " + | |
2337 | + | let jd = cp(hT) | |
2338 | + | let je = getString(jd) | |
2339 | + | if (isDefined(je)) | |
2340 | + | then throw(("Name already registered: " + hT)) | |
2317 | 2341 | else { | |
2318 | - | let | |
2319 | - | let | |
2320 | - | let | |
2321 | - | then [DeleteEntry(cp(value( | |
2342 | + | let ji = aw(av) | |
2343 | + | let jg = getString(ji) | |
2344 | + | let jh = if (isDefined(jg)) | |
2345 | + | then [DeleteEntry(cp(value(jg)))] | |
2322 | 2346 | else nil | |
2323 | - | ((( | |
2347 | + | (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1) | |
2324 | 2348 | } | |
2325 | 2349 | } | |
2326 | 2350 | } | |
2327 | 2351 | } | |
2328 | 2352 | else if (("DUCK" == bc)) | |
2329 | 2353 | then { | |
2330 | - | let | |
2331 | - | let | |
2332 | - | if (if (!(isDefined(getInteger( | |
2354 | + | let gN = value(assetInfo(fromBase58String(av))) | |
2355 | + | let gO = ax(av) | |
2356 | + | if (if (!(isDefined(getInteger(gO)))) | |
2333 | 2357 | then true | |
2334 | 2358 | else !(isDefined(getString(aN(b))))) | |
2335 | - | then throw(( | |
2359 | + | then throw((gN.name + " is not staked")) | |
2336 | 2360 | else { | |
2337 | - | let | |
2338 | - | if (( | |
2361 | + | let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned")) | |
2362 | + | if ((gQ != b)) | |
2339 | 2363 | then throw((Q + " is not yours")) | |
2340 | 2364 | else { | |
2341 | - | let | |
2342 | - | let | |
2343 | - | if (isDefined( | |
2344 | - | then throw(("Name already registered: " + | |
2365 | + | let jd = cu(hT) | |
2366 | + | let je = getString(jd) | |
2367 | + | if (isDefined(je)) | |
2368 | + | then throw(("Name already registered: " + hT)) | |
2345 | 2369 | else { | |
2346 | - | let | |
2347 | - | let | |
2348 | - | let | |
2349 | - | then [DeleteEntry(cu(value( | |
2370 | + | let ji = aG(av) | |
2371 | + | let jg = getString(ji) | |
2372 | + | let jh = if (isDefined(jg)) | |
2373 | + | then [DeleteEntry(cu(value(jg)))] | |
2350 | 2374 | else nil | |
2351 | - | ((( | |
2375 | + | (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1) | |
2352 | 2376 | } | |
2353 | 2377 | } | |
2354 | 2378 | } | |
2355 | 2379 | } | |
2356 | 2380 | else throw("Unknown entity type") | |
2357 | 2381 | } | |
2358 | - | $Tuple2((( | |
2382 | + | $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0) | |
2359 | 2383 | } | |
2360 | 2384 | } | |
2361 | 2385 | } | |
2362 | 2386 | ||
2363 | 2387 | ||
2364 | 2388 | ||
2365 | - | @Callable( | |
2366 | - | func setReferrals ( | |
2389 | + | @Callable(ei) | |
2390 | + | func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX)) | |
2367 | 2391 | then throw("Permission denied") | |
2368 | 2392 | else { | |
2369 | - | let | |
2370 | - | if ((size( | |
2393 | + | let il = ii(ei) | |
2394 | + | if ((size(ei.payments) != 0)) | |
2371 | 2395 | then throw("No payments required") | |
2372 | - | else if (!(isDefined(addressFromString( | |
2373 | - | then throw(("Invalid address: " + | |
2374 | - | else if (!(isDefined(addressFromString( | |
2375 | - | then throw(("Invalid address: " + | |
2396 | + | else if (!(isDefined(addressFromString(jj)))) | |
2397 | + | then throw(("Invalid address: " + jj)) | |
2398 | + | else if (!(isDefined(addressFromString(jk)))) | |
2399 | + | then throw(("Invalid address: " + jk)) | |
2376 | 2400 | else { | |
2377 | - | let | |
2378 | - | let | |
2379 | - | let | |
2380 | - | then split_4C(value( | |
2401 | + | let jl = cw() | |
2402 | + | let jm = getString(jl) | |
2403 | + | let jn = if (isDefined(jm)) | |
2404 | + | then split_4C(value(jm), "_") | |
2381 | 2405 | else nil | |
2382 | - | if (containsElement( | |
2383 | - | then throw(( | |
2406 | + | if (containsElement(jn, jk)) | |
2407 | + | then throw((jk + " is not newbie (already has referrals)")) | |
2384 | 2408 | else { | |
2385 | - | let | |
2386 | - | let | |
2387 | - | if (if (isDefined( | |
2388 | - | then isDefined(addressFromString(value( | |
2409 | + | let hz = aI(jk) | |
2410 | + | let hA = getString(hz) | |
2411 | + | if (if (isDefined(hA)) | |
2412 | + | then isDefined(addressFromString(value(hA))) | |
2389 | 2413 | else false) | |
2390 | - | then throw((( | |
2414 | + | then throw(((jk + " already has refBy: ") + value(hA))) | |
2391 | 2415 | else { | |
2392 | - | let | |
2393 | - | let | |
2394 | - | let | |
2395 | - | then split_4C(value( | |
2416 | + | let jo = aL(jj) | |
2417 | + | let jp = getString(jo) | |
2418 | + | let jq = if (isDefined(jp)) | |
2419 | + | then split_4C(value(jp), "_") | |
2396 | 2420 | else nil | |
2397 | - | if (containsElement( | |
2398 | - | then throw(((( | |
2421 | + | if (containsElement(jq, jk)) | |
2422 | + | then throw((((jj + " already contains ") + jk) + " within referrals")) | |
2399 | 2423 | else { | |
2400 | - | let | |
2401 | - | let | |
2402 | - | then value( | |
2403 | - | else makeString_2C(( | |
2404 | - | $Tuple2([StringEntry( | |
2424 | + | let jr = makeString_2C((jq :+ jk), "_") | |
2425 | + | let js = if (containsElement(jn, jj)) | |
2426 | + | then value(jm) | |
2427 | + | else makeString_2C((jn :+ jj), "_") | |
2428 | + | $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0) | |
2405 | 2429 | } | |
2406 | 2430 | } | |
2407 | 2431 | } | |
2408 | 2432 | } | |
2409 | 2433 | } | |
2410 | 2434 | ||
2411 | 2435 | ||
2412 | 2436 | ||
2413 | - | @Callable( | |
2414 | - | func distributePoints ( | |
2415 | - | let | |
2416 | - | if ((size( | |
2437 | + | @Callable(ei) | |
2438 | + | func distributePoints (jt,ju,jv,jw,jx) = { | |
2439 | + | let il = ii(ei) | |
2440 | + | if ((size(ei.payments) != 0)) | |
2417 | 2441 | then throw("No payments required") | |
2418 | 2442 | else { | |
2419 | - | let b = toString( | |
2443 | + | let b = toString(ei.originCaller) | |
2420 | 2444 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2421 | - | let | |
2422 | - | let | |
2423 | - | let | |
2424 | - | let | |
2425 | - | let | |
2426 | - | let | |
2427 | - | if (( | |
2428 | - | then throw((("There are only " + toString( | |
2445 | + | let jy = w(b) | |
2446 | + | let jz = valueOrElse(getInteger(bD, jy), 0) | |
2447 | + | let jA = s(p) | |
2448 | + | let jB = valueOrElse(getInteger(bD, jA), 0) | |
2449 | + | let jC = (jz + jB) | |
2450 | + | let jD = ((((jt + ju) + jv) + jw) + jx) | |
2451 | + | if ((jD > jC)) | |
2452 | + | then throw((("There are only " + toString(jC)) + " free points to distribute")) | |
2429 | 2453 | else { | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | $Tuple2([IntegerEntry( | |
2454 | + | let jE = o(p) | |
2455 | + | let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_") | |
2456 | + | let jG = (jz - jD) | |
2457 | + | $Tuple2([IntegerEntry(jy, if ((0 > jG)) | |
2434 | 2458 | then 0 | |
2435 | - | else | |
2436 | - | then ( | |
2437 | - | else | |
2459 | + | else jG), IntegerEntry(jA, if ((0 > jG)) | |
2460 | + | then (jB + jG) | |
2461 | + | else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0) | |
2438 | 2462 | } | |
2439 | 2463 | } | |
2440 | 2464 | } | |
2441 | 2465 | ||
2442 | 2466 | ||
2443 | 2467 | ||
2444 | - | @Callable( | |
2445 | - | func splitByGlobalWeightsREADONLY ( | |
2446 | - | ||
2447 | - | ||
2448 | - | ||
2449 | - | @Callable( | |
2450 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2451 | - | let | |
2452 | - | $Tuple2(nil, $Tuple2(cU( | |
2453 | - | } | |
2454 | - | ||
2455 | - | ||
2456 | - | ||
2457 | - | @Callable( | |
2458 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2459 | - | ||
2460 | - | ||
2461 | - | ||
2462 | - | @Callable( | |
2468 | + | @Callable(ei) | |
2469 | + | func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy)) | |
2470 | + | ||
2471 | + | ||
2472 | + | ||
2473 | + | @Callable(ei) | |
2474 | + | func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = { | |
2475 | + | let ee = ek(el) | |
2476 | + | $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee))) | |
2477 | + | } | |
2478 | + | ||
2479 | + | ||
2480 | + | ||
2481 | + | @Callable(ei) | |
2482 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":")) | |
2483 | + | ||
2484 | + | ||
2485 | + | ||
2486 | + | @Callable(ei) | |
2463 | 2487 | func getWarehouseREADONLY (aF) = { | |
2464 | - | let | |
2465 | - | let | |
2466 | - | let | |
2467 | - | $Tuple2(nil, makeString_2C( | |
2468 | - | } | |
2469 | - | ||
2470 | - | ||
2471 | - | ||
2472 | - | @Callable( | |
2473 | - | func saveLastTx () = if (if (( | |
2474 | - | then ( | |
2488 | + | let gN = value(assetInfo(fromBase58String(aF))) | |
2489 | + | let fk = (bT(split(gN.description, "_")[bI]) / bj) | |
2490 | + | let fl = valueOrElse(getInteger(ay(aF)), 0) | |
2491 | + | $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":")) | |
2492 | + | } | |
2493 | + | ||
2494 | + | ||
2495 | + | ||
2496 | + | @Callable(ei) | |
2497 | + | func saveLastTx () = if (if ((ei.caller != bG)) | |
2498 | + | then (ei.caller != bE) | |
2475 | 2499 | else false) | |
2476 | 2500 | then throw("Access denied") | |
2477 | - | else $Tuple2([ | |
2478 | - | ||
2479 | - | ||
2480 | - | ||
2481 | - | @Callable( | |
2482 | - | func updateDuckStats (p, | |
2501 | + | else $Tuple2([ii(ei)], 42) | |
2502 | + | ||
2503 | + | ||
2504 | + | ||
2505 | + | @Callable(ei) | |
2506 | + | func updateDuckStats (p,hs) = if ((ei.caller != bE)) | |
2483 | 2507 | then throw("Access denied") | |
2484 | - | else | |
2485 | - | ||
2486 | - | ||
2487 | - | ||
2488 | - | @Callable( | |
2489 | - | func updateAccStats (b, | |
2508 | + | else hr(p, hs) | |
2509 | + | ||
2510 | + | ||
2511 | + | ||
2512 | + | @Callable(ei) | |
2513 | + | func updateAccStats (b,hs) = if ((ei.caller != bE)) | |
2490 | 2514 | then throw("Access denied") | |
2491 | - | else | |
2492 | - | ||
2493 | - | ||
2494 | - | ||
2495 | - | @Callable( | |
2496 | - | func equipDuck ( | |
2497 | - | let | |
2498 | - | if ((size( | |
2515 | + | else hx(b, hs) | |
2516 | + | ||
2517 | + | ||
2518 | + | ||
2519 | + | @Callable(ei) | |
2520 | + | func equipDuck (jJ) = { | |
2521 | + | let il = ii(ei) | |
2522 | + | if ((size(ei.payments) != 0)) | |
2499 | 2523 | then throw("No payments required") | |
2500 | 2524 | else { | |
2501 | - | let b = toString( | |
2525 | + | let b = toString(ei.originCaller) | |
2502 | 2526 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2503 | - | let | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | if ((size( | |
2527 | + | let jK = t(p) | |
2528 | + | let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2529 | + | let eR = aO(p) | |
2530 | + | let fC = eQ(eR) | |
2531 | + | let jM = split(jJ, "_") | |
2532 | + | if ((size(jM) != l)) | |
2509 | 2533 | then throw("Wrong equipment string") | |
2510 | 2534 | else { | |
2511 | - | let | |
2512 | - | let dh = if (( | |
2535 | + | let jN = fC[as] | |
2536 | + | let dh = if ((jN == "")) | |
2513 | 2537 | then nil | |
2514 | - | else split( | |
2515 | - | let | |
2516 | - | let dt = | |
2517 | - | $Tuple2([StringEntry( | |
2538 | + | else split(jN, "_") | |
2539 | + | let jO = dX(jL, dh, true) | |
2540 | + | let dt = dX(jM, jO, false) | |
2541 | + | $Tuple2([StringEntry(jK, jJ), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dt, "_")], ":")), il], 0) | |
2518 | 2542 | } | |
2519 | 2543 | } | |
2520 | 2544 | } | |
2521 | 2545 | ||
2522 | 2546 | ||
2523 | 2547 | ||
2524 | - | @Callable( | |
2525 | - | func test () = if (( | |
2548 | + | @Callable(ei) | |
2549 | + | func test () = if ((ei.caller != this)) | |
2526 | 2550 | then throw("Access denied") | |
2527 | - | else $Tuple2(nil, du("")) | |
2551 | + | else { | |
2552 | + | let dq = du("") | |
2553 | + | let dA = dx(dq) | |
2554 | + | $Tuple2(nil, dA) | |
2555 | + | } | |
2528 | 2556 | ||
2529 | 2557 |
github/deemru/w8io/03bedc9 856.61 ms ◑