Transaction executed successfully

Transaction Details

Inspect execution, participants, message data, gas usage, events and raw transaction data.

Transaction hash
AC9016BB106CBC12BEB2194EE2751658B1EC08807DEF1DD8BA20260FE3D38B26

Transaction overview

Status
Success
Execution completed
Block
#480549
Included in block
Message Type
m_addpkg
Primary message

Execution summary

TX INDEX
0
Position in block
GAS WANTED
83,687,200
Requested gas limit
GAS USED
34,387,982
Gas consumed
FEE
251061ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf512000000ugnot

Execution log

msg:0,success:true,log:,events:[]

Events

No events emitted by this transaction.

Raw encoded transaction

CtHYAQoML3ZtLm1fYWRkcGtnEr/YAQooZzFtYW5mcmVkNDdremR1ZWM5MjB6ODh3ZnI2NHlsa3NtZGNlZGxmNRKC2AEKBXJlbGF5Eh9nbm8ubGFuZC9yL21vdWwvYWdlbnRzL3JlbGF5L3YwGvQvCglSRUFETUUubWQS5i8jIGBnbm8ubGFuZC9yL21vdWwvYWdlbnRzL3JlbGF5L3YwYAoKQSBib3VuZGVkIG1lc3NhZ2UgYnVzIGZvciBhZ2VudHMgdGhhdCBuZXZlciB0YWxrIHRvIGVhY2ggb3RoZXIgZGlyZWN0bHkuCgpBIHJlYWxtIGlzIGEgKipyZWxheSoqIHdoZW4gaXQgaXMgdGhlIG9ubHkgc2hhcmVkIHN0YXRlIGJldHdlZW4gdHdvIHBhcnRpZXMgd2l0aCBubwpjaGFubmVsIGJldHdlZW4gdGhlbS4gUGxlbnR5IG9mIHRoaW5ncyBjYW4gY2FycnkgYSBtZXNzYWdlIGJldHdlZW4gdHdvIGFnZW50cywgYW5kIGFsbW9zdAphbGwgb2YgdGhlbSBhcmUgY2hlYXBlciB0aGFuIGEgYmxvY2tjaGFpbi4gV2hhdCBub25lIG9mIHRoZW0gZ2l2ZSB5b3UgaXMgdGhlIHByb3BlcnR5IHRoaXMKcmVhbG0gZXhpc3RzIGZvcjogKiphdXRob3JzaGlwIGlzIHRoZSBzaWduYXR1cmUuKiogQSBsaW5lIGluIGEgc2hhcmVkIGZpbGUgcHJlZml4ZWQKYFthZ2VudC1hXWAgaXMgYSBzdHJpbmcgYW55b25lIGNhbiB0eXBlLiBBIHBvc3QgaGVyZSBpcyBzaWduZWQgYnkgYSBrZXkgd2hvc2Ugc2NvcGUgdGhlCmNoYWluIGVuZm9yY2VzLCBzbyB0aGUgc2VuZGVyIGlzIGNoZWNrZWQgYnkgY29uc2Vuc3VzIGluc3RlYWQgb2YgYXNzZXJ0ZWQgYnkgdGhlIHNlbmRlci4KCioqQW5kIHRoZSBvYnZpb3VzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGRlbGl2ZXIgdGhhdCoqLCB3aGljaCBgdjBgIGZvdW5kIG91dCBvbiBtYWlubmV0LgpBIHNlc3Npb24tc2lnbmVkIGNhbGwgcHJlc2VudHMgdGhlIHNlc3Npb24ncyAqb3duZXIqIGFzIHRoZSBjYWxsZXIsIHNvIGEgcmVsYXkgdGhhdCByZWNvcmRzCm9ubHkgYGN1ci5QcmV2aW91cygpYCB3cml0ZXMgdGhlIHNhbWUgYWNjb3VudCBmb3IgZXZlcnkgYWdlbnQgb25lIG93bmVyIHJ1bnMsIGFuZCBpcyBiYWNrIHRvCnRydXN0aW5nIHRoZSBgZnJvbWAgbGFiZWwgaXQgd2FzIHN1cHBvc2VkIHRvIHJlcGxhY2UuIGBjaGFpbi9ydW50aW1lLkdldFNlc3Npb25JbmZvYCByZXBvcnRzCnRoZSBkZWxlZ2F0ZWQga2V5IHRoYXQgYWN0dWFsbHkgc2lnbmVkLCBhbmQgdGhhdCBpcyB0aGUgaGFsZiB0aGUgY2FsbGVyIGRpZCBub3QgY2hvb3NlLiBUaGUKdGFibGUgc2hvd3MgdGhlIHNlc3Npb24gd2hlcmUgdGhlcmUgd2FzIG9uZSBhbmQgdGhlIGFjY291bnQgb3RoZXJ3aXNlLgoKRXZlcnl0aGluZyBlbHNlIGluIHRoZSBkZXNpZ24gZm9sbG93cyBmcm9tIG9uZSBtZWFzdXJlZCBmYWN0IGFib3V0IGdubzogKip5b3UgYXJlIGNoYXJnZWQKZm9yIG9iamVjdHMsIG5vdCBmb3IgZGF0YS4qKgoKIyMgVGhyZWUgY29uc2VxdWVuY2VzLCBhbmQgdGhleSBhcmUgdGhlIHdob2xlIHJlYWxtCgoqKjEuIFRoZSBsb2cgaXMgYSBmaXhlZCByaW5nLCBhbGxvY2F0ZWQgb25jZS4qKiBgU2xvdHNgIGlzIDY0LCBkZWNpZGVkIGF0IGRlcGxveSwgbmV2ZXIKZ3Jvd24uIEFuIHVuYm91bmRlZCBsb2cgaXMgYW4gdW5ib3VuZGVkIHN0b3JhZ2UgZGVwb3NpdCwgYW5kIHdob2V2ZXIgZGVwbG95ZWQgaXQga2VlcHMKcGF5aW5nIGZvciBtZXNzYWdlcyBub2JvZHkgd2lsbCByZWFkIGFnYWluLiBUaGUgYm91bmQgaXMgdGhlIGZlYXR1cmUuCgoqKjIuIEEgcG9zdCBldmljdHMgaW4gdGhlIHNhbWUgY2FsbC4qKiBUaGUgY2hhaW4gbmV0cyBhIHJlYWxtJ3Mgc3RvcmFnZSBjaGFuZ2UgcGVyCnRyYW5zYWN0aW9uLCBzbyBhbiBhcHBlbmQgdGhhdCBkaXNwbGFjZXMgYW4gZXF1YWwtc2l6ZWQgZW50cnkgY2hhbmdlcyBub3RoaW5nIGFuZCBjb3N0cwpub3RoaW5nLiBTcGxpdCB0aGUgYXBwZW5kIGFuZCB0aGUgZXZpY3Rpb24gYWNyb3NzIHR3byB0cmFuc2FjdGlvbnMgYW5kIHlvdSBwYXkgaW4gZnVsbCBmb3IKb25lIGFuZCBoYW5kIHRoZSByZWZ1bmQgdG8gd2hvZXZlciBzaWducyB0aGUgb3RoZXIuIFRoaXMgaXMgd2h5IGBQb3N0YCBwdXNoZXMgaW50byBhIHJpbmcKcmF0aGVyIHRoYW4gYXBwZW5kaW5nIHRvIGEgbGlzdCBhbmQgcHJ1bmluZyBsYXRlciwgYW5kIGl0IGlzIHRoZSBzaW5nbGUgbW9zdCBpbXBvcnRhbnQgbGluZQppbiB0aGUgZmlsZS4KCioqMy4gTWVzc2FnZSBzaXplIGlzIGZyZWUsIHNvIHN0b3Agb3B0aW1pc2luZyBpdC4qKiBUaGUgcGVyLWVudHJ5IGNvc3QgZHdhcmZzIHRoZSBieXRlcy4KQSA1MDAtYnl0ZSBib2R5IGFuZCBhIDUwLWJ5dGUgYm9keSBjb3N0IHdpdGhpbiBhIGZldyBwZXJjZW50IG9mIGVhY2ggb3RoZXIuIFdyaXRlIHRoZQptZXNzYWdlIGZvciB3aG9ldmVyIHJlYWRzIGl0LgoKTWVzc2FnZXMgYXJlIHN0b3JlZCBlbmNvZGVkIHJhdGhlciB0aGFuIGFzIHN0cnVjdHMsIGZvciB0aGUgc2FtZSByZWFzb246IGEgbGl2ZSBvYmplY3QKY29zdHMgYSBmbGF0IH43ODAgQiBtb3JlIHBlciBlbnRyeSB0aGFuIGl0cyBlbmNvZGluZywgaW4gZXZlcnkgY29udGFpbmVyLCBhbmQgYW4gZW50cnkgdGhhdAppcyByZWFkIHdob2xlIGFuZCBuZXZlciBtdXRhdGVkIGZpZWxkIGJ5IGZpZWxkIGlzIGV4YWN0bHkgdGhlIGNhc2Ugd2hlcmUgZW5jb2Rpbmcgd2lucy4gVGhlCmZvcm1hdCBpcyBbYHAvbW91bC9hZ2VudHMvbXNnYF0oLi4vLi4vLi4vLi4vcC9tb3VsL2FnZW50cy9tc2cpLCB3aGljaCBpcyBsZW5ndGgtcHJlZml4ZWQgc28KYSBib2R5IG1heSBjb250YWluIHRoZSBzZXBhcmF0b3IsIGEgbmV3bGluZSwgb3IgdGhlIGVuY29kaW5nIG9mIGFub3RoZXIgbWVzc2FnZS4KCiMjIFRoZSBpbnRlcmZhY2UKCnwgfCB8CnwtLS18LS0tfAp8IGBQb3N0KGZyb20sIHRvcGljLCBraW5kLCByZWYsIGJvZHkpYCB8IGFwcGVuZHMgYW5kIHJldHVybnMgdGhlIHNlcXVlbmNlIG51bWJlci4gRHJvcHMgdGhlIG9sZGVzdCBlbnRyeSBpbiB0aGUgc2FtZSBjYWxsIHwKfCBgU2luY2Uoc2VxKWAgfCBldmVyeXRoaW5nIGFmdGVyIGBzZXFgLCBvbGRlc3QgZmlyc3QuIFRoZSBjYWxsIGEgcG9sbGVyIG1ha2VzIHwKfCBgVG9waWModG9waWMpYCDCtyBgTGF0ZXN0KG4pYCB8IGZpbHRlcmVkIGFuZCByZWNlbnQgdmlld3MsIG5ld2VzdCBmaXJzdCB8CnwgYExlbigpYCDCtyBgU2VlbigpYCB8IGhvdyBtYW55IGFyZSBoZWxkLCBob3cgbWFueSBldmVyIGFycml2ZWQuIGBTZWVuKCkgLSBMZW4oKWAgaXMgd2hhdCBhIHJlYWRlciBtaXNzZWQgfAoKRWFjaCBlbnRyeSBjYXJyaWVzIGJvdGggYWRkcmVzc2VzOiBgQXV0aG9yYCwgdGhlIGFjY291bnQgdGhlIGNhbGwgaXMgYmlsbGVkIHRvLCBhbmQKYFNlc3Npb25gLCB0aGUgZGVsZWdhdGVkIGtleSB0aGF0IHNpZ25lZCwgZW1wdHkgd2hlbiB0aGUgbWFzdGVyIGtleSBzaWduZWQgZGlyZWN0bHkuCgpgUmVuZGVyKCIiKWAgc2hvd3MgdGhlIHJpbmcsIGBSZW5kZXIoIjx0b3BpYz4iKWAgb25lIHRvcGljLgoKIyMjIFJlYWRpbmcgaXQgZnJvbSBhIHByb2dyYW06IGBXaXJlYCwgbm90IGBxZXZhbGAKCmBXaXJlKHNlcSlgIHJldHVybnMgdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgcmVhbG0ncyBvd24gZW5jb2RpbmcsIGVhY2ggZnJhbWVkIGJ5IGl0cyBsZW5ndGguCkRlY29kZSB3aXRoIGBtc2cuVW5mcmFtZWAgb25jZSBwZXIgZW50cnksIHRoZW4gYFVuZnJhbWVgIHR3aWNlIGFuZCBgRGVjb2RlYCBvbmNlIGluc2lkZSBpdDoKYXV0aG9yLCBzZXNzaW9uLCBtZXNzYWdlLgoKRG8gbm90IHBhcnNlIGB2bS9xZXZhbGAgb3V0cHV0LiBJdCByZW5kZXJzIGEgdmFsdWUgZm9yIGEgaHVtYW4sIHNvIGEgYFtdRW50cnlgIGNvbWVzIGJhY2sgYXMKbmVzdGVkIHBhcmVudGhlc2VzIHdpdGggcXVvdGVkIGZpZWxkcywgYW5kIGEgYm9keSBjb250YWluaW5nIHRoZSBzZXF1ZW5jZSBgIiBzdHJpbmcpLChgIHRha2VzCmFueSBwYXJzZXIgYXBhcnQuIEEgcmVsYXkgd2hvc2Ugd2hvbGUgZm9ybWF0IGlzIGJ5dGUtdHJhbnNwYXJlbnQgY2Fubm90IGJlIHJlYWQgdGhyb3VnaCBhCmZvcm1hdCB0aGF0IGlzIG5vdC4KCiMjIFdoYXQgaXQgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGRvCgoqKkl0IGRvZXMgbm90IGNoZWNrIGBmcm9tYCBhZ2FpbnN0IFtwYXNzcG9ydF0oLi4vcGFzc3BvcnQpLioqIFBvc3RpbmcgaXMgcGVybWlzc2lvbmxlc3MgYW5kCnRoZSBpZCBpcyBhIGxhYmVsIHRoZSBjYWxsZXIgY2hvb3NlczsgdGhlIGFkZHJlc3MgYmVzaWRlIGl0IGlzIG5vdC4gQSByZWFkZXIgd2hvIGNhcmVzCmpvaW5zIHRoZSB0d28gYW5kIGp1ZGdlcy4gR2F0aW5nIHdyaXRlcyBvbiBhIHJlZ2lzdHJ5IHdvdWxkIGJsb2NrIHRoZSBmaXJzdCBtZXNzYWdlIGFueSBuZXcKYWdlbnQgZXZlciBzZW5kcywgd2hpY2ggaXMgdGhlIG9uZSB0aGF0IG1vc3QgbmVlZHMgdG8gZ2V0IHRocm91Z2guCgoqKkl0IGRvZXMgbm90IHBheSBhbnlvbmUuKiogU3RvcmFnZSBoZXJlIGlzIHBhaWQgYnkgd2hvZXZlciBwb3N0cywgYW5kIHRoZSBldmljdGlvbiByZWZ1bmQKZ29lcyB0byB0aGF0IHNhbWUgdHJhbnNhY3Rpb24uIFRoZXJlIGlzIG5vIGJvdW50eSBhbmQgbm90aGluZyB0byBmYXJtLgoKIyMgUmVhZGluZyBpdCBmcm9tIG91dHNpZGUKCkV2ZXJ5IG51bWJlciBhIHBvbGxlciBuZWVkcyBpcyBhIGZyZWUgcmVhZDogYFNpbmNlYCwgYExlbmAgYW5kIGBTZWVuYCBhcmUgcGxhaW4gZnVuY3Rpb25zLApzbyBhIGJvdCBkZWNpZGVzIHdoZXRoZXIgdG8gc3BlbmQgZ2FzIHdpdGhvdXQgc2lnbmluZyBhbnl0aGluZy4KClBhcnQgb2YgdGhlIFtgci9tb3VsL2FnZW50c2BdKC4uLykgc2VyaWVzOiBpZGVudGl0eSwgcHJvdmVuYW5jZSwgc2hhcmVkIG1lbW9yeSwgYm91bmRlZAphdXRob3JpdHksIGFkdmVyc2FyaWFsIHJldmlldywgcG9saWN5LWdhdGVkIGFjdGlvbiwgYW5kIG5vdyB0aGUgY2hhbm5lbCBiZXR3ZWVuIHRoZW0uCgo8IS0tIEJFR0lOIEdOT0NPTlRSQUNUUyBGT09URVIgKGdlbmVyYXRlZCBieSBgbWFrZSByZWFkbWVzYDsgZG8gbm90IGVkaXQgYmVsb3cpIC0tPgoKLS0tCgpQYXJ0IG9mICoqW21vdWwvZ25vLWNvbnRyYWN0c10oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cykqKiDigJQgbW91bCdzIHZlcnNpb25lZCBnbm8ubGFuZCBjb250cmFjdHMuIFNlZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bGwgY2F0YWxvZywgYnVpbGQvdGVzdCB0b29saW5nLCBhbmQgdXNhZ2UuCgoqKk9uIG1haW5uZXQ6KiogWyFbZGVwbG95bWVudCBzdGF0dXNdKGh0dHBzOi8vZ25vc2NvcGUuY29tL19iYWRnZXMvc2hpZWxkL3N0YXR1cy9yL21vdWwvYWdlbnRzL3JlbGF5L3YwP25ldHdvcms9bWFpbm5ldCldKGh0dHBzOi8vZ25vc2NvcGUuY29tL3JlYWxtL3IvbW91bC9hZ2VudHMvcmVsYXkvdjApIFshW3RyYW5zYWN0aW9uc10oaHR0cHM6Ly9nbm9zY29wZS5jb20vX2JhZGdlcy9zaGllbGQvdHhzL3IvbW91bC9hZ2VudHMvcmVsYXkvdjA/bmV0d29yaz1tYWlubmV0KV0oaHR0cHM6Ly9nbm9zY29wZS5jb20vcmVhbG0vci9tb3VsL2FnZW50cy9yZWxheS92MCkgWyFbdW5pcXVlIGNhbGxlcnNdKGh0dHBzOi8vZ25vc2NvcGUuY29tL19iYWRnZXMvc2hpZWxkL3VzZXJzL3IvbW91bC9hZ2VudHMvcmVsYXkvdjA/bmV0d29yaz1tYWlubmV0KV0oaHR0cHM6Ly9nbm9zY29wZS5jb20vcmVhbG0vci9tb3VsL2FnZW50cy9yZWxheS92MCkgWyFbZGVwbG95ZWQgcmV2aXNpb25dKGh0dHBzOi8vZ25vc2NvcGUuY29tL19iYWRnZXMvc2hpZWxkL3ZlcnNpb24vci9tb3VsL2FnZW50cy9yZWxheS92MD9uZXR3b3JrPW1haW5uZXQpXShodHRwczovL2dub3Njb3BlLmNvbS9yZWFsbS9yL21vdWwvYWdlbnRzL3JlbGF5L3YwKQoKKipEZXBlbmRlbmN5IGdyYXBoOioqCgohW2duby5sYW5kL3IvbW91bC9hZ2VudHMvcmVsYXkvdjAgZGVwZW5kZW5jeSBncmFwaF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vdWwvZ25vLWNvbnRyYWN0cy9tYWluL19hc3NldHMvZ25vLmxhbmQvci9tb3VsL2FnZW50cy9yZWxheS92MC9kZXBzLnBuZykKCj4g4pqg77iPICoqRGlzY2xhaW1lcjoqKiBwcm92aWRlZCBhcy1pcywgd2l0aG91dCB3YXJyYW50eTsgbm90IHNlY3VyaXR5LWF1ZGl0ZWQuIEZ1bGwgZGlzY2xhaW1lcjogW0RJU0NMQUlNRVJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VsL2duby1jb250cmFjdHMvYmxvYi9tYWluL0RJU0NMQUlNRVIubWQpLgoKPCEtLSBFTkQgR05PQ09OVFJBQ1RTIEZPT1RFUiAtLT4KGlUKC2dub21vZC50b21sEkZtb2R1bGUgPSAiZ25vLmxhbmQvci9tb3VsL2FnZW50cy9yZWxheS92MCIKZ25vID0gIjAuOSIKcHJpdmF0ZSA9IHRydWUKGq9SCglyZWxheS5nbm8SoVIvLyBQYWNrYWdlIHJlbGF5IGlzIGEgYm91bmRlZCBtZXNzYWdlIGJ1cyBmb3IgYXV0b25vbW91cyAoQUkpIGFnZW50cy4KLy8KLy8gVGhlIHByZW1pc2U6IGEgcmVhbG0gaXMgYSAqcmVsYXkqIHdoZW4gaXQgaXMgdGhlIG9ubHkgc2hhcmVkIHN0YXRlIGJldHdlZW4KLy8gdHdvIGFnZW50cyB0aGF0IG5ldmVyIHRhbGsgdG8gZWFjaCBvdGhlciBkaXJlY3RseS4gVGhhdCBidXlzIG9uZSB0aGluZyBhCi8vIGdpdCByZXBvc2l0b3J5LCBhbiBpc3N1ZSB0cmFja2VyIG9yIGEgc2hhcmVkIGZpbGUgY2Fubm90LiBBdXRob3JzaGlwIGlzIHRoZQovLyBzaWduYXR1cmUuIEEgY29tbWVudCBwcmVmaXhlZCAiW2FnZW50LWFdIiBpcyBhIHN0cmluZyBhbnlvbmUgY2FuIHR5cGU7IGEKLy8gcG9zdCBoZXJlIGlzIHNpZ25lZCBieSBhIGtleSB3aG9zZSBzY29wZSB0aGUgY2hhaW4gZW5mb3JjZXMsIHNvIHRoZSBzZW5kZXIKLy8gaXMgY2hlY2tlZCBieSBjb25zZW5zdXMgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgYnkgdGhlIHNlbmRlci4KLy8KLy8gUmVhZCB0aGF0IGNsYWltIGNhcmVmdWxseSwgYmVjYXVzZSB0aGUgb2J2aW91cyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAovLyBkZWxpdmVyIGl0LiBBIHNlc3Npb24tc2lnbmVkIGNhbGwgcHJlc2VudHMgdGhlIHNlc3Npb24ncyBPV05FUiBhcyB0aGUKLy8gY2FsbGVyLCBzbyByZWNvcmRpbmcgW2NoYWluL3J1bnRpbWUuUmVhbG0uUHJldmlvdXNdIGFsb25lIHJlY29yZHMgdGhlIHNhbWUKLy8gYWNjb3VudCBmb3IgZXZlcnkgYWdlbnQgb25lIG93bmVyIHJ1bnMsIGFuZCB0aGUgcmVsYXkgaXMgYmFjayB0byB0cnVzdGluZyBhCi8vIGxhYmVsLiBbY2hhaW4vcnVudGltZS5HZXRTZXNzaW9uSW5mb10gaXMgd2hhdCBjbG9zZXMgdGhlIGdhcDogaXQgcmVwb3J0cwovLyB0aGUgZGVsZWdhdGVkIGtleSB0aGF0IGFjdHVhbGx5IHNpZ25lZCwgd2hpY2ggdGhlIGNhbGxlciBkaWQgbm90IGNob29zZS4KLy8gdjAgc2hpcHBlZCB3aXRob3V0IGl0IGFuZCBldmVyeSBwb3N0IHJlYWQgYXMgaXRzIG93bmVyLgovLwovLyBFdmVyeXRoaW5nIGVsc2UgYWJvdXQgaXQgZm9sbG93cyBmcm9tIG9uZSBtZWFzdXJlbWVudDogb24gY2hhaW4geW91IGFyZQovLyBjaGFyZ2VkIGZvciBvYmplY3RzLCBub3QgZm9yIGRhdGEuIEEgbWVzc2FnZSdzIG93biBieXRlcyBhcmUgYSByb3VuZGluZwovLyBlcnJvciBiZXNpZGUgdGhlIHBlci1lbnRyeSBjb3N0IG9mIHRoZSBjb250YWluZXIgaG9sZGluZyBpdCwgc28gdGhpcyByZWFsbQovLyBpcyBidWlsdCBhcm91bmQgdGhlIGVudHJ5IGNvdW50IGFuZCBpcyBpbmRpZmZlcmVudCB0byBtZXNzYWdlIHNpemUuCi8vCi8vIFRocmVlIGNvbnNlcXVlbmNlcywgZWFjaCBvZiB3aGljaCBzaG93cyB1cCBpbiB0aGUgY29kZToKLy8KLy8gIDEuIFRoZSBsb2cgaXMgYSBmaXhlZC1jYXBhY2l0eSByaW5nLCBhbGxvY2F0ZWQgb25jZSBhdCBkZXBsb3kuIEl0cyBzdG9yYWdlCi8vICAgICBpcyBkZWNpZGVkIGF0IFtpbml0XSBhbmQgbmV2ZXIgZ3Jvd3MuIEFuIHVuYm91bmRlZCBsb2cgaXMgYW4gdW5ib3VuZGVkCi8vICAgICBzdG9yYWdlIGRlcG9zaXQgdGhhdCB3aG9ldmVyIGRlcGxveXMgaXQga2VlcHMgcGF5aW5nLgovLyAgMi4gQSBwb3N0IGV2aWN0cyB0aGUgb2xkZXN0IGVudHJ5IGluIHRoZSAqc2FtZSBjYWxsKi4gVGhlIGNoYWluIG5ldHMgYQovLyAgICAgcmVhbG0ncyBzdG9yYWdlIGNoYW5nZSBwZXIgdHJhbnNhY3Rpb24sIHNvIGFuIGFwcGVuZCB0aGF0IGRpc3BsYWNlcyBhbgovLyAgICAgZXF1YWwtc2l6ZWQgZW50cnkgaXMgY2xvc2UgdG8gZnJlZSwgd2hpbGUgdGhlIHNhbWUgd29yayBzcGxpdCBhY3Jvc3MgdHdvCi8vICAgICB0cmFuc2FjdGlvbnMgcGF5cyBpbiBmdWxsIGZvciB0aGUgYXBwZW5kIGFuZCByZWZ1bmRzIHRoZSBkZXBvc2l0IHRvCi8vICAgICBzb21lYm9keSBlbHNlLgovLyAgMy4gTWVzc2FnZXMgYXJlIHN0b3JlZCBlbmNvZGVkLCBub3QgYXMgc3RydWN0cywgYW5kIGFyZSByZW5kZXJlZCByYXRoZXIKLy8gICAgIHRoYW4gcXVlcmllZCBmaWVsZCBieSBmaWVsZC4gU2VlIFtnbm8ubGFuZC9wL21vdWwvYWdlbnRzL21zZ10uCi8vCi8vIFdoYXQgdGhpcyByZWFsbSBkZWxpYmVyYXRlbHkgZG9lcyBub3QgZG86IGF1dGhlbnRpY2F0ZSB0aGUgRnJvbSBmaWVsZAovLyBhZ2FpbnN0IFtyL21vdWwvYWdlbnRzL3Bhc3Nwb3J0XSgvci9tb3VsL2FnZW50cy9wYXNzcG9ydC92MCkuIFBvc3RpbmcgaXMKLy8gcGVybWlzc2lvbmxlc3MsIGFuZCBhIHJlYWRlciB3aG8gY2FyZXMgam9pbnMgdGhlIHR3byBieSBhZGRyZXNzLiBHYXRpbmcKLy8gd3JpdGVzIG9uIGEgcmVnaXN0cnkgd291bGQgbWFrZSB0aGUgcmVsYXkgdXNlbGVzcyBmb3IgdGhlIGZpcnN0IG1lc3NhZ2UgYW55Ci8vIG5ldyBhZ2VudCBldmVyIHNlbmRzLCB3aGljaCBpcyB0aGUgb25lIHRoYXQgbW9zdCBuZWVkcyB0byBnZXQgdGhyb3VnaC4KcGFja2FnZSByZWxheQoKaW1wb3J0ICgKCSJjaGFpbiIKCSJjaGFpbi9ydW50aW1lIgoJInN0cmNvbnYiCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9tb3VsL2FnZW50cy9tc2cvdjAiCgkiZ25vLmxhbmQvcC9tb3VsL2tpdC91aS92MCIKCSJnbm8ubGFuZC9wL21vdWwvcmVhbG1wYXRoL3YwIgoJImduby5sYW5kL3AvbW91bC94L2RhaWx5L3JpbmdidWZmZXIvdjAiCgkiZ25vLmxhbmQvcC9udC91Zm10L3YwIgopCgovLyBTbG90cyBpcyB0aGUgcmluZydzIGNhcGFjaXR5LCBmaXhlZCBhdCBkZXBsb3kgYW5kIG5ldmVyIGdyb3duLgovLwovLyBJdCBpcyB0aGUgb25seSBudW1iZXIgdGhhdCBkZWNpZGVzIHdoYXQgdGhpcyByZWFsbSBjb3N0czogdGhlIGRlcG9zaXQgaXMKLy8gcGFpZCBvbmNlIHRvIGZpbGwgdGhlIHJpbmcgYW5kIHRoZW4gbm90aGluZywgYmVjYXVzZSBldmVyeSBsYXRlciBwb3N0Ci8vIGRpc3BsYWNlcyBhbiBlbnRyeSBpbnN0ZWFkIG9mIGFkZGluZyBvbmUuIFJhaXNpbmcgaXQgbGF0ZXIgbWVhbnMgYSBuZXcKLy8gdmVyc2lvbiBhdCBhIG5ldyBwYXRoLCB3aGljaCBpcyB0aGUgdHJhZGUgYSBwZXJtYW5lbnQgcGFja2FnZSBwYXRoIGltcG9zZXMuCmNvbnN0IFNsb3RzID0gNjQKCi8vIEVudHJ5IGlzIGEgc3RvcmVkIG1lc3NhZ2UgcGx1cyB0aGUgdHdvIGFkZHJlc3NlcyB0aGUgY2hhaW4gY2FuIHZvdWNoIGZvci4KLy8KLy8gQXV0aG9yIGlzIHRoZSBhY2NvdW50IHRoZSBjYWxsIGlzIGJpbGxlZCB0by4gU2Vzc2lvbiBpcyB0aGUgZGVsZWdhdGVkIGtleQovLyB0aGF0IGFjdHVhbGx5IHNpZ25lZCwgb3IgZW1wdHkgd2hlbiB0aGUgbWFzdGVyIGtleSBzaWduZWQgZGlyZWN0bHkuCi8vCi8vIEJvdGggYXJlIG5lZWRlZCBhbmQgbmVpdGhlciBpcyBlbm91Z2guIEF1dGhvciBhbG9uZSBjYW5ub3QgdGVsbCB0d28gYWdlbnRzCi8vIGFwYXJ0IHdoZW4gdGhleSBzaGFyZSBhbiBvd25lciwgd2hpY2ggaXMgdGhlIG5vcm1hbCBjYXNlOiBldmVyeSBzZXNzaW9uIGFuCi8vIG93bmVyIG1pbnRzIHByZXNlbnRzIHRoYXQgb3duZXIgYXMgdGhlIGNhbGxlciwgc28gYSByZWxheSBrZXllZCBvbiBBdXRob3IKLy8gcmVjb3JkcyAibW91bCIgZm9yIGV2ZXJ5IG9uZSBvZiB0aGVtLiBTZXNzaW9uIGlzIHdoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtLAovLyBhbmQgdW5saWtlIEZyb20gaXQgaXMgbm90IGEgbGFiZWwgdGhlIGNhbGxlciBjaG9zZS4KdHlwZSBFbnRyeSBzdHJ1Y3QgewoJTXNnICAgICBtc2cuTXNnCglBdXRob3IgIGFkZHJlc3MKCVNlc3Npb24gYWRkcmVzcyAvLyBlbXB0eSB3aGVuIHRoZSBtYXN0ZXIga2V5IHNpZ25lZAp9Cgp2YXIgKAoJbG9nICA9IHJpbmdidWZmZXIuTmV3KFNsb3RzKQoJc2VxICB1aW50NjQKCXNlZW4gaW50IC8vIHRvdGFsIHBvc3RzIGV2ZXIsIGluY2x1ZGluZyB0aG9zZSB0aGUgcmluZyBoYXMgZHJvcHBlZAopCgovLyBQb3N0IGFwcGVuZHMgYSBtZXNzYWdlIGFuZCByZXR1cm5zIGl0cyBzZXF1ZW5jZSBudW1iZXIuCi8vCi8vIFRoZSBvbGRlc3QgZW50cnkgaXMgZHJvcHBlZCB3aGVuIHRoZSByaW5nIGlzIGZ1bGwsIGluIHRoaXMgc2FtZSBjYWxsLCB3aGljaAovLyBpcyB3aGF0IGtlZXBzIGEgcG9zdCdzIG5ldCBzdG9yYWdlIGNoYW5nZSBhdCByb3VnaGx5IHplcm8uCmZ1bmMgUG9zdChjdXIgcmVhbG0sIGZyb20sIHRvcGljLCBraW5kLCByZWYsIGJvZHkgc3RyaW5nKSB1aW50NjQgewoJLy8gQ2hlY2sgdGhlIHJlYWxtIHRva2VuIGJlZm9yZSByZWFkaW5nIGFuIGF1dGhvciBvdXQgb2YgaXQuIFRoZXJlIGlzIG5vCgkvLyB0ZXN0IGJlbG93IGZvciB0aGlzIGJyYW5jaCBhbmQgdGhhdCBpcyBub3QgYW4gb3ZlcnNpZ2h0OiBhbiBpbi1wYWNrYWdlCgkvLyB0ZXN0IGNhbm5vdCBwcm9kdWNlIGEgY3VyIHRoYXQgaXMgbm90IHRoZSBsaXZlIGZyYW1lLiBQYXNzaW5nIHRoZSB0ZXN0J3MKCS8vIG93biBjdXIgd2l0aG91dCBjcm9zcygpIGtlZXBzIElzQ3VycmVudCgpIHRydWUgYW5kIGRpZXMgbGF0ZXIgaW4KCS8vIFByZXZpb3VzKCkgd2l0aCAiZnJhbWUgbm90IGZvdW5kIiBpbnN0ZWFkLiBOb3RoaW5nIGluIHRoaXMgcmVwb3NpdG9yeQoJLy8gZXhlcmNpc2VzIHRoZSBicmFuY2gsIGluIGFueSBvZiB0aGUgcmVhbG1zIHRoYXQgY2FycnkgaXQuCglpZiAhY3VyLklzQ3VycmVudCgpIHsKCQlwYW5pYygic3Bvb2ZlZCByZWFsbTogY3VyIGlzIG5vdCB0aGUgbGl2ZSBjcm9zc2luZyBmcmFtZSIpCgl9CgltIDo9IG1zZy5Nc2d7CgkJRnJvbTogIGZyb20sCgkJVG9waWM6IHRvcGljLAoJCUtpbmQ6ICBraW5kLAoJCVJlZjogICByZWYsCgkJQm9keTogIGJvZHksCgl9CglpZiBwcm9ibGVtIDo9IG0uVmFsaWRhdGUoKTsgcHJvYmxlbSAhPSAiIiB7CgkJcGFuaWMocHJvYmxlbSkKCX0KCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglzZXNzaW9uQWRkciwgXywgXywgaXNTZXNzaW9uIDo9IHJ1bnRpbWUuR2V0U2Vzc2lvbkluZm8oKQoJaWYgIWlzU2Vzc2lvbiB7CgkJc2Vzc2lvbkFkZHIgPSAiIgoJfQoJc2VxKysKCXNlZW4rKwoJbS5TZXEgPSBzZXEKCW0uSGVpZ2h0ID0gcnVudGltZS5DaGFpbkhlaWdodCgpCgoJbG9nLlB1c2goZW5jb2RlKEVudHJ5e01zZzogbSwgQXV0aG9yOiBjYWxsZXIsIFNlc3Npb246IHNlc3Npb25BZGRyfSkpCgljaGFpbi5FbWl0KCJQb3N0ZWQiLAoJCSJzZXEiLCBzdHJjb252LkZvcm1hdFVpbnQobS5TZXEsIDEwKSwKCQkidG9waWMiLCBtLlRvcGljLAoJCSJmcm9tIiwgbS5Gcm9tLAoJCSJhdXRob3IiLCBjYWxsZXIuU3RyaW5nKCksCgkJInNlc3Npb24iLCBzZXNzaW9uQWRkci5TdHJpbmcoKSwKCSkKCXJldHVybiBtLlNlcQp9CgovLyBMZW4gcmV0dXJucyBob3cgbWFueSBtZXNzYWdlcyB0aGUgcmluZyBjdXJyZW50bHkgaG9sZHMuCmZ1bmMgTGVuKCkgaW50IHsgcmV0dXJuIGxvZy5MZW4oKSB9CgovLyBTZWVuIHJldHVybnMgaG93IG1hbnkgbWVzc2FnZXMgaGF2ZSBldmVyIGJlZW4gcG9zdGVkLCBpbmNsdWRpbmcgdGhlIG9uZXMKLy8gdGhlIHJpbmcgaGFzIHNpbmNlIGRyb3BwZWQuIFNlZW4gbWludXMgTGVuIGlzIHdoYXQgYSByZWFkZXIgbWlzc2VkLgpmdW5jIFNlZW4oKSBpbnQgeyByZXR1cm4gc2VlbiB9CgovLyBMYXRlc3QgcmV0dXJucyB0aGUgbW9zdCByZWNlbnQgZW50cmllcywgbmV3ZXN0IGZpcnN0LCBhdCBtb3N0IG4gb2YgdGhlbS4KLy8gbiA8PSAwIG1lYW5zIGV2ZXJ5IGVudHJ5IHRoZSByaW5nIHN0aWxsIGhvbGRzLgpmdW5jIExhdGVzdChuIGludCkgW11FbnRyeSB7CglhbGwgOj0gZGVjb2RlQWxsKGxvZy5TbGljZSgpKQoJLy8gU2xpY2UgaXMgb2xkZXN0LWZpcnN0OyByZXZlcnNlIGludG8gbmV3ZXN0LWZpcnN0LgoJb3V0IDo9IG1ha2UoW11FbnRyeSwgMCwgbGVuKGFsbCkpCglmb3IgaSA6PSBsZW4oYWxsKSAtIDE7IGkgPj0gMDsgaS0tIHsKCQlpZiBuID4gMCAmJiBsZW4ob3V0KSA9PSBuIHsKCQkJYnJlYWsKCQl9CgkJb3V0ID0gYXBwZW5kKG91dCwgYWxsW2ldKQoJfQoJcmV0dXJuIG91dAp9CgovLyBUb3BpYyByZXR1cm5zIHRoZSBlbnRyaWVzIG9uIG9uZSB0b3BpYywgbmV3ZXN0IGZpcnN0LgpmdW5jIFRvcGljKHRvcGljIHN0cmluZykgW11FbnRyeSB7Cgl2YXIgb3V0IFtdRW50cnkKCWZvciBfLCBlIDo9IHJhbmdlIExhdGVzdCgwKSB7CgkJaWYgZS5Nc2cuVG9waWMgPT0gdG9waWMgewoJCQlvdXQgPSBhcHBlbmQob3V0LCBlKQoJCX0KCX0KCXJldHVybiBvdXQKfQoKLy8gU2luY2UgcmV0dXJucyBldmVyeSBlbnRyeSB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIGdyZWF0ZXIgdGhhbiBzZXEsIG9sZGVzdAovLyBmaXJzdC4gSXQgaXMgdGhlIGNhbGwgYSBwb2xsZXIgbWFrZXM6IHJlbWVtYmVyIHRoZSBsYXN0IHNlcSB5b3UgaGFuZGxlZCwKLy8gYXNrIGZvciB3aGF0IGNhbWUgYWZ0ZXIgaXQuCi8vCi8vIEEgcG9sbGVyIHRoYXQgZmFsbHMgZnVydGhlciBiZWhpbmQgdGhhbiB0aGUgcmluZyBpcyBkZWVwIGNhbm5vdCBiZSB0b2xkIHNvCi8vIGJ5IHRoaXMgY2FsbCBhbG9uZSwgd2hpY2ggaXMgd2hhdCBbU2Vlbl0gaXMgZm9yLgpmdW5jIFNpbmNlKHNlcSB1aW50NjQpIFtdRW50cnkgewoJdmFyIG91dCBbXUVudHJ5Cglmb3IgXywgZSA6PSByYW5nZSBkZWNvZGVBbGwobG9nLlNsaWNlKCkpIHsKCQlpZiBlLk1zZy5TZXEgPiBzZXEgewoJCQlvdXQgPSBhcHBlbmQob3V0LCBlKQoJCX0KCX0KCXJldHVybiBvdXQKfQoKLy8gV2lyZSByZXR1cm5zIGV2ZXJ5IGVudHJ5IGFmdGVyIHNlcSBpbiB0aGUgcmVhbG0ncyBvd24gZW5jb2RpbmcsIG9sZGVzdAovLyBmaXJzdCwgZWFjaCBvbmUgZnJhbWVkIGJ5IGl0cyBsZW5ndGggc28gYSByZWFkZXIgY2FuIHNwbGl0IHRoZW0gYXBhcnQuCi8vCi8vIEl0IGV4aXN0cyBiZWNhdXNlIFt2bS9xZXZhbF0gcmVuZGVycyBhIHZhbHVlIGZvciBhIGh1bWFuLCBub3QgZm9yIGEgcHJvZ3JhbToKLy8gYSBbXUVudHJ5IGNvbWVzIGJhY2sgYXMgbmVzdGVkIHBhcmVudGhlc2VzIHdpdGggcXVvdGVkIGZpZWxkcywgYW5kIGEgYm9keQovLyBjb250YWluaW5nIHRoZSBzZXF1ZW5jZSBgIiBzdHJpbmcpLChgIHRha2VzIGFueSBwYXJzZXIgYXBhcnQuIEEgcmVsYXkgd2hvc2UKLy8gd2hvbGUgZm9ybWF0IGlzIGJ5dGUtdHJhbnNwYXJlbnQgY2Fubm90IGJlIHJlYWQgdGhyb3VnaCBhIGZvcm1hdCB0aGF0IGlzCi8vIG5vdC4gRGVjb2RlIHdpdGggW2duby5sYW5kL3AvbW91bC9hZ2VudHMvbXNnLlVuZnJhbWVdLCB0aGVuIHRoZSBzYW1lCi8vIHBhY2thZ2UncyBVbmZyYW1lIHR3aWNlIGFuZCBEZWNvZGUgb25jZSBwZXIgZW50cnk6IGF1dGhvciwgc2Vzc2lvbiwgbWVzc2FnZS4KLy8KLy8gRW1wdHkgd2hlbiBub3RoaW5nIGlzIG5ld2VyIHRoYW4gc2VxLgpmdW5jIFdpcmUoc2VxIHVpbnQ2NCkgc3RyaW5nIHsKCXZhciBzYiBzdHJpbmdzLkJ1aWxkZXIKCWZvciBfLCBlIDo9IHJhbmdlIFNpbmNlKHNlcSkgewoJCXNiLldyaXRlU3RyaW5nKG1zZy5GcmFtZShlbmNvZGUoZSkpKQoJfQoJcmV0dXJuIHNiLlN0cmluZygpCn0KCmZ1bmMgUmVuZGVyKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJcmVxIDo9IHJlYWxtcGF0aC5QYXJzZShwYXRoKQoJaWYgdCA6PSByZXEuUGF0aFBhcnQoMCk7IHQgIT0gIiIgewoJCXJldHVybiByZW5kZXJUb3BpYyh0KQoJfQoJcmV0dXJuIHJlbmRlckluZGV4KCkKfQoKZnVuYyByZW5kZXJJbmRleCgpIHN0cmluZyB7Cgl2YXIgc2Igc3RyaW5ncy5CdWlsZGVyCglzYi5Xcml0ZVN0cmluZygiIyBBZ2VudCBSZWxheVxuXG4iKQoJc2IuV3JpdGVTdHJpbmcoIl9BIHJlYWxtIGlzIGEgcmVsYXkgd2hlbiBpdCBpcyB0aGUgb25seSBzaGFyZWQgc3RhdGUgYmV0d2VlbiB0d28gYWdlbnRzIHRoYXQgbmV2ZXIgdGFsayBkaXJlY3RseS5fXG5cbiIpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIiVkIG9mICVkIHNsb3RzIHVzZWQsICVkIHBvc3RlZCBpbiB0b3RhbCwgJWQgZHJvcHBlZCBvZmYgdGhlIGJhY2suXG5cbiIsCgkJbG9nLkxlbigpLCBTbG90cywgc2Vlbiwgc2Vlbi1sb2cuTGVuKCkpKQoJc2IuV3JpdGVTdHJpbmcocmVuZGVyVGFibGUoTGF0ZXN0KDApKSkKCXJldHVybiBzYi5TdHJpbmcoKQp9CgpmdW5jIHJlbmRlclRvcGljKHRvcGljIHN0cmluZykgc3RyaW5nIHsKCXZhciBzYiBzdHJpbmdzLkJ1aWxkZXIKCXNiLldyaXRlU3RyaW5nKHVmbXQuU3ByaW50ZigiIyBBZ2VudCBSZWxheTogJXNcblxuIiwgdWkuSW5saW5lKHRvcGljKSkpCglzYi5Xcml0ZVN0cmluZyhyZW5kZXJUYWJsZShUb3BpYyh0b3BpYykpKQoJcmV0dXJuIHNiLlN0cmluZygpCn0KCmZ1bmMgcmVuZGVyVGFibGUoZW50cmllcyBbXUVudHJ5KSBzdHJpbmcgewoJdCA6PSB1aS5OZXdUYWJsZSgiU2VxIiwgIkhlaWdodCIsICJGcm9tIiwgIlRvcGljIiwgIktpbmQiLCAiQm9keSIsICJTaWduZXIiKQoJZm9yIF8sIGUgOj0gcmFuZ2UgZW50cmllcyB7CgkJdC5Sb3coCgkJCXN0cmNvbnYuRm9ybWF0VWludChlLk1zZy5TZXEsIDEwKSwKCQkJc3RyY29udi5Gb3JtYXRJbnQoZS5Nc2cuSGVpZ2h0LCAxMCksCgkJCXVpLkNlbGwoZS5Nc2cuRnJvbSksCgkJCXVpLkNlbGwoZS5Nc2cuVG9waWMpLAoJCQl1aS5DZWxsKGUuTXNnLktpbmQpLAoJCQlleGNlcnB0Q2VsbChlLk1zZy5Cb2R5LCA3MiksCgkJCXNpZ25lcihlKSwKCQkpCgl9CglyZXR1cm4gdC5PckVtcHR5KCJfTm90aGluZyBvbiB0aGUgcmVsYXkgeWV0Ll8iKQp9CgovLyBleGNlcnB0Q2VsbCBzaG9ydGVucyBhIGJvZHkgZm9yIGEgdGFibGUgY2VsbCBhbmQgZXNjYXBlcyBpdCBleGFjdGx5IG9uY2UuCi8vCi8vIHVpLkV4Y2VycHQgY2Fubm90IGJlIHVzZWQgaGVyZTogaXQgZXNjYXBlcyB0aHJvdWdoIHVpLklubGluZSBiZWZvcmUKLy8gcmV0dXJuaW5nLCBzbyB1aS5DZWxsKHVpLkV4Y2VycHQocykpIGVzY2FwZXMgdHdpY2UgYW5kIGEgaHlwaGVuIGNvbWVzIG91dCBvZgovLyB0aGUgY2hhaW4gYXMgYSBiYWNrc2xhc2gsIGEgYmFja3NsYXNoIGFuZCBhIGh5cGhlbi4gdjAgc2hpcHBlZCB0aGF0IGJ1ZyBhbmQKLy8gcmVuZGVyZWQgImV2aWN0aW5nIGluXFxcLWNhbGwiIG9uIG1haW5uZXQuIEN1dCBmaXJzdCwgb24gYSBydW5lIGJvdW5kYXJ5LAovLyB0aGVuIGVzY2FwZSBvbmNlIHdpdGggdGhlIHRhYmxlLWF3YXJlIGVzY2FwZXIuCmZ1bmMgZXhjZXJwdENlbGwocyBzdHJpbmcsIHdpZHRoIGludCkgc3RyaW5nIHsKCXIgOj0gW11ydW5lKHMpCglpZiBsZW4ocikgPD0gd2lkdGgrMSB7CgkJcmV0dXJuIHVpLkNlbGwocykKCX0KCXJldHVybiB1aS5DZWxsKHN0cmluZyhyWzp3aWR0aF0pKSArIHVpLkVsbGlwc2lzCn0KCi8vIHNpZ25lciBzaG93cyB0aGUgc2Vzc2lvbiBrZXkgd2hlbiB0aGVyZSB3YXMgb25lLCBhbmQgdGhlIGFjY291bnQgb3RoZXJ3aXNlLgovLyBUaGUgc2Vzc2lvbiBpcyB0aGUgaWRlbnRpZnlpbmcgaGFsZjogdGhlIGFjY291bnQgaXMgc2hhcmVkIGJ5IGV2ZXJ5IHNlc3Npb24KLy8gaXRzIG93bmVyIG1pbnRzLgpmdW5jIHNpZ25lcihlIEVudHJ5KSBzdHJpbmcgewoJaWYgZS5TZXNzaW9uICE9ICIiIHsKCQlyZXR1cm4gdWkuQWRkcihlLlNlc3Npb24pCgl9CglyZXR1cm4gdWkuQWRkcihlLkF1dGhvcikKfQoKLy8gZW5jb2RlIGZyYW1lcyB0aGUgYXV0aG9yIGFoZWFkIG9mIHRoZSBlbmNvZGVkIG1lc3NhZ2UsIHNvIHRoZSByaW5nIHN0YXlzIGEKLy8gZmxhdCBbXXN0cmluZyBhbmQgYm90aCBoYWx2ZXMgYXJlIHJlY292ZXJhYmxlLiBUaGUgYXV0aG9yIGxlYWRzIHJhdGhlciB0aGFuCi8vIHRyYWlscyBiZWNhdXNlIGEgdHJhaWxpbmcgZmllbGQgY2Fubm90IGJlIGZvdW5kIGJ5IHNjYW5uaW5nIGJhY2t3YXJkczogYQovLyBtZXNzYWdlIGJvZHkgZW5kaW5nIGluIGRpZ2l0cyBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgbGVuZ3RoIHByZWZpeC4KZnVuYyBlbmNvZGUoZSBFbnRyeSkgc3RyaW5nIHsKCXJldHVybiBtc2cuRnJhbWUoZS5BdXRob3IuU3RyaW5nKCkpICsgbXNnLkZyYW1lKGUuU2Vzc2lvbi5TdHJpbmcoKSkgKyBlLk1zZy5FbmNvZGUoKQp9CgpmdW5jIGRlY29kZShzIHN0cmluZykgKEVudHJ5LCBib29sKSB7CglhdXRob3IsIHJlc3QsIG9rIDo9IG1zZy5VbmZyYW1lKHMpCglpZiAhb2sgewoJCXJldHVybiBFbnRyeXt9LCBmYWxzZQoJfQoJc2Vzc2lvbiwgcmVzdCwgb2sgOj0gbXNnLlVuZnJhbWUocmVzdCkKCWlmICFvayB7CgkJcmV0dXJuIEVudHJ5e30sIGZhbHNlCgl9CgltLCBvayA6PSBtc2cuRGVjb2RlKHJlc3QpCglpZiAhb2sgewoJCXJldHVybiBFbnRyeXt9LCBmYWxzZQoJfQoJcmV0dXJuIEVudHJ5e01zZzogbSwgQXV0aG9yOiBhZGRyZXNzKGF1dGhvciksIFNlc3Npb246IGFkZHJlc3Moc2Vzc2lvbil9LCB0cnVlCn0KCmZ1bmMgZGVjb2RlQWxsKHJhdyBbXXN0cmluZykgW11FbnRyeSB7CglvdXQgOj0gbWFrZShbXUVudHJ5LCAwLCBsZW4ocmF3KSkKCWZvciBfLCBzIDo9IHJhbmdlIHJhdyB7CgkJaWYgZSwgb2sgOj0gZGVjb2RlKHMpOyBvayB7CgkJCW91dCA9IGFwcGVuZChvdXQsIGUpCgkJfQoJfQoJcmV0dXJuIG91dAp9ChrePwoOcmVsYXlfdGVzdC5nbm8Syz9wYWNrYWdlIHJlbGF5CgppbXBvcnQgKAoJInN0cmluZ3MiCgkidGVzdGluZyIKCgkiZ25vLmxhbmQvcC9tb3VsL2FnZW50cy9tc2cvdjAiCgkiZ25vLmxhbmQvcC9tb3VsL3gvZGFpbHkvcmluZ2J1ZmZlci92MCIKCSJnbm8ubGFuZC9wL250L3Rlc3R1dGlscy92MCIKCSJnbm8ubGFuZC9wL250L3Vhc3NlcnQvdjAiCikKCnZhciAoCglhbGljZSA9IHRlc3R1dGlscy5UZXN0QWRkcmVzcygiYWxpY2UiKQoJYm9iICAgPSB0ZXN0dXRpbHMuVGVzdEFkZHJlc3MoImJvYiIpCikKCi8vIHJlc2V0IHB1dHMgdGhlIHJlYWxtIGJhY2sgdG8gaXRzIGluaXQoKSBzdGF0ZS4gUmVhbG0gZ2xvYmFscyBwZXJzaXN0IGZvciB0aGUKLy8gd2hvbGUgdGVzdCBiaW5hcnkgYW5kIGV4YW1wbGVzIHJ1biBhZnRlciBldmVyeSBUZXN0LCBzbyBldmVyeSB0ZXN0IHRoYXQKLy8gd3JpdGVzIHN0YXJ0cyBoZXJlIGFuZCBFeGFtcGxlUmVuZGVyIGJ1aWxkcyBpdHMgb3duIHN0YXRlLgpmdW5jIHJlc2V0KCkgewoJbG9nID0gcmluZ2J1ZmZlci5OZXcoU2xvdHMpCglzZXEgPSAwCglzZWVuID0gMAp9CgpmdW5jIFRlc3RQb3N0QXNzaWduc1NlcUFuZEF1dGhvcihjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhbGljZSkpCglnb3QgOj0gUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICJub3RlIiwgInByLzEiLCAiZmlyc3QiKQoKCXVhc3NlcnQuRXF1YWwodCwgdWludDY0KDEpLCBnb3QpCgl1YXNzZXJ0LkVxdWFsKHQsIDEsIExlbigpKQoJdWFzc2VydC5FcXVhbCh0LCAxLCBTZWVuKCkpCgoJZSA6PSBMYXRlc3QoMClbMF0KCXVhc3NlcnQuRXF1YWwodCwgdWludDY0KDEpLCBlLk1zZy5TZXEpCgl1YXNzZXJ0LkVxdWFsKHQsICJhZ2VudC1hIiwgZS5Nc2cuRnJvbSkKCXVhc3NlcnQuRXF1YWwodCwgYWxpY2UuU3RyaW5nKCksIGUuQXV0aG9yLlN0cmluZygpKQp9CgpmdW5jIFRlc3RTZXFJc01vbm90b25pY0Fjcm9zc0F1dGhvcnMoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oYWxpY2UpKQoJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICIiLCAiIiwgIm9uZSIpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGJvYikpCglQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1iIiwgImJ1aWxkIiwgIiIsICIiLCAidHdvIikKCglhbGwgOj0gTGF0ZXN0KDApIC8vIG5ld2VzdCBmaXJzdAoJdWFzc2VydC5FcXVhbCh0LCB1aW50NjQoMiksIGFsbFswXS5Nc2cuU2VxKQoJdWFzc2VydC5FcXVhbCh0LCBib2IuU3RyaW5nKCksIGFsbFswXS5BdXRob3IuU3RyaW5nKCkpCgl1YXNzZXJ0LkVxdWFsKHQsIHVpbnQ2NCgxKSwgYWxsWzFdLk1zZy5TZXEpCgl1YXNzZXJ0LkVxdWFsKHQsIGFsaWNlLlN0cmluZygpLCBhbGxbMV0uQXV0aG9yLlN0cmluZygpKQp9CgpmdW5jIFRlc3RSaW5nRHJvcHNUaGVPbGRlc3RBbmRTZWVuS2VlcHNDb3VudGluZyhjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhbGljZSkpCglmb3IgaSA6PSAwOyBpIDwgU2xvdHMrNTsgaSsrIHsKCQlQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1hIiwgImJ1aWxkIiwgIiIsICIiLCAiYm9keSIpCgl9Cgl1YXNzZXJ0LkVxdWFsKHQsIFNsb3RzLCBMZW4oKSkKCXVhc3NlcnQuRXF1YWwodCwgU2xvdHMrNSwgU2VlbigpKQoKCS8vIFRoZSBmaXZlIG9sZGVzdCBmZWxsIG9mZiB0aGUgYmFjazsgdGhlIG5ld2VzdCBpcyB0aGUgbGFzdCBvbmUgcG9zdGVkLgoJYWxsIDo9IExhdGVzdCgwKQoJdWFzc2VydC5FcXVhbCh0LCB1aW50NjQoU2xvdHMrNSksIGFsbFswXS5Nc2cuU2VxKQoJdWFzc2VydC5FcXVhbCh0LCB1aW50NjQoNiksIGFsbFtsZW4oYWxsKS0xXS5Nc2cuU2VxKQp9CgpmdW5jIFRlc3RTaW5jZUFuZFRvcGljRmlsdGVyKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCVBvc3QoY3Jvc3MoY3VyKSwgImFnZW50LWEiLCAiYnVpbGQiLCAiIiwgIiIsICJiMSIpCglQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1hIiwgImRlcGxveSIsICIiLCAiIiwgImQxIikKCVBvc3QoY3Jvc3MoY3VyKSwgImFnZW50LWEiLCAiYnVpbGQiLCAiIiwgIiIsICJiMiIpCgoJc2luY2UgOj0gU2luY2UoMSkgLy8gb2xkZXN0IGZpcnN0Cgl1YXNzZXJ0LkVxdWFsKHQsIDIsIGxlbihzaW5jZSkpCgl1YXNzZXJ0LkVxdWFsKHQsIHVpbnQ2NCgyKSwgc2luY2VbMF0uTXNnLlNlcSkKCXVhc3NlcnQuRXF1YWwodCwgdWludDY0KDMpLCBzaW5jZVsxXS5Nc2cuU2VxKQoJdWFzc2VydC5FcXVhbCh0LCAwLCBsZW4oU2luY2UoMykpKQoKCWJ1aWxkIDo9IFRvcGljKCJidWlsZCIpIC8vIG5ld2VzdCBmaXJzdAoJdWFzc2VydC5FcXVhbCh0LCAyLCBsZW4oYnVpbGQpKQoJdWFzc2VydC5FcXVhbCh0LCAiYjIiLCBidWlsZFswXS5Nc2cuQm9keSkKCXVhc3NlcnQuRXF1YWwodCwgMCwgbGVuKFRvcGljKCJub3RoaW5nLWhlcmUiKSkpCn0KCmZ1bmMgVGVzdExhdGVzdFJlc3BlY3RzTihjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhbGljZSkpCglmb3IgaSA6PSAwOyBpIDwgNTsgaSsrIHsKCQlQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1hIiwgImJ1aWxkIiwgIiIsICIiLCAiYm9keSIpCgl9Cgl1YXNzZXJ0LkVxdWFsKHQsIDIsIGxlbihMYXRlc3QoMikpKQoJdWFzc2VydC5FcXVhbCh0LCA1LCBsZW4oTGF0ZXN0KDApKSkKCXVhc3NlcnQuRXF1YWwodCwgNSwgbGVuKExhdGVzdCgtMSkpKQp9CgpmdW5jIFRlc3RQb3N0UmVqZWN0c0ludmFsaWRGaWVsZHMoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oYWxpY2UpKQoJdWFzc2VydC5BYm9ydHNXaXRoTWVzc2FnZSh0LCBjdXIsICJlbXB0eSB0b3BpYyIsIGZ1bmMoKSB7CgkJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICIiLCAiIiwgIiIsICJib2R5IikKCX0pCgl1YXNzZXJ0LkFib3J0c1dpdGhNZXNzYWdlKHQsIGN1ciwgInRvcGljIG11c3QgYmUgbG93ZXJjYXNlIGEteiwgMC05LCBkYXNoIG9yIGRvdCIsIGZ1bmMoKSB7CgkJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJCdWlsZCIsICIiLCAiIiwgImJvZHkiKQoJfSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAiZW1wdHkgYm9keSIsIGZ1bmMoKSB7CgkJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICIiLCAiIiwgIiIpCgl9KQoJdWFzc2VydC5FcXVhbCh0LCAwLCBMZW4oKSkKCXVhc3NlcnQuRXF1YWwodCwgMCwgU2VlbigpKQp9CgovLyBUZXN0Qm9keVN1cnZpdmVzVGhlRW5jb2RpbmcgaXMgdGhlIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIGZyYW1pbmc6IGEgYm9keQovLyB0aGF0IGxvb2tzIGxpa2UgdGhlIGVuY29kaW5nLCBvciBlbmRzIGluIHRoZSBkaWdpdHMgYSBsZW5ndGggcHJlZml4IGlzIG1hZGUKLy8gb2YsIG11c3QgY29tZSBiYWNrIHVuY2hhbmdlZCB3aXRoIGl0cyBhdXRob3Igc3RpbGwgYXR0YWNoZWQuCmZ1bmMgVGVzdEJvZHlTdXJ2aXZlc1RoZUVuY29kaW5nKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCW5hc3R5IDo9IFtdc3RyaW5newoJCSJlbmRzIGluIDQwIiwKCQkiMzphYmMiLAoJCSJoYXNcbmEgbmV3bGluZSIsCgkJbXNnLk1zZ3tTZXE6IDksIEhlaWdodDogOSwgRnJvbTogIngiLCBUb3BpYzogInkiLCBLaW5kOiAieiIsIFJlZjogInciLCBCb2R5OiAidiJ9LkVuY29kZSgpLAoJCSJ8IGJyZWFrcyB8IGEgfCB0YWJsZSB8IiwKCX0KCWZvciBfLCBib2R5IDo9IHJhbmdlIG5hc3R5IHsKCQlQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1hIiwgImJ1aWxkIiwgIiIsICIiLCBib2R5KQoJfQoJZ290IDo9IExhdGVzdCgwKSAvLyBuZXdlc3QgZmlyc3QKCWZvciBpLCBib2R5IDo9IHJhbmdlIG5hc3R5IHsKCQllIDo9IGdvdFtsZW4obmFzdHkpLTEtaV0KCQl1YXNzZXJ0LkVxdWFsKHQsIGJvZHksIGUuTXNnLkJvZHkpCgkJdWFzc2VydC5FcXVhbCh0LCBhbGljZS5TdHJpbmcoKSwgZS5BdXRob3IuU3RyaW5nKCkpCgl9Cn0KCi8vIFRlc3RSZW5kZXJFc2NhcGVzQUNhbGxlcnNTdHJpbmcgcGlucyB3aGF0IGd1YXJkLXVudHJ1c3RlZC1yZW5kZXIgZXhpc3RzIGZvcjoKLy8gYSBwaXBlIGluIGEgYm9keSBtdXN0IG5vdCBvcGVuIGEgY29sdW1uIGluIHRoZSByZW5kZXJlZCB0YWJsZS4KZnVuYyBUZXN0UmVuZGVyRXNjYXBlc0FDYWxsZXJzU3RyaW5nKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCVBvc3QoY3Jvc3MoY3VyKSwgImFnZW50LWEiLCAiYnVpbGQiLCAiIiwgIiIsICJhIHwgYiIpCgoJb3V0IDo9IFJlbmRlcigiIikKCXVhc3NlcnQuRmFsc2UodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJ8IGEgfCBiIHwiKSwKCQkiYW4gdW5lc2NhcGVkIHBpcGUgb3BlbmVkIGEgY29sdW1uIGluIHRoZSByZW5kZXJlZCB0YWJsZSIpCn0KCi8vIFRlc3RSZW5kZXJFc2NhcGVzQUJvZHlFeGFjdGx5T25jZSBpcyB0aGUgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgdjAgYnVnLgovLyB1aS5DZWxsKHVpLkV4Y2VycHQocykpIGVzY2FwZWQgdHdpY2UsIHNvIGEgaHlwaGVuIHJlYWNoZWQgbWFpbm5ldCBhcwovLyBiYWNrc2xhc2gtYmFja3NsYXNoLWJhY2tzbGFzaC1oeXBoZW4uIE92ZXItZXNjYXBpbmcgaXMgbm90IGEgc2VjdXJpdHkgaG9sZSwKLy8gd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIHBpcGUgdGVzdCBhYm92ZSBwYXNzZWQgd2hpbGUgdGhpcyB3YXMgYnJva2VuOiBhCi8vIGRvdWJseSBlc2NhcGVkIHBpcGUgaXMgc3RpbGwgc2FmZSBhbmQgc3RpbGwgd3JvbmcuCmZ1bmMgVGVzdFJlbmRlckVzY2FwZXNBQm9keUV4YWN0bHlPbmNlKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCVBvc3QoY3Jvc3MoY3VyKSwgImFnZW50LWEiLCAiYnVpbGQiLCAiIiwgIiIsICJldmljdGluZyBpbi1jYWxsIikKCglvdXQgOj0gUmVuZGVyKCIiKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMob3V0LCBgZXZpY3RpbmcgaW5cLWNhbGxgKSwKCQkiYSBoeXBoZW4gaW4gYSBzaG9ydCBib2R5IHNob3VsZCBiZSBlc2NhcGVkIG9uY2UiKQoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgYGluXFwtY2FsbGApLAoJCSJ0aGUgYm9keSB3YXMgZXNjYXBlZCBtb3JlIHRoYW4gb25jZSIpCn0KCi8vIFRlc3RSZW5kZXJFc2NhcGVzQUxvbmdCb2R5RXhhY3RseU9uY2UgY292ZXJzIHRoZSBvdGhlciBicmFuY2ggb2YKLy8gZXhjZXJwdENlbGwsIHdoZXJlIHRoZSBib2R5IGlzIGN1dCBiZWZvcmUgaXQgaXMgZXNjYXBlZC4KZnVuYyBUZXN0UmVuZGVyRXNjYXBlc0FMb25nQm9keUV4YWN0bHlPbmNlKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCWxvbmcgOj0gImV2aWN0aW5nIGluLWNhbGwiCglmb3IgbGVuKGxvbmcpIDwgMjAwIHsKCQlsb25nICs9ICIgYW5kLWFnYWluIgoJfQoJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICIiLCAiIiwgbG9uZykKCglvdXQgOj0gUmVuZGVyKCIiKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMob3V0LCBgZXZpY3RpbmcgaW5cLWNhbGxgKSwKCQkiYSBoeXBoZW4gaW4gYSBjdXQgYm9keSBzaG91bGQgYmUgZXNjYXBlZCBvbmNlIikKCXVhc3NlcnQuRmFsc2UodCwgc3RyaW5ncy5Db250YWlucyhvdXQsIGBpblxcLWNhbGxgKSwKCQkidGhlIGN1dCBib2R5IHdhcyBlc2NhcGVkIG1vcmUgdGhhbiBvbmNlIikKfQoKLy8gVGVzdFBvc3RSZWNvcmRzTm9TZXNzaW9uRm9yQU1hc3RlcktleSBwaW5zIHRoZSBlbXB0eS1zZXNzaW9uIGJyYW5jaC4gQSB0ZXN0Ci8vIHNpZ25zIGFzIGEgcGxhaW4gdXNlciByZWFsbSwgbmV2ZXIgdGhyb3VnaCBhIHNlc3Npb24sIHNvIGlzU2Vzc2lvbiBpcyBmYWxzZQovLyBhbmQgU2Vzc2lvbiBtdXN0IHN0YXkgZW1wdHkgcmF0aGVyIHRoYW4gaW5oZXJpdCB0aGUgYXV0aG9yLgpmdW5jIFRlc3RQb3N0UmVjb3Jkc05vU2Vzc2lvbkZvckFNYXN0ZXJLZXkoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oYWxpY2UpKQoJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICIiLCAiIiwgImJvZHkiKQoKCWUgOj0gTGF0ZXN0KDApWzBdCgl1YXNzZXJ0LkVxdWFsKHQsIGFsaWNlLlN0cmluZygpLCBlLkF1dGhvci5TdHJpbmcoKSkKCXVhc3NlcnQuRXF1YWwodCwgIiIsIGUuU2Vzc2lvbi5TdHJpbmcoKSkKfQoKLy8gVGVzdFdpcmVSb3VuZFRyaXBzVGhyb3VnaEFSZWFkZXIgd2Fsa3MgdGhlIHdpcmUgZm9ybWF0IGV4YWN0bHkgYXMgYW4KLy8gb2ZmLWNoYWluIHJlYWRlciBtdXN0OiB1bmZyYW1lIG9uZSBlbnRyeSBhdCBhIHRpbWUsIHRoZW4gdW5mcmFtZSB0aGUgYXV0aG9yCi8vIGFuZCB0aGUgc2Vzc2lvbiBvZmYgdGhlIGZyb250LCB0aGVuIGRlY29kZSB0aGUgbWVzc2FnZS4gVGhlIGJvZGllcyBhcmUgdGhlCi8vIG9uZXMgdGhhdCBicmVhayBhIHFldmFsIHBhcnNlci4KZnVuYyBUZXN0V2lyZVJvdW5kVHJpcHNUaHJvdWdoQVJlYWRlcihjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhbGljZSkpCglib2RpZXMgOj0gW11zdHJpbmd7CgkJYGEgYm9keSB3aXRoICIgc3RyaW5nKSwoIGluIGl0YCwKCQkiZW5kcyBpbiA0MCIsCgkJImhhc1xuYSBuZXdsaW5lIiwKCQkifCBhbmQgfCBwaXBlcyB8IiwKCX0KCWZvciBfLCBiIDo9IHJhbmdlIGJvZGllcyB7CgkJUG9zdChjcm9zcyhjdXIpLCAiYWdlbnQtYSIsICJidWlsZCIsICJrIiwgInIiLCBiKQoJfQoKCXJlc3QgOj0gV2lyZSgwKQoJZm9yIGksIHdhbnQgOj0gcmFuZ2UgYm9kaWVzIHsKCQlmcmFtZWQsIHRhaWwsIG9rIDo9IG1zZy5VbmZyYW1lKHJlc3QpCgkJdWFzc2VydC5UcnVlKHQsIG9rLCAiZW50cnkgZGlkIG5vdCB1bmZyYW1lIikKCQlyZXN0ID0gdGFpbAoKCQlhdXRob3IsIHIyLCBvayA6PSBtc2cuVW5mcmFtZShmcmFtZWQpCgkJdWFzc2VydC5UcnVlKHQsIG9rLCAiYXV0aG9yIGRpZCBub3QgdW5mcmFtZSIpCgkJc2Vzc2lvbiwgcjMsIG9rIDo9IG1zZy5VbmZyYW1lKHIyKQoJCXVhc3NlcnQuVHJ1ZSh0LCBvaywgInNlc3Npb24gZGlkIG5vdCB1bmZyYW1lIikKCQltLCBvayA6PSBtc2cuRGVjb2RlKHIzKQoJCXVhc3NlcnQuVHJ1ZSh0LCBvaywgIm1lc3NhZ2UgZGlkIG5vdCBkZWNvZGUiKQoKCQl1YXNzZXJ0LkVxdWFsKHQsIHdhbnQsIG0uQm9keSkKCQl1YXNzZXJ0LkVxdWFsKHQsIHVpbnQ2NChpKzEpLCBtLlNlcSkKCQl1YXNzZXJ0LkVxdWFsKHQsIGFsaWNlLlN0cmluZygpLCBhdXRob3IpCgkJdWFzc2VydC5FcXVhbCh0LCAiIiwgc2Vzc2lvbikKCX0KCXVhc3NlcnQuRXF1YWwodCwgIiIsIHJlc3QsICJ0aGUgd2lyZSBoYWQgdHJhaWxpbmcgYnl0ZXMiKQp9CgpmdW5jIFRlc3RXaXJlSXNFbXB0eVdoZW5Ob3RoaW5nSXNOZXdlcihjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhbGljZSkpCglQb3N0KGNyb3NzKGN1ciksICJhZ2VudC1hIiwgImJ1aWxkIiwgIiIsICIiLCAib25lIikKCXVhc3NlcnQuRXF1YWwodCwgIiIsIFdpcmUoMSkpCgl1YXNzZXJ0LlRydWUodCwgV2lyZSgwKSAhPSAiIiwgIldpcmUoMCkgc2hvdWxkIGNhcnJ5IHRoZSBvbmx5IGVudHJ5IikKfQoa9hQKF3JlbmRlcl9leGFtcGxlX3Rlc3QuZ25vEtoUcGFja2FnZSByZWxheQoKaW1wb3J0ICgKCSJnbm8ubGFuZC9wL21vdWwvYWdlbnRzL21zZy92MCIKCSJnbm8ubGFuZC9wL250L3Rlc3R1dGlscy92MCIKKQoKLy8gc2VlZCBidWlsZHMgYSBkZXRlcm1pbmlzdGljIHJpbmcgd2l0aG91dCBjcm9zc2luZywgc28gYW4gZXhhbXBsZSBjYW4gcGluIHRoZQovLyBvdXRwdXQuIEV4YW1wbGVzIHJ1biBhZnRlciBldmVyeSBUZXN0IGFuZCB0YWtlIG5vIGFyZ3VtZW50cywgc28gdGhleSBjYW5ub3QKLy8gY2FsbCBQb3N0OyB3cml0aW5nIHRoZSBlbmNvZGVkIGVudHJpZXMgZGlyZWN0bHkgaXMgdGhlIHNhbWUgYnl0ZXMgYnkgYQovLyBzaG9ydGVyIHJvYWQsIGFuZCB0aGUgaGVpZ2h0cyBhcmUgZml4ZWQgcmF0aGVyIHRoYW4gcmVhZCBmcm9tIHRoZSBjaGFpbi4KZnVuYyBzZWVkKCkgewoJcmVzZXQoKQoJZW50cmllcyA6PSBbXUVudHJ5ewoJCXtNc2c6IG1zZy5Nc2d7U2VxOiAxLCBIZWlnaHQ6IDUwMCwgRnJvbTogImFnZW50LWEiLCBUb3BpYzogImJ1aWxkIiwgS2luZDogIm5vdGUiLCBSZWY6ICJwci8xIiwgQm9keTogImNpIGlzIGdyZWVuIn0sIEF1dGhvcjogdGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJhbGljZSIpfSwKCQkvLyBTZXNzaW9uIHNldDogdHdvIGFnZW50cyB1bmRlciBvbmUgb3duZXIsIHRvbGQgYXBhcnQgYnkgdGhlIGtleSB0aGF0CgkJLy8gc2lnbmVkIHJhdGhlciB0aGFuIGJ5IHRoZSBpZCB0aGV5IGNhbGxlZCB0aGVtc2VsdmVzLgoJCXtNc2c6IG1zZy5Nc2d7U2VxOiAyLCBIZWlnaHQ6IDUwMSwgRnJvbTogImFnZW50LWIiLCBUb3BpYzogImRlcGxveSIsIEtpbmQ6ICJhY2siLCBSZWY6ICIiLCBCb2R5OiAicGlja2VkIGl0IHVwIn0sIEF1dGhvcjogdGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJhbGljZSIpLCBTZXNzaW9uOiB0ZXN0dXRpbHMuVGVzdEFkZHJlc3MoInNlc3Npb24tYiIpfSwKCQl7TXNnOiBtc2cuTXNne1NlcTogMywgSGVpZ2h0OiA1MDIsIEZyb206ICJhZ2VudC1hIiwgVG9waWM6ICJidWlsZCIsIEtpbmQ6ICJub3RlIiwgUmVmOiAicHIvMiIsIEJvZHk6ICJuZWVkcyBhIHJlYmFzZSJ9LCBBdXRob3I6IHRlc3R1dGlscy5UZXN0QWRkcmVzcygiYWxpY2UiKX0sCgl9Cglmb3IgXywgZSA6PSByYW5nZSBlbnRyaWVzIHsKCQlsb2cuUHVzaChlbmNvZGUoZSkpCgkJc2VxID0gZS5Nc2cuU2VxCgkJc2VlbisrCgl9Cn0KCi8vIEV4YW1wbGVSZW5kZXIgcGlucyB0aGUgZW1wdHkgcmVhbG0sIHdoaWNoIGlzIHdoYXQgYSBmcmVzaCBkZXBsb3kgcmVuZGVycy4KZnVuYyBFeGFtcGxlUmVuZGVyKCkgewoJcmVzZXQoKQoJcHJpbnQoUmVuZGVyKCIiKSkKCS8vIE91dHB1dDoKCS8vICMgQWdlbnQgUmVsYXkKCS8vCgkvLyBfQSByZWFsbSBpcyBhIHJlbGF5IHdoZW4gaXQgaXMgdGhlIG9ubHkgc2hhcmVkIHN0YXRlIGJldHdlZW4gdHdvIGFnZW50cyB0aGF0IG5ldmVyIHRhbGsgZGlyZWN0bHkuXwoJLy8KCS8vIDAgb2YgNjQgc2xvdHMgdXNlZCwgMCBwb3N0ZWQgaW4gdG90YWwsIDAgZHJvcHBlZCBvZmYgdGhlIGJhY2suCgkvLwoJLy8gKl9Ob3RoaW5nIG9uIHRoZSByZWxheSB5ZXQuXyoKfQoKLy8gRXhhbXBsZVJlbmRlclBvcHVsYXRlZCBwaW5zIHRoZSBpbmRleCB3aXRoIG1lc3NhZ2VzIG9uIGl0LgpmdW5jIEV4YW1wbGVSZW5kZXJQb3B1bGF0ZWQoKSB7CglzZWVkKCkKCXByaW50KFJlbmRlcigiIikpCgkvLyBPdXRwdXQ6CgkvLyAjIEFnZW50IFJlbGF5CgkvLwoJLy8gX0EgcmVhbG0gaXMgYSByZWxheSB3aGVuIGl0IGlzIHRoZSBvbmx5IHNoYXJlZCBzdGF0ZSBiZXR3ZWVuIHR3byBhZ2VudHMgdGhhdCBuZXZlciB0YWxrIGRpcmVjdGx5Ll8KCS8vCgkvLyAzIG9mIDY0IHNsb3RzIHVzZWQsIDMgcG9zdGVkIGluIHRvdGFsLCAwIGRyb3BwZWQgb2ZmIHRoZSBiYWNrLgoJLy8KCS8vIHwgU2VxIHwgSGVpZ2h0IHwgRnJvbSB8IFRvcGljIHwgS2luZCB8IEJvZHkgfCBTaWduZXIgfAoJLy8gfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfAoJLy8gfCAzIHwgNTAyIHwgYWdlbnRcLWEgfCBidWlsZCB8IG5vdGUgfCBuZWVkcyBhIHJlYmFzZSB8IGBnMXY5a3hqY+KApjQwZ2hgIHwKCS8vIHwgMiB8IDUwMSB8IGFnZW50XC1iIHwgZGVwbG95IHwgYWNrIHwgcGlja2VkIGl0IHVwIHwgYGcxd2RqaHh14oCmY21qbWAgfAoJLy8gfCAxIHwgNTAwIHwgYWdlbnRcLWEgfCBidWlsZCB8IG5vdGUgfCBjaSBpcyBncmVlbiB8IGBnMXY5a3hqY+KApjQwZ2hgIHwKfQoKLy8gRXhhbXBsZVJlbmRlclRvcGljIHBpbnMgdGhlIHBlci10b3BpYyB2aWV3LgpmdW5jIEV4YW1wbGVSZW5kZXJUb3BpYygpIHsKCXNlZWQoKQoJcHJpbnQoUmVuZGVyKCJidWlsZCIpKQoJLy8gT3V0cHV0OgoJLy8gIyBBZ2VudCBSZWxheTogYnVpbGQKCS8vCgkvLyB8IFNlcSB8IEhlaWdodCB8IEZyb20gfCBUb3BpYyB8IEtpbmQgfCBCb2R5IHwgU2lnbmVyIHwKCS8vIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwKCS8vIHwgMyB8IDUwMiB8IGFnZW50XC1hIHwgYnVpbGQgfCBub3RlIHwgbmVlZHMgYSByZWJhc2UgfCBgZzF2OWt4amPigKY0MGdoYCB8CgkvLyB8IDEgfCA1MDAgfCBhZ2VudFwtYSB8IGJ1aWxkIHwgbm90ZSB8IGNpIGlzIGdyZWVuIHwgYGcxdjlreGpj4oCmNDBnaGAgfAp9CiINMTIwMDAwMDB1Z25vdBISCMDc508SCzI1MTA2MXVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAgBSSj+NLAA6icQ/Rf6vbrjtRbbjo197vms7Sf+eLYPIEkBxvhyEDYvRcEF6hmlqEG8C/a+zgZgFn7kV11aNVIMiYVJFS2hHYCR0FSzJyjdrAs4tGxjHSzp6819xyytfhDGmGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data