Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
DADE89854FC5F0192FF8501F37229055543AFACCEBA720A61AEEDA0D285E1FF8
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
29,924,708
Requested gas limit
GAS USED
24,937,286
Gas consumed
FEE
29925ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1q5tjjv3kkslzwf2na9y9wk7e5a8ugph8xfsk04
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CrmHAQoML3ZtLm1fYWRkcGtnEqeHAQooZzFxNXRqanYza2tzbHp3ZjJuYTl5OXdrN2U1YTh1Z3BoOHhmc2swNBL5hgEKBmNvbW1vbhIZZ25vLmxhbmQvci9nbm9zd2FwL2NvbW1vbhruDwoJUkVBRE1FLm1kEuAPIyBDb21tb24gUGFja2FnZQoKUGFja2FnZSBjb21tb24gcHJvdmlkZXMgc2hhcmVkIHJlYWxtIHV0aWxpdGllcyBmb3IgR25vU3dhcCBwcm90b2NvbCBjb250cmFjdHMuCgojIyBPdmVydmlldwoKVGhlIGNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHNoYXJlZCBHUkMyMCB0b2tlbiBvcGVyYXRpb25zIGFuZCBuYXRpdmUgY29pbiB2YWxpZGF0aW9uLgoKIyMgR25vd2ViCgpUaGUgcm9vdCBgUmVuZGVyKCIiKWAgZGVsZWdhdGVzIHRvIHRoZSBhY3RpdmUgaW1wbGVtZW50YXRpb24gYW5kIHNob3dzIHRoZSByZWFsbSBhZGRyZXNzLCBpbXBsZW1lbnRhdGlvbiBwYXRoLCBhbmQgbmV0d29yay13aWRlIHRva2VuIHJlZ2lzdHJ5IGNvdW50LiBUaGUgY291bnQgaXMgbm90IGEgR25vc3dhcCB3aGl0ZWxpc3QuIFRva2VuIGtleXMgdXNlIGByZWFsbS1wYXRoLlNZTUJPTGAsIGFuZCB0b2tlbiBhbW91bnRzIHVzZSBlYWNoIHRva2VuJ3MgYmFzZSB1bml0cy4KClJlbmRlcmluZyBpcyByZWFkLW9ubHkgYW5kIGRvZXMgbm90IGVudW1lcmF0ZSByZWdpc3RyeSBlbnRyaWVzLiBVbnN1cHBvcnRlZCBwYXRocyByZXR1cm4gYDQwNGAuCgojIyBLZXkgQ29tcG9uZW50cwoKMS4gKipHUkMyMCBSZWdpc3RyeSBIZWxwZXJzKio6IENvbnZlbmllbnQgd3JhcHBlcnMgZm9yIEdSQzIwIHRva2VuIG9wZXJhdGlvbnMKMi4gKipDb2luIFV0aWxpdGllcyoqOiBOYXRpdmUgY29pbiAoR05PVCkgaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24KMy4gKipBc3NlcnRpb24gVXRpbGl0aWVzKio6IElucHV0IHZhbGlkYXRpb24gZm9yIHN1cHBvcnRlZCBvcGVyYXRpb25zIChub3QgYXV0aG9yaXphdGlvbiBjaGVja3MpCgojIyBBUEkgUmVmZXJlbmNlCgojIyMgR1JDMjAgUmVnaXN0cnkgSGVscGVycwoKVGhlIHdyaXRlIGhlbHBlcnMgYXJlIGNhbGxlZCB3aXRob3V0IGNyb3NzaW5nLCBmb3IgZXhhbXBsZQpgY29tbW9uLlRyYW5zZmVyKDAsIGN1ciwgLi4uKWAgYW5kIGBjb21tb24uU2FmZUdSQzIwVHJhbnNmZXIoMCwgY3VyLCAuLi4pYC4KVGhlIHRva2VuIGFjdG9yIGlzIGJvdW5kIHRvIHRoYXQgY3VycmVudCByZWFsbSB2aWEgYFJlYWxtVGVsbGVyYCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBpcyBmb3J3YXJkZWQuClRva2VuIGxvb2t1cCBnb2VzIHRocm91Z2ggdGhlIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gKGBjb21tb24vdjFgIHJlc29sdmVzIGBnbm8ubGFuZC9yL250L2dyYzIwcmVnL3YwYCksCndoaWNoIGlzIHN3YXBwZWQgd2l0aCBgVXBncmFkZUltcGxgIGxpa2UgdGhlIG90aGVyIHByb3h5IHJlYWxtcy4KCioqVG9rZW4gT3BlcmF0aW9uczoqKgotICoqSXNSZWdpc3RlcmVkKio6IENoZWNrcyB0b2tlbiByZWdpc3RyYXRpb24gc3RhdHVzCi0gKipNdXN0UmVnaXN0ZXJlZCoqOiBWYWxpZGF0ZXMgbXVsdGlwbGUgdG9rZW5zIGFyZSByZWdpc3RlcmVkCgoqKlRva2VuIFF1ZXJpZXM6KioKLSAqKlRvdGFsU3VwcGx5Kio6IFJldHVybnMgdG90YWwgc3VwcGx5IG9mIGEgdG9rZW4KLSAqKkJhbGFuY2VPZioqOiBSZXR1cm5zIHRva2VuIGJhbGFuY2UgZm9yIGFuIGFkZHJlc3MKLSAqKkFsbG93YW5jZSoqOiBSZXR1cm5zIGFsbG93YW5jZSBmcm9tIG93bmVyIHRvIHNwZW5kZXIKCioqVG9rZW4gVHJhbnNmZXJzOioqCi0gKipUcmFuc2Zlci9UcmFuc2ZlckZyb20vQXBwcm92ZSoqOiBSZXR1cm5zIGVycm9yIG9uIGZhaWx1cmUKLSAqKlNhZmVHUkMyMFRyYW5zZmVyL1NhZmVHUkMyMFRyYW5zZmVyRnJvbS9TYWZlR1JDMjBBcHByb3ZlKio6IFBhbmljcyBvbiBmYWlsdXJlCgojIyMgQ29pbiBVdGlsaXRpZXMKCioqQ29pbiBWYWxpZGF0aW9uOioqCi0gKipBc3NlcnRJc05vdEhhbmRsZU5hdGl2ZUNvaW4qKjogUmVqZWN0cyBuYXRpdmUgY29pbnMgZm9yIEdSQzIwLW9ubHkgZnVuY3Rpb25zIGFuZCBwYW5pY3Mgd2l0aCBgW0dOT1NXQVAtQ09NTU9OLTAwMl0gaGFuZGxlIG5hdGl2ZSBjb2luIGlzIG5vdCBhbGxvd2VkYCB3aGVuIGB1bnNhZmUuT3JpZ2luU2VuZCgpYCBpcyBub24tZW1wdHkKGt4CCgphc3NlcnQuZ25vEs8CcGFja2FnZSBjb21tb24KCi8vIEFzc2VydElzTm90SGFuZGxlTmF0aXZlQ29pbiB2YWxpZGF0ZXMgdGhhdCBubyBuYXRpdmUgY29pbnMgd2VyZSBzZW50IHdpdGggdGhlIHRyYW5zYWN0aW9uLgovLwovLyBVc2UgdGhpcyB3aGVuIGEgZnVuY3Rpb24gc2hvdWxkIG9ubHkgd29yayB3aXRoIEdSQzIwIHRva2VucyBhbmQgbm90IGFjY2VwdCBuYXRpdmUgY29pbnMuCmZ1bmMgQXNzZXJ0SXNOb3RIYW5kbGVOYXRpdmVDb2luKCkgewoJaWYgZXJyIDo9IGdldEltcGxlbWVudGF0aW9uKCkuVmFsaWRhdGVOb3RIYW5kbGVOYXRpdmVDb2luKCk7IGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KfQoapQQKB2RvYy5nbm8SmQQvLyBQYWNrYWdlIGNvbW1vbiBwcm92aWRlcyBzaGFyZWQgcmVhbG0gdXRpbGl0aWVzIGZvciBHbm9Td2FwIHByb3RvY29sIGNvbnRyYWN0cy4KLy8KLy8gVGhlIHBhY2thZ2UgY29udGFpbnMgaGVscGVycyB0aGF0IG11c3Qga2VlcCBhIHJlYWxtIGJvdW5kYXJ5LCBpbmNsdWRpbmcgR1JDMjAKLy8gdG9rZW4gb3BlcmF0aW9ucyBhbmQgbmF0aXZlIGNvaW4gdmFsaWRhdGlvbi4gQU1NIG1hdGggbGl2ZXMgaW4KLy8gZ25vLmxhbmQvcC9nbm9zd2FwL2duc21hdGgvdjEuCi8vCi8vIEtleSBjb21wb25lbnRzOgovLyAtIEdSQzIwIFJlZ2lzdHJ5IEhlbHBlcnM6IGNvbnZlbmllbnQgd3JhcHBlcnMgZm9yIEdSQzIwIHRva2VuIG9wZXJhdGlvbnMKLy8gLSBDb2luIFV0aWxpdGllczogbmF0aXZlIGNvaW4gaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24KLy8gLSBBc3NlcnRpb24gVXRpbGl0aWVzOiBpbnB1dCB2YWxpZGF0aW9uIGZvciBzdXBwb3J0ZWQgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG5hdGl2ZS1jb2luIHJlamVjdGlvbgpwYWNrYWdlIGNvbW1vbgoaQAoLZ25vbW9kLnRvbWwSMW1vZHVsZSA9ICJnbm8ubGFuZC9yL2dub3N3YXAvY29tbW9uIgpnbm8gPSAiMC45IgoakjcKE2dyYzIwcmVnX2hlbHBlci5nbm8S+jZwYWNrYWdlIGNvbW1vbgoKLy8gSXNSZWdpc3RlcmVkIGNoZWNrcyB3aGV0aGVyIGEgdG9rZW4ga2V5IGlzIHJlZ2lzdGVyZWQuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB0b2tlbktleTogcmVnaXN0cnkga2V5IGlkZW50aWZ5aW5nIHRoZSBHUkMyMCB0b2tlbiB0byBpbnNwZWN0LgovLwovLyBSZXR1cm5zOgovLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRva2VuS2V5IGlzIHZhbGlkIGFuZCByZWdpc3RlcmVkOyBub24tbmlsIHdoZW4gdGhlIGtleSBpcyBpbnZhbGlkIG9yIHVucmVnaXN0ZXJlZC4KZnVuYyBJc1JlZ2lzdGVyZWQodG9rZW5LZXkgc3RyaW5nKSBlcnJvciB7CglyZXR1cm4gZ2V0SW1wbGVtZW50YXRpb24oKS5Jc1JlZ2lzdGVyZWQodG9rZW5LZXkpCn0KCi8vIE11c3RSZWdpc3RlcmVkIGNoZWNrcyB3aGV0aGVyIGFsbCBwcm92aWRlZCB0b2tlbnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHBhbmljcyBpZiBhbnkgaXMgbm90IHJlZ2lzdGVyZWQuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB0b2tlbktleXM6IHRva2VuIHJlZ2lzdHJ5IGtleXMgdG8gY2hlY2s7IGFuIGVtcHR5IGxpc3QgcGVyZm9ybXMgbm8gY2hlY2tzLgovLwovLyBQYW5pY3MgaWYgYW55IG9mIHRoZSBwcm92aWRlZCB0b2tlbnMgaXMgbm90IHJlZ2lzdGVyZWQuCmZ1bmMgTXVzdFJlZ2lzdGVyZWQodG9rZW5LZXlzIC4uLnN0cmluZykgewoJaWYgZXJyIDo9IFZhbGlkYXRlUmVnaXN0ZXJlZCh0b2tlbktleXMuLi4pOyBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIuRXJyb3IoKSkKCX0KfQoKLy8gVmFsaWRhdGVSZWdpc3RlcmVkIGNoZWNrcyB3aGV0aGVyIGFsbCBwcm92aWRlZCB0b2tlbnMgYXJlIHJlZ2lzdGVyZWQsIHJldHVybmluZyBhbgovLyBlcnJvciBpbnN0ZWFkIG9mIHBhbmlja2luZyB3aGVuIGEgdG9rZW4gaXMgbm90IHJlZ2lzdGVyZWQuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB0b2tlbktleXM6IHRva2VuIHJlZ2lzdHJ5IGtleXMgdG8gY2hlY2s7IGFuIGVtcHR5IGxpc3QgaXMgdmFsaWQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBlcnJvcjogbmlsIHdoZW4gZXZlcnkgdG9rZW4gaXMgcmVnaXN0ZXJlZDsgb3RoZXJ3aXNlIHRoZSBmaXJzdAovLyAgICAgcmVnaXN0cmF0aW9uIGZhaWx1cmUuCmZ1bmMgVmFsaWRhdGVSZWdpc3RlcmVkKHRva2VuS2V5cyAuLi5zdHJpbmcpIGVycm9yIHsKCXJldHVybiBnZXRJbXBsZW1lbnRhdGlvbigpLlZhbGlkYXRlUmVnaXN0ZXJlZCh0b2tlbktleXMuLi4pCn0KCi8vIFRvdGFsU3VwcGx5IHJldHVybnMgdGhlIHRvdGFsIHN1cHBseSBvZiB0aGUgc3BlY2lmaWVkIHRva2VuLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gdG9rZW5LZXk6IHJlZ2lzdHJ5IGtleSBpZGVudGlmeWluZyB0aGUgR1JDMjAgdG9rZW4uCi8vCi8vIFJldHVybnM6Ci8vICAgLSB0b3RhbFN1cHBseTogY3VycmVudCB0b2tlbiBzdXBwbHkgZm9yIHRva2VuS2V5LCBpbiB0aGUgdG9rZW4ncyBiYXNlIHVuaXRzOyBwYW5pY3MgaWYgdG9rZW5LZXkgaXMgaW52YWxpZCBvciB1bnJlZ2lzdGVyZWQuCmZ1bmMgVG90YWxTdXBwbHkodG9rZW5LZXkgc3RyaW5nKSBpbnQ2NCB7CglyZXR1cm4gZ2V0SW1wbGVtZW50YXRpb24oKS5Ub3RhbFN1cHBseSh0b2tlbktleSkKfQoKLy8gQmFsYW5jZU9mIHJldHVybnMgdGhlIHRva2VuIGJhbGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHRva2VuS2V5OiByZWdpc3RyeSBrZXkgaWRlbnRpZnlpbmcgdGhlIEdSQzIwIHRva2VuLgovLyAgIC0gYWRkcjogYWRkcmVzcyB3aG9zZSB0b2tlbiBiYWxhbmNlIGlzIHF1ZXJpZWQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBiYWxhbmNlOiB0b2tlbiBiYWxhbmNlIGhlbGQgYnkgYWRkciwgaW4gdGhlIHRva2VuJ3MgYmFzZSB1bml0czsgcGFuaWNzIGlmIHRva2VuS2V5IGlzIGludmFsaWQgb3IgdW5yZWdpc3RlcmVkLgpmdW5jIEJhbGFuY2VPZih0b2tlbktleSBzdHJpbmcsIGFkZHIgYWRkcmVzcykgaW50NjQgewoJcmV0dXJuIGdldEltcGxlbWVudGF0aW9uKCkuQmFsYW5jZU9mKHRva2VuS2V5LCBhZGRyKQp9CgovLyBBbGxvd2FuY2UgcmV0dXJucyB0aGUgdG9rZW4gYWxsb3dhbmNlIGZyb20gb3duZXIgdG8gc3BlbmRlci4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHRva2VuS2V5OiByZWdpc3RyeSBrZXkgaWRlbnRpZnlpbmcgdGhlIEdSQzIwIHRva2VuLgovLyAgIC0gb3duZXI6IGFkZHJlc3MgdGhhdCBvd25zIHRoZSB0b2tlbnMuCi8vICAgLSBzcGVuZGVyOiBhZGRyZXNzIGF1dGhvcml6ZWQgdG8gc3BlbmQgb3duZXIncyB0b2tlbnMuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBhbGxvd2FuY2U6IGFtb3VudCBvd25lciBoYXMgYXBwcm92ZWQgc3BlbmRlciB0byB1c2UsIGluIHRoZSB0b2tlbidzIGJhc2UgdW5pdHM7IHBhbmljcyBpZiB0b2tlbktleSBpcyBpbnZhbGlkIG9yIHVucmVnaXN0ZXJlZC4KZnVuYyBBbGxvd2FuY2UodG9rZW5LZXkgc3RyaW5nLCBvd25lciwgc3BlbmRlciBhZGRyZXNzKSBpbnQ2NCB7CglyZXR1cm4gZ2V0SW1wbGVtZW50YXRpb24oKS5BbGxvd2FuY2UodG9rZW5LZXksIG93bmVyLCBzcGVuZGVyKQp9CgovLyBUcmFuc2ZlciBmb3J3YXJkcyBhIHRva2VuIHRyYW5zZmVyIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBib3VuZCB0byB0aGUgY3VycmVudCByZWFsbS4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIF86IGxlYWRpbmcgaW50ZWdlciBkaXNjcmltaW5hdG9yIGZvciB0aGUgcmVhbG0tY3Jvc3NpbmcgQUJJOyBwYXNzIDAuCi8vICAgLSBybG06IHByb3BhZ2F0ZWQgcmVhbG0gY29udGV4dCB1c2VkIHRvIHJlc29sdmUgYW5kIGludm9rZSB0aGUgcmVnaXN0ZXJlZCB0b2tlbiBpbXBsZW1lbnRhdGlvbi4KLy8gICAtIHRva2VuS2V5OiByZWdpc3RyeSBrZXkgaWRlbnRpZnlpbmcgdGhlIEdSQzIwIHRva2VuIHRvIHRyYW5zZmVyLgovLyAgIC0gdG86IHJlY2lwaWVudCBhZGRyZXNzLgovLyAgIC0gYW1vdW50OiBudW1iZXIgb2YgdG9rZW4gYmFzZSB1bml0cyB0byB0cmFuc2Zlci4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGVycm9yOiBuaWwgd2hlbiB0aGUgaW1wbGVtZW50YXRpb24gY29tcGxldGVzIHRoZSB0cmFuc2Zlcjsgb3RoZXJ3aXNlIGEgdG9rZW4KLy8gICAgIHZhbGlkYXRpb24gb3IgdHJhbnNmZXItcnVsZSBlcnJvci4KZnVuYyBUcmFuc2ZlcihfIGludCwgcmxtIHJlYWxtLCB0b2tlbktleSBzdHJpbmcsIHRvIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgZXJyb3IgewoJcmV0dXJuIGdldEltcGxlbWVudGF0aW9uKCkuVHJhbnNmZXIoMCwgcmxtLCB0b2tlbktleSwgdG8sIGFtb3VudCkKfQoKLy8gVHJhbnNmZXJGcm9tIGZvcndhcmRzIGFuIGFsbG93YW5jZS1iYWNrZWQgdG9rZW4gdHJhbnNmZXIgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJvdW5kIHRvIHRoZSBjdXJyZW50IHJlYWxtLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gXzogbGVhZGluZyBpbnRlZ2VyIGRpc2NyaW1pbmF0b3IgZm9yIHRoZSByZWFsbS1jcm9zc2luZyBBQkk7IHBhc3MgMC4KLy8gICAtIHJsbTogcHJvcGFnYXRlZCByZWFsbSBjb250ZXh0IHVzZWQgdG8gcmVzb2x2ZSBhbmQgaW52b2tlIHRoZSByZWdpc3RlcmVkIHRva2VuIGltcGxlbWVudGF0aW9uLgovLyAgIC0gdG9rZW5LZXk6IHJlZ2lzdHJ5IGtleSBpZGVudGlmeWluZyB0aGUgR1JDMjAgdG9rZW4gdG8gdHJhbnNmZXIuCi8vICAgLSBmcm9tOiBhZGRyZXNzIHdob3NlIGFsbG93YW5jZSBhbmQgYmFsYW5jZSBhcmUgZGViaXRlZC4KLy8gICAtIHRvOiByZWNpcGllbnQgYWRkcmVzcy4KLy8gICAtIGFtb3VudDogbnVtYmVyIG9mIHRva2VuIGJhc2UgdW5pdHMgdG8gdHJhbnNmZXIuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBlcnJvcjogbmlsIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIGNvbXBsZXRlcyB0aGUgdHJhbnNmZXI7IG90aGVyd2lzZSBhIHRva2VuCi8vICAgICB2YWxpZGF0aW9uLCBhbGxvd2FuY2UsIG9yIGJhbGFuY2UtcnVsZSBlcnJvci4KZnVuYyBUcmFuc2ZlckZyb20oXyBpbnQsIHJsbSByZWFsbSwgdG9rZW5LZXkgc3RyaW5nLCBmcm9tLCB0byBhZGRyZXNzLCBhbW91bnQgaW50NjQpIGVycm9yIHsKCXJldHVybiBnZXRJbXBsZW1lbnRhdGlvbigpLlRyYW5zZmVyRnJvbSgwLCBybG0sIHRva2VuS2V5LCBmcm9tLCB0bywgYW1vdW50KQp9CgovLyBBcHByb3ZlIGZvcndhcmRzIGFuIGFsbG93YW5jZSB1cGRhdGUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJvdW5kIHRvIHRoZSBjdXJyZW50IHJlYWxtLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gXzogbGVhZGluZyBpbnRlZ2VyIGRpc2NyaW1pbmF0b3IgZm9yIHRoZSByZWFsbS1jcm9zc2luZyBBQkk7IHBhc3MgMC4KLy8gICAtIHJsbTogcHJvcGFnYXRlZCByZWFsbSBjb250ZXh0IHVzZWQgdG8gcmVzb2x2ZSBhbmQgaW52b2tlIHRoZSByZWdpc3RlcmVkIHRva2VuIGltcGxlbWVudGF0aW9uLgovLyAgIC0gdG9rZW5LZXk6IHJlZ2lzdHJ5IGtleSBpZGVudGlmeWluZyB0aGUgR1JDMjAgdG9rZW4uCi8vICAgLSBzcGVuZGVyOiBhZGRyZXNzIGF1dGhvcml6ZWQgdG8gc3BlbmQgdGhlIGNhbGxlcidzIHRva2Vucy4KLy8gICAtIGFtb3VudDogbnVtYmVyIG9mIHRva2VuIGJhc2UgdW5pdHMgdG8gYXV0aG9yaXplLgovLwovLyBSZXR1cm5zOgovLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiByZWNvcmRzIHRoZSBhbGxvd2FuY2U7IG90aGVyd2lzZSBhIHRva2VuCi8vICAgICB2YWxpZGF0aW9uIG9yIGFwcHJvdmFsLXJ1bGUgZXJyb3IuCmZ1bmMgQXBwcm92ZShfIGludCwgcmxtIHJlYWxtLCB0b2tlbktleSBzdHJpbmcsIHNwZW5kZXIgYWRkcmVzcywgYW1vdW50IGludDY0KSBlcnJvciB7CglyZXR1cm4gZ2V0SW1wbGVtZW50YXRpb24oKS5BcHByb3ZlKDAsIHJsbSwgdG9rZW5LZXksIHNwZW5kZXIsIGFtb3VudCkKfQoKLy8gU2FmZUdSQzIwVHJhbnNmZXIgdHJhbnNmZXJzIHRva2VucyBhcyB0aGUgY3VycmVudCByZWFsbSBhbmQgcGFuaWNzIGlmIGl0IGZhaWxzLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gXzogbGVhZGluZyBpbnRlZ2VyIGRpc2NyaW1pbmF0b3IgZm9yIHRoZSByZWFsbS1jcm9zc2luZyBBQkk7IHBhc3MgMC4KLy8gICAtIHJsbTogcHJvcGFnYXRlZCByZWFsbSBjb250ZXh0IHVzZWQgdG8gcmVzb2x2ZSBhbmQgaW52b2tlIHRoZSByZWdpc3RlcmVkIHRva2VuIGltcGxlbWVudGF0aW9uLgovLyAgIC0gdG9rZW5LZXk6IHJlZ2lzdHJ5IGtleSBpZGVudGlmeWluZyB0aGUgR1JDMjAgdG9rZW4gdG8gdHJhbnNmZXIuCi8vICAgLSB0bzogcmVjaXBpZW50IGFkZHJlc3MuCi8vICAgLSBhbW91bnQ6IG51bWJlciBvZiB0b2tlbiBiYXNlIHVuaXRzIHRvIHRyYW5zZmVyLgovLwovLyBQYW5pY3MgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNmZXIgcmV0dXJucyBhbiBlcnJvci4KZnVuYyBTYWZlR1JDMjBUcmFuc2ZlcihfIGludCwgcmxtIHJlYWxtLCB0b2tlbktleSBzdHJpbmcsIHRvIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgewoJaWYgZXJyIDo9IFRyYW5zZmVyKDAsIHJsbSwgdG9rZW5LZXksIHRvLCBhbW91bnQpOyBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9Cn0KCi8vIFNhZmVHUkMyMFRyYW5zZmVyRnJvbSB0cmFuc2ZlcnMgdG9rZW5zIGFzIHRoZSBjdXJyZW50IHJlYWxtIGFuZCBwYW5pY3MgaWYgaXQgZmFpbHMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSBfOiBsZWFkaW5nIGludGVnZXIgZGlzY3JpbWluYXRvciBmb3IgdGhlIHJlYWxtLWNyb3NzaW5nIEFCSTsgcGFzcyAwLgovLyAgIC0gcmxtOiBwcm9wYWdhdGVkIHJlYWxtIGNvbnRleHQgdXNlZCB0byByZXNvbHZlIGFuZCBpbnZva2UgdGhlIHJlZ2lzdGVyZWQgdG9rZW4gaW1wbGVtZW50YXRpb24uCi8vICAgLSB0b2tlbktleTogcmVnaXN0cnkga2V5IGlkZW50aWZ5aW5nIHRoZSBHUkMyMCB0b2tlbiB0byB0cmFuc2Zlci4KLy8gICAtIGZyb206IGFkZHJlc3Mgd2hvc2UgYWxsb3dhbmNlIGFuZCBiYWxhbmNlIGFyZSBkZWJpdGVkLgovLyAgIC0gdG86IHJlY2lwaWVudCBhZGRyZXNzLgovLyAgIC0gYW1vdW50OiBudW1iZXIgb2YgdG9rZW4gYmFzZSB1bml0cyB0byB0cmFuc2Zlci4KLy8KLy8gUGFuaWNzIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zZmVyIHJldHVybnMgYW4gZXJyb3IuCmZ1bmMgU2FmZUdSQzIwVHJhbnNmZXJGcm9tKF8gaW50LCBybG0gcmVhbG0sIHRva2VuS2V5IHN0cmluZywgZnJvbSwgdG8gYWRkcmVzcywgYW1vdW50IGludDY0KSB7CglpZiBlcnIgOj0gVHJhbnNmZXJGcm9tKDAsIHJsbSwgdG9rZW5LZXksIGZyb20sIHRvLCBhbW91bnQpOyBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9Cn0KCi8vIFNhZmVHUkMyMEFwcHJvdmUgYXBwcm92ZXMgdG9rZW5zIGFzIHRoZSBjdXJyZW50IHJlYWxtIGFuZCBwYW5pY3MgaWYgaXQgZmFpbHMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSBfOiBsZWFkaW5nIGludGVnZXIgZGlzY3JpbWluYXRvciBmb3IgdGhlIHJlYWxtLWNyb3NzaW5nIEFCSTsgcGFzcyAwLgovLyAgIC0gcmxtOiBwcm9wYWdhdGVkIHJlYWxtIGNvbnRleHQgdXNlZCB0byByZXNvbHZlIGFuZCBpbnZva2UgdGhlIHJlZ2lzdGVyZWQgdG9rZW4gaW1wbGVtZW50YXRpb24uCi8vICAgLSB0b2tlbktleTogcmVnaXN0cnkga2V5IGlkZW50aWZ5aW5nIHRoZSBHUkMyMCB0b2tlbi4KLy8gICAtIHNwZW5kZXI6IGFkZHJlc3MgYXV0aG9yaXplZCB0byBzcGVuZCB0aGUgY2FsbGVyJ3MgdG9rZW5zLgovLyAgIC0gYW1vdW50OiBudW1iZXIgb2YgdG9rZW4gYmFzZSB1bml0cyB0byBhdXRob3JpemUuCi8vCi8vIFBhbmljcyBpZiB0aGUgdW5kZXJseWluZyBhcHByb3ZhbCByZXR1cm5zIGFuIGVycm9yLgpmdW5jIFNhZmVHUkMyMEFwcHJvdmUoXyBpbnQsIHJsbSByZWFsbSwgdG9rZW5LZXkgc3RyaW5nLCBzcGVuZGVyIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgewoJaWYgZXJyIDo9IEFwcHJvdmUoMCwgcmxtLCB0b2tlbktleSwgc3BlbmRlciwgYW1vdW50KTsgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQp9ChqsAQoKcmVuZGVyLmdubxKdAXBhY2thZ2UgY29tbW9uCgovLyBSZW5kZXIgZGVsZWdhdGVzIHdlYiByZW5kZXJpbmcgdG8gdGhlIGFjdGl2ZSBpbXBsZW1lbnRhdGlvbi4KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglyZXR1cm4gZ2V0SW1wbGVtZW50YXRpb24oKS5SZW5kZXIocGF0aCkKfQoatgkKCXN0YXRlLmdubxKoCXBhY2thZ2UgY29tbW9uCgppbXBvcnQgKAoJImVycm9ycyIKCglfICJnbm8ubGFuZC9yL2dub3N3YXAvcmJhYy92MSIgLy8gaW5pdGlhbGl6ZSByZWFkYWJsZSBjb250cmFjdCByb2xlKHMpCgoJImduby5sYW5kL3AvZ25vc3dhcC9zdG9yZS92MSIKCSJnbm8ubGFuZC9wL2dub3N3YXAvdmVyc2lvbl9tYW5hZ2VyL3YxIgopCgp2YXIgKAoJY3VycmVudEFkZHJlc3MgYWRkcmVzcwoJZG9tYWluUGF0aCAgICAgc3RyaW5nCgoJa3ZTdG9yZSBzdG9yZS5LVlN0b3JlCgoJdmVyc2lvbk1hbmFnZXIgdmVyc2lvbl9tYW5hZ2VyLlZlcnNpb25NYW5hZ2VyCglpbXBsZW1lbnRhdGlvbiBJQ29tbW9uCikKCmZ1bmMgaW5pdChjdXIgcmVhbG0pIHsKCWN1cnJlbnRBZGRyZXNzID0gY3VyLkFkZHJlc3MoKQoJZG9tYWluUGF0aCA9IGN1ci5Qa2dQYXRoKCkKCglrdlN0b3JlID0gc3RvcmUuTmV3S1ZTdG9yZShjdXJyZW50QWRkcmVzcykKCgl2ZXJzaW9uTWFuYWdlciA9IHZlcnNpb25fbWFuYWdlci5OZXdWZXJzaW9uTWFuYWdlcigKCQlkb21haW5QYXRoLAoJCWt2U3RvcmUsCgkJaW5pdGlhbGl6ZURvbWFpblN0b3JlLAoJKQoKCWltcGxlbWVudGF0aW9uID0gbmlsCn0KCi8vIGNvbW1vbiBrZWVwcyBubyBkb21haW4gc3RhdGU7IGltcGxlbWVudGF0aW9ucyBvbmx5IHJlc29sdmUgdG9rZW5zLgpmdW5jIGluaXRpYWxpemVEb21haW5TdG9yZShfIGludCwgcmxtIHJlYWxtLCBrdlN0b3JlIHN0b3JlLktWU3RvcmUpIGFueSB7CglyZXR1cm4gbmlsCn0KCmZ1bmMgZ2V0SW1wbGVtZW50YXRpb24oKSBJQ29tbW9uIHsKCWlmIGltcGxlbWVudGF0aW9uID09IG5pbCB7CgkJcGFuaWMoImltcGxlbWVudGF0aW9uIGlzIG5vdCBpbml0aWFsaXplZCIpCgl9CgoJcmV0dXJuIGltcGxlbWVudGF0aW9uCn0KCmZ1bmMgdXBkYXRlSW1wbGVtZW50YXRpb24oKSBlcnJvciB7CglyZXN1bHQgOj0gdmVyc2lvbk1hbmFnZXIuR2V0Q3VycmVudEltcGxlbWVudGF0aW9uKCkKCWlmIHJlc3VsdCA9PSBuaWwgewoJCXJldHVybiBlcnJvcnMuTmV3KCJpbXBsZW1lbnRhdGlvbiBpcyBub3QgaW5pdGlhbGl6ZWQiKQoJfQoKCWltcGwsIG9rIDo9IHJlc3VsdC4oSUNvbW1vbikKCWlmICFvayB7CgkJcmV0dXJuIGVycm9ycy5OZXcoImltcGwgaXMgbm90IGFuIElDb21tb24iKQoJfQoKCWltcGxlbWVudGF0aW9uID0gaW1wbAoKCXJldHVybiBuaWwKfQoauB8KCXR5cGVzLmdubxKqH3BhY2thZ2UgY29tbW9uCgp0eXBlIElDb21tb24gaW50ZXJmYWNlIHsKCS8vIFZhbGlkYXRlTm90SGFuZGxlTmF0aXZlQ29pbiByZWplY3RzIGEgY2FsbCBjYXJyeWluZyBuYXRpdmUgY29pbnMuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBlcnJvcjogbm9uLW5pbCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpbmNsdWRlcyBuYXRpdmUgY29pbnM7IG5pbCB3aGVuIG5vIG5hdGl2ZSBjb2lucyBhcmUgYXR0YWNoZWQKCVZhbGlkYXRlTm90SGFuZGxlTmF0aXZlQ29pbigpIGVycm9yCgoJLy8gSXNSZWdpc3RlcmVkIGNoZWNrcyB3aGV0aGVyIHRva2VuS2V5IGlkZW50aWZpZXMgYSByZWdpc3RlcmVkIHRva2VuLgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gdG9rZW5LZXk6IHRva2VuIHJlZ2lzdHJ5IGtleSB0byB2YWxpZGF0ZSBhbmQgbG9vayB1cAoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRva2VuS2V5IGlzIHZhbGlkIGFuZCByZWdpc3RlcmVkOyBub24tbmlsIGZvciBhbiBpbnZhbGlkIG9yIHVucmVnaXN0ZXJlZCBrZXkKCUlzUmVnaXN0ZXJlZCh0b2tlbktleSBzdHJpbmcpIGVycm9yCgoJLy8gVmFsaWRhdGVSZWdpc3RlcmVkIGNoZWNrcyBlYWNoIHRva2VuIGtleSBpbiBvcmRlci4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIHRva2VuS2V5czogdG9rZW4gcmVnaXN0cnkga2V5cyB0aGF0IG11c3QgYWxsIGJlIHZhbGlkIGFuZCByZWdpc3RlcmVkCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBlcnJvcjogbmlsIHdoZW4gZXZlcnkga2V5IGlzIHJlZ2lzdGVyZWQ7IG90aGVyd2lzZSB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uIGZhaWx1cmUgaW4gaW5wdXQgb3JkZXIKCVZhbGlkYXRlUmVnaXN0ZXJlZCh0b2tlbktleXMgLi4uc3RyaW5nKSBlcnJvcgoKCS8vIFRvdGFsU3VwcGx5IHJldHVybnMgdGhlIHRvdGFsIHN1cHBseSBvZiBhIHJlZ2lzdGVyZWQgdG9rZW4uCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSB0b2tlbktleTogdG9rZW4gcmVnaXN0cnkga2V5IHdob3NlIHN1cHBseSBpcyBxdWVyaWVkCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSB0b3RhbFN1cHBseTogdG9rZW4ncyB0b3RhbCBzdXBwbHk7IHBhbmljcyBpZiB0b2tlbktleSBpcyBpbnZhbGlkIG9yIHVucmVnaXN0ZXJlZAoJVG90YWxTdXBwbHkodG9rZW5LZXkgc3RyaW5nKSBpbnQ2NAoKCS8vIEJhbGFuY2VPZiByZXR1cm5zIGEgcmVnaXN0ZXJlZCB0b2tlbidzIGJhbGFuY2UgZm9yIGFuIGFkZHJlc3MuCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSB0b2tlbktleTogdG9rZW4gcmVnaXN0cnkga2V5IHdob3NlIGJhbGFuY2UgaXMgcXVlcmllZAoJLy8gICAtIGFkZHI6IGFjY291bnQgYWRkcmVzcyB3aG9zZSB0b2tlbiBiYWxhbmNlIGlzIHF1ZXJpZWQKCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGJhbGFuY2U6IHRva2VuIHVuaXRzIGhlbGQgYnkgYWRkcjsgcGFuaWNzIGlmIHRva2VuS2V5IGlzIGludmFsaWQgb3IgdW5yZWdpc3RlcmVkCglCYWxhbmNlT2YodG9rZW5LZXkgc3RyaW5nLCBhZGRyIGFkZHJlc3MpIGludDY0CgoJLy8gQWxsb3dhbmNlIHJldHVybnMgdGhlIGFwcHJvdmVkIHNwZW5kYWJsZSBhbW91bnQgZm9yIGFuIG93bmVyL3NwZW5kZXIgcGFpci4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIHRva2VuS2V5OiB0b2tlbiByZWdpc3RyeSBrZXkgd2hvc2UgYWxsb3dhbmNlIGlzIHF1ZXJpZWQKCS8vICAgLSBvd25lcjogYWNjb3VudCB0aGF0IGdyYW50ZWQgc3BlbmRpbmcgYXBwcm92YWwKCS8vICAgLSBzcGVuZGVyOiBhY2NvdW50IGFsbG93ZWQgdG8gc3BlbmQgb3duZXIncyB0b2tlbnMKCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGFsbG93YW5jZTogdG9rZW4gdW5pdHMgb3duZXIgaGFzIGFwcHJvdmVkIGZvciBzcGVuZGVyOyBwYW5pY3MgaWYgdG9rZW5LZXkgaXMgaW52YWxpZCBvciB1bnJlZ2lzdGVyZWQKCUFsbG93YW5jZSh0b2tlbktleSBzdHJpbmcsIG93bmVyLCBzcGVuZGVyIGFkZHJlc3MpIGludDY0CgoJLy8gVHJhbnNmZXIgYXNrcyB0aGUgdG9rZW4gdGVsbGVyIGJvdW5kIHRvIHJsbSB0byBtb3ZlIHRva2VucyB0byB0by4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIF86IGxlYWRpbmcgdG9rZW4tY2FsbCBkaXNjcmltaW5hdG9yOyBjYWxsZXJzIHBhc3MgMAoJLy8gICAtIHJsbTogcHJvcGFnYXRlZCByZWFsbSBjb250ZXh0IHVzZWQgdG8gYmluZCB0aGUgdG9rZW4gdGVsbGVyIGFuZCBpbnZva2UgdGhlIHRyYW5zZmVyCgkvLyAgIC0gdG9rZW5LZXk6IHRva2VuIHJlZ2lzdHJ5IGtleSB3aG9zZSB0b2tlbnMgYXJlIHRyYW5zZmVycmVkCgkvLyAgIC0gdG86IHJlY2lwaWVudCBhY2NvdW50IGFkZHJlc3MKCS8vICAgLSBhbW91bnQ6IG51bWJlciBvZiB0b2tlbiB1bml0cyB0byB0cmFuc2ZlcgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRoZSB0ZWxsZXIgY29tcGxldGVzIHRoZSB0cmFuc2Zlcjsgbm9uLW5pbCB3aGVuIHRva2VuIHZhbGlkYXRpb24gb3IgdHJhbnNmZXIgcnVsZXMgcmVqZWN0IGl0CglUcmFuc2ZlcihfIGludCwgcmxtIHJlYWxtLCB0b2tlbktleSBzdHJpbmcsIHRvIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgZXJyb3IKCgkvLyBUcmFuc2ZlckZyb20gYXNrcyB0aGUgdG9rZW4gdGVsbGVyIGJvdW5kIHRvIHJsbSB0byB0cmFuc2ZlciB0b2tlbnMgZnJvbSBvbmUgYWNjb3VudCB0byBhbm90aGVyLgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gXzogbGVhZGluZyB0b2tlbi1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwCgkvLyAgIC0gcmxtOiBwcm9wYWdhdGVkIHJlYWxtIGNvbnRleHQgdXNlZCB0byBiaW5kIHRoZSB0b2tlbiB0ZWxsZXIgYW5kIGludm9rZSB0aGUgdHJhbnNmZXIKCS8vICAgLSB0b2tlbktleTogdG9rZW4gcmVnaXN0cnkga2V5IHdob3NlIHRva2VucyBhcmUgdHJhbnNmZXJyZWQKCS8vICAgLSBmcm9tOiBhY2NvdW50IHdob3NlIHRva2VuIGJhbGFuY2UgaXMgZGViaXRlZAoJLy8gICAtIHRvOiByZWNpcGllbnQgYWNjb3VudCBhZGRyZXNzCgkvLyAgIC0gYW1vdW50OiBudW1iZXIgb2YgdG9rZW4gdW5pdHMgdG8gdHJhbnNmZXIKCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGVycm9yOiBuaWwgd2hlbiB0aGUgdGVsbGVyIGNvbXBsZXRlcyB0aGUgdHJhbnNmZXI7IG5vbi1uaWwgd2hlbiB0b2tlbiB2YWxpZGF0aW9uLCBhbGxvd2FuY2UsIG9yIGJhbGFuY2UgcnVsZXMgcmVqZWN0IGl0CglUcmFuc2ZlckZyb20oXyBpbnQsIHJsbSByZWFsbSwgdG9rZW5LZXkgc3RyaW5nLCBmcm9tLCB0byBhZGRyZXNzLCBhbW91bnQgaW50NjQpIGVycm9yCgoJLy8gQXBwcm92ZSBhc2tzIHRoZSB0b2tlbiB0ZWxsZXIgYm91bmQgdG8gcmxtIHRvIHNldCBzcGVuZGVyJ3MgYWxsb3dhbmNlLgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gXzogbGVhZGluZyB0b2tlbi1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwCgkvLyAgIC0gcmxtOiBwcm9wYWdhdGVkIHJlYWxtIGNvbnRleHQgdXNlZCB0byBiaW5kIHRoZSB0b2tlbiB0ZWxsZXIgYW5kIGludm9rZSBhcHByb3ZhbAoJLy8gICAtIHRva2VuS2V5OiB0b2tlbiByZWdpc3RyeSBrZXkgd2hvc2UgdG9rZW5zIGFyZSBhcHByb3ZlZAoJLy8gICAtIHNwZW5kZXI6IGFjY291bnQgcmVjZWl2aW5nIHBlcm1pc3Npb24gdG8gc3BlbmQgdGhlIGNhbGxlcidzIHRva2VucwoJLy8gICAtIGFtb3VudDogbnVtYmVyIG9mIHRva2VuIHVuaXRzIHRvIGF1dGhvcml6ZQoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRoZSB0ZWxsZXIgcmVjb3JkcyB0aGUgYWxsb3dhbmNlOyBub24tbmlsIHdoZW4gdG9rZW4gdmFsaWRhdGlvbiBvciBhcHByb3ZhbCBydWxlcyByZWplY3QgaXQKCUFwcHJvdmUoXyBpbnQsIHJsbSByZWFsbSwgdG9rZW5LZXkgc3RyaW5nLCBzcGVuZGVyIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgZXJyb3IKCVJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nCn0KGrsNCgt1cGdyYWRlLmdubxKrDXBhY2thZ2UgY29tbW9uCgppbXBvcnQgKAoJImduby5sYW5kL3IvZ25vc3dhcC9hY2Nlc3MvdjEiCikKCi8vIFJlZ2lzdGVySW5pdGlhbGl6ZXIgcmVnaXN0ZXJzIHRoZSB2ZXJzaW9uZWQgY29tbW9uIGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVyCi8vIGFuZCBhY3RpdmF0ZXMgdGhlIGltcGxlbWVudGF0aW9uIHJldHVybmVkIGJ5IGl0LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gY3VyOiBDdXJyZW50IHJlYWxtIGNvbnRleHQ7IGNhbGxlcnMgdXNlIGNyb3NzKGN1cikgd2hlbiBjcm9zc2luZyBpbnRvIHRoaXMgcmVhbG0uCi8vICAgLSBpbml0aWFsaXplcjogY2FsbGJhY2sgaW52b2tlZCB3aXRoIGRpc2NyaW1pbmF0b3IgMCBhbmQgdGhlIHByb3BhZ2F0ZWQKLy8gICAgIGltcGxlbWVudGF0aW9uIHJlYWxtLCByZXR1cm5pbmcgdGhlIHZlcnNpb24ncyBJQ29tbW9uIGltcGxlbWVudGF0aW9uCmZ1bmMgUmVnaXN0ZXJJbml0aWFsaXplcihjdXIgcmVhbG0sIGluaXRpYWxpemVyIGZ1bmMoXyBpbnQsIHJsbSByZWFsbSkgSUNvbW1vbikgewoJaW5pdGlhbGl6ZXJGdW5jIDo9IGZ1bmMoXyBpbnQsIHJsbSByZWFsbSwgXyBhbnkpIGFueSB7CgkJYWNjZXNzLkFzc2VydElzUmxtQ3VycmVudCgwLCBybG0pCgoJCXJldHVybiBpbml0aWFsaXplcigwLCBybG0pCgl9CgoJZXJyIDo9IHZlcnNpb25NYW5hZ2VyLlJlZ2lzdGVySW5pdGlhbGl6ZXIoMCwgY3VyLCBpbml0aWFsaXplckZ1bmMpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CgoJZXJyID0gdXBkYXRlSW1wbGVtZW50YXRpb24oKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQp9CgovLyBVcGdyYWRlSW1wbCBjaGFuZ2VzIHRoZSBhY3RpdmUgY29tbW9uIGltcGxlbWVudGF0aW9uIHBhY2thZ2UgYW5kIHJlZnJlc2hlcwovLyB0aGUgY2FjaGVkIGltcGxlbWVudGF0aW9uLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gY3VyOiBDdXJyZW50IHJlYWxtIGNvbnRleHQ7IGNhbGxlcnMgdXNlIGNyb3NzKGN1cikgd2hlbiBjcm9zc2luZyBpbnRvIHRoaXMgcmVhbG0uCi8vICAgLSBwYWNrYWdlUGF0aDogZnVsbHkgcXVhbGlmaWVkIHBhY2thZ2UgcGF0aCBvZiB0aGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50YXRpb24KZnVuYyBVcGdyYWRlSW1wbChjdXIgcmVhbG0sIHBhY2thZ2VQYXRoIHN0cmluZykgewoJcHJldiA6PSBjdXIuUHJldmlvdXMoKQoJYWNjZXNzLkFzc2VydElzQWRtaW5PckdvdmVybmFuY2UocHJldi5BZGRyZXNzKCkpCgoJZXJyIDo9IHZlcnNpb25NYW5hZ2VyLkNoYW5nZUltcGxlbWVudGF0aW9uKDAsIGN1ciwgcGFja2FnZVBhdGgpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CgoJZXJyID0gdXBkYXRlSW1wbGVtZW50YXRpb24oKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQp9CgovLyBHZXRJbXBsZW1lbnRhdGlvblBhY2thZ2VQYXRoIHJldHVybnMgdGhlIHBhY2thZ2UgcGF0aCBvZiB0aGUgY3VycmVudGx5Ci8vIHNlbGVjdGVkIGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHBhY2thZ2VQYXRoOiBmdWxseSBxdWFsaWZpZWQgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBwYWNrYWdlIHBhdGgKZnVuYyBHZXRJbXBsZW1lbnRhdGlvblBhY2thZ2VQYXRoKCkgc3RyaW5nIHsKCXJldHVybiB2ZXJzaW9uTWFuYWdlci5HZXRDdXJyZW50UGFja2FnZVBhdGgoKQp9CiIiChMvZ25vLk1lbVBhY2thZ2VUeXBlEgsKCU1QVXNlckFsbBIRCMj1xBwSCjI5OTI1dWdub3QaqAEKOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDBJzVBMPi0jqizwud5so4H6Lp9Zc4oYF/2VGlIjXCuuESQD1vnE8Mu9dHgogwDzu83BE4vtGRAmBs8b5GLh5vdg8sFZ7ZXP2oB2sAF8/wYN+tVf5xNE2Y4eKZyqlH5ktmoBEaKGcxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxbHV1eGU=