Skip to content

Instantly share code, notes, and snippets.

@jaredallard
Created May 23, 2015 06:20
Show Gist options
  • Save jaredallard/5776bba5502933d2044b to your computer and use it in GitHub Desktop.
Save jaredallard/5776bba5502933d2044b to your computer and use it in GitHub Desktop.
craftos; docker style!
{"inodes":{"":{"children":["root"],"isDir":true,"parents":[],"size":0},"root":{"children":["startup","programs","help","apis"],"isDir":true,"name":"root","parents":["/root"],"size":0},"root/apis":{"children":["colors","colours","disk","gps","help","io","keys","paintutils","parallel","peripheral","rednet","term","textutils","vector","window"],"isDir":true,"name":"apis","parents":["/root","/root/apis"],"size":0},"root/apis/colors":{"data":"LS0gQ29sb3JzCndoaXRlID0gMQpvcmFuZ2UgPSAyCm1hZ2VudGEgPSA0CmxpZ2h0Qmx1ZSA9IDgKeWVsbG93ID0gMTYKbGltZSA9IDMyCnBpbmsgPSA2NApncmF5ID0gMTI4CmxpZ2h0R3JheSA9IDI1NgpjeWFuID0gNTEyCnB1cnBsZSA9IDEwMjQKYmx1ZSA9IDIwNDgKYnJvd24gPSA0MDk2CmdyZWVuID0gODE5MgpyZWQgPSAxNjM4NApibGFjayA9IDMyNzY4CgpmdW5jdGlvbiBjb21iaW5lKCAuLi4gKQogICAgbG9jYWwgciA9IDAKICAgIGZvciBuLGMgaW4gaXBhaXJzKCB7IC4uLiB9ICkgZG8KICAgICAgICByID0gYml0LmJvcihyLGMpCiAgICBlbmQKICAgIHJldHVybiByCmVuZAoKZnVuY3Rpb24gc3VidHJhY3QoIGNvbG9ycywgLi4uICkKCWxvY2FsIHIgPSBjb2xvcnMKCWZvciBuLGMgaW4gaXBhaXJzKCB7IC4uLiB9ICkgZG8KCQlyID0gYml0LmJhbmQociwgYml0LmJub3QoYykpCgllbmQKCXJldHVybiByCmVuZAoKZnVuY3Rpb24gdGVzdCggY29sb3JzLCBjb2xvciApCiAgICByZXR1cm4gKChiaXQuYmFuZChjb2xvcnMsIGNvbG9yKSkgPT0gY29sb3IpCmVuZA==","isDir":false,"name":"colors","size":0},"root/apis/colours":{"data":"LS0gQ29sb3VycyAoZm9yIGxvdmVycyBvZiBicml0aXNoIHNwZWxsaW5nKQpsb2NhbCBmbkZpbGUsIGVyciA9IGxvYWRmaWxlKCIvcm9tL2FwaXMvY29sb3JzIikKaWYgbm90IGZuRmlsZSB0aGVuCgllcnJvciggZXJyICkKZW5kCgpsb2NhbCB0Q29sb3JzID0ge30Kc2V0bWV0YXRhYmxlKCB0Q29sb3JzLCB7IF9faW5kZXggPSBfRyB9ICkKc2V0ZmVudiggZm5GaWxlLCB0Q29sb3JzICkKZm5GaWxlKCB0Q29sb3JzICkKCmxvY2FsIHRDb2xvdXJzID0gZ2V0ZmVudigpCmZvciBrLHYgaW4gcGFpcnMoIHRDb2xvcnMgKSBkbwoJdENvbG91cnNba10gPSB2CmVuZAoKdENvbG91cnMuZ3JheSA9IG5pbAp0Q29sb3Vycy5ncmV5ID0gdENvbG9ycy5ncmF5Cgp0Q29sb3Vycy5saWdodEdyYXkgPSBuaWwKdENvbG91cnMubGlnaHRHcmV5ID0gdENvbG9ycy5saWdodEdyYXk=","isDir":false,"name":"colours","size":0},"root/apis/disk":{"data":"CmxvY2FsIGZ1bmN0aW9uIGlzRHJpdmUoIG5hbWUgKQoJcmV0dXJuIHBlcmlwaGVyYWwuZ2V0VHlwZSggbmFtZSApID09ICJkcml2ZSIKZW5kCgpmdW5jdGlvbiBpc1ByZXNlbnQoIG5hbWUgKQoJaWYgaXNEcml2ZSggbmFtZSApIHRoZW4KCQlyZXR1cm4gcGVyaXBoZXJhbC5jYWxsKCBuYW1lLCAiaXNEaXNrUHJlc2VudCIgKQoJZW5kCglyZXR1cm4gZmFsc2UKZW5kCgpmdW5jdGlvbiBnZXRMYWJlbCggbmFtZSApCglpZiBpc0RyaXZlKCBuYW1lICkgdGhlbgoJCXJldHVybiBwZXJpcGhlcmFsLmNhbGwoIG5hbWUsICJnZXREaXNrTGFiZWwiICkKCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIHNldExhYmVsKCBuYW1lLCBsYWJlbCApCglpZiBpc0RyaXZlKCBuYW1lICkgdGhlbgoJCXBlcmlwaGVyYWwuY2FsbCggbmFtZSwgInNldERpc2tMYWJlbCIsIGxhYmVsICkKCWVuZAplbmQKCmZ1bmN0aW9uIGhhc0RhdGEoIG5hbWUgKQoJaWYgaXNEcml2ZSggbmFtZSApIHRoZW4KCQlyZXR1cm4gcGVyaXBoZXJhbC5jYWxsKCBuYW1lLCAiaGFzRGF0YSIgKQoJZW5kCglyZXR1cm4gZmFsc2UKZW5kCgpmdW5jdGlvbiBnZXRNb3VudFBhdGgoIG5hbWUgKQoJaWYgaXNEcml2ZSggbmFtZSApIHRoZW4KCQlyZXR1cm4gcGVyaXBoZXJhbC5jYWxsKCBuYW1lLCAiZ2V0TW91bnRQYXRoIiApCgllbmQKCXJldHVybiBuaWwKZW5kCgpmdW5jdGlvbiBoYXNBdWRpbyggbmFtZSApCglpZiBpc0RyaXZlKCBuYW1lICkgdGhlbgoJCXJldHVybiBwZXJpcGhlcmFsLmNhbGwoIG5hbWUsICJoYXNBdWRpbyIgKQoJZW5kCglyZXR1cm4gZmFsc2UKZW5kCgpmdW5jdGlvbiBnZXRBdWRpb1RpdGxlKCBuYW1lICkKCWlmIGlzRHJpdmUoIG5hbWUgKSB0aGVuCgkJcmV0dXJuIHBlcmlwaGVyYWwuY2FsbCggbmFtZSwgImdldEF1ZGlvVGl0bGUiICkKCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIHBsYXlBdWRpbyggbmFtZSApCglpZiBpc0RyaXZlKCBuYW1lICkgdGhlbgoJCXBlcmlwaGVyYWwuY2FsbCggbmFtZSwgInBsYXlBdWRpbyIgKQoJZW5kCmVuZAoKZnVuY3Rpb24gc3RvcEF1ZGlvKCBuYW1lICkKCWlmIG5vdCBuYW1lIHRoZW4KCQlmb3IgbixzTmFtZSBpbiBpcGFpcnMoIHBlcmlwaGVyYWwuZ2V0TmFtZXMoKSApIGRvCgkJCXN0b3BBdWRpbyggc05hbWUgKQoJCWVuZAoJZWxzZQoJCWlmIGlzRHJpdmUoIG5hbWUgKSB0aGVuCgkJCXBlcmlwaGVyYWwuY2FsbCggbmFtZSwgInN0b3BBdWRpbyIgKQoJCWVuZAoJZW5kCmVuZAoKZnVuY3Rpb24gZWplY3QoIG5hbWUgKQoJaWYgaXNEcml2ZSggbmFtZSApIHRoZW4KCQlwZXJpcGhlcmFsLmNhbGwoIG5hbWUsICJlamVjdERpc2siICkKCWVuZAplbmQKCmZ1bmN0aW9uIGdldElEKCBuYW1lICkKCWlmIGlzRHJpdmUoIG5hbWUgKSB0aGVuCgkJcmV0dXJuIHBlcmlwaGVyYWwuY2FsbCggbmFtZSwgImdldERpc2tJRCIgKQoJZW5kCglyZXR1cm4gbmlsCmVuZAo=","isDir":false,"name":"disk","size":0},"root/apis/gps":{"data":"CkNIQU5ORUxfR1BTID0gNjU1MzQKCmxvY2FsIGZ1bmN0aW9uIHRyaWxhdGVyYXRlKCBBLCBCLCBDICkKCWxvY2FsIGEyYiA9IEIudlBvc2l0aW9uIC0gQS52UG9zaXRpb24KCWxvY2FsIGEyYyA9IEMudlBvc2l0aW9uIC0gQS52UG9zaXRpb24KCQkKCWlmIG1hdGguYWJzKCBhMmI6bm9ybWFsaXplKCk6ZG90KCBhMmM6bm9ybWFsaXplKCkgKSApID4gMC45OTkgdGhlbgoJCXJldHVybiBuaWwKCWVuZAoJCglsb2NhbCBkID0gYTJiOmxlbmd0aCgpCglsb2NhbCBleCA9IGEyYjpub3JtYWxpemUoICkKCWxvY2FsIGkgPSBleDpkb3QoIGEyYyApCglsb2NhbCBleSA9IChhMmMgLSAoZXggKiBpKSk6bm9ybWFsaXplKCkKCWxvY2FsIGogPSBleTpkb3QoIGEyYyApCglsb2NhbCBleiA9IGV4OmNyb3NzKCBleSApCgoJbG9jYWwgcjEgPSBBLm5EaXN0YW5jZQoJbG9jYWwgcjIgPSBCLm5EaXN0YW5jZQoJbG9jYWwgcjMgPSBDLm5EaXN0YW5jZQoJCQoJbG9jYWwgeCA9IChyMSpyMSAtIHIyKnIyICsgZCpkKSAvICgyKmQpCglsb2NhbCB5ID0gKHIxKnIxIC0gcjMqcjMgLSB4KnggKyAoeC1pKSooeC1pKSArIGoqaikgLyAoMipqKQoJCQoJbG9jYWwgcmVzdWx0ID0gQS52UG9zaXRpb24gKyAoZXggKiB4KSArIChleSAqIHkpCgoJbG9jYWwgelNxdWFyZWQgPSByMSpyMSAtIHgqeCAtIHkqeQoJaWYgelNxdWFyZWQgPiAwIHRoZW4KCQlsb2NhbCB6ID0gbWF0aC5zcXJ0KCB6U3F1YXJlZCApCgkJbG9jYWwgcmVzdWx0MSA9IHJlc3VsdCArIChleiAqIHopCgkJbG9jYWwgcmVzdWx0MiA9IHJlc3VsdCAtIChleiAqIHopCgkJCgkJbG9jYWwgcm91bmRlZDEsIHJvdW5kZWQyID0gcmVzdWx0MTpyb3VuZCggMC4wMSApLCByZXN1bHQyOnJvdW5kKCAwLjAxICkKCQlpZiByb3VuZGVkMS54IH49IHJvdW5kZWQyLnggb3Igcm91bmRlZDEueSB+PSByb3VuZGVkMi55IG9yIHJvdW5kZWQxLnogfj0gcm91bmRlZDIueiB0aGVuCgkJCXJldHVybiByb3VuZGVkMSwgcm91bmRlZDIKCQllbHNlCgkJCXJldHVybiByb3VuZGVkMQoJCWVuZAoJZW5kCglyZXR1cm4gcmVzdWx0OnJvdW5kKCAwLjAxICkKCQplbmQKCmxvY2FsIGZ1bmN0aW9uIG5hcnJvdyggcDEsIHAyLCBmaXggKQoJbG9jYWwgZGlzdDEgPSBtYXRoLmFicyggKHAxIC0gZml4LnZQb3NpdGlvbik6bGVuZ3RoKCkgLSBmaXgubkRpc3RhbmNlICkKCWxvY2FsIGRpc3QyID0gbWF0aC5hYnMoIChwMiAtIGZpeC52UG9zaXRpb24pOmxlbmd0aCgpIC0gZml4Lm5EaXN0YW5jZSApCgkKCWlmIG1hdGguYWJzKGRpc3QxIC0gZGlzdDIpIDwgMC4wMSB0aGVuCgkJcmV0dXJuIHAxLCBwMgoJZWxzZWlmIGRpc3QxIDwgZGlzdDIgdGhlbgoJCXJldHVybiBwMTpyb3VuZCggMC4wMSApCgllbHNlCgkJcmV0dXJuIHAyOnJvdW5kKCAwLjAxICkKCWVuZAplbmQKCmZ1bmN0aW9uIGxvY2F0ZSggX25UaW1lb3V0LCBfYkRlYnVnICkKCgktLSBGaW5kIGEgbW9kZW0KCWxvY2FsIHNNb2RlbVNpZGUgPSBuaWwKCWZvciBuLHNTaWRlIGluIGlwYWlycyggcnMuZ2V0U2lkZXMoKSApIGRvCgkJaWYgcGVyaXBoZXJhbC5nZXRUeXBlKCBzU2lkZSApID09ICJtb2RlbSIgYW5kIHBlcmlwaGVyYWwuY2FsbCggc1NpZGUsICJpc1dpcmVsZXNzIiApIHRoZW4JCgkJCXNNb2RlbVNpZGUgPSBzU2lkZQoJCQlicmVhawoJCWVuZAoJZW5kCgoJaWYgc01vZGVtU2lkZSA9PSBuaWwgdGhlbgoJCWlmIF9iRGVidWcgdGhlbgoJCQlwcmludCggIk5vIHdpcmVsZXNzIG1vZGVtIGF0dGFjaGVkIiApCgkJZW5kCgkJcmV0dXJuIG5pbAoJZW5kCgkKCWlmIF9iRGVidWcgdGhlbgoJCXByaW50KCAiRmluZGluZyBwb3NpdGlvbi4uLiIgKQoJZW5kCgkKCS0tIE9wZW4gYSBjaGFubmVsCglsb2NhbCBtb2RlbSA9IHBlcmlwaGVyYWwud3JhcCggc01vZGVtU2lkZSApCglsb2NhbCBiQ2xvc2VDaGFubmVsID0gZmFsc2UKCWlmIG5vdCBtb2RlbS5pc09wZW4oIG9zLmdldENvbXB1dGVySUQoKSApIHRoZW4KCQltb2RlbS5vcGVuKCBvcy5nZXRDb21wdXRlcklEKCkgKQoJCWJDbG9zZUNoYW5uZWwgPSB0cnVlCgllbmQKCQoJLS0gU2VuZCBhIHBpbmcgdG8gbGlzdGVuaW5nIEdQUyBob3N0cwoJbW9kZW0udHJhbnNtaXQoIENIQU5ORUxfR1BTLCBvcy5nZXRDb21wdXRlcklEKCksICJQSU5HIiApCgkJCgktLSBXYWl0IGZvciB0aGUgcmVzcG9uc2VzCglsb2NhbCB0Rml4ZXMgPSB7fQoJbG9jYWwgcG9zMSwgcG9zMiA9IG5pbCwgbmlsCglsb2NhbCB0aW1lb3V0ID0gb3Muc3RhcnRUaW1lciggX25UaW1lb3V0IG9yIDIgKQoJd2hpbGUgdHJ1ZSBkbwoJCWxvY2FsIGUsIHAxLCBwMiwgcDMsIHA0LCBwNSA9IG9zLnB1bGxFdmVudCgpCgkJaWYgZSA9PSAibW9kZW1fbWVzc2FnZSIgdGhlbgoJCQktLSBXZSByZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSBhIG1vZGVtCgkJCWxvY2FsIHNTaWRlLCBzQ2hhbm5lbCwgc1JlcGx5Q2hhbm5lbCwgdE1lc3NhZ2UsIG5EaXN0YW5jZSA9IHAxLCBwMiwgcDMsIHA0LCBwNQoJCQlpZiBzU2lkZSA9PSBzTW9kZW1TaWRlIGFuZCBzQ2hhbm5lbCA9PSBvcy5nZXRDb21wdXRlcklEKCkgYW5kIHNSZXBseUNoYW5uZWwgPT0gQ0hBTk5FTF9HUFMgdGhlbgoJCQkJLS0gUmVjZWl2ZWQgdGhlIGNvcnJlY3QgbWVzc2FnZSBmcm9tIHRoZSBjb3JyZWN0IG1vZGVtOiB1c2UgaXQgdG8gZGV0ZXJtaW5lIHBvc2l0aW9uCgkJCQlpZiB0eXBlKHRNZXNzYWdlKSA9PSAidGFibGUiIGFuZCAjdE1lc3NhZ2UgPT0gMyB0aGVuCgkJCQkJbG9jYWwgdEZpeCA9IHsgdlBvc2l0aW9uID0gdmVjdG9yLm5ldyggdE1lc3NhZ2VbMV0sIHRNZXNzYWdlWzJdLCB0TWVzc2FnZVszXSApLCBuRGlzdGFuY2UgPSBuRGlzdGFuY2UgfQoJCQkJCWlmIF9iRGVidWcgdGhlbgoJCQkJCQlwcmludCggdEZpeC5uRGlzdGFuY2UuLiIgbWV0cmVzIGZyb20gIi4udG9zdHJpbmcoIHRGaXgudlBvc2l0aW9uICkgKQoJCQkJCWVuZAoJCQkJCWlmIHRGaXgubkRpc3RhbmNlID09IDAgdGhlbgoJCQkJCSAgICBwb3MxLCBwb3MyID0gdEZpeC52UG9zaXRpb24sIG5pbAoJCQkJCWVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0Rml4ZXMsIHRGaXggKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAjdEZpeGVzID49IDMgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBvczEgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczEsIHBvczIgPSB0cmlsYXRlcmF0ZSggdEZpeGVzWzFdLCB0Rml4ZXNbMl0sIHRGaXhlc1sjdEZpeGVzXSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zMSwgcG9zMiA9IG5hcnJvdyggcG9zMSwgcG9zMiwgdEZpeGVzWyN0Rml4ZXNdICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICBlbmQKCQkJCQlpZiBwb3MxIGFuZCBub3QgcG9zMiB0aGVuCgkJCQkJCWJyZWFrCgkJCQkJZW5kCgkJCQllbmQKCQkJZW5kCgkJCQoJCWVsc2VpZiBlID09ICJ0aW1lciIgdGhlbgoJCQktLSBXZSByZWNlaXZlZCBhIHRpbWVvdXQKCQkJbG9jYWwgdGltZXIgPSBwMQoJCQlpZiB0aW1lciA9PSB0aW1lb3V0IHRoZW4KCQkJCWJyZWFrCgkJCWVuZAoJCQoJCWVuZCAKCWVuZAoJCgktLSBDbG9zZSB0aGUgY2hhbm5lbCwgaWYgd2Ugb3BlbmVkIG9uZQoJaWYgYkNsb3NlQ2hhbm5lbCB0aGVuCgkJbW9kZW0uY2xvc2UoIG9zLmdldENvbXB1dGVySUQoKSApCgllbmQKCQoJLS0gUmV0dXJuIHRoZSByZXNwb25zZQoJaWYgcG9zMSBhbmQgcG9zMiB0aGVuCgkJaWYgX2JEZWJ1ZyB0aGVuCgkJCXByaW50KCAiQW1iaWd1b3VzIHBvc2l0aW9uIiApCgkJCXByaW50KCAiQ291bGQgYmUgIi4ucG9zMS54Li4iLCIuLnBvczEueS4uIiwiLi5wb3MxLnouLiIgb3IgIi4ucG9zMi54Li4iLCIuLnBvczIueS4uIiwiLi5wb3MyLnogKQoJCWVuZAoJCXJldHVybiBuaWwKCWVsc2VpZiBwb3MxIHRoZW4KCQlpZiBfYkRlYnVnIHRoZW4KCQkJcHJpbnQoICJQb3NpdGlvbiBpcyAiLi5wb3MxLnguLiIsIi4ucG9zMS55Li4iLCIuLnBvczEueiApCgkJZW5kCgkJcmV0dXJuIHBvczEueCwgcG9zMS55LCBwb3MxLnoKCWVsc2UKCQlpZiBfYkRlYnVnIHRoZW4KCQkJcHJpbnQoICJDb3VsZCBub3QgZGV0ZXJtaW5lIHBvc2l0aW9uIiApCgkJZW5kCgkJcmV0dXJuIG5pbAoJZW5kCmVuZA==","isDir":false,"name":"gps","size":0},"root/apis/help":{"data":"CmxvY2FsIHNQYXRoID0gIi9yb20vaGVscCIKCmZ1bmN0aW9uIHBhdGgoKQoJcmV0dXJuIHNQYXRoCmVuZAoKZnVuY3Rpb24gc2V0UGF0aCggX3NQYXRoICkKCXNQYXRoID0gX3NQYXRoCmVuZAoKZnVuY3Rpb24gbG9va3VwKCBfc1RvcGljICkKIAktLSBMb29rIG9uIHRoZSBwYXRoIHZhcmlhYmxlCiAgICBmb3Igc1BhdGggaW4gc3RyaW5nLmdtYXRjaChzUGF0aCwgIlteOl0rIikgZG8KICAgIAlzUGF0aCA9IGZzLmNvbWJpbmUoIHNQYXRoLCBfc1RvcGljICkKICAgIAlpZiBmcy5leGlzdHMoIHNQYXRoICkgYW5kIG5vdCBmcy5pc0Rpciggc1BhdGggKSB0aGVuCgkJCXJldHVybiBzUGF0aAogICAgCWVuZAogICAgZW5kCgkKCS0tIE5vdCBmb3VuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIHRvcGljcygpCglsb2NhbCB0SXRlbXMgPSB7fQoJCgktLSBBZGQgdG9waWNzIGZyb20gdGhlIHBhdGgKICAgIGZvciBzUGF0aCBpbiBzdHJpbmcuZ21hdGNoKHNQYXRoLCAiW146XSsiKSBkbwoJCWlmIGZzLmlzRGlyKCBzUGF0aCApIHRoZW4KCQkJbG9jYWwgdExpc3QgPSBmcy5saXN0KCBzUGF0aCApCgkJCWZvciBuLHNGaWxlIGluIHBhaXJzKCB0TGlzdCApIGRvCgkJCQlpZiBzdHJpbmcuc3ViKCBzRmlsZSwgMSwgMSApIH49ICIuIiB0aGVuCgkJCQkJaWYgbm90IGZzLmlzRGlyKCBmcy5jb21iaW5lKCBzUGF0aCwgc0ZpbGUgKSApIHRoZW4KCQkJCQkJdEl0ZW1zWyBzRmlsZSBdID0gdHJ1ZQoJCQkJCWVuZAoJCQkJZW5kCgkJCWVuZAoJCWVuZAogICAgZW5kCQoKCS0tIFNvcnQgYW5kIHJldHVybgoJbG9jYWwgdEl0ZW1MaXN0ID0ge30KCWZvciBzSXRlbSwgYiBpbiBwYWlycyggdEl0ZW1zICkgZG8KCQl0YWJsZS5pbnNlcnQoIHRJdGVtTGlzdCwgc0l0ZW0gKQoJZW5kCgl0YWJsZS5zb3J0KCB0SXRlbUxpc3QgKQoJcmV0dXJuIHRJdGVtTGlzdAplbmQ=","isDir":false,"name":"help","size":0},"root/apis/io":{"data":"LS0gRGVmaW5pdGlvbiBmb3IgdGhlIElPIEFQSQoKbG9jYWwgZ19kZWZhdWx0SW5wdXQgPSB7CgliRmlsZUhhbmRsZSA9IHRydWUsCgliQ2xvc2VkID0gZmFsc2UsCgljbG9zZSA9IGZ1bmN0aW9uKCBzZWxmICkKCWVuZCwKCXJlYWQgPSBmdW5jdGlvbiggc2VsZiwgX3NGb3JtYXQgKQoJCWlmIF9zRm9ybWF0IGFuZCBfc0Zvcm1hdCB+PSAiKmwiIHRoZW4KCQkJZXJyb3IoICJVbnN1cHBvcnRlZCBmb3JtYXQiICkKCQllbmQKCQlyZXR1cm4gX0cucmVhZCgpCgllbmQsCglsaW5lcyA9IGZ1bmN0aW9uKCBzZWxmICkKCQlyZXR1cm4gZnVuY3Rpb24oKQoJCQlyZXR1cm4gX0cucmVhZCgpCgkJZW5kCgllbmQsCn0KCmxvY2FsIGdfZGVmYXVsdE91dHB1dCA9IHsKCWJGaWxlSGFuZGxlID0gdHJ1ZSwKCWJDbG9zZWQgPSBmYWxzZSwKCWNsb3NlID0gZnVuY3Rpb24oIHNlbGYgKQoJZW5kLAoJd3JpdGUgPSBmdW5jdGlvbiggc2VsZiwgX3NUZXh0ICkKCQlfRy53cml0ZSggX3NUZXh0ICkKCWVuZCwKCWZsdXNoID0gZnVuY3Rpb24oIHNlbGYgKQoJZW5kLAp9Cgpsb2NhbCBnX2N1cnJlbnRJbnB1dCA9IGdfZGVmYXVsdElucHV0CmxvY2FsIGdfY3VycmVudE91dHB1dCA9IGdfZGVmYXVsdE91dHB1dAoKZnVuY3Rpb24gY2xvc2UoIF9maWxlICkKCShfZmlsZSBvciBnX2N1cnJlbnRPdXRwdXQpOmNsb3NlKCkKZW5kCgpmdW5jdGlvbiBmbHVzaCgpCglnX2N1cnJlbnRPdXRwdXQ6Zmx1c2goKQplbmQKCmZ1bmN0aW9uIGlucHV0KCBfYXJnICkKCWlmIF9HLnR5cGUoIF9hcmcgKSA9PSAic3RyaW5nIiB0aGVuCgkJZ19jdXJyZW50SW5wdXQgPSBvcGVuKCBfYXJnLCAiciIgKQoJZWxzZWlmIF9HLnR5cGUoIF9hcmcgKSA9PSAidGFibGUiIHRoZW4KCQlnX2N1cnJlbnRJbnB1dCA9IF9hcmcKCWVsc2VpZiBfRy50eXBlKCBfYXJnICkgPT0gIm5pbCIgdGhlbgoJCXJldHVybiBnX2N1cnJlbnRJbnB1dAoJZWxzZQoJCWVycm9yKCAiRXhwZWN0ZWQgZmlsZSBuYW1lIG9yIGZpbGUgaGFuZGxlIiApCgllbmQKZW5kCgpmdW5jdGlvbiBsaW5lcyggX3NGaWxlTmFtZSApCglpZiBfc0ZpbGVOYW1lIHRoZW4KCQlyZXR1cm4gb3BlbiggX3NGaWxlTmFtZSwgInIiICk6bGluZXMoKQoJZWxzZQoJCXJldHVybiBnX2N1cnJlbnRJbnB1dDpsaW5lcygpCgllbmQKZW5kCgpmdW5jdGlvbiBvcGVuKCBfc1BhdGgsIF9zTW9kZSApCglsb2NhbCBzTW9kZSA9IF9zTW9kZSBvciAiciIKCWxvY2FsIGZpbGUgPSBmcy5vcGVuKCBfc1BhdGgsIHNNb2RlICkKCWlmIG5vdCBmaWxlIHRoZW4KCQlyZXR1cm4gbmlsCgllbmQKCQoJaWYgc01vZGUgPT0gInIidGhlbgoJCXJldHVybiB7CgkJCWJGaWxlSGFuZGxlID0gdHJ1ZSwKCQkJYkNsb3NlZCA9IGZhbHNlLAkJCQkKCQkJY2xvc2UgPSBmdW5jdGlvbiggc2VsZiApCgkJCQlmaWxlLmNsb3NlKCkKCQkJCXNlbGYuYkNsb3NlZCA9IHRydWUKCQkJZW5kLAoJCQlyZWFkID0gZnVuY3Rpb24oIHNlbGYsIF9zRm9ybWF0ICkKCQkJCWxvY2FsIHNGb3JtYXQgPSBfc0Zvcm1hdCBvciAiKmwiCgkJCQlpZiBzRm9ybWF0ID09ICIqbCIgdGhlbgoJCQkJCXJldHVybiBmaWxlLnJlYWRMaW5lKCkKCQkJCWVsc2VpZiBzRm9ybWF0ID09ICIqYSIgdGhlbgoJCQkJCXJldHVybiBmaWxlLnJlYWRBbGwoKQoJCQkJZWxzZQoJCQkJCWVycm9yKCAiVW5zdXBwb3J0ZWQgZm9ybWF0IiApCgkJCQllbmQKCQkJCXJldHVybiBuaWwKCQkJZW5kLAoJCQlsaW5lcyA9IGZ1bmN0aW9uKCBzZWxmICkKCQkJCXJldHVybiBmdW5jdGlvbigpCgkJCQkJbG9jYWwgc0xpbmUgPSBmaWxlLnJlYWRMaW5lKCkKCQkJCQlpZiBzTGluZSA9PSBuaWwgdGhlbgoJCQkJCQlmaWxlLmNsb3NlKCkKCQkJCQkJc2VsZi5iQ2xvc2VkID0gdHJ1ZQoJCQkJCWVuZAoJCQkJCXJldHVybiBzTGluZQoJCQkJZW5kCgkJCWVuZCwKCQl9CgllbHNlaWYgc01vZGUgPT0gInciIG9yIHNNb2RlID09ICJhIiB0aGVuCgkJcmV0dXJuIHsKCQkJYkZpbGVIYW5kbGUgPSB0cnVlLAoJCQliQ2xvc2VkID0gZmFsc2UsCQkJCQoJCQljbG9zZSA9IGZ1bmN0aW9uKCBzZWxmICkKCQkJCWZpbGUuY2xvc2UoKQoJCQkJc2VsZi5iQ2xvc2VkID0gdHJ1ZQoJCQllbmQsCgkJCXdyaXRlID0gZnVuY3Rpb24oIHNlbGYsIF9zVGV4dCApCgkJCQlmaWxlLndyaXRlKCBfc1RleHQgKQoJCQllbmQsCgkJCWZsdXNoID0gZnVuY3Rpb24oIHNlbGYgKQoJCQkJZmlsZS5mbHVzaCgpCgkJCWVuZCwKCQl9CgkKCWVsc2VpZiBzTW9kZSA9PSAicmIiIHRoZW4KCQlyZXR1cm4gewoJCQliRmlsZUhhbmRsZSA9IHRydWUsCgkJCWJDbG9zZWQgPSBmYWxzZSwJCQkJCgkJCWNsb3NlID0gZnVuY3Rpb24oIHNlbGYgKQoJCQkJZmlsZS5jbG9zZSgpCgkJCQlzZWxmLmJDbG9zZWQgPSB0cnVlCgkJCWVuZCwKCQkJcmVhZCA9IGZ1bmN0aW9uKCBzZWxmICkKCQkJCXJldHVybiBmaWxlLnJlYWQoKQoJCQllbmQsCgkJfQoJCQoJZWxzZWlmIHNNb2RlID09ICJ3YiIgb3Igc01vZGUgPT0gImFiIiB0aGVuCgkJcmV0dXJuIHsKCQkJYkZpbGVIYW5kbGUgPSB0cnVlLAoJCQliQ2xvc2VkID0gZmFsc2UsCQkJCQoJCQljbG9zZSA9IGZ1bmN0aW9uKCBzZWxmICkKCQkJCWZpbGUuY2xvc2UoKQoJCQkJc2VsZi5iQ2xvc2VkID0gdHJ1ZQoJCQllbmQsCgkJCXdyaXRlID0gZnVuY3Rpb24oIHNlbGYsIF9udW1iZXIgKQoJCQkJZmlsZS53cml0ZSggX251bWJlciApCgkJCWVuZCwKCQkJZmx1c2ggPSBmdW5jdGlvbiggc2VsZiApCgkJCQlmaWxlLmZsdXNoKCkKCQkJZW5kLAoJCX0KCQoJZWxzZQoJCWZpbGUuY2xvc2UoKQoJCWVycm9yKCAiVW5zdXBwb3J0ZWQgbW9kZSIgKQoJCQoJZW5kCmVuZAoKZnVuY3Rpb24gb3V0cHV0KCBfYXJnICkKCWlmIF9HLnR5cGUoIF9hcmcgKSA9PSAic3RyaW5nIiB0aGVuCgkJZ19jdXJyZW50T3V0cHV0ID0gb3BlbiggX2FyZywgInciICkKCWVsc2VpZiBfRy50eXBlKCBfYXJnICkgPT0gInRhYmxlIiB0aGVuCgkJZ19jdXJyZW50T3V0cHV0ID0gX2FyZwoJZWxzZWlmIF9HLnR5cGUoIF9hcmcgKSA9PSAibmlsIiB0aGVuCgkJcmV0dXJuIGdfY3VycmVudE91dHB1dAoJZWxzZQoJCWVycm9yKCAiRXhwZWN0ZWQgZmlsZSBuYW1lIG9yIGZpbGUgaGFuZGxlIiApCgllbmQKZW5kCgpmdW5jdGlvbiByZWFkKCAuLi4gKQoJcmV0dXJuIGlucHV0KCk6cmVhZCggLi4uICkKZW5kCgpmdW5jdGlvbiB0eXBlKCBfaGFuZGxlICkKCWlmIF9HLnR5cGUoIF9oYW5kbGUgKSA9PSAidGFibGUiIGFuZCBfaGFuZGxlLmJGaWxlSGFuZGxlID09IHRydWUgdGhlbgoJCWlmIF9oYW5kbGUuYkNsb3NlZCB0aGVuCgkJCXJldHVybiAiY2xvc2VkIGZpbGUiCgkJZWxzZQoJCQlyZXR1cm4gImZpbGUiCgkJZW5kCgllbmQKCXJldHVybiBuaWwKZW5kCgpmdW5jdGlvbiB3cml0ZSggLi4uICkKCXJldHVybiBvdXRwdXQoKTp3cml0ZSggLi4uICkKZW5k","isDir":false,"name":"io","size":0},"root/apis/keys":{"data":"Ci0tIE1pbmVjcmFmdCBrZXkgY29kZSBiaW5kaW5ncwotLSBTZWUgaHR0cDovL3d3dy5taW5lY3JhZnR3aWtpLm5ldC93aWtpL0tleV9jb2RlcyBmb3IgbW9yZSBpbmZvCgpsb2NhbCBub3RoaW5nID0gNDIKbG9jYWwgdEtleXMgPSB7CgluaWwsCSAJIm9uZSIsIAkJInR3byIsIAkJInRocmVlIiwgCSJmb3VyIiwJCQktLSAxCgkiZml2ZSIsIAkic2l4IiwgCQkic2V2ZW4iLCAJImVpZ2h0IiwgCSJuaW5lIiwJCQktLSA2CgkiemVybyIsIAkibWludXMiLCAJImVxdWFscyIsIAkiYmFja3NwYWNlIiwidGFiIiwJCQktLSAxMQoJInEiLCAJCSJ3IiwgCQkiZSIsIAkJInIiLAkJInQiLAkJCS0tIDE2CgkieSIsCQkidSIsCQkiaSIsCQkibyIsCQkicCIsCQkJLS0gMjEKCSJsZWZ0QnJhY2tldCIsInJpZ2h0QnJhY2tldCIsImVudGVyIiwibGVmdEN0cmwiLCJhIiwJCQktLSAyNgoJInMiLAkJImQiLAkJImYiLAkJImciLAkJImgiLAkJCS0tIDMxCgkiaiIsCQkiayIsCQkibCIsCQkic2VtaUNvbG9uIiwiYXBvc3Ryb3BoZSIsCS0tIDM2CgkiZ3JhdmUiLAkibGVmdFNoaWZ0IiwiYmFja3NsYXNoIiwieiIsCQkieCIsCQkJLS0gNDEKCSJjIiwJCSJ2IiwJCSJiIiwJCSJuIiwJCSJtIiwJCQktLSA0NgoJImNvbW1hIiwJInBlcmlvZCIsCSJzbGFzaCIsCSJyaWdodFNoaWZ0IiwibXVsdGlwbHkiLAktLSA1MQoJImxlZnRBbHQiLAkic3BhY2UiLAkiY2Fwc0xvY2siLAkiZjEiLAkJImYyIiwJCQktLSA1NgoJImYzIiwJCSJmNCIsCQkiZjUiLAkJImY2IiwJCSJmNyIsCQkJLS0gNjEKCSJmOCIsCQkiZjkiLAkJImYxMCIsCQkibnVtTG9jayIsCSJzY29sbExvY2siLAktLSA2NgkKCSJudW1QYWQ3IiwJIm51bVBhZDgiLAkibnVtUGFkOSIsCSJudW1QYWRTdWJ0cmFjdCIsIm51bVBhZDQiLAktLSA3MQoJIm51bVBhZDUiLAkibnVtUGFkNiIsCSJudW1QYWRBZGQiLCJudW1QYWQxIiwJIm51bVBhZDIiLAkJLS0gNzYKCSJudW1QYWQzIiwJIm51bVBhZDAiLAkibnVtUGFkRGVjaW1hbCIsbmlsLAluaWwsCQkJLS0gODEKCW5pbCwJIAkiZjExIiwJCSJmMTIiLAkJbmlsLAkJbmlsLAkJCS0tIDg2CgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gOTEKCW5pbCwJCW5pbCwJCW5pbCwJCW5pbCwJCSJmMTMiLAkJCS0tIDk2CgkiZjE0IiwJCSJmMTUiLAkJbmlsLAkJbmlsLAkJbmlsLAkJCS0tIDEwMQoJbmlsLAkJbmlsLAkJbmlsLAkJbmlsLAkJbmlsLAkJCS0tIDEwNgoJbmlsLAkJImthbmEiLAkJbmlsLAkJbmlsLAkJbmlsLAkJCS0tIDExMQoJbmlsLAkJbmlsLAkJbmlsLAkJbmlsLAkJbmlsLAkJCS0tIDExNgkKCSJjb252ZXJ0IiwJbmlsLAkJIm5vY29udmVydCIsbmlsLAkJInllbiIsCQkJLS0gMTIxCgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTI2CgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTMxCgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTM2CgkibnVtUGFkRXF1YWxzIixuaWwsCQluaWwsCQkiY2ltY3VtZmxleCIsImF0IiwJCQktLSAxNDEKCSJjb2xvbiIsCSJ1bmRlcnNjb3JlIiwia2FuamkiLAkic3RvcCIsCQkiYXgiLAkJCS0tIDE0NgoJbmlsLAkJIm51bVBhZEVudGVyIiwicmlnaHRDdHJsIixuaWwsCQluaWwsCQkJLS0gMTUxCgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTU2CgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTYxCgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTY2CgluaWwsCQluaWwsCQluaWwsCQluaWwsCQluaWwsCQkJLS0gMTcxCgluaWwsCQluaWwsCQluaWwsCQkibnVtUGFkQ29tbWEiLG5pbCwJCQktLSAxNzYKCSJudW1QYWREaXZpZGUiLG5pbCwJCW5pbCwJCSJyaWdodEFsdCIsCW5pbCwJCQktLSAxODEKCW5pbCwJCW5pbCwJCW5pbCwJCW5pbCwJCW5pbCwJCQktLSAxODYKCW5pbCwJCW5pbCwJCW5pbCwJCW5pbCwJCW5pbCwJCQktLSAxOTEKCW5pbCwJCSJwYXVzZSIsCW5pbCwJCSJob21lIiwJCSJ1cCIsCQkJLS0gMTk2CgkicGFnZVVwIiwJbmlsLAkJImxlZnQiLAkJbmlsLAkJInJpZ2h0IiwJCS0tIDIwMQoJbmlsLAkJImVuZCIsCQkiZG93biIsCQkicGFnZURvd24iLAkiaW5zZXJ0IiwJCS0tIDIwNgoJImRlbGV0ZSIJCQkJCQkJCQkJCQkJCS0tIDIxMQp9Cgpsb2NhbCBrZXlzID0gZ2V0ZmVudigpCmZvciBuS2V5LCBzS2V5IGluIHBhaXJzKCB0S2V5cyApIGRvCglrZXlzW3NLZXldID0gbktleQplbmQKa2V5c1sicmV0dXJuIl0gPSBrZXlzLmVudGVyCgpmdW5jdGlvbiBnZXROYW1lKCBfbktleSApCglyZXR1cm4gdEtleXNbIF9uS2V5IF0KZW5k","isDir":false,"name":"keys","size":0},"root/apis/paintutils":{"data":"CmxvY2FsIGZ1bmN0aW9uIGRyYXdQaXhlbEludGVybmFsKCB4UG9zLCB5UG9zICkKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKCB4UG9zLCB5UG9zICkKICAgIHRlcm0ud3JpdGUoIiAiKQplbmQKCmxvY2FsIHRDb2xvdXJMb29rdXAgPSB7fQpmb3Igbj0xLDE2IGRvCiAgICB0Q29sb3VyTG9va3VwWyBzdHJpbmcuYnl0ZSggIjAxMjM0NTY3ODlhYmNkZWYiLG4sbiApIF0gPSAyXihuLTEpCmVuZAoKZnVuY3Rpb24gbG9hZEltYWdlKCBzUGF0aCApCiAgICBpZiB0eXBlKCBzUGF0aCApIH49ICJzdHJpbmciIHRoZW4KICAgICAgICBlcnJvciggIkV4cGVjdGVkIHBhdGgiLCAyICkKICAgIGVuZAoKICAgIGxvY2FsIHRJbWFnZSA9IHt9CiAgICBpZiBmcy5leGlzdHMoIHNQYXRoICkgdGhlbgogICAgICAgIGxvY2FsIGZpbGUgPSBpby5vcGVuKHNQYXRoLCAiciIgKQogICAgICAgIGxvY2FsIHNMaW5lID0gZmlsZTpyZWFkKCkKICAgICAgICB3aGlsZSBzTGluZSBkbwogICAgICAgICAgICBsb2NhbCB0TGluZSA9IHt9CiAgICAgICAgICAgIGZvciB4PTEsc0xpbmU6bGVuKCkgZG8KICAgICAgICAgICAgICAgIHRMaW5lW3hdID0gdENvbG91ckxvb2t1cFsgc3RyaW5nLmJ5dGUoc0xpbmUseCx4KSBdIG9yIDAKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIHRhYmxlLmluc2VydCggdEltYWdlLCB0TGluZSApCiAgICAgICAgICAgIHNMaW5lID0gZmlsZTpyZWFkKCkKICAgICAgICBlbmQKICAgICAgICBmaWxlOmNsb3NlKCkKICAgICAgICByZXR1cm4gdEltYWdlCiAgICBlbmQKICAgIHJldHVybiBuaWwKZW5kCgpmdW5jdGlvbiBkcmF3UGl4ZWwoIHhQb3MsIHlQb3MsIG5Db2xvdXIgKQogICAgaWYgdHlwZSggeFBvcyApIH49ICJudW1iZXIiIG9yIHR5cGUoIHlQb3MgKSB+PSAibnVtYmVyIiBvciAobkNvbG91ciB+PSBuaWwgYW5kIHR5cGUoIG5Db2xvdXIgKSB+PSAibnVtYmVyIikgdGhlbgogICAgICAgIGVycm9yKCAiRXhwZWN0ZWQgeCwgeSwgY29sb3VyIiwgMiApCiAgICBlbmQKICAgIGlmIG5Db2xvdXIgdGhlbgogICAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBuQ29sb3VyICkKICAgIGVuZAogICAgZHJhd1BpeGVsSW50ZXJuYWwoIHhQb3MsIHlQb3MgKQplbmQKCmZ1bmN0aW9uIGRyYXdMaW5lKCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgbkNvbG91ciApCiAgICBpZiB0eXBlKCBzdGFydFggKSB+PSAibnVtYmVyIiBvciB0eXBlKCBzdGFydFggKSB+PSAibnVtYmVyIiBvcgogICAgICAgdHlwZSggZW5kWCApIH49ICJudW1iZXIiIG9yIHR5cGUoIGVuZFkgKSB+PSAibnVtYmVyIiBvcgogICAgICAgKG5Db2xvdXIgfj0gbmlsIGFuZCB0eXBlKCBuQ29sb3VyICkgfj0gIm51bWJlciIpIHRoZW4KICAgICAgICBlcnJvciggIkV4cGVjdGVkIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBjb2xvdXIiLCAyICkKICAgIGVuZAogICAgCiAgICBzdGFydFggPSBtYXRoLmZsb29yKHN0YXJ0WCkKICAgIHN0YXJ0WSA9IG1hdGguZmxvb3Ioc3RhcnRZKQogICAgZW5kWCA9IG1hdGguZmxvb3IoZW5kWCkKICAgIGVuZFkgPSBtYXRoLmZsb29yKGVuZFkpCgogICAgaWYgbkNvbG91ciB0aGVuCiAgICAgICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoIG5Db2xvdXIgKQogICAgZW5kCiAgICBpZiBzdGFydFggPT0gZW5kWCBhbmQgc3RhcnRZID09IGVuZFkgdGhlbgogICAgICAgIGRyYXdQaXhlbEludGVybmFsKCBzdGFydFgsIHN0YXJ0WSApCiAgICAgICAgcmV0dXJuCiAgICBlbmQKICAgIAogICAgbG9jYWwgbWluWCA9IG1hdGgubWluKCBzdGFydFgsIGVuZFggKQogICAgaWYgbWluWCA9PSBzdGFydFggdGhlbgogICAgICAgIG1pblkgPSBzdGFydFkKICAgICAgICBtYXhYID0gZW5kWAogICAgICAgIG1heFkgPSBlbmRZCiAgICBlbHNlCiAgICAgICAgbWluWSA9IGVuZFkKICAgICAgICBtYXhYID0gc3RhcnRYCiAgICAgICAgbWF4WSA9IHN0YXJ0WQogICAgZW5kCgogICAgLS0gVE9ETzogY2xpcCB0byBzY3JlZW4gcmVjdGFuZ2xlPwogICAgICAgIAogICAgbG9jYWwgeERpZmYgPSBtYXhYIC0gbWluWAogICAgbG9jYWwgeURpZmYgPSBtYXhZIC0gbWluWQogICAgICAgICAgICAKICAgIGlmIHhEaWZmID4gbWF0aC5hYnMoeURpZmYpIHRoZW4KICAgICAgICBsb2NhbCB5ID0gbWluWQogICAgICAgIGxvY2FsIGR5ID0geURpZmYgLyB4RGlmZgogICAgICAgIGZvciB4PW1pblgsbWF4WCBkbwogICAgICAgICAgICBkcmF3UGl4ZWxJbnRlcm5hbCggeCwgbWF0aC5mbG9vciggeSArIDAuNSApICkKICAgICAgICAgICAgeSA9IHkgKyBkeQogICAgICAgIGVuZAogICAgZWxzZQogICAgICAgIGxvY2FsIHggPSBtaW5YCiAgICAgICAgbG9jYWwgZHggPSB4RGlmZiAvIHlEaWZmCiAgICAgICAgaWYgbWF4WSA+PSBtaW5ZIHRoZW4KICAgICAgICAgICAgZm9yIHk9bWluWSxtYXhZIGRvCiAgICAgICAgICAgICAgICBkcmF3UGl4ZWxJbnRlcm5hbCggbWF0aC5mbG9vciggeCArIDAuNSApLCB5ICkKICAgICAgICAgICAgICAgIHggPSB4ICsgZHgKICAgICAgICAgICAgZW5kCiAgICAgICAgZWxzZQogICAgICAgICAgICBmb3IgeT1taW5ZLG1heFksLTEgZG8KICAgICAgICAgICAgICAgIGRyYXdQaXhlbEludGVybmFsKCBtYXRoLmZsb29yKCB4ICsgMC41ICksIHkgKQogICAgICAgICAgICAgICAgeCA9IHggLSBkeAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIGRyYXdCb3goIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBuQ29sb3VyICkKICAgIGlmIHR5cGUoIHN0YXJ0WCApIH49ICJudW1iZXIiIG9yIHR5cGUoIHN0YXJ0WCApIH49ICJudW1iZXIiIG9yCiAgICAgICB0eXBlKCBlbmRYICkgfj0gIm51bWJlciIgb3IgdHlwZSggZW5kWSApIH49ICJudW1iZXIiIG9yCiAgICAgICAobkNvbG91ciB+PSBuaWwgYW5kIHR5cGUoIG5Db2xvdXIgKSB+PSAibnVtYmVyIikgdGhlbgogICAgICAgIGVycm9yKCAiRXhwZWN0ZWQgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGNvbG91ciIsIDIgKQogICAgZW5kCgogICAgc3RhcnRYID0gbWF0aC5mbG9vcihzdGFydFgpCiAgICBzdGFydFkgPSBtYXRoLmZsb29yKHN0YXJ0WSkKICAgIGVuZFggPSBtYXRoLmZsb29yKGVuZFgpCiAgICBlbmRZID0gbWF0aC5mbG9vcihlbmRZKQoKICAgIGlmIG5Db2xvdXIgdGhlbgogICAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBuQ29sb3VyICkKICAgIGVuZAogICAgaWYgc3RhcnRYID09IGVuZFggYW5kIHN0YXJ0WSA9PSBlbmRZIHRoZW4KICAgICAgICBkcmF3UGl4ZWxJbnRlcm5hbCggc3RhcnRYLCBzdGFydFkgKQogICAgICAgIHJldHVybgogICAgZW5kCgogICAgbG9jYWwgbWluWCA9IG1hdGgubWluKCBzdGFydFgsIGVuZFggKQogICAgaWYgbWluWCA9PSBzdGFydFggdGhlbgogICAgICAgIG1pblkgPSBzdGFydFkKICAgICAgICBtYXhYID0gZW5kWAogICAgICAgIG1heFkgPSBlbmRZCiAgICBlbHNlCiAgICAgICAgbWluWSA9IGVuZFkKICAgICAgICBtYXhYID0gc3RhcnRYCiAgICAgICAgbWF4WSA9IHN0YXJ0WQogICAgZW5kCgogICAgZm9yIHg9bWluWCxtYXhYIGRvCiAgICAgICAgZHJhd1BpeGVsSW50ZXJuYWwoIHgsIG1pblkgKQogICAgICAgIGRyYXdQaXhlbEludGVybmFsKCB4LCBtYXhZICkKICAgIGVuZAoKICAgIGlmIChtYXhZIC0gbWluWSkgPj0gMiB0aGVuCiAgICAgICAgZm9yIHk9KG1pblkrMSksKG1heFktMSkgZG8KICAgICAgICAgICAgZHJhd1BpeGVsSW50ZXJuYWwoIG1pblgsIHkgKQogICAgICAgICAgICBkcmF3UGl4ZWxJbnRlcm5hbCggbWF4WCwgeSApCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBkcmF3RmlsbGVkQm94KCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgbkNvbG91ciApCiAgICBpZiB0eXBlKCBzdGFydFggKSB+PSAibnVtYmVyIiBvciB0eXBlKCBzdGFydFggKSB+PSAibnVtYmVyIiBvcgogICAgICAgdHlwZSggZW5kWCApIH49ICJudW1iZXIiIG9yIHR5cGUoIGVuZFkgKSB+PSAibnVtYmVyIiBvcgogICAgICAgKG5Db2xvdXIgfj0gbmlsIGFuZCB0eXBlKCBuQ29sb3VyICkgfj0gIm51bWJlciIpIHRoZW4KICAgICAgICBlcnJvciggIkV4cGVjdGVkIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBjb2xvdXIiLCAyICkKICAgIGVuZAoKICAgIHN0YXJ0WCA9IG1hdGguZmxvb3Ioc3RhcnRYKQogICAgc3RhcnRZID0gbWF0aC5mbG9vcihzdGFydFkpCiAgICBlbmRYID0gbWF0aC5mbG9vcihlbmRYKQogICAgZW5kWSA9IG1hdGguZmxvb3IoZW5kWSkKCiAgICBpZiBuQ29sb3VyIHRoZW4KICAgICAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvciggbkNvbG91ciApCiAgICBlbmQKICAgIGlmIHN0YXJ0WCA9PSBlbmRYIGFuZCBzdGFydFkgPT0gZW5kWSB0aGVuCiAgICAgICAgZHJhd1BpeGVsSW50ZXJuYWwoIHN0YXJ0WCwgc3RhcnRZICkKICAgICAgICByZXR1cm4KICAgIGVuZAoKICAgIGxvY2FsIG1pblggPSBtYXRoLm1pbiggc3RhcnRYLCBlbmRYICkKICAgIGlmIG1pblggPT0gc3RhcnRYIHRoZW4KICAgICAgICBtaW5ZID0gc3RhcnRZCiAgICAgICAgbWF4WCA9IGVuZFgKICAgICAgICBtYXhZID0gZW5kWQogICAgZWxzZQogICAgICAgIG1pblkgPSBlbmRZCiAgICAgICAgbWF4WCA9IHN0YXJ0WAogICAgICAgIG1heFkgPSBzdGFydFkKICAgIGVuZAoKICAgIGZvciB4PW1pblgsbWF4WCBkbwogICAgICAgIGZvciB5PW1pblksbWF4WSBkbwogICAgICAgICAgICBkcmF3UGl4ZWxJbnRlcm5hbCggeCwgeSApCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBkcmF3SW1hZ2UoIHRJbWFnZSwgeFBvcywgeVBvcyApCiAgICBpZiB0eXBlKCB0SW1hZ2UgKSB+PSAidGFibGUiIG9yIHR5cGUoIHhQb3MgKSB+PSAibnVtYmVyIiBvciB0eXBlKCB5UG9zICkgfj0gIm51bWJlciIgdGhlbgogICAgICAgIGVycm9yKCAiRXhwZWN0ZWQgaW1hZ2UsIHgsIHkiLCAyICkKICAgIGVuZAogICAgZm9yIHk9MSwjdEltYWdlIGRvCiAgICAgICAgbG9jYWwgdExpbmUgPSB0SW1hZ2VbeV0KICAgICAgICBmb3IgeD0xLCN0TGluZSBkbwogICAgICAgICAgICBpZiB0TGluZVt4XSA+IDAgdGhlbgogICAgICAgICAgICAgICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoIHRMaW5lW3hdICkKICAgICAgICAgICAgICAgIGRyYXdQaXhlbEludGVybmFsKCB4ICsgeFBvcyAtIDEsIHkgKyB5UG9zIC0gMSApCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCmVuZA==","isDir":false,"name":"paintutils","size":0},"root/apis/parallel":{"data":"CmxvY2FsIGZ1bmN0aW9uIGNyZWF0ZSggZmlyc3QsIC4uLiApCglpZiBmaXJzdCB+PSBuaWwgdGhlbgoJICAgIGlmIHR5cGUoIGZpcnN0ICkgfj0gImZ1bmN0aW9uIiB0aGVuCiAgICAJCWVycm9yKCAiRXhwZWN0ZWQgZnVuY3Rpb24sIGdvdCAiLi50eXBlKCBmaXJzdCApLCAzICkKICAgIAllbmQKIAkJcmV0dXJuIGNvcm91dGluZS5jcmVhdGUoZmlyc3QpLCBjcmVhdGUoIC4uLiApCiAgICBlbmQKICAgIHJldHVybiBuaWwKZW5kCgpsb2NhbCBmdW5jdGlvbiBydW5VbnRpbExpbWl0KCBfcm91dGluZXMsIF9saW1pdCApCiAgICBsb2NhbCBjb3VudCA9ICNfcm91dGluZXMKICAgIGxvY2FsIGxpdmluZyA9IGNvdW50CiAgICAKICAgIGxvY2FsIHRGaWx0ZXJzID0ge30KICAgIGxvY2FsIGV2ZW50RGF0YSA9IHt9CiAgICB3aGlsZSB0cnVlIGRvCiAgICAJZm9yIG49MSxjb3VudCBkbwogICAgCQlsb2NhbCByID0gX3JvdXRpbmVzW25dCiAgICAJCWlmIHIgdGhlbgogICAgCQkJaWYgdEZpbHRlcnNbcl0gPT0gbmlsIG9yIHRGaWx0ZXJzW3JdID09IGV2ZW50RGF0YVsxXSBvciBldmVudERhdGFbMV0gPT0gInRlcm1pbmF0ZSIgdGhlbgoJICAgIAkJCWxvY2FsIG9rLCBwYXJhbSA9IGNvcm91dGluZS5yZXN1bWUoIHIsIHVucGFjayhldmVudERhdGEpICkKCQkJCQlpZiBub3Qgb2sgdGhlbgoJCQkJCQllcnJvciggcGFyYW0sIDAgKQoJCQkJCWVsc2UKCQkJCQkJdEZpbHRlcnNbcl0gPSBwYXJhbQoJCQkJCWVuZAoJCQkJCWlmIGNvcm91dGluZS5zdGF0dXMoIHIgKSA9PSAiZGVhZCIgdGhlbgoJCQkJCQlfcm91dGluZXNbbl0gPSBuaWwKCQkJCQkJbGl2aW5nID0gbGl2aW5nIC0gMQoJCQkJCQlpZiBsaXZpbmcgPD0gX2xpbWl0IHRoZW4KCQkJCQkJCXJldHVybiBuCgkJCQkJCWVuZAoJCQkJCWVuZAoJCQkJZW5kCiAgICAJCWVuZAogICAgCWVuZAoJCWZvciBuPTEsY291bnQgZG8KICAgIAkJbG9jYWwgciA9IF9yb3V0aW5lc1tuXQoJCQlpZiByIGFuZCBjb3JvdXRpbmUuc3RhdHVzKCByICkgPT0gImRlYWQiIHRoZW4KCQkJCV9yb3V0aW5lc1tuXSA9IG5pbAoJCQkJbGl2aW5nID0gbGl2aW5nIC0gMQoJCQkJaWYgbGl2aW5nIDw9IF9saW1pdCB0aGVuCgkJCQkJcmV0dXJuIG4KCQkJCWVuZAoJCQllbmQKCQllbmQKICAgIAlldmVudERhdGEgPSB7IG9zLnB1bGxFdmVudFJhdygpIH0KICAgIGVuZAplbmQKCmZ1bmN0aW9uIHdhaXRGb3JBbnkoIC4uLiApCiAgICBsb2NhbCByb3V0aW5lcyA9IHsgY3JlYXRlKCAuLi4gKSB9CiAgICByZXR1cm4gcnVuVW50aWxMaW1pdCggcm91dGluZXMsICNyb3V0aW5lcyAtIDEgKQplbmQKCmZ1bmN0aW9uIHdhaXRGb3JBbGwoIC4uLiApCiAgICBsb2NhbCByb3V0aW5lcyA9IHsgY3JlYXRlKCAuLi4gKSB9CglydW5VbnRpbExpbWl0KCByb3V0aW5lcywgMCApCmVuZA==","isDir":false,"name":"parallel","size":0},"root/apis/peripheral":{"data":"bG9jYWwgbmF0aXZlID0gcGVyaXBoZXJhbAoKZnVuY3Rpb24gZ2V0TmFtZXMoKQoJbG9jYWwgdFJlc3VsdHMgPSB7fQoJZm9yIG4sc1NpZGUgaW4gaXBhaXJzKCBycy5nZXRTaWRlcygpICkgZG8KCQlpZiBuYXRpdmUuaXNQcmVzZW50KCBzU2lkZSApIHRoZW4KCQkJdGFibGUuaW5zZXJ0KCB0UmVzdWx0cywgc1NpZGUgKQoJCQlpZiBuYXRpdmUuZ2V0VHlwZSggc1NpZGUgKSA9PSAibW9kZW0iIGFuZCBub3QgbmF0aXZlLmNhbGwoIHNTaWRlLCAiaXNXaXJlbGVzcyIgKSB0aGVuCgkJCQlsb2NhbCB0UmVtb3RlID0gbmF0aXZlLmNhbGwoIHNTaWRlLCAiZ2V0TmFtZXNSZW1vdGUiICkKCQkJCWZvciBuLHNOYW1lIGluIGlwYWlycyggdFJlbW90ZSApIGRvCgkJCQkJdGFibGUuaW5zZXJ0KCB0UmVzdWx0cywgc05hbWUgKQoJCQkJZW5kCgkJCWVuZAoJCWVuZAoJZW5kCglyZXR1cm4gdFJlc3VsdHMKZW5kCgpmdW5jdGlvbiBpc1ByZXNlbnQoIF9zU2lkZSApCiAgICBpZiB0eXBlKCBfc1NpZGUgKSB+PSAic3RyaW5nIiB0aGVuCiAgICAgICAgZXJyb3IoICJFeHBlY3RlZCBzdHJpbmciLCAyICkKICAgIGVuZAoJaWYgbmF0aXZlLmlzUHJlc2VudCggX3NTaWRlICkgdGhlbgoJCXJldHVybiB0cnVlCgllbmQKCWZvciBuLHNTaWRlIGluIGlwYWlycyggcnMuZ2V0U2lkZXMoKSApIGRvCgkJaWYgbmF0aXZlLmdldFR5cGUoIHNTaWRlICkgPT0gIm1vZGVtIiBhbmQgbm90IG5hdGl2ZS5jYWxsKCBzU2lkZSwgImlzV2lyZWxlc3MiICkgdGhlbgoJCQlpZiBuYXRpdmUuY2FsbCggc1NpZGUsICJpc1ByZXNlbnRSZW1vdGUiLCBfc1NpZGUgKSAgdGhlbgoJCQkJcmV0dXJuIHRydWUKCQkJZW5kCgkJZW5kCgllbmQKCXJldHVybiBmYWxzZQplbmQKCmZ1bmN0aW9uIGdldFR5cGUoIF9zU2lkZSApCiAgICBpZiB0eXBlKCBfc1NpZGUgKSB+PSAic3RyaW5nIiB0aGVuCiAgICAgICAgZXJyb3IoICJFeHBlY3RlZCBzdHJpbmciLCAyICkKICAgIGVuZAoJaWYgbmF0aXZlLmlzUHJlc2VudCggX3NTaWRlICkgdGhlbgoJCXJldHVybiBuYXRpdmUuZ2V0VHlwZSggX3NTaWRlICkKCWVuZAoJZm9yIG4sc1NpZGUgaW4gaXBhaXJzKCBycy5nZXRTaWRlcygpICkgZG8KCQlpZiBuYXRpdmUuZ2V0VHlwZSggc1NpZGUgKSA9PSAibW9kZW0iIGFuZCBub3QgbmF0aXZlLmNhbGwoIHNTaWRlLCAiaXNXaXJlbGVzcyIgKSB0aGVuCgkJCWlmIG5hdGl2ZS5jYWxsKCBzU2lkZSwgImlzUHJlc2VudFJlbW90ZSIsIF9zU2lkZSApICB0aGVuCgkJCQlyZXR1cm4gbmF0aXZlLmNhbGwoIHNTaWRlLCAiZ2V0VHlwZVJlbW90ZSIsIF9zU2lkZSApIAoJCQllbmQKCQllbmQKCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIGdldE1ldGhvZHMoIF9zU2lkZSApCiAgICBpZiB0eXBlKCBfc1NpZGUgKSB+PSAic3RyaW5nIiB0aGVuCiAgICAgICAgZXJyb3IoICJFeHBlY3RlZCBzdHJpbmciLCAyICkKICAgIGVuZAoJaWYgbmF0aXZlLmlzUHJlc2VudCggX3NTaWRlICkgdGhlbgoJCXJldHVybiBuYXRpdmUuZ2V0TWV0aG9kcyggX3NTaWRlICkKCWVuZAoJZm9yIG4sc1NpZGUgaW4gaXBhaXJzKCBycy5nZXRTaWRlcygpICkgZG8KCQlpZiBuYXRpdmUuZ2V0VHlwZSggc1NpZGUgKSA9PSAibW9kZW0iIGFuZCBub3QgbmF0aXZlLmNhbGwoIHNTaWRlLCAiaXNXaXJlbGVzcyIgKSB0aGVuCgkJCWlmIG5hdGl2ZS5jYWxsKCBzU2lkZSwgImlzUHJlc2VudFJlbW90ZSIsIF9zU2lkZSApICB0aGVuCgkJCQlyZXR1cm4gbmF0aXZlLmNhbGwoIHNTaWRlLCAiZ2V0TWV0aG9kc1JlbW90ZSIsIF9zU2lkZSApIAoJCQllbmQKCQllbmQKCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIGNhbGwoIF9zU2lkZSwgX3NNZXRob2QsIC4uLiApCiAgICBpZiB0eXBlKCBfc1NpZGUgKSB+PSAic3RyaW5nIiBvciB0eXBlKCBfc01ldGhvZCApIH49ICJzdHJpbmciIHRoZW4KICAgICAgICBlcnJvciggIkV4cGVjdGVkIHN0cmluZywgc3RyaW5nIiwgMiApCiAgICBlbmQKCWlmIG5hdGl2ZS5pc1ByZXNlbnQoIF9zU2lkZSApIHRoZW4KCQlyZXR1cm4gbmF0aXZlLmNhbGwoIF9zU2lkZSwgX3NNZXRob2QsIC4uLiApCgllbmQKCWZvciBuLHNTaWRlIGluIGlwYWlycyggcnMuZ2V0U2lkZXMoKSApIGRvCgkJaWYgbmF0aXZlLmdldFR5cGUoIHNTaWRlICkgPT0gIm1vZGVtIiBhbmQgbm90IG5hdGl2ZS5jYWxsKCBzU2lkZSwgImlzV2lyZWxlc3MiICkgdGhlbgoJCQlpZiBuYXRpdmUuY2FsbCggc1NpZGUsICJpc1ByZXNlbnRSZW1vdGUiLCBfc1NpZGUgKSAgdGhlbgoJCQkJcmV0dXJuIG5hdGl2ZS5jYWxsKCBzU2lkZSwgImNhbGxSZW1vdGUiLCBfc1NpZGUsIF9zTWV0aG9kLCAuLi4gKSAKCQkJZW5kCgkJZW5kCgllbmQKCXJldHVybiBuaWwKZW5kCgpmdW5jdGlvbiB3cmFwKCBfc1NpZGUgKQogICAgaWYgdHlwZSggX3NTaWRlICkgfj0gInN0cmluZyIgIHRoZW4KICAgICAgICBlcnJvciggIkV4cGVjdGVkIHN0cmluZyIsIDIgKQogICAgZW5kCglpZiBwZXJpcGhlcmFsLmlzUHJlc2VudCggX3NTaWRlICkgdGhlbgoJCWxvY2FsIHRNZXRob2RzID0gcGVyaXBoZXJhbC5nZXRNZXRob2RzKCBfc1NpZGUgKQoJCWxvY2FsIHRSZXN1bHQgPSB7fQoJCWZvciBuLHNNZXRob2QgaW4gaXBhaXJzKCB0TWV0aG9kcyApIGRvCgkJCXRSZXN1bHRbc01ldGhvZF0gPSBmdW5jdGlvbiggLi4uICkKCQkJCXJldHVybiBwZXJpcGhlcmFsLmNhbGwoIF9zU2lkZSwgc01ldGhvZCwgLi4uICkKCQkJZW5kCgkJZW5kCgkJcmV0dXJuIHRSZXN1bHQKCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIGZpbmQoIHNUeXBlLCBmbkZpbHRlciApCiAgICBpZiB0eXBlKCBzVHlwZSApIH49ICJzdHJpbmciIG9yIChmbkZpbHRlciB+PSBuaWwgYW5kIHR5cGUoIGZuRmlsdGVyICkgfj0gImZ1bmN0aW9uIikgdGhlbgogICAgICAgIGVycm9yKCAiRXhwZWN0ZWQgc3RyaW5nLCBbZnVuY3Rpb25dIiwgMiApCiAgICBlbmQKCWxvY2FsIHRSZXN1bHRzID0ge30KCWZvciBuLHNOYW1lIGluIGlwYWlycyggcGVyaXBoZXJhbC5nZXROYW1lcygpICkgZG8KCQlpZiBwZXJpcGhlcmFsLmdldFR5cGUoIHNOYW1lICkgPT0gc1R5cGUgdGhlbgoJCQlsb2NhbCB3cmFwcGVkID0gcGVyaXBoZXJhbC53cmFwKCBzTmFtZSApCgkJCWlmIGZuRmlsdGVyID09IG5pbCBvciBmbkZpbHRlciggc05hbWUsIHdyYXBwZWQgKSB0aGVuCgkJCQl0YWJsZS5pbnNlcnQoIHRSZXN1bHRzLCB3cmFwcGVkICkKCQkJZW5kCgkJZW5kCgllbmQKCXJldHVybiB1bnBhY2soIHRSZXN1bHRzICkKZW5k","isDir":false,"name":"peripheral","size":0},"root/apis/rednet":{"data":"CkNIQU5ORUxfQlJPQURDQVNUID0gNjU1MzUKQ0hBTk5FTF9SRVBFQVQgPSA2NTUzMwoKbG9jYWwgdFJlY2VpdmVkTWVzc2FnZXMgPSB7fQpsb2NhbCB0UmVjZWl2ZWRNZXNzYWdlVGltZW91dHMgPSB7fQpsb2NhbCB0SG9zdG5hbWVzID0ge30KCmZ1bmN0aW9uIG9wZW4oIHNNb2RlbSApCglpZiB0eXBlKCBzTW9kZW0gKSB+PSAic3RyaW5nIiB0aGVuCgkJZXJyb3IoICJleHBlY3RlZCBzdHJpbmciLCAyICkKCWVuZAoJaWYgcGVyaXBoZXJhbC5nZXRUeXBlKCBzTW9kZW0gKSB+PSAibW9kZW0iIHRoZW4JCgkJZXJyb3IoICJObyBzdWNoIG1vZGVtOiAiLi5zTW9kZW0sIDIgKQoJZW5kCglwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgIm9wZW4iLCBvcy5nZXRDb21wdXRlcklEKCkgKQoJcGVyaXBoZXJhbC5jYWxsKCBzTW9kZW0sICJvcGVuIiwgQ0hBTk5FTF9CUk9BRENBU1QgKQplbmQKCmZ1bmN0aW9uIGNsb3NlKCBzTW9kZW0gKQogICAgaWYgc01vZGVtIHRoZW4KICAgICAgICAtLSBDbG9zZSBhIHNwZWNpZmljIG1vZGVtCiAgICAgICAgaWYgdHlwZSggc01vZGVtICkgfj0gInN0cmluZyIgdGhlbgogICAgICAgICAgICBlcnJvciggImV4cGVjdGVkIHN0cmluZyIsIDIgKQogICAgICAgIGVuZAogICAgICAgIGlmIHBlcmlwaGVyYWwuZ2V0VHlwZSggc01vZGVtICkgfj0gIm1vZGVtIiB0aGVuCiAgICAgICAgICAgIGVycm9yKCAiTm8gc3VjaCBtb2RlbTogIi4uc01vZGVtLCAyICkKICAgICAgICBlbmQKICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgImNsb3NlIiwgb3MuZ2V0Q29tcHV0ZXJJRCgpICkKICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgImNsb3NlIiwgQ0hBTk5FTF9CUk9BRENBU1QgKQogICAgZWxzZQogICAgICAgIC0tIENsb3NlIGFsbCBtb2RlbXMKICAgICAgICBmb3IgbixzTW9kZW0gaW4gaXBhaXJzKCBwZXJpcGhlcmFsLmdldE5hbWVzKCkgKSBkbwogICAgICAgICAgICBpZiBpc09wZW4oIHNNb2RlbSApIHRoZW4KICAgICAgICAgICAgICAgIGNsb3NlKCBzTW9kZW0gKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIGlzT3Blbiggc01vZGVtICkKICAgIGlmIHNNb2RlbSB0aGVuCiAgICAgICAgLS0gQ2hlY2sgaWYgYSBzcGVjaWZpYyBtb2RlbSBpcyBvcGVuCiAgICAgICAgaWYgdHlwZSggc01vZGVtICkgfj0gInN0cmluZyIgdGhlbgogICAgICAgICAgICBlcnJvciggImV4cGVjdGVkIHN0cmluZyIsIDIgKQogICAgICAgIGVuZAogICAgICAgIGlmIHBlcmlwaGVyYWwuZ2V0VHlwZSggc01vZGVtICkgPT0gIm1vZGVtIiB0aGVuCiAgICAgICAgICAgIHJldHVybiBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgImlzT3BlbiIsIG9zLmdldENvbXB1dGVySUQoKSApIGFuZCBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgImlzT3BlbiIsIENIQU5ORUxfQlJPQURDQVNUICkKICAgICAgICBlbmQKICAgIGVsc2UKICAgICAgICAtLSBDaGVjayBpZiBhbnkgbW9kZW0gaXMgb3BlbgogICAgICAgIGZvciBuLHNNb2RlbSBpbiBpcGFpcnMoIHBlcmlwaGVyYWwuZ2V0TmFtZXMoKSApIGRvCiAgICAgICAgICAgIGlmIGlzT3Blbiggc01vZGVtICkgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKCXJldHVybiBmYWxzZQplbmQKCmZ1bmN0aW9uIHNlbmQoIG5SZWNpcGllbnQsIG1lc3NhZ2UsIHNQcm90b2NvbCApCiAgICAtLSBHZW5lcmF0ZSBhIChwcm9iYWJseSkgdW5pcXVlIG1lc3NhZ2UgSUQKICAgIC0tIFdlIGNvdWxkIGRvIG90aGVyIHRoaW5ncyB0byBndWFyYW50ZWUgdW5pcXVlbmVzcywgYnV0IHdlIHJlYWxseSBkb24ndCBuZWVkIHRvCiAgICAtLSBTdG9yZSBpdCB0byBlbnN1cmUgd2UgZG9uJ3QgZ2V0IG91ciBvd24gbWVzc2FnZXMgYmFjawogICAgbG9jYWwgbk1lc3NhZ2VJRCA9IG1hdGgucmFuZG9tKCAxLCAyMTQ3NDgzNjQ3ICkKICAgIHRSZWNlaXZlZE1lc3NhZ2VzWyBuTWVzc2FnZUlEIF0gPSB0cnVlCiAgICB0UmVjZWl2ZWRNZXNzYWdlVGltZW91dHNbIG9zLnN0YXJ0VGltZXIoIDMwICkgXSA9IG5NZXNzYWdlSUQKCiAgICAtLSBDcmVhdGUgdGhlIG1lc3NhZ2UKICAgIGxvY2FsIG5SZXBseUNoYW5uZWwgPSBvcy5nZXRDb21wdXRlcklEKCkKICAgIGxvY2FsIHRNZXNzYWdlID0gewogICAgICAgIG5NZXNzYWdlSUQgPSBuTWVzc2FnZUlELAogICAgICAgIG5SZWNpcGllbnQgPSBuUmVjaXBpZW50LAogICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLAogICAgICAgIHNQcm90b2NvbCA9IHNQcm90b2NvbCwKICAgIH0KCiAgICBpZiBuUmVjaXBpZW50ID09IG9zLmdldENvbXB1dGVySUQoKSB0aGVuCiAgICAgICAgLS0gTG9vcGJhY2sgdG8gb3Vyc2VsdmVzCiAgICAgICAgb3MucXVldWVFdmVudCggInJlZG5ldF9tZXNzYWdlIiwgblJlcGx5Q2hhbm5lbCwgbWVzc2FnZSwgc1Byb3RvY29sICkKCiAgICBlbHNlCiAgICAgICAgLS0gU2VuZCBvbiBhbGwgb3BlbiBtb2RlbXMsIHRvIHRoZSB0YXJnZXQgYW5kIHRvIHJlcGVhdGVycwogICAgICAgIGxvY2FsIHNlbnQgPSBmYWxzZQogICAgICAgIGZvciBuLHNNb2RlbSBpbiBpcGFpcnMoIHBlcmlwaGVyYWwuZ2V0TmFtZXMoKSApIGRvCiAgICAgICAgICAgIGlmIGlzT3Blbiggc01vZGVtICkgdGhlbgogICAgICAgICAgICAgICAgcGVyaXBoZXJhbC5jYWxsKCBzTW9kZW0sICJ0cmFuc21pdCIsIG5SZWNpcGllbnQsIG5SZXBseUNoYW5uZWwsIHRNZXNzYWdlICk7CiAgICAgICAgICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgInRyYW5zbWl0IiwgQ0hBTk5FTF9SRVBFQVQsIG5SZXBseUNoYW5uZWwsIHRNZXNzYWdlICk7CiAgICAgICAgICAgICAgICBzZW50ID0gdHJ1ZQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIGJyb2FkY2FzdCggbWVzc2FnZSwgc1Byb3RvY29sICkKCXNlbmQoIENIQU5ORUxfQlJPQURDQVNULCBtZXNzYWdlLCBzUHJvdG9jb2wgKQplbmQKCmZ1bmN0aW9uIHJlY2VpdmUoIHNQcm90b2NvbEZpbHRlciwgblRpbWVvdXQgKQogICAgLS0gVGhlIHBhcmFtZXRlcnMgdXNlZCB0byBiZSAoIG5UaW1lb3V0ICksIGRldGVjdCB0aGlzIGNhc2UgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICBpZiB0eXBlKHNQcm90b2NvbEZpbHRlcikgPT0gIm51bWJlciIgYW5kIG5UaW1lb3V0ID09IG5pbCB0aGVuCiAgICAgICAgc1Byb3RvY29sRmlsdGVyLCBuVGltZW91dCA9IG5pbCwgc1Byb3RvY29sRmlsdGVyCiAgICBlbmQKCiAgICAtLSBTdGFydCB0aGUgdGltZXIKCWxvY2FsIHRpbWVyID0gbmlsCglsb2NhbCBzRmlsdGVyID0gbmlsCglpZiBuVGltZW91dCB0aGVuCgkJdGltZXIgPSBvcy5zdGFydFRpbWVyKCBuVGltZW91dCApCgkJc0ZpbHRlciA9IG5pbAoJZWxzZQoJCXNGaWx0ZXIgPSAicmVkbmV0X21lc3NhZ2UiCgllbmQKCgktLSBXYWl0IGZvciBldmVudHMKCXdoaWxlIHRydWUgZG8KCQlsb2NhbCBzRXZlbnQsIHAxLCBwMiwgcDMgPSBvcy5wdWxsRXZlbnQoIHNGaWx0ZXIgKQoJCWlmIHNFdmVudCA9PSAicmVkbmV0X21lc3NhZ2UiIHRoZW4KCQkgICAgLS0gUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyByZWRuZXRfbWVzc2FnZQoJCQlsb2NhbCBuU2VuZGVySUQsIG1lc3NhZ2UsIHNQcm90b2NvbCA9IHAxLCBwMiwgcDMKCQkJaWYgc1Byb3RvY29sRmlsdGVyID09IG5pbCBvciBzUHJvdG9jb2wgPT0gc1Byb3RvY29sRmlsdGVyIHRoZW4KICAgIAkJCXJldHVybiBuU2VuZGVySUQsIG1lc3NhZ2UsIHNQcm90b2NvbAogICAgCSAgICBlbmQKCQllbHNlaWYgc0V2ZW50ID09ICJ0aW1lciIgdGhlbgoJCSAgICAtLSBSZXR1cm4gbmlsIGlmIHdlIHRpbWVvdXQKCQkgICAgaWYgcDEgPT0gdGltZXIgdGhlbgogICAgCQkJcmV0dXJuIG5pbAogICAgCQllbmQKCQllbmQKCWVuZAplbmQKCmZ1bmN0aW9uIGhvc3QoIHNQcm90b2NvbCwgc0hvc3RuYW1lICkKICAgIGlmIHR5cGUoIHNQcm90b2NvbCApIH49ICJzdHJpbmciIG9yIHR5cGUoIHNIb3N0bmFtZSApIH49ICJzdHJpbmciIHRoZW4KICAgICAgICBlcnJvciggImV4cGVjdGVkIHN0cmluZywgc3RyaW5nIiwgMiApCiAgICBlbmQKICAgIGlmIHNIb3N0bmFtZSA9PSAibG9jYWxob3N0IiB0aGVuCiAgICAgICAgZXJyb3IoICJSZXNlcnZlZCBob3N0bmFtZSIsIDIgKQogICAgZW5kCiAgICBpZiB0SG9zdG5hbWVzWyBzUHJvdG9jb2wgXSB+PSBzSG9zdG5hbWUgdGhlbgogICAgICAgIGlmIGxvb2t1cCggc1Byb3RvY29sLCBzSG9zdG5hbWUgKSB+PSBuaWwgdGhlbgogICAgICAgICAgICBlcnJvciggIkhvc3RuYW1lIGluIHVzZSIsIDIgKQogICAgICAgIGVuZAogICAgICAgIHRIb3N0bmFtZXNbIHNQcm90b2NvbCBdID0gc0hvc3RuYW1lCiAgICBlbmQKZW5kCgpmdW5jdGlvbiB1bmhvc3QoIHNQcm90b2NvbCApCiAgICBpZiB0eXBlKCBzUHJvdG9jb2wgKSB+PSAic3RyaW5nIiB0aGVuCiAgICAgICAgZXJyb3IoICJleHBlY3RlZCBzdHJpbmciLCAyICkKICAgIGVuZAogICAgdEhvc3RuYW1lc1sgc1Byb3RvY29sIF0gPSBuaWwKZW5kCgpmdW5jdGlvbiBsb29rdXAoIHNQcm90b2NvbCwgc0hvc3RuYW1lICkKICAgIGlmIHR5cGUoIHNQcm90b2NvbCApIH49ICJzdHJpbmciIHRoZW4KICAgICAgICBlcnJvciggImV4cGVjdGVkIHN0cmluZyIsIDIgKQogICAgZW5kCgogICAgLS0gQnVpbGQgbGlzdCBvZiBob3N0IElEcwogICAgbG9jYWwgdFJlc3VsdHMgPSBuaWwKICAgIGlmIHNIb3N0bmFtZSA9PSBuaWwgdGhlbgogICAgICAgIHRSZXN1bHRzID0ge30KICAgIGVuZAoKICAgIC0tIENoZWNrIGxvY2FsaG9zdCBmaXJzdAogICAgaWYgdEhvc3RuYW1lc1sgc1Byb3RvY29sIF0gdGhlbgogICAgICAgIGlmIHNIb3N0bmFtZSA9PSBuaWwgdGhlbgogICAgICAgICAgICB0YWJsZS5pbnNlcnQoIHRSZXN1bHRzLCBvcy5nZXRDb21wdXRlcklEKCkgKQogICAgICAgIGVsc2VpZiBzSG9zdG5hbWUgPT0gImxvY2FsaG9zdCIgb3Igc0hvc3RuYW1lID09IHRIb3N0bmFtZXNbIHNQcm90b2NvbCBdIHRoZW4KICAgICAgICAgICAgcmV0dXJuIG9zLmdldENvbXB1dGVySUQoKQogICAgICAgIGVuZAogICAgZW5kCgogICAgaWYgbm90IGlzT3BlbigpIHRoZW4KICAgICAgICBpZiB0UmVzdWx0cyB0aGVuCiAgICAgICAgICAgIHJldHVybiB1bnBhY2soIHRSZXN1bHRzICkKICAgICAgICBlbmQKICAgICAgICByZXR1cm4gbmlsCiAgICBlbmQKCiAgICAtLSBCcm9hZGNhc3QgYSBsb29rdXAgcGFja2V0CiAgICBicm9hZGNhc3QoIHsKICAgICAgICBzVHlwZSA9ICJsb29rdXAiLAogICAgICAgIHNQcm90b2NvbCA9IHNQcm90b2NvbCwKICAgICAgICBzSG9zdG5hbWUgPSBzSG9zdG5hbWUsCiAgICB9LCAiZG5zIiApCgogICAgLS0gU3RhcnQgYSB0aW1lcgogICAgbG9jYWwgdGltZXIgPSBvcy5zdGFydFRpbWVyKCAyICkKCiAgICAtLSBXYWl0IGZvciBldmVudHMKICAgIHdoaWxlIHRydWUgZG8KICAgICAgICBsb2NhbCBldmVudCwgcDEsIHAyLCBwMyA9IG9zLnB1bGxFdmVudCgpCiAgICAgICAgaWYgZXZlbnQgPT0gInJlZG5ldF9tZXNzYWdlIiB0aGVuCiAgICAgICAgICAgIC0tIEdvdCBhIHJlZG5ldCBtZXNzYWdlLCBjaGVjayBpZiBpdCdzIHRoZSByZXNwb25zZSB0byBvdXIgcmVxdWVzdAogICAgICAgICAgICBsb2NhbCBuU2VuZGVySUQsIHRNZXNzYWdlLCBzTWVzc2FnZVByb3RvY29sID0gcDEsIHAyLCBwMwogICAgICAgICAgICBpZiBzTWVzc2FnZVByb3RvY29sID09ICJkbnMiIGFuZCB0TWVzc2FnZS5zVHlwZSA9PSAibG9va3VwIHJlc3BvbnNlIiB0aGVuCiAgICAgICAgICAgICAgICBpZiB0TWVzc2FnZS5zUHJvdG9jb2wgPT0gc1Byb3RvY29sIHRoZW4KICAgICAgICAgICAgICAgICAgICBpZiBzSG9zdG5hbWUgPT0gbmlsIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0UmVzdWx0cywgblNlbmRlcklEICkKICAgICAgICAgICAgICAgICAgICBlbHNlaWYgdE1lc3NhZ2Uuc0hvc3RuYW1lID09IHNIb3N0bmFtZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuU2VuZGVySUQKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbHNlCiAgICAgICAgICAgIC0tIEdvdCBhIHRpbWVyIGV2ZW50LCBjaGVjayBpdCdzIHRoZSBlbmQgb2Ygb3VyIHRpbWVvdXQKICAgICAgICAgICAgaWYgcDEgPT0gdGltZXIgdGhlbgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKICAgIGlmIHRSZXN1bHRzIHRoZW4KICAgICAgICByZXR1cm4gdW5wYWNrKCB0UmVzdWx0cyApCiAgICBlbmQKICAgIHJldHVybiBuaWwKZW5kCgpsb2NhbCBiUnVubmluZyA9IGZhbHNlCmZ1bmN0aW9uIHJ1bigpCglpZiBiUnVubmluZyB0aGVuCgkJZXJyb3IoICJyZWRuZXQgaXMgYWxyZWFkeSBydW5uaW5nIiwgMiApCgllbmQKCWJSdW5uaW5nID0gdHJ1ZQoJCgl3aGlsZSBiUnVubmluZyBkbwoJCWxvY2FsIHNFdmVudCwgcDEsIHAyLCBwMywgcDQgPSBvcy5wdWxsRXZlbnRSYXcoKQoJCWlmIHNFdmVudCA9PSAibW9kZW1fbWVzc2FnZSIgdGhlbgoJCQktLSBHb3QgYSBtb2RlbSBtZXNzYWdlLCBwcm9jZXNzIGl0IGFuZCBhZGQgaXQgdG8gdGhlIHJlZG5ldCBldmVudCBxdWV1ZQogICAgCQlsb2NhbCBzTW9kZW0sIG5DaGFubmVsLCBuUmVwbHlDaGFubmVsLCB0TWVzc2FnZSA9IHAxLCBwMiwgcDMsIHA0CgkJICAgIGlmIGlzT3Blbiggc01vZGVtICkgYW5kICggbkNoYW5uZWwgPT0gb3MuZ2V0Q29tcHV0ZXJJRCgpIG9yIG5DaGFubmVsID09IENIQU5ORUxfQlJPQURDQVNUICkgdGhlbgogICAgCQkJaWYgdHlwZSggdE1lc3NhZ2UgKSA9PSAidGFibGUiIGFuZCB0TWVzc2FnZS5uTWVzc2FnZUlEIHRoZW4KCSAgICAJCQlpZiBub3QgdFJlY2VpdmVkTWVzc2FnZXNbIHRNZXNzYWdlLm5NZXNzYWdlSUQgXSB0aGVuCgkJICAgIAkJCXRSZWNlaXZlZE1lc3NhZ2VzWyB0TWVzc2FnZS5uTWVzc2FnZUlEIF0gPSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIHRSZWNlaXZlZE1lc3NhZ2VUaW1lb3V0c1sgb3Muc3RhcnRUaW1lciggMzAgKSBdID0gbk1lc3NhZ2VJRAoJCQkgICAgCQlvcy5xdWV1ZUV2ZW50KCAicmVkbmV0X21lc3NhZ2UiLCBuUmVwbHlDaGFubmVsLCB0TWVzc2FnZS5tZXNzYWdlLCB0TWVzc2FnZS5zUHJvdG9jb2wgKQoJCQkJICAgIGVuZAoJCQkgICAgZW5kCgkJCWVuZAoKCQllbHNlaWYgc0V2ZW50ID09ICJyZWRuZXRfbWVzc2FnZSIgdGhlbgoJCSAgICAtLSBHb3QgYSByZWRuZXQgbWVzc2FnZSAocXVldWVkIGZyb20gYWJvdmUpLCByZXNwb25kIHRvIGRucyBsb29rdXAKCQkgICAgbG9jYWwgblNlbmRlcklELCB0TWVzc2FnZSwgc1Byb3RvY29sID0gcDEsIHAyLCBwMwoJCSAgICBpZiBzUHJvdG9jb2wgPT0gImRucyIgYW5kIHRNZXNzYWdlLnNUeXBlID09ICJsb29rdXAiIHRoZW4KCQkgICAgICAgIGxvY2FsIHNIb3N0bmFtZSA9IHRIb3N0bmFtZXNbIHRNZXNzYWdlLnNQcm90b2NvbCBdCgkJICAgICAgICBpZiBzSG9zdG5hbWUgfj0gbmlsIGFuZCAodE1lc3NhZ2Uuc0hvc3RuYW1lID09IG5pbCBvciB0TWVzc2FnZS5zSG9zdG5hbWUgPT0gc0hvc3RuYW1lKSB0aGVuCgkJICAgICAgICAgICAgcmVkbmV0LnNlbmQoIG5TZW5kZXJJRCwgewoJCSAgICAgICAgICAgICAgICBzVHlwZSA9ICJsb29rdXAgcmVzcG9uc2UiLAoJCSAgICAgICAgICAgICAgICBzSG9zdG5hbWUgPSBzSG9zdG5hbWUsCgkJICAgICAgICAgICAgICAgIHNQcm90b2NvbCA9IHRNZXNzYWdlLnNQcm90b2NvbCwKCQkgICAgICAgICAgICB9LCAiZG5zIiApCgkJICAgICAgICBlbmQKCQkgICAgZW5kCgoJCWVsc2VpZiBzRXZlbnQgPT0gInRpbWVyIiB0aGVuCiAgICAgICAgICAgIC0tIEdvdCBhIHRpbWVyIGV2ZW50LCB1c2UgaXQgdG8gY2xlYXIgdGhlIGV2ZW50IHF1ZXVlCiAgICAgICAgICAgIGxvY2FsIG5UaW1lciA9IHAxCiAgICAgICAgICAgIGxvY2FsIG5NZXNzYWdlID0gdFJlY2VpdmVkTWVzc2FnZVRpbWVvdXRzWyBuVGltZXIgXQogICAgICAgICAgICBpZiBuTWVzc2FnZSB0aGVuCiAgICAgICAgICAgICAgICB0UmVjZWl2ZWRNZXNzYWdlVGltZW91dHNbIG5UaW1lciBdID0gbmlsCiAgICAgICAgICAgICAgICB0UmVjZWl2ZWRNZXNzYWdlc1sgbk1lc3NhZ2UgXSA9IG5pbAogICAgICAgICAgICBlbmQKCQllbmQKCWVuZAplbmQ=","isDir":false,"name":"rednet","size":0},"root/apis/term":{"data":"CmxvY2FsIG5hdGl2ZSA9ICh0ZXJtLm5hdGl2ZSBhbmQgdGVybS5uYXRpdmUoKSkgb3IgdGVybQpsb2NhbCByZWRpcmVjdFRhcmdldCA9IG5hdGl2ZQoKbG9jYWwgZnVuY3Rpb24gd3JhcCggX3NGdW5jdGlvbiApCglyZXR1cm4gZnVuY3Rpb24oIC4uLiApCgkJcmV0dXJuIHJlZGlyZWN0VGFyZ2V0WyBfc0Z1bmN0aW9uIF0oIC4uLiApCgllbmQKZW5kCgpsb2NhbCB0ZXJtID0ge30KCnRlcm0ucmVkaXJlY3QgPSBmdW5jdGlvbiggdGFyZ2V0ICkKCWlmIHRhcmdldCA9PSBuaWwgb3IgdHlwZSggdGFyZ2V0ICkgfj0gInRhYmxlIiB0aGVuCgkJZXJyb3IoICJJbnZhbGlkIHJlZGlyZWN0IHRhcmdldCIsIDIgKQoJZW5kCiAgICBpZiB0YXJnZXQgPT0gdGVybSB0aGVuCiAgICAgICAgZXJyb3IoICJ0ZXJtIGlzIG5vdCBhIHJlY29tbWVuZGVkIHJlZGlyZWN0IHRhcmdldCwgdHJ5IHRlcm0uY3VycmVudCgpIGluc3RlYWQiLCAyICkKICAgIGVuZAoJZm9yIGssdiBpbiBwYWlycyggbmF0aXZlICkgZG8KCQlpZiB0eXBlKCBrICkgPT0gInN0cmluZyIgYW5kIHR5cGUoIHYgKSA9PSAiZnVuY3Rpb24iIHRoZW4KCQkJaWYgdHlwZSggdGFyZ2V0W2tdICkgfj0gImZ1bmN0aW9uIiB0aGVuCgkJCQl0YXJnZXRba10gPSBmdW5jdGlvbigpCgkJCQkJZXJyb3IoICJSZWRpcmVjdCBvYmplY3QgaXMgbWlzc2luZyBtZXRob2QgIi4uay4uIi4iLCAyICkKCQkJCWVuZAoJCQllbmQKCQllbmQKCWVuZAoJbG9jYWwgb2xkUmVkaXJlY3RUYXJnZXQgPSByZWRpcmVjdFRhcmdldAoJcmVkaXJlY3RUYXJnZXQgPSB0YXJnZXQKCXJldHVybiBvbGRSZWRpcmVjdFRhcmdldAplbmQKCnRlcm0uY3VycmVudCA9IGZ1bmN0aW9uKCkKICAgIHJldHVybiByZWRpcmVjdFRhcmdldAplbmQKCnRlcm0ubmF0aXZlID0gZnVuY3Rpb24oKQogICAgLS0gTk9URTogcGxlYXNlIGRvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgaGF2ZSB0by4KICAgIC0tIElmIHlvdSdyZSBydW5uaW5nIGluIGEgcmVkaXJlY3RlZCBvciBtdWx0aXRhc2tlZCBlbnZpb3JtZW50LCB0ZXJtLm5hdGl2ZSgpIHdpbGwgTk9UIGJlCiAgICAtLSB0aGUgY3VycmVudCB0ZXJtaW5hbCB3aGVuIHlvdXIgcHJvZ3JhbSBzdGFydHMgdXAuIEl0IGlzIGZhciBiZXR0ZXIgdG8gdXNlIHRlcm0uY3VycmVudCgpCiAgICByZXR1cm4gbmF0aXZlCmVuZAoKZm9yIGssdiBpbiBwYWlycyggbmF0aXZlICkgZG8KCWlmIHR5cGUoIGsgKSA9PSAic3RyaW5nIiBhbmQgdHlwZSggdiApID09ICJmdW5jdGlvbiIgdGhlbgoJCWlmIHRlcm1ba10gPT0gbmlsIHRoZW4KCQkJdGVybVtrXSA9IHdyYXAoIGsgKQoJCWVuZAoJZW5kCmVuZAoJCmxvY2FsIGVudiA9IGdldGZlbnYoKQpmb3Igayx2IGluIHBhaXJzKCB0ZXJtICkgZG8KCWVudltrXSA9IHYKZW5k","isDir":false,"name":"term","size":0},"root/apis/textutils":{"data":"CmZ1bmN0aW9uIHNsb3dXcml0ZSggc1RleHQsIG5SYXRlICkKICAgIG5SYXRlID0gblJhdGUgb3IgMjAKICAgIGlmIG5SYXRlIDwgMCB0aGVuCiAgICAgICAgZXJyb3IoICJSYXRlIG11c3QgYmUgcG9zaXRpdmUiLCAyICkKICAgIGVuZAogICAgbG9jYWwgblNsZWVwID0gMSAvIG5SYXRlCiAgICAgICAgCiAgICBzVGV4dCA9IHRvc3RyaW5nKCBzVGV4dCApCiAgICBsb2NhbCB4LHkgPSB0ZXJtLmdldEN1cnNvclBvcyh4LHkpCiAgICBsb2NhbCBsZW4gPSBzdHJpbmcubGVuKCBzVGV4dCApCiAgICAKICAgIGZvciBuPTEsbGVuIGRvCiAgICAgICAgdGVybS5zZXRDdXJzb3JQb3MoIHgsIHkgKQogICAgICAgIHNsZWVwKCBuU2xlZXAgKQogICAgICAgIGxvY2FsIG5MaW5lcyA9IHdyaXRlKCBzdHJpbmcuc3ViKCBzVGV4dCwgMSwgbiApICkKICAgICAgICBsb2NhbCBuZXdYLCBuZXdZID0gdGVybS5nZXRDdXJzb3JQb3MoKQogICAgICAgIHkgPSBuZXdZIC0gbkxpbmVzCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBzbG93UHJpbnQoIHNUZXh0LCBuUmF0ZSApCiAgICBzbG93V3JpdGUoIHNUZXh0LCBuUmF0ZSkKICAgIHByaW50KCkKZW5kCgpmdW5jdGlvbiBmb3JtYXRUaW1lKCBuVGltZSwgYlR3ZW50eUZvdXJIb3VyICkKICAgIGxvY2FsIHNUT0QgPSBuaWwKICAgIGlmIG5vdCBiVHdlbnR5Rm91ckhvdXIgdGhlbgogICAgICAgIGlmIG5UaW1lID49IDEyIHRoZW4KICAgICAgICAgICAgc1RPRCA9ICJQTSIKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNUT0QgPSAiQU0iCiAgICAgICAgZW5kCiAgICAgICAgaWYgblRpbWUgPj0gMTMgdGhlbgogICAgICAgICAgICBuVGltZSA9IG5UaW1lIC0gMTIKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGxvY2FsIG5Ib3VyID0gbWF0aC5mbG9vcihuVGltZSkKICAgIGxvY2FsIG5NaW51dGUgPSBtYXRoLmZsb29yKChuVGltZSAtIG5Ib3VyKSo2MCkKICAgIGlmIHNUT0QgdGhlbgogICAgICAgIHJldHVybiBzdHJpbmcuZm9ybWF0KCAiJWQ6JTAyZCAlcyIsIG5Ib3VyLCBuTWludXRlLCBzVE9EICkKICAgIGVsc2UKICAgICAgICByZXR1cm4gc3RyaW5nLmZvcm1hdCggIiVkOiUwMmQiLCBuSG91ciwgbk1pbnV0ZSApCiAgICBlbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBtYWtlUGFnZWRTY3JvbGwoIF90ZXJtLCBfbkZyZWVMaW5lcyApCiAgICBsb2NhbCBuYXRpdmVTY3JvbGwgPSBfdGVybS5zY3JvbGwKICAgIGxvY2FsIG5GcmVlTGluZXMgPSBfbkZyZWVMaW5lcyBvciAwCiAgICByZXR1cm4gZnVuY3Rpb24oIF9uICkKICAgICAgICBmb3Igbj0xLF9uIGRvCiAgICAgICAgICAgIG5hdGl2ZVNjcm9sbCggMSApCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBuRnJlZUxpbmVzIDw9IDAgdGhlbgogICAgICAgICAgICAgICAgbG9jYWwgdyxoID0gX3Rlcm0uZ2V0U2l6ZSgpCiAgICAgICAgICAgICAgICBfdGVybS5zZXRDdXJzb3JQb3MoIDEsIGggKQogICAgICAgICAgICAgICAgX3Rlcm0ud3JpdGUoICJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIiApCiAgICAgICAgICAgICAgICBvcy5wdWxsRXZlbnQoICJrZXkiICkKICAgICAgICAgICAgICAgIF90ZXJtLmNsZWFyTGluZSgpCiAgICAgICAgICAgICAgICBfdGVybS5zZXRDdXJzb3JQb3MoIDEsIGggKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBuRnJlZUxpbmVzID0gbkZyZWVMaW5lcyAtIDEKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBwYWdlZFByaW50KCBfc1RleHQsIF9uRnJlZUxpbmVzICkKICAgIC0tIFNldHVwIGEgcmVkaXJlY3RvcgogICAgbG9jYWwgb2xkVGVybSA9IHRlcm0uY3VycmVudCgpCiAgICBsb2NhbCBuZXdUZXJtID0ge30KICAgIGZvciBrLHYgaW4gcGFpcnMoIG9sZFRlcm0gKSBkbwogICAgICAgIG5ld1Rlcm1ba10gPSB2CiAgICBlbmQKICAgIG5ld1Rlcm0uc2Nyb2xsID0gbWFrZVBhZ2VkU2Nyb2xsKCBvbGRUZXJtLCBfbkZyZWVMaW5lcyApCiAgICB0ZXJtLnJlZGlyZWN0KCBuZXdUZXJtICkKCiAgICAtLSBQcmludCB0aGUgdGV4dAogICAgbG9jYWwgcmVzdWx0CiAgICBsb2NhbCBvaywgZXJyID0gcGNhbGwoIGZ1bmN0aW9uKCkKICAgICAgICByZXN1bHQgPSBwcmludCggX3NUZXh0ICkKICAgIGVuZCApCgogICAgLS0gUmVtb3ZlZCB0aGUgcmVkaXJlY3RvcgogICAgdGVybS5yZWRpcmVjdCggb2xkVGVybSApCgogICAgLS0gUHJvcG9nYXRlIGVycm9ycwogICAgaWYgbm90IG9rIHRoZW4KICAgICAgICBlcnJvciggZXJyLCAwICkKICAgIGVuZAogICAgcmV0dXJuIHJlc3VsdAplbmQKCmxvY2FsIGZ1bmN0aW9uIHRhYnVsYXRlQ29tbW9uKCBiUGFnZWQsIC4uLiApCiAgICBsb2NhbCB0QWxsID0geyAuLi4gfQogICAgCiAgICBsb2NhbCB3LGggPSB0ZXJtLmdldFNpemUoKQogICAgbG9jYWwgbk1heExlbiA9IHcgLyA4CiAgICBmb3IgbiwgdCBpbiBpcGFpcnMoIHRBbGwgKSBkbwogICAgICAgIGlmIHR5cGUodCkgPT0gInRhYmxlIiB0aGVuCiAgICAgICAgICAgIGZvciBuLCBzSXRlbSBpbiBwYWlycyh0KSBkbwogICAgICAgICAgICAgICAgbk1heExlbiA9IG1hdGgubWF4KCBzdHJpbmcubGVuKCBzSXRlbSApICsgMSwgbk1heExlbiApCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICBsb2NhbCBuQ29scyA9IG1hdGguZmxvb3IoIHcgLyBuTWF4TGVuICkKICAgIGxvY2FsIG5MaW5lcyA9IDAKICAgIGxvY2FsIGZ1bmN0aW9uIG5ld0xpbmUoKQogICAgICAgIGlmIGJQYWdlZCBhbmQgbkxpbmVzID49IChoLTMpIHRoZW4KICAgICAgICAgICAgcGFnZWRQcmludCgpCiAgICAgICAgZWxzZQogICAgICAgICAgICBwcmludCgpCiAgICAgICAgZW5kCiAgICAgICAgbkxpbmVzID0gbkxpbmVzICsgMQogICAgZW5kCiAgICAKICAgIGxvY2FsIGZ1bmN0aW9uIGRyYXdDb2xzKCBfdCApCiAgICAgICAgbG9jYWwgbkNvbCA9IDEKICAgICAgICBmb3IgbiwgcyBpbiBpcGFpcnMoIF90ICkgZG8KICAgICAgICAgICAgaWYgbkNvbCA+IG5Db2xzIHRoZW4KICAgICAgICAgICAgICAgIG5Db2wgPSAxCiAgICAgICAgICAgICAgICBuZXdMaW5lKCkKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICBsb2NhbCBjeCwgY3kgPSB0ZXJtLmdldEN1cnNvclBvcygpCiAgICAgICAgICAgIGN4ID0gMSArICgobkNvbCAtIDEpICogbk1heExlbikKICAgICAgICAgICAgdGVybS5zZXRDdXJzb3JQb3MoIGN4LCBjeSApCiAgICAgICAgICAgIHRlcm0ud3JpdGUoIHMgKQoKICAgICAgICAgICAgbkNvbCA9IG5Db2wgKyAxICAgICAgCiAgICAgICAgZW5kCiAgICAgICAgcHJpbnQoKQogICAgZW5kCiAgICBmb3IgbiwgdCBpbiBpcGFpcnMoIHRBbGwgKSBkbwogICAgICAgIGlmIHR5cGUodCkgPT0gInRhYmxlIiB0aGVuCiAgICAgICAgICAgIGlmICN0ID4gMCB0aGVuCiAgICAgICAgICAgICAgICBkcmF3Q29scyggdCApCiAgICAgICAgICAgIGVuZAogICAgICAgIGVsc2VpZiB0eXBlKHQpID09ICJudW1iZXIiIHRoZW4KICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoIHQgKQogICAgICAgIGVuZAogICAgZW5kICAgIAplbmQKCmZ1bmN0aW9uIHRhYnVsYXRlKCAuLi4gKQogICAgdGFidWxhdGVDb21tb24oIGZhbHNlLCAuLi4gKQplbmQKCmZ1bmN0aW9uIHBhZ2VkVGFidWxhdGUoIC4uLiApCiAgICB0YWJ1bGF0ZUNvbW1vbiggdHJ1ZSwgLi4uICkKZW5kCgpsb2NhbCBmdW5jdGlvbiBzZXJpYWxpemVJbXBsKCB0LCB0VHJhY2tpbmcsIHNJbmRlbnQgKQogICAgbG9jYWwgc1R5cGUgPSB0eXBlKHQpCiAgICBpZiBzVHlwZSA9PSAidGFibGUiIHRoZW4KICAgICAgICBpZiB0VHJhY2tpbmdbdF0gfj0gbmlsIHRoZW4KICAgICAgICAgICAgZXJyb3IoICJDYW5ub3Qgc2VyaWFsaXplIHRhYmxlIHdpdGggcmVjdXJzaXZlIGVudHJpZXMiLCAwICkKICAgICAgICBlbmQKICAgICAgICB0VHJhY2tpbmdbdF0gPSB0cnVlCgogICAgICAgIGlmIG5leHQodCkgPT0gbmlsIHRoZW4KICAgICAgICAgICAgLS0gRW1wdHkgdGFibGVzIGFyZSBzaW1wbGUKICAgICAgICAgICAgcmV0dXJuICJ7fSIKICAgICAgICBlbHNlCiAgICAgICAgICAgIC0tIE90aGVyIHRhYmxlcyB0YWtlIG1vcmUgd29yawogICAgICAgICAgICBsb2NhbCBzUmVzdWx0ID0gIntcbiIKICAgICAgICAgICAgbG9jYWwgc1N1YkluZGVudCA9IHNJbmRlbnQgLi4gIiAgIgogICAgICAgICAgICBsb2NhbCB0U2VlbiA9IHt9CiAgICAgICAgICAgIGZvciBrLHYgaW4gaXBhaXJzKHQpIGRvCiAgICAgICAgICAgICAgICB0U2VlbltrXSA9IHRydWUKICAgICAgICAgICAgICAgIHNSZXN1bHQgPSBzUmVzdWx0IC4uIHNTdWJJbmRlbnQgLi4gc2VyaWFsaXplSW1wbCggdiwgdFRyYWNraW5nLCBzU3ViSW5kZW50ICkgLi4gIixcbiIKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGZvciBrLHYgaW4gcGFpcnModCkgZG8KICAgICAgICAgICAgICAgIGlmIG5vdCB0U2VlbltrXSB0aGVuCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgc0VudHJ5CiAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShrKSA9PSAic3RyaW5nIiBhbmQgc3RyaW5nLm1hdGNoKCBrLCAiXlslYV9dWyVhJWRfXSokIiApIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgc0VudHJ5ID0gayAuLiAiID0gIiAuLiBzZXJpYWxpemVJbXBsKCB2LCB0VHJhY2tpbmcsIHNTdWJJbmRlbnQgKSAuLiAiLFxuIgogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgc0VudHJ5ID0gIlsgIiAuLiBzZXJpYWxpemVJbXBsKCBrLCB0VHJhY2tpbmcsIHNTdWJJbmRlbnQgKSAuLiAiIF0gPSAiIC4uIHNlcmlhbGl6ZUltcGwoIHYsIHRUcmFja2luZywgc1N1YkluZGVudCApIC4uICIsXG4iCiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgc1Jlc3VsdCA9IHNSZXN1bHQgLi4gc1N1YkluZGVudCAuLiBzRW50cnkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICAgICAgc1Jlc3VsdCA9IHNSZXN1bHQgLi4gc0luZGVudCAuLiAifSIKICAgICAgICAgICAgcmV0dXJuIHNSZXN1bHQKICAgICAgICBlbmQKICAgICAgICAKICAgIGVsc2VpZiBzVHlwZSA9PSAic3RyaW5nIiB0aGVuCiAgICAgICAgcmV0dXJuIHN0cmluZy5mb3JtYXQoICIlcSIsIHQgKQogICAgCiAgICBlbHNlaWYgc1R5cGUgPT0gIm51bWJlciIgb3Igc1R5cGUgPT0gImJvb2xlYW4iIG9yIHNUeXBlID09ICJuaWwiIHRoZW4KICAgICAgICByZXR1cm4gdG9zdHJpbmcodCkKICAgICAgICAKICAgIGVsc2UKICAgICAgICBlcnJvciggIkNhbm5vdCBzZXJpYWxpemUgdHlwZSAiLi5zVHlwZSwgMCApCiAgICAgICAgCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBzZXJpYWxpemUoIHQgKQogICAgbG9jYWwgdFRyYWNraW5nID0ge30KICAgIHJldHVybiBzZXJpYWxpemVJbXBsKCB0LCB0VHJhY2tpbmcsICIiICkKZW5kCgpmdW5jdGlvbiB1bnNlcmlhbGl6ZSggcyApCiAgICBsb2NhbCBmdW5jID0gbG9hZHN0cmluZyggInJldHVybiAiLi5zLCAidW5zZXJpYWxpemUiICkKICAgIGlmIGZ1bmMgdGhlbgogICAgICAgIHNldGZlbnYoIGZ1bmMsIHt9ICkKICAgICAgICBsb2NhbCBvaywgcmVzdWx0ID0gcGNhbGwoIGZ1bmMgKQogICAgICAgIGlmIG9rIHRoZW4KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgIGVuZAogICAgZW5kCiAgICByZXR1cm4gbmlsCmVuZAoKZnVuY3Rpb24gdXJsRW5jb2RlKCBzdHIgKQogICAgaWYgc3RyIHRoZW4KICAgICAgICBzdHIgPSBzdHJpbmcuZ3N1YihzdHIsICJcbiIsICJcclxuIikKICAgICAgICBzdHIgPSBzdHJpbmcuZ3N1YihzdHIsICIoW14ldyBdKSIsIGZ1bmN0aW9uKGMpCiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuZm9ybWF0KCIlJSUwMlgiLCBzdHJpbmcuYnl0ZShjKSkKICAgICAgICBlbmQgKQogICAgICAgIHN0ciA9IHN0cmluZy5nc3ViKHN0ciwgIiAiLCAiKyIpCiAgICBlbmQKICAgIHJldHVybiBzdHIgICAgCmVuZAoKLS0gR0IgdmVyc2lvbnMKc2VyaWFsaXNlID0gc2VyaWFsaXplCnVuc2VyaWFsaXNlID0gdW5zZXJpYWxpemU=","isDir":false,"name":"textutils","size":0},"root/apis/turtle":{"children":["turtle"],"isDir":true,"name":"turtle","parents":["/root","/root/apis","/root/apis/turtle"],"size":0},"root/apis/turtle/turtle":{"data":"CmlmIG5vdCB0dXJ0bGUgdGhlbgoJZXJyb3IoICJDYW5ub3QgbG9hZCB0dXJ0bGUgQVBJIG9uIGNvbXB1dGVyIiwgMiApCmVuZApuYXRpdmUgPSB0dXJ0bGUubmF0aXZlIG9yIHR1cnRsZQoKbG9jYWwgZnVuY3Rpb24gYWRkQ3JhZnRNZXRob2QoIG9iamVjdCApCiAgICBpZiBwZXJpcGhlcmFsLmdldFR5cGUoICJsZWZ0IiApID09ICJ3b3JrYmVuY2giIHRoZW4KICAgICAgICBvYmplY3QuY3JhZnQgPSBmdW5jdGlvbiggLi4uICkKICAgICAgICAgICAgcmV0dXJuIHBlcmlwaGVyYWwuY2FsbCggImxlZnQiLCAiY3JhZnQiLCAuLi4gKQogICAgICAgIGVuZAogICAgZWxzZWlmIHBlcmlwaGVyYWwuZ2V0VHlwZSggInJpZ2h0IiApID09ICJ3b3JrYmVuY2giIHRoZW4KICAgICAgICBvYmplY3QuY3JhZnQgPSBmdW5jdGlvbiggLi4uICkKICAgICAgICAgICAgcmV0dXJuIHBlcmlwaGVyYWwuY2FsbCggInJpZ2h0IiwgImNyYWZ0IiwgLi4uICkKICAgICAgICBlbmQKICAgIGVsc2UKICAgICAgICBvYmplY3QuY3JhZnQgPSBuaWwKICAgIGVuZAplbmQKCi0tIFB1dCBjb21tYW5kcyBpbnRvIGVudmlyb25tZW50IHRhYmxlCmxvY2FsIGVudiA9IGdldGZlbnYoKQpmb3Igayx2IGluIHBhaXJzKCBuYXRpdmUgKSBkbwogICAgaWYgayA9PSAiZXF1aXBMZWZ0IiBvciBrID09ICJlcXVpcFJpZ2h0IiB0aGVuCiAgICAgICAgZW52W2tdID0gZnVuY3Rpb24oIC4uLiApCiAgICAgICAgICAgIGxvY2FsIHJlc3VsdCwgZXJyID0gdiggLi4uICkKICAgICAgICAgICAgYWRkQ3JhZnRNZXRob2QoIHR1cnRsZSApCiAgICAgICAgICAgIHJldHVybiByZXN1bHQsIGVycgogICAgICAgIGVuZAogICAgZWxzZQogICAgCWVudltrXSA9IHYKICAgIGVuZAplbmQKYWRkQ3JhZnRNZXRob2QoIGVudiAp","isDir":false,"name":"turtle","size":0},"root/apis/vector":{"data":"CmxvY2FsIHZlY3RvciA9IHsKCWFkZCA9IGZ1bmN0aW9uKCBzZWxmLCBvICkKCQlyZXR1cm4gdmVjdG9yLm5ldygKCQkJc2VsZi54ICsgby54LAoJCQlzZWxmLnkgKyBvLnksCgkJCXNlbGYueiArIG8uegoJCSkKCWVuZCwKCXN1YiA9IGZ1bmN0aW9uKCBzZWxmLCBvICkKCQlyZXR1cm4gdmVjdG9yLm5ldygKCQkJc2VsZi54IC0gby54LAoJCQlzZWxmLnkgLSBvLnksCgkJCXNlbGYueiAtIG8uegoJCSkKCWVuZCwKCW11bCA9IGZ1bmN0aW9uKCBzZWxmLCBtICkKCQlyZXR1cm4gdmVjdG9yLm5ldygKCQkJc2VsZi54ICogbSwKCQkJc2VsZi55ICogbSwKCQkJc2VsZi56ICogbQoJCSkKCWVuZCwKCWRvdCA9IGZ1bmN0aW9uKCBzZWxmLCBvICkKCQlyZXR1cm4gc2VsZi54Km8ueCArIHNlbGYueSpvLnkgKyBzZWxmLnoqby56CgllbmQsCgljcm9zcyA9IGZ1bmN0aW9uKCBzZWxmLCBvICkKCQlyZXR1cm4gdmVjdG9yLm5ldygKCQkJc2VsZi55Km8ueiAtIHNlbGYueipvLnksCgkJCXNlbGYueipvLnggLSBzZWxmLngqby56LAoJCQlzZWxmLngqby55IC0gc2VsZi55Km8ueAoJCSkKCWVuZCwKCWxlbmd0aCA9IGZ1bmN0aW9uKCBzZWxmICkKCQlyZXR1cm4gbWF0aC5zcXJ0KCBzZWxmLngqc2VsZi54ICsgc2VsZi55KnNlbGYueSArIHNlbGYueipzZWxmLnogKQoJZW5kLAoJbm9ybWFsaXplID0gZnVuY3Rpb24oIHNlbGYgKQoJCXJldHVybiBzZWxmOm11bCggMSAvIHNlbGY6bGVuZ3RoKCkgKQoJZW5kLAoJcm91bmQgPSBmdW5jdGlvbiggc2VsZiwgblRvbGVyYW5jZSApCgkgICAgblRvbGVyYW5jZSA9IG5Ub2xlcmFuY2Ugb3IgMS4wCgkJcmV0dXJuIHZlY3Rvci5uZXcoCgkJCW1hdGguZmxvb3IoIChzZWxmLnggKyAoblRvbGVyYW5jZSAqIDAuNSkpIC8gblRvbGVyYW5jZSApICogblRvbGVyYW5jZSwKCQkJbWF0aC5mbG9vciggKHNlbGYueSArIChuVG9sZXJhbmNlICogMC41KSkgLyBuVG9sZXJhbmNlICkgKiBuVG9sZXJhbmNlLAoJCQltYXRoLmZsb29yKCAoc2VsZi56ICsgKG5Ub2xlcmFuY2UgKiAwLjUpKSAvIG5Ub2xlcmFuY2UgKSAqIG5Ub2xlcmFuY2UKCQkpCgllbmQsCgl0b3N0cmluZyA9IGZ1bmN0aW9uKCBzZWxmICkKCQlyZXR1cm4gc2VsZi54Li4iLCIuLnNlbGYueS4uIiwiLi5zZWxmLnoKCWVuZCwKfQoKbG9jYWwgdm1ldGF0YWJsZSA9IHsKCV9faW5kZXggPSB2ZWN0b3IsCglfX2FkZCA9IHZlY3Rvci5hZGQsCglfX3N1YiA9IHZlY3Rvci5zdWIsCglfX211bCA9IHZlY3Rvci5tdWwsCglfX3VubSA9IGZ1bmN0aW9uKCB2ICkgcmV0dXJuIHY6bXVsKC0xKSBlbmQsCglfX3Rvc3RyaW5nID0gdmVjdG9yLnRvc3RyaW5nLAp9CgpmdW5jdGlvbiBuZXcoIHgsIHksIHogKQoJbG9jYWwgdiA9IHsKCQl4ID0geCBvciAwLAoJCXkgPSB5IG9yIDAsCgkJeiA9IHogb3IgMAoJfQoJc2V0bWV0YXRhYmxlKCB2LCB2bWV0YXRhYmxlICkKCXJldHVybiB2CmVuZA==","isDir":false,"name":"vector","size":0},"root/apis/window":{"data":"CmZ1bmN0aW9uIGNyZWF0ZSggcGFyZW50LCBuWCwgblksIG5XaWR0aCwgbkhlaWdodCwgYlN0YXJ0VmlzaWJsZSApCgogICAgaWYgdHlwZSggcGFyZW50ICkgfj0gInRhYmxlIiBvcgogICAgICAgdHlwZSggblggKSB+PSAibnVtYmVyIiBvcgogICAgICAgdHlwZSggblkgKSB+PSAibnVtYmVyIiBvcgogICAgICAgdHlwZSggbldpZHRoICkgfj0gIm51bWJlciIgb3IKICAgICAgIHR5cGUoIG5IZWlnaHQgKSB+PSAibnVtYmVyIiBvcgogICAgICAgKGJTdGFydFZpc2libGUgfj0gbmlsIGFuZCB0eXBlKCBiU3RhcnRWaXNpYmxlICkgfj0gImJvb2xlYW4iKSB0aGVuCiAgICAgICAgZXJyb3IoICJFeHBlY3RlZCBvYmplY3QsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgW2Jvb2xlYW5dIiwgMiApCiAgICBlbmQKCiAgICBpZiBwYXJlbnQgPT0gdGVybSB0aGVuCiAgICAgICAgZXJyb3IoICJ0ZXJtIGlzIG5vdCBhIHJlY29tbWVuZGVkIHdpbmRvdyBwYXJlbnQsIHRyeSB0ZXJtLmN1cnJlbnQoKSBpbnN0ZWFkIiwgMiApCiAgICBlbmQKCiAgICAtLSBTZXR1cAogICAgbG9jYWwgYlZpc2libGUgPSAoYlN0YXJ0VmlzaWJsZSB+PSBmYWxzZSkKICAgIGxvY2FsIG5DdXJzb3JYID0gMQogICAgbG9jYWwgbkN1cnNvclkgPSAxCiAgICBsb2NhbCBiQ3Vyc29yQmxpbmsgPSBmYWxzZQogICAgbG9jYWwgblRleHRDb2xvciA9IGNvbG9ycy53aGl0ZQogICAgbG9jYWwgbkJhY2tncm91bmRDb2xvciA9IGNvbG9ycy5ibGFjawogICAgbG9jYWwgc0VtcHR5ID0gc3RyaW5nLnJlcCggIiAiLCBuV2lkdGggKQogICAgbG9jYWwgdExpbmVzID0ge30KICAgIGRvCiAgICAgICAgbG9jYWwgdEVtcHR5ID0geyB7IHNFbXB0eSwgblRleHRDb2xvciwgbkJhY2tncm91bmRDb2xvciB9IH0KICAgICAgICBmb3IgeT0xLG5IZWlnaHQgZG8KICAgICAgICAgICAgdExpbmVzW3ldID0gdEVtcHR5CiAgICAgICAgZW5kCiAgICBlbmQKCiAgICAtLSBIZWxwZXIgZnVuY3Rpb25zCiAgICBsb2NhbCBmdW5jdGlvbiB1cGRhdGVDdXJzb3JQb3MoKQogICAgICAgIGlmIG5DdXJzb3JYID49IDEgYW5kIG5DdXJzb3JZID49IDEgYW5kCiAgICAgICAgICAgbkN1cnNvclggPD0gbldpZHRoIGFuZCBuQ3Vyc29yWSA8PSBuSGVpZ2h0IHRoZW4KICAgICAgICAgICAgcGFyZW50LnNldEN1cnNvclBvcyggblggKyBuQ3Vyc29yWCAtIDEsIG5ZICsgbkN1cnNvclkgLSAxICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIHBhcmVudC5zZXRDdXJzb3JQb3MoIDAsIDAgKQogICAgICAgIGVuZAogICAgZW5kCiAgICAKICAgIGxvY2FsIGZ1bmN0aW9uIHVwZGF0ZUN1cnNvckJsaW5rKCkKICAgICAgICBwYXJlbnQuc2V0Q3Vyc29yQmxpbmsoIGJDdXJzb3JCbGluayApCiAgICBlbmQKICAgIAogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlQ3Vyc29yQ29sb3IoKQogICAgICAgIHBhcmVudC5zZXRUZXh0Q29sb3IoIG5UZXh0Q29sb3IgKQogICAgZW5kCiAgICAKICAgIGxvY2FsIGZ1bmN0aW9uIHJlZHJhd0xpbmUoIG4gKQogICAgICAgIHBhcmVudC5zZXRDdXJzb3JQb3MoIG5YLCBuWSArIG4gLSAxICkKICAgICAgICBsb2NhbCB0TGluZSA9IHRMaW5lc1sgbiBdCiAgICAgICAgZm9yIG09MSwjdExpbmUgZG8KICAgICAgICAgICAgbG9jYWwgdEJpdCA9IHRMaW5lWyBtIF0KICAgICAgICAgICAgcGFyZW50LnNldFRleHRDb2xvciggdEJpdFsyXSApCiAgICAgICAgICAgIHBhcmVudC5zZXRCYWNrZ3JvdW5kQ29sb3IoIHRCaXRbM10gKQogICAgICAgICAgICBwYXJlbnQud3JpdGUoIHRCaXRbMV0gKQogICAgICAgIGVuZAogICAgZW5kCgogICAgbG9jYWwgZnVuY3Rpb24gbGluZUxlbiggdExpbmUgKQogICAgICAgIGxvY2FsIG5MZW5ndGggPSAwCiAgICAgICAgZm9yIG49MSwjdExpbmUgZG8KICAgICAgICAgICAgbkxlbmd0aCA9IG5MZW5ndGggKyBzdHJpbmcubGVuKCB0TGluZVtuXVsxXSApCiAgICAgICAgZW5kCiAgICAgICAgcmV0dXJuIG5MZW5ndGgKICAgIGVuZAoKICAgIGxvY2FsIGZ1bmN0aW9uIGxpbmVTdWIoIHRMaW5lLCBuU3RhcnQsIG5FbmQgKQogICAgICAgIC0tYXNzZXJ0KCBtYXRoLmZsb29yKG5TdGFydCkgPT0gblN0YXJ0ICkKICAgICAgICAtLWFzc2VydCggbWF0aC5mbG9vcihuRW5kKSA9PSBuRW5kICkKICAgICAgICAtLWFzc2VydCggblN0YXJ0ID49IDEgKQogICAgICAgIC0tYXNzZXJ0KCBuRW5kID49IG5TdGFydCApCiAgICAgICAgLS1hc3NlcnQoIG5FbmQgPD0gbGluZUxlbiggdExpbmUgKSApCiAgICAgICAgbG9jYWwgdFN1YkxpbmUgPSB7fQogICAgICAgIGxvY2FsIG5CaXRTdGFydCA9IDEKICAgICAgICBmb3Igbj0xLCN0TGluZSBkbwogICAgICAgICAgICBsb2NhbCB0Qml0ID0gdExpbmVbbl0KICAgICAgICAgICAgbG9jYWwgc0JpdCA9IHRCaXRbMV0KICAgICAgICAgICAgbG9jYWwgbkJpdEVuZCA9IG5CaXRTdGFydCArIHN0cmluZy5sZW4oIHNCaXQgKSAtIDEKICAgICAgICAgICAgaWYgbkJpdEVuZCA+PSBuU3RhcnQgYW5kIG5CaXRTdGFydCA8PSBuRW5kIHRoZW4KICAgICAgICAgICAgICAgIGlmIG5CaXRTdGFydCA+PSBuU3RhcnQgYW5kIG5CaXRFbmQgPD0gbkVuZCB0aGVuCiAgICAgICAgICAgICAgICAgICAgLS0gSW5jbHVkZSBiaXQgd2hvbGVzYWxlCiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0U3ViTGluZSwgdEJpdCApCiAgICAgICAgICAgICAgICAgICAgLS1hc3NlcnQoIGxpbmVMZW4oIHRTdWJMaW5lICkgPT0gKG1hdGgubWluKG5FbmQsIG5CaXRFbmQpIC0gblN0YXJ0ICsgMSkgKQogICAgICAgICAgICAgICAgZWxzZWlmIG5CaXRTdGFydCA8IG5TdGFydCBhbmQgbkJpdEVuZCA8PSBuRW5kIHRoZW4KICAgICAgICAgICAgICAgICAgICAtLSBJbmNsdWRlIGVuZCBvZiBiaXQKICAgICAgICAgICAgICAgICAgICB0YWJsZS5pbnNlcnQoIHRTdWJMaW5lLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5zdWIoIHNCaXQsIG5TdGFydCAtIG5CaXRTdGFydCArIDEgKSwKICAgICAgICAgICAgICAgICAgICAgICAgdEJpdFsyXSwgdEJpdFszXQogICAgICAgICAgICAgICAgICAgIH0gKQogICAgICAgICAgICAgICAgICAgIC0tYXNzZXJ0KCBsaW5lTGVuKCB0U3ViTGluZSApID09IChtYXRoLm1pbihuRW5kLCBuQml0RW5kKSAtIG5TdGFydCArIDEpICkKICAgICAgICAgICAgICAgIGVsc2VpZiBuQml0U3RhcnQgPj0gblN0YXJ0IGFuZCBuQml0RW5kID4gbkVuZCB0aGVuCiAgICAgICAgICAgICAgICAgICAgLS0gSW5jbHVkZSBiZWdpbm5pbmcgb2YgYml0CiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0U3ViTGluZSwgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuc3ViKCBzQml0LCAxLCBuRW5kIC0gbkJpdFN0YXJ0ICsgMSApLAogICAgICAgICAgICAgICAgICAgICAgICB0Qml0WzJdLCB0Qml0WzNdCiAgICAgICAgICAgICAgICAgICAgfSApCiAgICAgICAgICAgICAgICAgICAgLS1hc3NlcnQoIGxpbmVMZW4oIHRTdWJMaW5lICkgPT0gKG1hdGgubWluKG5FbmQsIG5CaXRFbmQpIC0gblN0YXJ0ICsgMSkgKQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIC0tIEluY2x1ZGUgbWlkZGxlIG9mIGJpdAogICAgICAgICAgICAgICAgICAgIHRhYmxlLmluc2VydCggdFN1YkxpbmUsIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLnN1Yiggc0JpdCwgblN0YXJ0IC0gbkJpdFN0YXJ0ICsgMSwgbkVuZCAtIG5CaXRTdGFydCArIDEgKSwKICAgICAgICAgICAgICAgICAgICAgICAgdEJpdFsyXSwgdEJpdFszXQogICAgICAgICAgICAgICAgICAgIH0gKQogICAgICAgICAgICAgICAgICAgIC0tYXNzZXJ0KCBsaW5lTGVuKCB0U3ViTGluZSApID09IChtYXRoLm1pbihuRW5kLCBuQml0RW5kKSAtIG5TdGFydCArIDEpICkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICAgICAgbkJpdFN0YXJ0ID0gbkJpdEVuZCArIDEKICAgICAgICBlbmQKICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdFN1YkxpbmUgKSA9PSAobkVuZCAtIG5TdGFydCArIDEpICkKICAgICAgICByZXR1cm4gdFN1YkxpbmUKICAgIGVuZAoKICAgIGxvY2FsIGZ1bmN0aW9uIGxpbmVKb2luKCB0TGluZTEsIHRMaW5lMiApCiAgICAgICAgbG9jYWwgdE5ld0xpbmUgPSB7fQogICAgICAgIGlmIHRMaW5lMVsjdExpbmUxXVsyXSA9PSB0TGluZTJbMV1bMl0gYW5kCiAgICAgICAgICAgdExpbmUxWyN0TGluZTFdWzNdID09IHRMaW5lMlsxXVszXSB0aGVuCiAgICAgICAgICAgIC0tIE1lcmdlIG1pZGRsZSBiaXRzCiAgICAgICAgICAgIGZvciBuPTEsI3RMaW5lMS0xIGRvCiAgICAgICAgICAgICAgICB0YWJsZS5pbnNlcnQoIHROZXdMaW5lLCB0TGluZTFbbl0gKQogICAgICAgICAgICBlbmQKICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0TmV3TGluZSwgewogICAgICAgICAgICAgICAgdExpbmUxWyN0TGluZTFdWzFdIC4uIHRMaW5lMlsxXVsxXSwKICAgICAgICAgICAgICAgIHRMaW5lMlsxXVsyXSwgdExpbmUyWzFdWzNdCiAgICAgICAgICAgIH0gKQogICAgICAgICAgICBmb3Igbj0yLCN0TGluZTIgZG8KICAgICAgICAgICAgICAgIHRhYmxlLmluc2VydCggdE5ld0xpbmUsIHRMaW5lMltuXSApCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdE5ld0xpbmUgKSA9PSBsaW5lTGVuKHRMaW5lMSkgKyBsaW5lTGVuKHRMaW5lMikgKQogICAgICAgIGVsc2UKICAgICAgICAgICAgLS0gSnVzdCBjb25jYXRlbmF0ZQogICAgICAgICAgICBmb3Igbj0xLCN0TGluZTEgZG8KICAgICAgICAgICAgICAgIHRhYmxlLmluc2VydCggdE5ld0xpbmUsIHRMaW5lMVtuXSApCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBmb3Igbj0xLCN0TGluZTIgZG8KICAgICAgICAgICAgICAgIHRhYmxlLmluc2VydCggdE5ld0xpbmUsIHRMaW5lMltuXSApCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdE5ld0xpbmUgKSA9PSBsaW5lTGVuKHRMaW5lMSkgKyBsaW5lTGVuKHRMaW5lMikgKQogICAgICAgIGVuZAogICAgICAgIHJldHVybiB0TmV3TGluZQogICAgZW5kCgogICAgbG9jYWwgZnVuY3Rpb24gcmVkcmF3KCkKICAgICAgICBmb3Igbj0xLG5IZWlnaHQgZG8KICAgICAgICAgICAgcmVkcmF3TGluZSggbiApCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBsb2NhbCB3aW5kb3cgPSB7fQoKICAgIC0tIFRlcm1pbmFsIGltcGxlbWVudGF0aW9uCiAgICBmdW5jdGlvbiB3aW5kb3cud3JpdGUoIHNUZXh0ICkKICAgICAgICBsb2NhbCBuTGVuID0gc3RyaW5nLmxlbiggc1RleHQgKQogICAgICAgIGxvY2FsIG5TdGFydCA9IG5DdXJzb3JYCiAgICAgICAgbG9jYWwgbkVuZCA9IG5TdGFydCArIG5MZW4gLSAxCiAgICAgICAgaWYgbkN1cnNvclkgPj0gMSBhbmQgbkN1cnNvclkgPD0gbkhlaWdodCB0aGVuCiAgICAgICAgICAgIC0tIFdvcmsgb3V0IHdoZXJlIHRvIHB1dCBuZXcgbGluZQogICAgICAgICAgICAtLWFzc2VydCggbWF0aC5mbG9vcihuU3RhcnQpID09IG5TdGFydCApCiAgICAgICAgICAgIC0tYXNzZXJ0KCBtYXRoLmZsb29yKG5FbmQpID09IG5FbmQgKQogICAgICAgICAgICBpZiBuU3RhcnQgPD0gbldpZHRoIGFuZCBuRW5kID49IDEgdGhlbgogICAgICAgICAgICAgICAgLS0gQ29uc3RydWN0IG5ldyBsaW5lCiAgICAgICAgICAgICAgICBsb2NhbCB0TGluZSA9IHRMaW5lc1sgbkN1cnNvclkgXQogICAgICAgICAgICAgICAgaWYgblN0YXJ0ID09IDEgYW5kIG5FbmQgPT0gbldpZHRoIHRoZW4KICAgICAgICAgICAgICAgICAgICAtLSBFeGFjdGx5IHJlcGxhY2UgbGluZQogICAgICAgICAgICAgICAgICAgIHRMaW5lID0gewogICAgICAgICAgICAgICAgICAgICAgICB7IHNUZXh0LCBuVGV4dENvbG9yLCBuQmFja2dyb3VuZENvbG9yIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLS1hc3NlcnQoIGxpbmVMZW4oIHRMaW5lICkgPT0gbldpZHRoICkKICAgICAgICAgICAgICAgIGVsc2VpZiBuU3RhcnQgPD0gMSBhbmQgbkVuZCA+PSBuV2lkdGggdGhlbgogICAgICAgICAgICAgICAgICAgIC0tIE92ZXJ3cml0ZSBsaW5lIHdpdGggc3Vic2V0CiAgICAgICAgICAgICAgICAgICAgdExpbmUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RyaW5nLnN1Yiggc1RleHQsIDEgLSBuU3RhcnQgKyAxLCBuV2lkdGggLSBuU3RhcnQgKyAxICksIG5UZXh0Q29sb3IsIG5CYWNrZ3JvdW5kQ29sb3IgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdExpbmUgKSA9PSBuV2lkdGggKQogICAgICAgICAgICAgICAgZWxzZWlmIG5TdGFydCA8PSAxIHRoZW4KICAgICAgICAgICAgICAgICAgICAtLSBPdmVyd3JpdGUgYmVnaW5uaW5nIG9mIGxpbmUKICAgICAgICAgICAgICAgICAgICB0TGluZSA9IGxpbmVKb2luKAogICAgICAgICAgICAgICAgICAgICAgICB7IHsgc3RyaW5nLnN1Yiggc1RleHQsIDEgLSBuU3RhcnQgKyAxICksIG5UZXh0Q29sb3IsIG5CYWNrZ3JvdW5kQ29sb3IgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3ViKCB0TGluZSwgbkVuZCArIDEsIG5XaWR0aCApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIC0tYXNzZXJ0KCBsaW5lTGVuKCB0TGluZSApID09IG5XaWR0aCApCiAgICAgICAgICAgICAgICBlbHNlaWYgbkVuZCA+PSBuV2lkdGggdGhlbgogICAgICAgICAgICAgICAgICAgIC0tIE92ZXJ3cml0ZSBlbmQgb2YgbGluZQogICAgICAgICAgICAgICAgICAgIHRMaW5lID0gbGluZUpvaW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdWIoIHRMaW5lLCAxLCBuU3RhcnQgLSAxICksCiAgICAgICAgICAgICAgICAgICAgICAgIHsgeyBzdHJpbmcuc3ViKCBzVGV4dCwgMSwgbldpZHRoIC0gblN0YXJ0ICsgMSApLCBuVGV4dENvbG9yLCBuQmFja2dyb3VuZENvbG9yIH0gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdExpbmUgKSA9PSBuV2lkdGggKQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIC0tIE92ZXJ3cml0ZSBtaWRkbGUgb2YgbGluZQogICAgICAgICAgICAgICAgICAgIHRMaW5lID0gbGluZUpvaW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVKb2luKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN1YiggdExpbmUsIDEsIG5TdGFydCAtIDEgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyBzVGV4dCwgblRleHRDb2xvciwgbkJhY2tncm91bmRDb2xvciB9IH0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN1YiggdExpbmUsIG5FbmQgKyAxLCBuV2lkdGggKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAtLWFzc2VydCggbGluZUxlbiggdExpbmUgKSA9PSBuV2lkdGggKQogICAgICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAgICAgLS0gU3RvcmUgYW5kIHJlZHJhdyBuZXcgbGluZQogICAgICAgICAgICAgICAgdExpbmVzWyBuQ3Vyc29yWSBdID0gdExpbmUKICAgICAgICAgICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgICAgICAgICByZWRyYXdMaW5lKCBuQ3Vyc29yWSApCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCgogICAgICAgIC0tIE1vdmUgYW5kIHJlZHJhdyBjdXJzb3IKICAgICAgICBuQ3Vyc29yWCA9IG5FbmQgKyAxCiAgICAgICAgaWYgYlZpc2libGUgdGhlbgogICAgICAgICAgICB1cGRhdGVDdXJzb3JDb2xvcigpCiAgICAgICAgICAgIHVwZGF0ZUN1cnNvclBvcygpCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBmdW5jdGlvbiB3aW5kb3cuY2xlYXIoKQogICAgICAgIGxvY2FsIHRFbXB0eSA9IHsgeyBzRW1wdHksIG5UZXh0Q29sb3IsIG5CYWNrZ3JvdW5kQ29sb3IgfSB9CiAgICAgICAgZm9yIHk9MSxuSGVpZ2h0IGRvCiAgICAgICAgICAgIHRMaW5lc1t5XSA9IHRFbXB0eQogICAgICAgIGVuZAogICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgcmVkcmF3KCkKICAgICAgICAgICAgdXBkYXRlQ3Vyc29yQ29sb3IoKQogICAgICAgICAgICB1cGRhdGVDdXJzb3JQb3MoKQogICAgICAgIGVuZAogICAgZW5kCgogICAgZnVuY3Rpb24gd2luZG93LmNsZWFyTGluZSgpCiAgICAgICAgaWYgbkN1cnNvclkgPj0gMSBhbmQgbkN1cnNvclkgPD0gbkhlaWdodCB0aGVuCiAgICAgICAgICAgIHRMaW5lc1sgbkN1cnNvclkgXSA9IHsgeyBzRW1wdHksIG5UZXh0Q29sb3IsIG5CYWNrZ3JvdW5kQ29sb3IgfSB9CiAgICAgICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgICAgIHJlZHJhd0xpbmUoIG5DdXJzb3JZICkKICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnNvckNvbG9yKCkKICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnNvclBvcygpCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCgogICAgZnVuY3Rpb24gd2luZG93LmdldEN1cnNvclBvcygpCiAgICAgICAgcmV0dXJuIG5DdXJzb3JYLCBuQ3Vyc29yWQogICAgZW5kCgogICAgZnVuY3Rpb24gd2luZG93LnNldEN1cnNvclBvcyggeCwgeSApCiAgICAgICAgbkN1cnNvclggPSBtYXRoLmZsb29yKCB4ICkKICAgICAgICBuQ3Vyc29yWSA9IG1hdGguZmxvb3IoIHkgKQogICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgdXBkYXRlQ3Vyc29yUG9zKCkKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5zZXRDdXJzb3JCbGluayggYmxpbmsgKQogICAgICAgIGJDdXJzb3JCbGluayA9IGJsaW5rCiAgICAgICAgaWYgYlZpc2libGUgdGhlbgogICAgICAgICAgICB1cGRhdGVDdXJzb3JCbGluaygpCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBmdW5jdGlvbiB3aW5kb3cuaXNDb2xvcigpCiAgICAgICAgcmV0dXJuIHBhcmVudC5pc0NvbG9yKCkKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5pc0NvbG91cigpCiAgICAgICAgcmV0dXJuIHBhcmVudC5pc0NvbG9yKCkKICAgIGVuZAoKICAgIGxvY2FsIGZ1bmN0aW9uIHNldFRleHRDb2xvciggY29sb3IgKQogICAgICAgIGlmIG5vdCBwYXJlbnQuaXNDb2xvcigpIHRoZW4KICAgICAgICAgICAgaWYgY29sb3Igfj0gY29sb3JzLndoaXRlIGFuZCBjb2xvciB+PSBjb2xvcnMuYmxhY2sgdGhlbgogICAgICAgICAgICAgICAgZXJyb3IoICJDb2xvdXIgbm90IHN1cHBvcnRlZCIsIDMgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBuVGV4dENvbG9yID0gY29sb3IKICAgICAgICBpZiBiVmlzaWJsZSB0aGVuCiAgICAgICAgICAgIHVwZGF0ZUN1cnNvckNvbG9yKCkKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5zZXRUZXh0Q29sb3IoIGNvbG9yICkKICAgICAgICBzZXRUZXh0Q29sb3IoIGNvbG9yICkKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5zZXRUZXh0Q29sb3VyKCBjb2xvciApCiAgICAgICAgc2V0VGV4dENvbG9yKCBjb2xvciApCiAgICBlbmQKCiAgICBsb2NhbCBmdW5jdGlvbiBzZXRCYWNrZ3JvdW5kQ29sb3IoIGNvbG9yICkKICAgICAgICBpZiBub3QgcGFyZW50LmlzQ29sb3IoKSB0aGVuCiAgICAgICAgICAgIGlmIGNvbG9yIH49IGNvbG9ycy53aGl0ZSBhbmQgY29sb3Igfj0gY29sb3JzLmJsYWNrIHRoZW4KICAgICAgICAgICAgICAgIGVycm9yKCAiQ29sb3VyIG5vdCBzdXBwb3J0ZWQiLCAzICkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgICAgbkJhY2tncm91bmRDb2xvciA9IGNvbG9yCiAgICBlbmQKCiAgICBmdW5jdGlvbiB3aW5kb3cuc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvciApCiAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvciApCiAgICBlbmQKCiAgICBmdW5jdGlvbiB3aW5kb3cuc2V0QmFja2dyb3VuZENvbG91ciggY29sb3IgKQogICAgICAgIHNldEJhY2tncm91bmRDb2xvciggY29sb3IgKQogICAgZW5kCgogICAgZnVuY3Rpb24gd2luZG93LmdldFNpemUoKQogICAgICAgIHJldHVybiBuV2lkdGgsIG5IZWlnaHQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5zY3JvbGwoIG4gKQogICAgICAgIGlmIG4gfj0gMCB0aGVuCiAgICAgICAgICAgIGxvY2FsIHROZXdMaW5lcyA9IHt9CiAgICAgICAgICAgIGxvY2FsIHRFbXB0eSA9IHsgeyBzRW1wdHksIG5UZXh0Q29sb3IsIG5CYWNrZ3JvdW5kQ29sb3IgfSB9CiAgICAgICAgICAgIGZvciBuZXdZPTEsbkhlaWdodCBkbwogICAgICAgICAgICAgICAgbG9jYWwgeSA9IG5ld1kgKyBuCiAgICAgICAgICAgICAgICBpZiB5ID49IDEgYW5kIHkgPD0gbkhlaWdodCB0aGVuCiAgICAgICAgICAgICAgICAgICAgdE5ld0xpbmVzW25ld1ldID0gdExpbmVzW3ldCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdE5ld0xpbmVzW25ld1ldID0gdEVtcHR5CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIHRMaW5lcyA9IHROZXdMaW5lcwogICAgICAgICAgICBpZiBiVmlzaWJsZSB0aGVuCiAgICAgICAgICAgICAgICByZWRyYXcoKQogICAgICAgICAgICAgICAgdXBkYXRlQ3Vyc29yQ29sb3IoKQogICAgICAgICAgICAgICAgdXBkYXRlQ3Vyc29yUG9zKCkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICAtLSBPdGhlciBmdW5jdGlvbnMKICAgIGZ1bmN0aW9uIHdpbmRvdy5zZXRWaXNpYmxlKCBiVmlzICkKICAgICAgICBpZiBiVmlzaWJsZSB+PSBiVmlzIHRoZW4KICAgICAgICAgICAgYlZpc2libGUgPSBiVmlzCiAgICAgICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgICAgIHdpbmRvdy5yZWRyYXcoKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5yZWRyYXcoKQogICAgICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICAgICAgcmVkcmF3KCkKICAgICAgICAgICAgdXBkYXRlQ3Vyc29yQmxpbmsoKQogICAgICAgICAgICB1cGRhdGVDdXJzb3JDb2xvcigpCiAgICAgICAgICAgIHVwZGF0ZUN1cnNvclBvcygpCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBmdW5jdGlvbiB3aW5kb3cucmVzdG9yZUN1cnNvcigpCiAgICAgICAgaWYgYlZpc2libGUgdGhlbgogICAgICAgICAgICB1cGRhdGVDdXJzb3JCbGluaygpCiAgICAgICAgICAgIHVwZGF0ZUN1cnNvckNvbG9yKCkKICAgICAgICAgICAgdXBkYXRlQ3Vyc29yUG9zKCkKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHdpbmRvdy5nZXRQb3NpdGlvbigpCiAgICAgICAgcmV0dXJuIG5YLCBuWQogICAgZW5kCgogICAgZnVuY3Rpb24gd2luZG93LnJlcG9zaXRpb24oIG5OZXdYLCBuTmV3WSwgbk5ld1dpZHRoLCBuTmV3SGVpZ2h0ICkKICAgICAgICBuWCA9IG5OZXdYCiAgICAgICAgblkgPSBuTmV3WQogICAgICAgIGlmIG5OZXdXaWR0aCBhbmQgbk5ld0hlaWdodCB0aGVuCiAgICAgICAgICAgIHNFbXB0eSA9IHN0cmluZy5yZXAoICIgIiwgbk5ld1dpZHRoICkKICAgICAgICAgICAgbG9jYWwgdE5ld0xpbmVzID0ge30KICAgICAgICAgICAgbG9jYWwgdEVtcHR5ID0geyB7IHNFbXB0eSwgblRleHRDb2xvciwgbkJhY2tncm91bmRDb2xvciB9IH0KICAgICAgICAgICAgZm9yIHk9MSxuTmV3SGVpZ2h0IGRvCiAgICAgICAgICAgICAgICBpZiB5ID4gbkhlaWdodCB0aGVuCiAgICAgICAgICAgICAgICAgICAgdE5ld0xpbmVzW3ldID0gdEVtcHR5CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgbk5ld1dpZHRoID09IG5XaWR0aCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHROZXdMaW5lc1t5XSA9IHRMaW5lc1t5XQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiBuTmV3V2lkdGggPCBuV2lkdGggdGhlbgogICAgICAgICAgICAgICAgICAgICAgICB0TmV3TGluZXNbeV0gPSBsaW5lU3ViKCB0TGluZXNbeV0sIDEsIG5OZXdXaWR0aCApCiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB0TmV3TGluZXNbeV0gPSBsaW5lSm9pbiggdExpbmVzW3ldLCB7IHsgc3RyaW5nLnN1Yiggc0VtcHR5LCBuV2lkdGggKyAxLCBuTmV3V2lkdGggKSwgblRleHRDb2xvciwgbkJhY2tncm91bmRDb2xvciB9IH0gKQogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBuV2lkdGggPSBuTmV3V2lkdGgKICAgICAgICAgICAgbkhlaWdodCA9IG5OZXdIZWlnaHQKICAgICAgICAgICAgdExpbmVzID0gdE5ld0xpbmVzCiAgICAgICAgZW5kCiAgICAgICAgaWYgYlZpc2libGUgdGhlbgogICAgICAgICAgICB3aW5kb3cucmVkcmF3KCkKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGlmIGJWaXNpYmxlIHRoZW4KICAgICAgICB3aW5kb3cucmVkcmF3KCkKICAgIGVuZAogICAgcmV0dXJuIHdpbmRvdwplbmQ=","isDir":false,"name":"window","size":0},"root/autorun":{"children":[".ignoreme"],"isDir":true,"name":"autorun","parents":["/root","/root/autorun"],"size":0},"root/autorun/.ignoreme":{"data":"LS1bWwpBbHJpZ2h0IHRoZW4sIGRvbid0IGlnbm9yZSBtZS4gVGhpcyBmaWxlIGlzIHRvIGVuc3VyZSB0aGUgZXhpc3RhbmNlIG9mIHRoZSAiYXV0b3J1biIgZm9sZGVyLCBmaWxlcyBwbGFjZWQgaW4gdGhpcyBmb2xkZXIKdXNpbmcgcmVzb3VyY2UgcGFja3Mgd2lsbCBhbHdheXMgcnVuIHdoZW4gY29tcHV0ZXJzIHN0YXJ0dXAuCl1d","isDir":false,"name":".ignoreme","size":0},"root/help":{"children":["adventure","alias","apis","bg","bit","bundled","cd","changelog","chat","clear","colors","colours","copy","coroutine","craft","credits","dance","delete","disk","dj","drive","drives","earth","edit","eject","equip","events","excavate","exit","falling","fg","fs","go","gps","gpsapi","hello","help","helpapi","http","id","intro","io","keys","label","list","lua","math","mkdir","modems","monitor","monitors","move","multishell","os","paint","paintutils","parallel","pastebin","peripheral","peripherals","printers","programming","programs","reboot","redirection","rednet","redstone","redstoneapi","refuel","rename","repeat","rs","shell","shellapi","shutdown","sleep","string","table","term","textutils","time","tunnel","turn","turtle","type","unequip","vector","whatsnew","window","workbench","worm"],"isDir":true,"name":"help","parents":["/root","/root/help"],"size":0},"root/help/adventure":{"data":"YWR2ZW50dXJlIGlzIGEgdGV4dCBhZHZlbnR1cmUgZ2FtZSBmb3IgQ3JhZnRPUy4gVG8gbmF2aWdhdGUgYXJvdW5kIHRoZSB3b3JsZCBvZiBhZHZlbnR1cmUsIHR5cGUgc2ltcGxlIGluc3RydWN0aW9ucyB0byB0aGUgaW50ZXJwcmV0ZXIsIGZvciBleGFtcGxlOiAiZ28gbm9ydGgiLCAicHVuY2ggdHJlZSIsICJjcmFmdCBwbGFua3MiLCAibWluZSBjb2FsIHdpdGggcGlja2F4ZSIsICJoaXQgY3JlZXBlciB3aXRoIHN3b3JkIg==","isDir":false,"name":"adventure","size":0},"root/help/alias":{"data":"YWxpYXMgYXNzaWducyBzaGVsbCBjb21tYW5kcyB0byBydW4gb3RoZXIgcHJvZ3JhbXMuCgpleDoKImFsaWFzIGRpciBscyIgd2lsbCBtYWtlIHRoZSAiZGlyIiBjb21tYW5kIHJ1biB0aGUgImxzIiBwcm9ncmFtCiJhbGlhcyBkaXIiIHdpbGwgcmVtb3ZlIHRoZSBhbGlhcyBzZXQgb24gImRpciIKImFsaWFzIiB3aWxsIGxpc3QgYWxsIGN1cnJlbnQgYWxpYXNlcy4=","isDir":false,"name":"alias","size":0},"root/help/apis":{"data":"YXBpcyBsaXN0cyB0aGUgY3VycmVudGx5IGxvYWRlZCBBUElzIGF2YWlsYWJsZSB0byBwcm9ncmFtcyBpbiBDcmFmdE9TLgoKVHlwZSAiaGVscCA8YXBpPiIgdG8gc2VlIGhlbHAgZm9yIGEgc3BlY2lmaWMgYXBpLgpDYWxsIG9zLmxvYWRBUEkoIHBhdGggKSB0byBsb2FkIGV4dHJhIGFwaXMu","isDir":false,"name":"apis","size":0},"root/help/bg":{"data":"YmcgaXMgYSBwcm9ncmFtIGZvciBBZHZhbmNlZCBDb21wdXRlcnMgd2hpY2ggb3BlbnMgYSBuZXcgdGFiIGluIHRoZSBiYWNrZ3JvdW5kLgoKZXg6CiJiZyIgd2lsbCBvcGVuIGEgYmFja2dyb3VuZCB0YWIgcnVubmluZyB0aGUgc2hlbGwKImJnIHdvcm0iIHdpbGwgb3BlbiBhIGJhY2tncm91bmQgdGFiIHJ1bm5pbmcgdGhlICJ3b3JtIiBwcm9ncmFt","isDir":false,"name":"bg","size":0},"root/help/bit":{"data":"RnVuY3Rpb25zIGluIHRoZSBiaXQgbWFuaXB1bGF0aW9uIEFQSToKYml0LmJub3QobikgICAgICAgICAgLS0gYml0d2lzZSBub3QgKH5uKQpiaXQuYmFuZChtLCBuKSAgICAgICAtLSBiaXR3aXNlIGFuZCAobSAmIG4pCmJpdC5ib3IobSwgbikgICAgICAgIC0tIGJpdHdpc2Ugb3IgKG0gfCBuKQpiaXQuYnhvcihtLCBuKSAgICAgICAtLSBiaXR3aXNlIHhvciAobSBeIG4pCmJpdC5icnNoaWZ0KG4sIGJpdHMpIC0tIHJpZ2h0IHNoaWZ0IChuID4+IGJpdHMpCmJpdC5ibHNoaWZ0KG4sIGJpdHMpIC0tIGxlZnQgc2hpZnQgKG4gPDwgYml0cyk=","isDir":false,"name":"bit","size":0},"root/help/bundled":{"data":"VG8gc2V0IGJ1bmRsZWQgb3V0cHV0czoKYyA9IGNvbG9ycy5jb21iaW5lKCBjb2xvcnMucmVkLCBjb2xvcnMuYmx1ZSApCnJzLnNldEJ1bmRsZWRPdXRwdXQoICJsZWZ0IiwgYyApCgpjID0gY29sb3JzLmNvbWJpbmUoIGMsIGNvbG9ycy5ncmVlbiApCnJzLnNldEJ1bmRsZWRPdXRwdXQoICJsZWZ0IiwgYyApCgpjID0gY29sb3JzLnN1YnRyYWN0KCBjLCBjb2xvcnMuYmx1ZSApCnJzLnNldEJ1bmRsZWRPdXRwdXQoICJsZWZ0IiwgYyApCgpUbyBnZXQgYnVuZGxlZCBpbnB1dHM6CmMgPSBycy5nZXRCdW5kbGVkSW5wdXQoICJyaWdodCIgKQpyZWQgPSBjb2xvcnMudGVzdCggYywgY29sb3JzLnJlZCApCgpUeXBlICJoZWxwIGNvbG9ycyIgZm9yIHRoZSBsaXN0IG9mIHdpcmUgY29sb3JzLg==","isDir":false,"name":"bundled","size":0},"root/help/cd":{"data":"Y2QgY2hhbmdlcyB0aGUgdGhlIGRpcmVjdG9yeSB5b3UncmUgaW4uCgpleDoKImNkIHJvbSIgd2lsbCBtb3ZlIHRvICJyb20iIGZvbGRlci4KImNkIC4uIiB3aWxsIG1vdmUgdXAgb25lIGZvbGRlci4KImNkIC8iIHdpbGwgbW92ZSB0byB0aGUgcm9vdC4=","isDir":false,"name":"cd","size":0},"root/help/changelog":{"data":"TmV3IEZlYXR1cmVzIGluIENvbXB1dGVyQ3JhZnQgMS42NToKCiogRml4ZWQgYSBtdWx0aXBsYXllci1vbmx5IGNyYXNoIHdpdGggdHVydGxlLnBsYWNlKCkKKiBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggaHR0cC5wb3N0KCkKKiBGaXhlZCBmcy5nZXREcml2ZSgpIHJldHVybmluZyBpbmNvcnJlY3QgcmVzdWx0cyBvbiByZW1vdGUgcGVyaXBoZXJhbHMKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNjQ6CgoqIFBvcnRlZCB0byBNaW5lY3JhZnQgMS43LjEwCiogTmV3IHR1cnRsZSBmdW5jdGlvbnM6IHR1cnRsZS5pbnNwZWN0KCksIHR1cnRsZS5pbnNwZWN0VXAoKSwgdHVydGxlLmluc3BlY3REb3duKCksIHR1cnRsZS5nZXRJdGVtRGV0YWlsKCkKKiBMb3RzIG9mIGJ1ZyBhbmQgY3Jhc2ggZml4ZXMsIGEgaHVnZSBzdGFiaWxpdHkgaW1wcm92ZW1lbnQgb3ZlciBwcmV2aW91cyB2ZXJzaW9ucwoKTmV3IEZlYXR1cmVzIGluIENvbXB1dGVyQ3JhZnQgMS42MzoKCiogVHVydGxlcyBjYW4gbm93IGJlIHBhaW50ZWQgd2l0aCBkeWVzLCBhbmQgY2xlYW5lZCB3aXRoIHdhdGVyIGJ1Y2tldHMKKiBBZGRlZCBhIG5ldyBnYW1lOiBSZWRpcmVjdGlvbiAtIENvbXB1dGVyQ3JhZnQgRWRpdGlvbgoqIFR1cnRsZSBsYWJlbCBuYW1lcGxhdGVzIG5vdyBvbmx5IHNob3cgd2hlbiB0aGUgVHVydGxlIGlzIG1vdXNlZC1vdmVyCiogVGhlIEhUVFAgQVBJIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgd2hpdGVsaXN0IG9mIHBlcm1pdHRlZCBkb21haW5zCiogaHR0cC5nZXQoKSBhbmQgaHR0cC5wb3N0KCkgbm93IGFjY2VwdCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgdGhlIHJlcXVlc3QgaGVhZGVycwoqIE5ldyBmcyBmdW5jdGlvbjogZnMuZ2V0RGlyKCBwYXRoICkKKiBGaXhlZCBzb21lIGJ1Z3MKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNjI6CgoqIEFkZGVkIElSQy1zdHlsZSBjb21tYW5kcyB0byB0aGUgImNoYXQiIHByb2dyYW0KKiBGaXhlZCBzb21lIGJ1Z3MgYW5kIGNyYXNoZXMKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNjoKCiogQWRkZWQgUG9ja2V0IENvbXB1dGVycwoqIEFkZGVkIGEgbXVsdGktdGFza2luZyBzeXN0ZW0gZm9yIEFkdmFuY2VkIENvbXB1dGVycyBhbmQgVHVydGxlcwoqIFR1cnRsZXMgY2FuIG5vdyBzd2FwIG91dCB0aGVpciB0b29scyBhbmQgcGVyaXBoZXJhbHMgYXQgcnVudGltZQoqIFR1cnRsZXMgY2FuIG5vdyBjYXJyeSB0d28gdG9vbHMgb3IgcGVyaXBoZXJhbHMgYXQgb25jZSBpbiBhbnkgY29tYmluYXRpb24KKiBUdXJ0bGVzIGFuZCBDb21wdXRlcnMgY2FuIG5vdyBiZSBsYWJlbGxlZCB1c2luZyBOYW1lIFRhZ3MgYW5kIEFudmlscwoqIEFkZGVkIGEgY29uZmlndXJhYmxlIGZ1ZWwgbGltaXQgZm9yIFR1cnRsZXMKKiBBZGRlZCBob3N0bmFtZXMsIHByb3RvY29scyBhbmQgbG9uZyBkaXN0YW5jZSByb3V0aW5nIHRvIHRoZSByZWRuZXQgQVBJCiogQWRkZWQgYSBwZWVyLXRvLXBlZXIgY2hhdCBwcm9ncmFtIHRvIGRlbW9uc3RyYXRlIG5ldyByZWRuZXQgY2FwYWJpbGl0aWVzCiogQWRkZWQgYSBuZXcgZ2FtZSwgb25seSBvbiBQb2NrZXQgQ29tcHV0ZXJzOiAiZmFsbGluZyIgYnkgR29waGVyQVRMCiogRmlsZSBzeXN0ZW0gY29tbWFuZHMgaW4gdGhlIHNoZWxsIG5vdyBhY2NlcHQgd2lsZGNhcmQgYXJndW1lbnRzCiogVGhlIHNoZWxsIG5vdyBhY2NlcHRzIGxvbmcgYXJndW1lbnRzIGluIHF1b3RlcwoqIFRlcm1pbmFsIHJlZGlyZWN0aW9uIG5vdyBubyBsb25nZXIgdXNlcyBhIHN0YWNrLWJhc2VkIHN5c3RlbS4gSW5zdGVhZDogdGVybS5jdXJyZW50KCkgZ2V0cyB0aGUgY3VycmVudCB0ZXJtaW5hbCBvYmplY3QgYW5kIHRlcm0ucmVkaXJlY3QoKSByZXBsYWNlcyBpdC4gdGVybS5yZXN0b3JlKCkgaGFzIGJlZW4gcmVtb3ZlZC4KKiBBZGRlZCBhIG5ldyBXaW5kb3dpbmcgQVBJIGZvciBhZGRyZXNzaW5nIHN1Yi1hcmVhcyBvZiB0aGUgdGVybWluYWwKKiBOZXcgcHJvZ3JhbXM6IGZnLCBiZywgbXVsdGlzaGVsbCwgY2hhdCwgcmVwZWF0LCByZWRzdG9uZSwgZXF1aXAsIHVuZXF1aXAKKiBJbXByb3ZlZCBwcm9ncmFtczogY29weSwgbW92ZSwgZGVsZXRlLCByZW5hbWUsIHBhaW50LCBzaGVsbAoqIFJlbW92ZWQgcHJvZ3JhbXM6IHJlZHNldCwgcmVkcHJvYmUsIHJlZHB1bHNlCiogTmV3IEFQSXM6IHdpbmRvdywgbXVsdGlzaGVsbAoqIE5ldyB0dXJ0bGUgZnVuY3Rpb25zOiB0dXJ0bGUuZXF1aXBMZWZ0KCkgYW5kIHR1cnRsZS5lcXVpcFJpZ2h0KCkKKiBOZXcgcGVyaXBoZXJhbCBmdW5jdGlvbnM6IHBlcmlwaGVyYWwuZmluZCggW3R5cGVdICkKKiBOZXcgcmVkbmV0IGZ1bmN0aW9uczogcmVkbmV0Lmhvc3QoIHByb3RvY29sLCBob3N0bmFtZSApLCByZWRuZXQudW5ob3N0KCBwcm90b2NvbCApLCByZWRuZXQubG9jYXRlKCBwcm90b2NvbCwgW2hvc3RuYW1lXSApCiogTmV3IGZzIGZ1bmN0aW9uOiBmcy5maW5kKCB3aWxkY2FyZCApCiogTmV3IHNoZWxsIGZ1bmN0aW9uczogc2hlbGwub3BlblRhYigpLCBzaGVsbC5zd2l0Y2hUYWIoIFtudW1iZXJdICkKKiBOZXcgZXZlbnQgInRlcm1fcmVzaXplIiBmaXJlZCB3aGVuIHRoZSBzaXplIG9mIGEgdGVybWluYWwgY2hhbmdlcwoqIEltcHJvdmVkIHJlZG5ldCBmdW5jdGlvbnM6IHJlZG5ldC5zZW5kKCksIHJlZG5ldC5icm9hZGNhc3QoKSBhbmQgcmVkbmV0LnJlY2VpdmUoKSBub3cgdGFrZSBvcHRpb25hbCBwcm90b2NvbCBwYXJhbWV0ZXJzCiogdHVydGxlLmNyYWZ0KDApIGFuZCB0dXJ0bGUucmVmdWVsKDApIG5vdyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkIHJlY2lwZSBvciBmdWVsIGl0ZW0sIGJ1dCBkbyBub3QgY3JhZnQgb2YgcmVmdWVsIGFueXRoaW5nCiogdHVydGxlLnN1Y2soIFtsaW1pdF0gKSBjYW4gbm93IGJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyBwaWNrZWQgdXAKKiBVc2VycyBvZiB0dXJ0bGUuZGlnKCkgYW5kIHR1cnRsZS5hdHRhY2soKSBjYW4gbm93IHNwZWNpZnkgd2hpY2ggc2lkZSBvZiB0aGUgdHVydGxlIHRvIGxvb2sgZm9yIGEgdG9vbCB0byB1c2UgKGJ5IGRlZmF1bHQsIGJvdGggd2lsbCBiZSBjb25zaWRlcmVkKQoqIHRleHR1dGlscy5zZXJpYWxpc2UoIHRleHQgKSBub3cgcHJvZHVjZXMgaHVtYW4tcmVhZGFibGUgb3V0cHV0CiogUmVmYWN0b3JlZCBtb3N0IG9mIHRoZSBjb2RlYmFzZSBhbmQgZml4ZWQgbWFueSBvbGQgYnVncyBhbmQgaW5zdGFiaWxpdGllcywgdHVydGxlcyBzaG91bGQgbmV2ZXIgZXZlciBsb3NlIHRoZWlyIGNvbnRlbnQgbm93CiogRml4ZWQgdGhlICJ0dXJ0bGVfaW52ZW50b3J5IiBldmVudCBmaXJpbmcgd2hlbiBpdCBzaG91bGRuJ3QgaGF2ZQoqIEFkZGVkIGVycm9yIG1lc3NhZ2VzIHRvIG1hbnkgbW9yZSB0dXJ0bGUgZnVuY3Rpb25zIGFmdGVyIHRoZXkgcmV0dXJuIGZhbHNlCiogRG9jdW1lbnRlZCBhbGwgbmV3IHByb2dyYW1zIGFuZCBBUEkgY2hhbmdlcyBpbiB0aGUgImhlbHAiIHN5c3RlbQoKTmV3IEZlYXR1cmVzIGluIENvbXB1dGVyQ3JhZnQgMS41ODoKCiogRml4ZWQgYSBsb25nIHN0YW5kaW5nIGJ1ZyB3aGVyZSB0dXJ0bGVzIGNvdWxkIGxvc2UgdGhlaXIgaWRlbnRpZnkgaWYgdGhleSB0cmF2ZWwgdG9vIGZhciBhd2F5CiogRml4ZWQgdXNlIG9mIGRlcHJlY2F0ZWQgY29kZSwgZW5zdXJpbmcgbW9kIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIE1pbmVjcmFmdCBGb3JnZSwgYW5kIHdvcmxkIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgTWluZWNyYWZ0CgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjU3OgoKKiBQb3J0ZWQgdG8gTWluZWNyYWZ0IDEuNi40CiogQWRkZWQgdHdvIG5ldyBUcmVhc3VyZSBEaXNrczogQ29ud2F54oCZcyBHYW1lIG9mIExpZmUgYnkgdmlsc29sIGFuZCBQcm90ZWN0b3IgYnkgZnJlZHRoZWFkCiogRml4ZWQgYSB2ZXJ5IG5hc3R5IGl0ZW0gZHVwbGljYXRpb24gYnVnCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjU2OgoKKiBBZGRlZCBUcmVhc3VyZSBEaXNrczogRmxvcHB5IERpc2tzIGluIGR1bmdlb25zIHdoaWNoIGNvbnRhaW4gaW50ZXJlc3RpbmcgY29tbXVuaXR5IG1hZGUgcHJvZ3JhbXMuIEZpbmQgdGhlbSBhbGwhCiogQWxsIHR1cnRsZSBmdW5jdGlvbnMgbm93IHJldHVybiBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIHdoZW4gdGhleSBmYWlsLgoqIFJlc291cmNlIFBhY2tzIHdpdGggTHVhIFByb2dyYW1zIGNhbiBub3cgYmUgZWRpdGVkIHdoZW4gZXh0cmFjdGVkIHRvIGEgZm9sZGVyLCBmb3IgZWFzaWVyIGVkaXRpbmcuCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjU1OgoKKiBQb3J0ZWQgdG8gTWluZWNyYWZ0IDEuNi4yCiogQWRkZWQgQWR2YW5jZWQgVHVydGxlcwoqIEFkZGVkICJ0dXJ0bGVfaW52ZW50b3J5IiBldmVudC4gRmlyZXMgd2hlbiBhbnkgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGludmVudG9yeSBvZiBhIHR1cnRsZQoqIEFkZGVkIG1pc3NpbmcgZnVuY3Rpb25zIGlvLmNsb3NlLCBpby5mbHVzaCwgaW8uaW5wdXQsIGlvLmxpbmVzLCBpby5vdXRwdXQKKiBUd2Vha2VkIHRoZSBzY3JlZW4gY29sb3VycyB1c2VkIGJ5IEFkdmFuY2VkIENvbXB1dGVycywgTW9uaXRvcnMgYW5kIFR1cnRsZXMKKiBBZGRlZCBuZXcgZmVhdHVyZXMgZm9yIFBlcmlwaGVyYWwgYXV0aG9ycwoqIEx1YSBwcm9ncmFtcyBjYW4gbm93IGJlIGluY2x1ZGVkIGluIFJlc291cmNlIFBhY2tzCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjUyOgoKKiBQb3J0ZWQgdG8gTWluZWNyYWZ0IDEuNS4xCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjUxOgoKKiBQb3J0ZWQgdG8gTWluZWNyYWZ0IDEuNQoqIEFkZGVkIFdpcmVkIE1vZGVtcwoqIEFkZGVkIE5ldHdvcmtpbmcgQ2FibGVzCiogTWFkZSBXaXJlbGVzcyBNb2RlbXMgbW9yZSBleHBlbnNpdmUgdG8gY3JhZnQKKiBOZXcgcmVkc3RvbmUgQVBJIGZ1bmN0aW9uczogZ2V0QW5hbG9nSW5wdXQoKSwgc2V0QW5hbG9nT3V0cHV0KCksIGdldEFuYWxvZ091dHB1dCgpCiogUGVyaXBoZXJhbHMgY2FuIG5vdyBiZSBjb250cm9sbGVkIHJlbW90ZWx5IG92ZXIgd2lyZWQgbmV0d29ya3MuIE5ldyBwZXJpcGhlcmFsIEFQSSBmdW5jdGlvbjogZ2V0TmFtZXMoKQoqIE5ldyBldmVudDogIm1vbml0b3JfcmVzaXplIiB3aGVuIHRoZSBzaXplIG9mIGEgbW9uaXRvciBjaGFuZ2VzCiogRXhjZXB0IGZvciBsYWJlbGxlZCBjb21wdXRlcnMgYW5kIHR1cnRsZXMsIENvbXB1dGVyQ3JhZnQgYmxvY2tzIG5vIGxvbmdlciBkcm9wIGl0ZW1zIGluIGNyZWF0aXZlIG1vZGUKKiBUaGUgcGljayBibG9jayBmdW5jdGlvbiB3b3JrcyBpbiBjcmVhdGl2ZSBtb2RlIG5vdyB3b3JrcyBmb3IgYWxsIENvbXB1dGVyQ3JhZnQgYmxvY2tzCiogQWxsIGJsb2NrcyBhbmQgaXRlbXMgbm93IHVzZSB0aGUgSURzIG51bWJlcnMgYXNzaWduZWQgYnkgRlRCIGJ5IGRlZmF1bHQKKiBGaXhlZCB0dXJ0bGVzIHNvbWV0aW1lcyBwbGFjaW5nIGJsb2NrcyB3aXRoIGluY29ycmVjdCBvcmllbnRhdGlvbnMKKiBGaXhlZCBXaXJlbGVzcyBtb2RlbXMgYmVpbmcgYWJsZSB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZW1zZWx2ZXMKKiBGaXhlZCB0dXJ0bGUuYXR0YWNrKCkgaGF2aW5nIGEgdmVyeSBzaG9ydCByYW5nZQoqIFZhcmlvdXMgYnVnZml4ZXMKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNToKCiogUmVkZXNpZ25lZCBXaXJlbGVzcyBNb2RlbXM7IHRoZXkgY2FuIG5vdyBzZW5kIGFuZCByZWNlaXZlIG9uIG11bHRpcGxlIGNoYW5uZWxzLCBpbmRlcGVuZGVudCBvZiB0aGUgY29tcHV0ZXIgSUQuIFRvIHVzZSB0aGVzZSBmZWF0dXJlcywgaW50ZXJmYWNlIHdpdGggbW9kZW0gcGVyaXBoZXJhbHMgZGlyZWN0bHkuIFRoZSByZWRuZXQgQVBJIHN0aWxsIGZ1bmN0aW9ucyBhcyBiZWZvcmUKKiBGbG9wcHkgRGlza3MgY2FuIG5vdyBiZSBkeWVkIHdpdGggbXVsdGlwbGUgZHllcywganVzdCBsaWtlIGFybW91cgoqIFRoZSAiZXhjYXZhdGUiIHByb2dyYW0gbm93IHJldGFpbnMgZnVlbCBpbiBpdCdzIGludmVudG9yeSwgc28gY2FuIHJ1biB1bmF0dGVuZGVkCiogdHVydGxlLnBsYWNlKCkgbm93IHRyaWVzIGFsbCBwb3NzaWJsZSBibG9jayBvcmllbnRhdGlvbnMgYmVmb3JlIGZhaWxpbmcKKiB0dXJ0bGUucmVmdWVsKDApIHJldHVybnMgdHJ1ZSBpZiBhIGZ1ZWwgaXRlbSBpcyBzZWxlY3RlZAoqIHR1cnRsZS5jcmFmdCgwKSByZXR1cm5zIHRydWUgaWYgdGhlIGludmVudG9yeSBpcyBhIHZhbGlkIHJlY2lwZQoqIFRoZSBpbi1nYW1lIGhlbHAgc3lzdGVtIG5vdyBoYXMgZG9jdW1lbnRhdGlvbiBmb3IgYWxsIHRoZSBwZXJpcGhlcmFscyBhbmQgdGhlaXIgbWV0aG9kcywgaW5jbHVkaW5nIHRoZSBuZXcgbW9kZW0gZnVuY3Rpb25hbGl0eQoqIEEgcm9tYW50aWMgc3VycHJpc2UKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNDg6CgoqIFBvcnRlZCB0byBNaW5lY3JhZnQgMS40LjYKKiBBZHZhbmNlZCBNb25pdG9ycyBub3cgZW1pdCBhICJtb25pdG9yX3RvdWNoIiBldmVudCB3aGVuIHJpZ2h0IGNsaWNrZWQKKiBBZHZhbmNlZCBNb25pdG9ycyBhcmUgbm93IGNoZWFwZXIgdG8gY3JhZnQKKiBUdXJ0bGVzIG5vdyBnZXQgc2xpZ2h0bHkgbGVzcyBmdWVsIGZyb20gaXRlbXMKKiBDb21wdXRlcnMgY2FuIG5vdyBpbnRlcmFjdCB3aXRoIENvbW1hbmQgQmxvY2tzIChpZiBlbmFibGVkIGluIENvbXB1dGVyQ3JhZnQuY2ZnKQoqIE5ldyBBUEkgZnVuY3Rpb246IG9zLmRheSgpCiogQSBjaHJpc3RtYXMgc3VycHJpc2UKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNDU6CgoqIEFkZGVkIEFkdmFuY2VkIENvbXB1dGVycwoqIEFkZGVkIEFkdmFuY2VkIE1vbml0b3JzCiogTmV3IHByb2dyYW06IHBhaW50IGJ5IG5pdHJvZ2VuZmluZ2VycwoqIE5ldyBBUEk6IHBhaW50dXRpbHMKKiBOZXcgdGVybSBmdW5jdGlvbnM6IHRlcm0uc2V0QmFja2dyb3VuZENvbG9yLCB0ZXJtLnNldFRleHRDb2xvciwgdGVybS5pc0NvbG9yCiogTmV3IHR1cnRsZSBmdW5jdGlvbjogdHVydGxlLnRyYW5zZmVyVG8KCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuNDM6CgoqIEFkZGVkIFByaW50ZWQgUGFnZXMKKiBBZGRlZCBQcmludGVkIEJvb2tzCiogRml4ZWQgaW5jb21wYXRpYmlsaXR5IHdpdGggRm9yZ2UgMjc1IGFuZCBhYm92ZQoqIExhYmVsbGVkIFR1cnRsZXMgbm93IGtlZXAgdGhlaXIgZnVlbCB3aGVuIGJyb2tlbgoKTmV3IEZlYXR1cmVzIGluIENvbXB1dGVyQ3JhZnQgMS40MjoKCiogUG9ydGVkIHRvIE1pbmVjcmFmdCAxLjMuMgoqIEFkZGVkIFByaW50ZXJzCiogRmxvcHB5IERpc2tzIGNhbiBiZSBkeWVkIGRpZmZlcmVudCBjb2xvdXJzCiogV2lyZWxlc3MgQ3JhZnR5IFR1cnRsZXMgY2FuIG5vdyBiZSBjcmFmdGVkCiogTmV3IHRleHR1cmVzCiogTmV3IGZvcmdlIGNvbmZpZyBmaWxlCiogQnVnIGZpeGVzCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjQ6CgoqIFBvcnRlZCB0byBGb3JnZSBNb2QgTG9hZGVyLiBDb21wdXRlckNyYWZ0IGNhbiBub3cgYmUgcmFuIGRpcmVjdGx5IGZyb20gdGhlIC56aXAgd2l0aG91dCBleHRyYWN0aW9uCiogQWRkZWQgRmFybWluZyBUdXJ0bGVzCiogQWRkZWQgRmVsbGluZyBUdXJ0bGVzCiogQWRkZWQgRGlnZ2luZyBUdXJ0bGVzCiogQWRkZWQgTWVsZWUgVHVydGxlcwoqIEFkZGVkIENyYWZ0eSBUdXJ0bGVzCiogQWRkZWQgMTQgbmV3IFR1cnRsZSBDb21iaW5hdGlvbnMgYWNjZXNzaWJsZSBieSBjb21iaW5pbmcgdGhlIHR1cnRsZSB1cGdyYWRlcyBhYm92ZQoqIExhYmVsbGVkIGNvbXB1dGVycyBhbmQgdHVydGxlcyBjYW4gbm93IGJlIGNyYWZ0ZWQgaW50byB0dXJ0bGVzIG9yIG90aGVyIHR1cnRsZSB0eXBlcyB3aXRob3V0IGxvc2luZyB0aGVpciBJRCwgbGFiZWwgYW5kIGRhdGEKKiBBZGRlZCBhICJUdXJ0bGUgVXBncmFkZSBBUEkiIGZvciBtb2QgZGV2ZWxvcGVycyB0byBjcmVhdGUgdGhlaXIgb3duIHRvb2xzIGFuZCBwZXJpcGhlcmFscyBmb3IgdHVydGxlcwoqIFR1cnRsZXMgY2FuIG5vdyBhdHRhY2sgZW50aXRpZXMgd2l0aCB0dXJ0bGUuYXR0YWNrKCksIGFuZCBjb2xsZWN0IHRoZWlyIGRyb3BwZWQgaXRlbXMKKiBUdXJ0bGVzIGNhbiBub3cgdXNlIHR1cnRsZS5wbGFjZSgpIHdpdGggYW55IGl0ZW0gdGhlIHBsYXllciBjYW4sIGFuZCBjYW4gaW50ZXJhY3Qgd2l0aCBlbnRpdGllcwoqIFR1cnRsZXMgY2FuIG5vdyBjcmFmdCBpdGVtcyB3aXRoIHR1cnRsZS5jcmFmdCgpCiogVHVydGxlcyBjYW4gbm93IHBsYWNlIGl0ZW1zIGludG8gaW52ZW50b3JpZXMgd2l0aCB0dXJ0bGUuZHJvcCgpCiogQ2hhbmdlZCB0aGUgYmVoYXZpb3VyIG9mIHR1cnRsZS5wbGFjZSgpIGFuZCB0dXJ0bGUuZHJvcCgpIHRvIG9ubHkgY29uc2lkZXIgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzbG90CiogVHVydGxlcyBjYW4gbm93IHBpY2sgdXAgaXRlbXMgZnJvbSB0aGUgZ3JvdW5kLCBvciBmcm9tIGludmVudG9yaWVzLCB3aXRoIHR1cnRsZS5zdWNrKCkKKiBUdXJ0bGVzIGNhbiBub3cgY29tcGFyZSBpdGVtcyBpbiB0aGVpciBpbnZlbnRvcmllcwoqIFR1cnRsZXMgY2FuIHBsYWNlIHNpZ25zIHdpdGggdGV4dCBvbiB0aGVtIHdpdGggdHVydGxlLnBsYWNlKCBbc2lnblRleHRdICkKKiBUdXJ0bGVzIG5vdyBvcHRpb25hbGx5IHJlcXVpcmUgZnVlbCBpdGVtcyB0byBtb3ZlLCBhbmQgY2FuIHJlZnVlbCB0aGVtc2VsdmVzCiogVGhlIHNpemUgb2YgdGhlIHRoZSB0dXJ0bGUgaW52ZW50b3J5IGhhcyBiZWVuIGluY3JlYXNlZCB0byAxNgoqIFRoZSBzaXplIG9mIHRoZSB0dXJ0bGUgc2NyZWVuIGhhcyBiZWVuIGluY3JlYXNlZAoqIE5ldyB0dXJ0bGUgZnVuY3Rpb25zOiB0dXJ0bGUuY29tcGFyZVRvKCBbc2xvdE51bV0gKSwgdHVydGxlLmNyYWZ0KCksIHR1cnRsZS5hdHRhY2soKSwgdHVydGxlLmF0dGFja1VwKCksIHR1cnRsZS5hdHRhY2tEb3duKCksIHR1cnRsZS5kcm9wVXAoKSwgdHVydGxlLmRyb3BEb3duKCksIHR1cnRsZS5nZXRGdWVsTGV2ZWwoKSwgdHVydGxlLnJlZnVlbCgpCiogTmV3IGRpc2sgZnVuY3Rpb246IGRpc2suZ2V0SUQoKQoqIE5ldyB0dXJ0bGUgcHJvZ3JhbXM6IGNyYWZ0LCByZWZ1ZWwKKiAiZXhjYXZhdGUiIHByb2dyYW0gbm93IG11Y2ggc21hcnRlcjogV2lsbCByZXR1cm4gaXRlbXMgdG8gYSBjaGVzdCB3aGVuIGZ1bGwsIGF0dGFjayBtb2JzLCBhbmQgcmVmdWVsIGl0c2VsZiBhdXRvbWF0aWNhbGx5CiogTmV3IEFQSToga2V5cwoqIEFkZGVkIG9wdGlvbmFsIEZsb3BweSBEaXNrIGFuZCBIYXJkIERyaXZlIHNwYWNlIGxpbWl0cyBmb3IgY29tcHV0ZXJzIGFuZCB0dXJ0bGVzCiogTmV3IGZzIGZ1bmN0aW9uOiBmcy5nZXRGcmVlU3BhY2UoIHBhdGggKSwgYWxzbyBmcy5nZXREcml2ZSgpIHdvcmtzIGFnYWluCiogVGhlIHNlbmQgYW5kIHJlY2VpdmUgcmFuZ2Ugb2Ygd2lyZWxlc3MgbW9kZW1zIG5vdyBpbmNyZWFzZXMgd2l0aCBhbHRpdHVkZSwgYWxsb3dpbmcgbG9uZyByYW5nZSBuZXR3b3JraW5nIGZyb20gaGlnaC1hbHRpdHVkZSBjb21wdXRlcnMgKGdyZWF0IGZvciBHUFMgbmV0d29ya3MpCiogaHR0cC5yZXF1ZXN0KCkgbm93IHN1cHBvcnRzIGh0dHBzOi8vIFVSTHMKKiBSaWdodCBjbGlja2luZyBhIERpc2sgRHJpdmUgd2l0aCBhIEZsb3BweSBEaXNrIG9yIGEgUmVjb3JkIHdoZW4gc25lYWtpbmcgd2lsbCBpbnNlcnQgdGhlIGl0ZW0gaW50byB0aGUgRGlzayBEcml2ZSBhdXRvbWF0aWNhbGx5CiogVGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgY29tcHV0ZXIgc2NyZWVuIGhhcyBiZWVuIGluY3JlYXNlZAoqIFNldmVyYWwgc3RhYmlsaXR5IGFuZCBzZWN1cml0eSBmaXhlcy4gTHVhSiBjYW4gbm93IG5vIGxvbmdlciBsZWF2ZSBkYW5nbGluZyB0aHJlYWRzIHdoZW4gYSBjb21wdXRlciBpcyB1bmxvYWRlZCwgdHVydGxlcyBjYW4gbm8gbG9uZ2VyIGJlIGRlc3Ryb3llZCBieSB0cmVlIGxlYXZlcyBvciB3YWxraW5nIG9mZiB0aGUgZWRnZSBvZiB0aGUgbG9hZGVkIG1hcC4gQ29tcHV0ZXJzIG5vIGxvbmdlciBjcmFzaCB3aGVuIHVzZWQgd2l0aCBSZWRQb3dlciBmcmFtZXMuCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjMxOgoKKiBQb3J0ZWQgdG8gTWluZWNyYWZ0IDEuMi4zCiogQWRkZWQgTW9uaXRvcnMgKHRoYW5rcyB0byBDbG91ZHkpCiogVXBkYXRlZCBMdWFKIHRvIGEgbmV3ZXIsIGxlc3MgbWVtb3J5IGh1bmdyeSB2ZXJzaW9uCiogcmVkbmV0X21lc3NhZ2UgZXZlbnQgbm93IGhhcyBhIHRoaXJkIHBhcmFtZXRlciwgImRpc3RhbmNlIiwgdG8gc3VwcG9ydCBwb3NpdGlvbiB0cmlhbmd1bGF0aW9uLgoqIE5ldyBwcm9ncmFtczogZ3BzLCBtb25pdG9yLCBwYXN0ZWJpbi4KKiBBZGRlZCBhIHNlY3JldCBwcm9ncmFtLiBVc2Ugd2l0aCBsYXJnZSBtb25pdG9ycyEKKiBOZXcgYXBpczogZ3BzLCB2ZWN0b3IKKiBOZXcgdHVydGxlIGZ1bmN0aW9uczogdHVydGxlLmNvbXBhcmUoKSwgdHVydGxlLmNvbXBhcmVVcCgpLCB0dXJ0bGUuY29tcGFyZURvd24oKSwgdHVydGxlLmRyb3AoIHF1YW50aXR5ICkKKiBOZXcgaHR0cCBmdW5jdGlvbnM6IGh0dHAucG9zdCgpLgoqIE5ldyB0ZXJtIGZ1bmN0aW9uczogdGVybS5yZWRpcmVjdCgpLCB0ZXJtLnJlc3RvcmUoKQoqIE5ldyB0ZXh0dXRpbHMgZnVuY3Rpb25zOiB0ZXh0dXRpbHMudXJsRW5jb2RlKCkKKiBOZXcgcmVkbmV0IGZ1bmN0aW9uczogcmVkbmV0LmlzT3BlbigpCiogTmV3IGNvbmZpZyBvcHRpb25zOiBtb2RlbV9yYW5nZSwgbW9kZW1fcmFuZ2VEdXJpbmdTdG9ybQoqIEJ1ZyBmaXhlcywgcHJvZ3JhbSB0d2Vha3MsIGFuZCBoZWxwIHVwZGF0ZXMKCk5ldyBGZWF0dXJlcyBpbiBDb21wdXRlckNyYWZ0IDEuMzoKCiogUG9ydGVkIHRvIE1pbmVjcmFmdCBGb3JnZQoqIEFkZGVkIFR1cnRsZXMKKiBBZGRlZCBXaXJlbGVzcyBNb2RlbXMKKiBBZGRlZCBNaW5pbmcgVHVydGxlcwoqIEFkZGVkIFdpcmVsZXNzIFR1cnRsZXMKKiBBZGRlZCBXaXJlbGVzcyBNaW5pbmcgVHVydGxlcwoqIENvbXB1dGVycyBhbmQgRGlzayBEcml2ZXMgbm8gbG9uZ2VyIGdldCBkZXN0cm95ZWQgYnkgd2F0ZXIuCiogQ29tcHV0ZXJzIGFuZCBUdXJ0bGVzIGNhbiBub3cgYmUgbGFiZWxsZWQgd2l0aCB0aGUgbGFiZWwgcHJvZ3JhbSwgYW5kIGxhYmVsbGVkIGRldmljZXMga2VlcCB0aGVpciBzdGF0ZSB3aGVuIGRlc3Ryb3llZC4KKiBDb21wdXRlcnMvVHVydGxlcyBjYW4gY29ubmVjdCB0byBhZGphY2VudCBkZXZpY2VzLCBhbmQgdHVybiB0aGVtIG9uIGFuZCBvZmYKKiBVc2VyIHByb2dyYW1zIG5vdyBnaXZlIGxpbmUgbnVtYmVycyBpbiB0aGVpciBlcnJvciBtZXNzYWdlcwoqIE5ldyBBUElzOiB0dXJ0bGUsIHBlcmlwaGVyYWwKKiBOZXcgcHJvZ3JhbXMgZm9yIHR1cnRsZXM6IHR1bm5lbCwgZXhjYXZhdGUsIGdvLCB0dXJuLCBkYW5jZQoqIE5ldyBvcyBmdW5jdGlvbnM6IG9zLmdldENvbXB1dGVyTGFiZWwoKSwgb3Muc2V0Q29tcHV0ZXJMYWJlbCgpCiogQWRkZWQgImZpbHRlciIgcGFyYW1ldGVyIHRvIG9zLnB1bGxFdmVudCgpCiogTmV3IHNoZWxsIGZ1bmN0aW9uOiBzaGVsbC5nZXRDdXJyZW50UHJvZ3JhbSgpCiogTmV3IHRleHR1dGlscyBmdW5jdGlvbnM6IHRleHR1dGlscy5zZXJpYWxpemUoKSwgdGV4dHV0aWxzLnVuc2VyaWFsaXplKCksIHRleHR1dGlscy50YWJ1bGF0ZSgpLCB0ZXh0dXRpbHMucGFnZWRUYWJ1bGF0ZSgpLCB0ZXh0dXRpbHMuc2xvd1dyaXRlKCkKKiBOZXcgaW8gZmlsZSBmdW5jdGlvbjogZmlsZTpsaW5lcygpCiogTmV3IGZzIGZ1bmN0aW9uOiBmcy5nZXRTaXplKCkKKiBEaXNrIERyaXZlcyBjYW4gbm93IHBsYXkgcmVjb3JkcyBmcm9tIG90aGVyIG1vZHMKKiBCdWcgZml4ZXMsIHByb2dyYW0gdHdlYWtzLCBhbmQgaGVscCB1cGRhdGVzCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjI6CgoqIEFkZGVkIERpc2sgRHJpdmVzIGFuZCBGbG9wcHkgRGlza3MKKiBBZGRlZCBDdHJsK1Qgc2hvcnRjdXQgdG8gdGVybWluYXRlIHRoZSBjdXJyZW50IHByb2dyYW0gKGhvbGQpCiogQWRkZWQgQ3RybCtTIHNob3J0Y3V0IHRvIHNodXRkb3duIHRoZSBjb21wdXRlciAoaG9sZCkKKiBBZGRlZCBDdHJsK1Igc2hvcnRjdXQgdG8gcmVib290IHRoZSBjb21wdXRlciAoaG9sZCkKKiBOZXcgUHJvZ3JhbXM6IGFsaWFzLCBhcGlzLCBjb3B5LCBkZWxldGUsIGRqLCBkcml2ZSwgZWplY3QsIGlkLCBsYWJlbCwgbGlzdCwgbW92ZSwgcmVib290LCByZWRzZXQsIHJlbmFtZSwgdGltZSwgd29ybS4KKiBOZXcgQVBJczogYml0LCBjb2xvdXJzLCBkaXNrLCBoZWxwLCByZWRuZXQsIHBhcmFsbGVsLCB0ZXh0dXRpbHMuCiogTmV3IGNvbG9yIGZ1bmN0aW9uczogY29sb3JzLmNvbWJpbmUoKSwgY29sb3JzLnN1YnRyYWN0KCksIGNvbG9ycy50ZXN0KCkKKiBOZXcgZnMgZnVuY3Rpb25zOiBmcy5nZXROYW1lKCksIG5ldyBtb2RlcyBmb3IgZnMub3BlbigpCiogTmV3IG9zIGZ1bmN0aW9uczogb3MubG9hZEFQSSgpLCBvcy51bmxvYWRBUEkoKSwKb3MuY2xvY2soKSwgb3MudGltZSgpLCBvcy5zZXRBbGFybSgpLApvcy5yZWJvb3QoKSwgb3MucXVldWVFdmVudCgpCiogTmV3IHJlZHN0b25lIGZ1bmN0aW9uOiByZWRzdG9uZS5nZXRTaWRlcygpCiogTmV3IHNoZWxsIGZ1bmN0aW9uczogc2hlbGwuc2V0UGF0aCgpLCBzaGVsbC5wcm9ncmFtcygpLCBzaGVsbC5yZXNvbHZlUHJvZ3JhbSgpLCBzaGVsbC5zZXRBbGlhcygpCiogTG90cyBvZiB1cGRhdGVzIHRvIHRoZSBoZWxwIHBhZ2VzCiogQnVnIGZpeGVzCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjE6CgoqIEFkZGVkIE11bHRpcGxheWVyIHN1cHBvcnQgdGhyb3VnaG91dC4KKiBBZGRlZCBjb25uZWN0aXZpdHkgd2l0aCBSZWRQb3dlciBidW5kbGVkIGNhYmxlcwoqIEFkZGVkIEhUVFAgYXBpLCBlbmFibGVkIHZpYSB0aGUgbW9kIGNvbmZpZywgdG8gYWxsb3cgY29tcHV0ZXJzIHRvIGFjY2VzcyB0aGUgcmVhbCB3b3JsZCBpbnRlcm5ldAoqIEFkZGVkIGNvbW1hbmQgaGlzdG9yeSB0byB0aGUgc2hlbGwuCiogUHJvZ3JhbXMgd2hpY2ggc3BpbiBpbiBhbiBpbmZpbml0ZSBsb29wIHdpdGhvdXQgeWllbGRpbmcgd2lsbCBubyBsb25nZXIgZnJlZXplIG1pbmVjcmFmdAoqIEhlbHAgdXBkYXRlcyBhbmQgYnVnIGZpeGVzCgpOZXcgRmVhdHVyZXMgaW4gQ29tcHV0ZXJDcmFmdCAxLjA6CgoqIEZpcnN0IFJlbGVhc2Uh","isDir":false,"name":"changelog","size":0},"root/help/chat":{"data":"U3VyZiB0aGUgcmVkbmV0IHN1cGVyaGlnaHdheSB3aXRoICJjaGF0IiwgdGhlIG5ldHdvcmtlZCBjaGF0IHByb2dyYW0gZm9yIENyYWZ0T1MhIEhvc3QgY2hhdHJvb21zIGFuZCBpbnZpdGUgeW91ciBmcmllbmRzISBSZXF1aXJlcyBhIFdpcmVkIG9yIFdpcmVsZXNzIE1vZGVtIG9uIGVhY2ggY29tcHV0ZXIuIFdoZW4gcnVubmluZyBjaGF0LCB0eXBlICIvaGVscCIgdG8gc2VlIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuCgpleDoKImNoYXQgaG9zdCBmb3JnZWNyYWZ0IiB3aWxsIGNyZWF0ZSBhIGNoYXRyb29tIHdpdGggdGhlIG5hbWUgImZvcmdlY3JhZnQiCiJjaGF0IGpvaW4gZm9yZ2VjcmFmdCBkaXJld29sZjIwIiB3aWxsIGNvbm5lY3QgdG8gdGhlIGNoYXRyb29tIHdpdGggdGhlIG5hbWUgImZvcmdlY3JhZnQiLCB1c2luZyB0aGUgbmlja25hbWUgImRpcmV3b2xmMjAi","isDir":false,"name":"chat","size":0},"root/help/clear":{"data":"Y2xlYXIgY2xlYXJzIHRoZSBzY3JlZW4u","isDir":false,"name":"clear","size":0},"root/help/colors":{"data":"RnVuY3Rpb25zIGluIHRoZSBjb2xvcnMgYXBpCih1c2VkIGZvciByZWRzdG9uZS5zZXRCdW5kbGVkT3V0cHV0KToKY29sb3JzLmNvbWJpbmUoIGNvbG9yMSwgY29sb3IyLCBjb2xvcjMsIC4uLiApCmNvbG9ycy5zdWJ0cmFjdCggY29sb3JzLCBjb2xvcjEsIGNvbG9yMiwgLi4uICkKY29sb3JzLnRlc3QoIGNvbG9ycywgY29sb3IgKQoKQ29sb3IgY29uc3RhbnRzIGluIHRoZSBjb2xvcnMgYXBpLCBpbiBhc2NlbmRpbmcgYml0IG9yZGVyOgpjb2xvcnMud2hpdGUsIGNvbG9ycy5vcmFuZ2UsIGNvbG9ycy5tYWdlbnRhLCBjb2xvcnMubGlnaHRCbHVlLCBjb2xvcnMueWVsbG93LCBjb2xvcnMubGltZSwgY29sb3JzLnBpbmssIGNvbG9ycy5ncmF5LCBjb2xvcnMubGlnaHRHcmF5LCBjb2xvcnMuY3lhbiwgY29sb3JzLnB1cnBsZSwgY29sb3JzLmJsdWUsIGNvbG9ycy5icm93biwgY29sb3JzLmdyZWVuLCBjb2xvcnMucmVkLCBjb2xvcnMuYmxhY2su","isDir":false,"name":"colors","size":0},"root/help/colours":{"data":"RnVuY3Rpb25zIGluIHRoZSBjb2xvdXJzIGFwaQoodXNlZCBmb3IgcmVkc3RvbmUuc2V0QnVuZGxlZE91dHB1dCk6CmNvbG91cnMuY29tYmluZSggY29sb3VyMSwgY29sb3VyMiwgY29sb3VyMywgLi4uKQpjb2xvdXJzLnN1YnRyYWN0KCBjb2xvdXJzLCBjb2xvdXIxLCBjb2xvdXIyLCAuLi4pCmNvbG91cnMudGVzdCggY29sb3VycywgY29sb3VyICkKCkNvbG91ciBjb25zdGFudHMgaW4gdGhlIGNvbG91cnMgYXBpLCBpbiBhc2NlbmRpbmcgYml0IG9yZGVyOgpjb2xvdXJzLndoaXRlLCBjb2xvdXJzLm9yYW5nZSwgY29sb3Vycy5tYWdlbnRhLCBjb2xvdXJzLmxpZ2h0Qmx1ZSwgY29sb3Vycy55ZWxsb3csIGNvbG91cnMubGltZSwgY29sb3Vycy5waW5rLCBjb2xvdXJzLmdyZXksIGNvbG91cnMubGlnaHRHcmV5LCBjb2xvdXJzLmN5YW4sIGNvbG91cnMucHVycGxlLCBjb2xvdXJzLmJsdWUsIGNvbG91cnMuYnJvd24sIGNvbG91cnMuZ3JlZW4sIGNvbG91cnMucmVkLCBjb2xvdXJzLmJsYWNrLg==","isDir":false,"name":"colours","size":0},"root/help/copy":{"data":"Y3AgY29waWVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlci4KCmV4OgoiY3Agcm9tIG15cm9tIiBjb3BpZXMgInJvbSIgdG8gIm15cm9tIi4KImNwIHJvbSBteXN0dWZmL3JvbSIgY29waWVzICJyb20iIHRvICJteXN0dWZmL3JvbSIuCiJjcCBkaXNrLyogZGlzazIiIGNvcGllcyB0aGUgY29udGVudHMgb2Ygb25lIGRpc2sgdG8gYW5vdGhlcg==","isDir":false,"name":"copy","size":0},"root/help/coroutine":{"data":"Y29yb3V0aW5lIGlzIGEgc3RhbmRhcmQgTHVhNS4xIEFQSS4KUmVmZXIgdG8gaHR0cDovL3d3dy5sdWEub3JnL21hbnVhbC81LjEvIGZvciBtb3JlIGluZm9ybWF0aW9uLg==","isDir":false,"name":"coroutine","size":0},"root/help/craft":{"data":"Y3JhZnQgaXMgYSBwcm9ncmFtIGZvciBDcmFmdHkgVHVydGxlcy4gQ3JhZnQgd2lsbCBjcmFmdCBhIHN0YWNrIG9mIGl0ZW1zIHVzaW5nIHRoZSBjdXJyZW50IGludmVudG9yeS4KCmV4OgoiY3JhZnQiIHdpbGwgY3JhZnQgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQoiY3JhZnQgNSIgd2lsbCBjcmFmdCBhdCBtb3N0IDUgdGltZXM=","isDir":false,"name":"craft","size":0},"root/help/credits":{"data":"Q29tcHV0ZXJDcmFmdCB3YXMgY3JlYXRlZCBieSBEYW5pZWwgImRhbjIwMCIgUmF0Y2xpZmZlLCB3aXRoIGFkZGl0aW9uYWwgY29kZSBieSBBYXJvbiAiQ2xvdWR5IiBNaWxscy4KVGhhbmtzIHRvIG5pdHJvZ2VuZmluZ2VycywgR29waGVyQVRMIGFuZCBSYW1pTGVnbyBmb3IgcHJvZ3JhbSBjb250cmlidXRpb25zLgpUaGFua3MgdG8gTW9qYW5nLCB0aGUgRm9yZ2UgdGVhbSwgYW5kIHRoZSBNQ1AgdGVhbS4KVXNlcyBMdWFKIGZyb20gaHR0cDovL2x1YWouc291cmNlZm9yZ2UubmV0LwoKSm9pbiB0aGUgQ29tcHV0ZXJDcmFmdCBjb21tdW5pdHkgb25saW5lIGF0IGh0dHA6Ly93d3cuY29tcHV0ZXJjcmFmdC5pbmZvCkZvbGxvdyBARGFuVHdvSHVuZHJlZCBvbiBUd2l0dGVyIQ==","isDir":false,"name":"credits","size":0},"root/help/dance":{"data":"ZGFuY2UgaXMgYSBwcm9ncmFtIGZvciBUdXJ0bGVzLiBUdXJ0bGVzIGxvdmUgdG8gZ2V0IGZ1bmt5Lg==","isDir":false,"name":"dance","size":0},"root/help/delete":{"data":"cm0gZGVsZXRlcyBhIGZpbGUgb3IgYSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cy4KCmV4Ogoicm0gZm9vIiB3aWxsIGRlbGV0ZSB0aGUgZmlsZSBmb28uCiJybSBkaXNrLyoiIHdpbGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiBhIGRpc2su","isDir":false,"name":"delete","size":0},"root/help/disk":{"data":"RnVuY3Rpb25zIGluIHRoZSBkaXNrIEFQSS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBkaXNrIGRyaXZlczoKZGlzay5pc1ByZXNlbnQoIGRyaXZlICkKZGlzay5zZXRMYWJlbCggZHJpdmUsIGxhYmVsICkKZGlzay5nZXRMYWJlbCggZHJpdmUgKQpkaXNrLmhhc0RhdGEoIGRyaXZlICkKZGlzay5nZXRNb3VudFBhdGgoIGRyaXZlICkKZGlzay5oYXNBdWRpbyggZHJpdmUgKQpkaXNrLmdldEF1ZGlvVGl0bGUoIGRyaXZlICkKZGlzay5wbGF5QXVkaW8oIGRyaXZlICkKZGlzay5zdG9wQXVkaW8oICkKZGlzay5lamVjdCggZHJpdmUgKQpkaXNrLmdldElEKCBkcml2ZSApCgpFdmVudHMgZmlyZWQgYnkgdGhlIGRpc2sgQVBJOgoiZGlzayIgd2hlbiBhIGRpc2sgb3Igb3RoZXIgaXRlbSBpcyBpbnNlcnRlZCBpbnRvIGEgZGlzayBkcml2ZS4gQXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlCiJkaXNrX2VqZWN0IiB3aGVuIGEgZGlzayBpcyByZW1vdmVkIGZyb20gYSBkaXNrIGRyaXZlLiBBcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmUKVHlwZSAiaGVscCBldmVudHMiIHRvIGxlYXJuIGFib3V0IHRoZSBldmVudCBzeXN0ZW0u","isDir":false,"name":"disk","size":0},"root/help/dj":{"data":"ZGogcGxheXMgTXVzaWMgRGlzY3MgZnJvbSBkaXNrIGRyaXZlcyBhdHRhY2hlZCB0byB0aGUgY29tcHV0ZXIuCgpleDoKImRqIiBvciAiZGogcGxheSIgcGxheXMgYSByYW5kb20gZGlzYy4KImRqIHBsYXkgbGVmdCIgcGxheXMgdGhlIGRpc2MgaW4gdGhlIGRyaXZlIG9uIHRoZSBsZWZ0IG9mIHRoZSBjb21wdXRlci4KImRqIHN0b3AiIHN0b3BzIHRoZSBjdXJyZW50IGRpc2Mu","isDir":false,"name":"dj","size":0},"root/help/drive":{"data":"ZHJpdmUgdGVsbHMgeW91IHdoaWNoIGRpc2sgZHJpdmUgdGhlIGN1cnJlbnQgb3Igc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBsb2NhdGVkIGluLgoKZXg6CiJkcml2ZSIgdGVsbCB5b3UgdGhlIGRpc2sgZHJpdmUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgoiZHJpdmUgZm9vIiB0ZWxscyB5b3UgdGhlIGRpc2sgZHJpdmUgb2YgdGhlIHN1YmRpcmVjdG9yeSAiZm9vIg==","isDir":false,"name":"drive","size":0},"root/help/drives":{"data":"VGhlIERpc2sgRHJpdmUgaXMgYSBwZXJpcGhlcmFsIGRldmljZSBhdmFpbGFibGUgZm9yIENyYWZ0T1MuIFR5cGUgImhlbHAgcGVyaXBoZXJhbCIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgdGhlIFBlcmlwaGVyYWwgQVBJIHRvIGNvbm5lY3Qgd2l0aCBwZXJpcGhlcmFscy4gV2hlbiBhIERpc2sgRHJpdmUgaXMgY29ubmVjdGVkLCBwZXJpcGhlcmFsLmdldFR5cGUoKSB3aWxsIHJldHVybiAiZHJpdmUiLgoKTWV0aG9kcyBleHBvc2VkIGJ5IHRoZSBEaXNrIERyaXZlOgppc0Rpc2tQcmVzZW50KCkKZ2V0RGlza0xhYmVsKCkKc2V0RGlza0xhYmVsKCBsYWJlbCApCmhhc0RhdGEoKQpnZXRNb3VudFBhdGgoKQpoYXNBdWRpbygpCmdldEF1ZGlvVGl0bGUoKQpwbGF5QXVkaW8oKQpzdG9wQXVkaW8oKQplamVjdERpc2soKQpnZXREaXNrSUQoKQoKRXZlbnRzIGZpcmVkIGJ5IHRoZSBEaXNrIERyaXZlOgoiZGlzayIgd2hlbiBhIGRpc2sgb3Igb3RoZXIgaXRlbSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBkcml2ZS4gQXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlLgoiZGlza19lamVjdCIgd2hlbiBhIGRpc2sgaXMgcmVtb3ZlZCBmcm9tIGEgIGRyaXZlLiBBcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmUuClR5cGUgImhlbHAgZXZlbnRzIiB0byBsZWFybiBhYm91dCB0aGUgZXZlbnQgc3lzdGVtLg==","isDir":false,"name":"drives","size":0},"root/help/earth":{"data":"TW9zdGx5IGhhcm1sZXNzLg==","isDir":false,"name":"earth","size":0},"root/help/edit":{"data":"ZWRpdCBpcyBhIHRleHQgZWRpdG9yIGZvciBjcmVhdGluZyBvciBtb2RpZnlpbmcgcHJvZ3JhbXMgb3IgdGV4dCBmaWxlcy4gQWZ0ZXIgY3JlYXRpbmcgYSBwcm9ncmFtIHdpdGggZWRpdCwgdHlwZSBpdHMgZmlsZW5hbWUgaW4gdGhlIHNoZWxsIHRvIHJ1biBpdC4gWW91IGNhbiBvcGVuIGFueSBvZiB0aGUgYnVpbHRpbiBwcm9ncmFtcyB3aXRoIGVkaXQgdG8gbGVhcm4gaG93IHRvIHByb2dyYW0uCgpleDoKImVkaXQgaGVsbG8iIG9wZW5zIGEgZmlsZSBjYWxsZWQgImhlbGxvIiBmb3IgZWRpdGluZy4=","isDir":false,"name":"edit","size":0},"root/help/eject":{"data":"ZWplY3QgZWplY3RzIHRoZSBjb250ZW50cyBvZiBhbiBhdHRhY2hlZCBkaXNrIGRyaXZlLgoKZXg6CiJlamVjdCBsZWZ0IiBlamVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXNrIGRyaXZlIHRvIHRoZSBsZWZ0IG9mIHRoZSBjb21wdXRlci4=","isDir":false,"name":"eject","size":0},"root/help/equip":{"data":"ZXF1aXAgaXMgYSBwcm9ncmFtIGZvciBUdXJ0bGVzLiBlcXVpcCB3aWxsIGVxdWlwIGFuIGl0ZW0gZnJvbSB0aGUgVHVydGxlJ3MgaW52ZW50b3J5IGZvciB1c2UgYXMgYSB0b29sIG9mIHBlcmlwaGVyYWwuCgpleDoKImVxdWlwIDUgbGVmdCIgd2lsbCBlcXVpcCB0aGUgaXRlbSBmcm9tIHNsb3QgNSBvZiB0aGUgdHVydGxlIG9udG8gdGhlIGxlZnQgc2lkZSBvZiB0aGUgdHVydGxl","isDir":false,"name":"equip","size":0},"root/help/events":{"data":"VGhlIGZ1bmN0aW9uIG9zLnB1bGxFdmVudCgpIHdpbGwgeWllbGQgdGhlIHByb2dyYW0gdW50aWwgYSBzeXN0ZW0gZXZlbnQgb2NjdXJzLiBUaGUgZmlyc3QgcmV0dXJuIHZhbHVlIGlzIHRoZSBldmVudCBuYW1lLCBmb2xsb3dlZCBieSBhbnkgYXJndW1lbnRzLgoKU29tZSBldmVudHMgd2hpY2ggY2FuIG9jY3VyIGFyZToKImNoYXIiIHdoZW4gdGV4dCBpcyB0eXBlZCBvbiB0aGUga2V5Ym9hcmQuIEFyZ3VtZW50IGlzIHRoZSBsZXR0ZXIgdHlwZWQuCiJrZXkiIHdoZW4gYSBrZXkgaXMgcHJlc3NlZCBvbiB0aGUga2V5Ym9hcmQuIEFyZ3VtZW50IGlzIHRoZSBudW1lcmljYWwga2V5Y29kZS4gQ29tcGFyZSB0byB0aGUgdmFsdWVzIGluIGtleXMgQVBJIHRvIHNlZSB3aGljaCBrZXkgd2FzIHByZXNzZWQuCiJwYXN0ZSIgd2hlbiB0ZXh0IGlzIHBhc3RlZCBmcm9tIHRoZSB1c2VycyBrZXlib2FyZC4gQXJndW1lbnQgaXMgdGhlIGxpbmUgb2YgdGV4dCBwYXN0ZWQuCgpFdmVudHMgb25seSBvbiBhZHZhbmNlZCBjb21wdXRlcnM6CiJtb3VzZV9jbGljayIgd2hlbiBhIHVzZXIgY2xpY2tzIHRoZSBtb3VzZS4gQXJndW1lbnRzIGFyZSBidXR0b24sIHhQb3MsIHlQb3MuCiJtb3VzZV9kcmFnIiB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2Ugd2hlbiBoZWxkLiBBcmd1bWVudHMgYXJlIGJ1dHRvbiwgeFBvcywgeVBvcy4KIm1vdXNlX3Njcm9sbCIgd2hlbiBhIHVzZXIgdXNlcyB0aGUgc2Nyb2xsd2hlZWwgb24gdGhlIG1vdXNlLiBBcmd1bWVudHMgYXJlIGRpcmVjdGlvbiwgeFBvcywgeVBvcy4KCk90aGVyIEFQSXMgYW5kIHBlcmlwaGVyYWxzIHdpbGwgZW1pdCB0aGVpciBvd24gZXZlbnRzLiBTZWUgdGhlaXIgcmVzcGVjdGl2ZSBoZWxwIHBhZ2VzIGZvciBkZXRhaWxzLg==","isDir":false,"name":"events","size":0},"root/help/excavate":{"data":"ZXhjYXZhdGUgaXMgYSBwcm9ncmFtIGZvciBNaW5pbmcgVHVydGxlcy4gV2hlbiBleGNhdmF0ZSBpcyBydW4sIHRoZSB0dXJ0bGUgd2lsbCBtaW5lIGEgcmVjdGFuZ3VsYXIgc2hhZnQgaW50byB0aGUgZ3JvdW5kLCBjb2xsZWN0aW5nIGJsb2NrcyBhcyBpdCBnb2VzLCBhbmQgcmV0dXJuIHRvIHRoZSBzdXJmYWNlIG9uY2UgYmVkcm9jayBpcyBoaXQuCgpleDoKImV4Y2F2YXRlIDMiIHdpbGwgbWluZSBhIDN4MyBzaGFmdC4=","isDir":false,"name":"excavate","size":0},"root/help/exit":{"data":"ZXhpdCB3aWxsIGV4aXQgdGhlIGN1cnJlbnQgc2hlbGwu","isDir":false,"name":"exit","size":0},"root/help/falling":{"data":"IkZyb20gUnVzc2lhIHdpdGggRnVuIiBjb21lcyBhIGZ1biwgbmV3LCBzdXNwaWNpb3VzbHktZmFtaWxpYXIgZmFsbGluZyBibG9jayBnYW1lIGZvciBDcmFmdE9TLiBPbmx5IG9uIFBvY2tldCBDb21wdXRlcnMh","isDir":false,"name":"falling","size":0},"root/help/fg":{"data":"ZmcgaXMgYSBwcm9ncmFtIGZvciBBZHZhbmNlZCBDb21wdXRlcnMgd2hpY2ggb3BlbnMgYSBuZXcgdGFiIGluIHRoZSBmb3JlZ3JvdW5kLgoKZXg6CiJmZyIgd2lsbCBvcGVuIGEgZm9yZWdyb3VuZCB0YWIgcnVubmluZyB0aGUgc2hlbGwKImZnIHdvcm0iIHdpbGwgb3BlbiBhIGZvcmVncm91bmQgdGFiIHJ1bm5pbmcgdGhlICJ3b3JtIiBwcm9ncmFt","isDir":false,"name":"fg","size":0},"root/help/fs":{"data":"RnVuY3Rpb25zIGluIHRoZSBGaWxlc3lzdGVtIEFQSToKZnMubGlzdCggcGF0aCApCmZzLmZpbmQoIHdpbGRjYXJkICkKZnMuZXhpc3RzKCBwYXRoICkKZnMuaXNEaXIoIHBhdGggKQpmcy5pc1JlYWRPbmx5KCBwYXRoICkKZnMuZ2V0RGlyKCBwYXRoICkKZnMuZ2V0TmFtZSggcGF0aCApCmZzLmdldFNpemUoIHBhdGggKQpmcy5nZXREcml2ZSggcGF0aCApCmZzLmdldEZyZWVTcGFjZSggcGF0aCApCmZzLm1ha2VEaXIoIHBhdGggKQpmcy5tb3ZlKCBwYXRoLCBwYXRoICkKZnMuY29weSggcGF0aCwgcGF0aCApCmZzLmRlbGV0ZSggcGF0aCApCmZzLmNvbWJpbmUoIHBhdGgsIGxvY2FscGF0aCApCmZzLm9wZW4oIHBhdGgsIG1vZGUgKQpBdmFpbGFibGUgZnMub3BlbigpIG1vZGVzIGFyZSAiciIsICJ3IiwgImEiLCAicmIiLCAid2IiIGFuZCAiYWIiLgoKRnVuY3Rpb25zIG9uIGZpbGVzIG9wZW5lZCB3aXRoIG1vZGUgInIiOgpyZWFkTGluZSgpCnJlYWRBbGwoKQpjbG9zZSgpCgpGdW5jdGlvbnMgb24gZmlsZXMgb3BlbmVkIHdpdGggbW9kZSAidyIgb3IgImEiOgp3cml0ZSggc3RyaW5nICkKd3JpdGVMaW5lKCBzdHJpbmcgKQpmbHVzaCgpCmNsb3NlKCkKCkZ1bmN0aW9ucyBvbiBmaWxlcyBvcGVuZWQgd2l0aCBtb2RlICJyYiI6CnJlYWQoKQpjbG9zZSgpCgpGdW5jdGlvbnMgb24gZmlsZXMgb3BlbmVkIHdpdGggbW9kZSAid2IiIG9yICJhYiI6CndyaXRlKCBieXRlICkKZmx1c2goKQpjbG9zZSgp","isDir":false,"name":"fs","size":0},"root/help/go":{"data":"Z28gaXMgYSBwcm9ncmFtIGZvciBUdXJ0bGVzLCB1c2VkIHRvIGNvbnRyb2wgdGhlIHR1cnRsZSB3aXRob3V0IHByb2dyYW1taW5nLiBJdCBhY2NlcHRzIG9uZSBvciBtb3JlIGNvbW1hbmRzIGFzIGEgZGlyZWN0aW9uIGZvbGxvd2VkIGJ5IGEgZGlzdGFuY2UuCgpleDoKImdvIGZvcndhcmQiIG1vdmVzIHRoZSB0dXJ0bGUgMSBzcGFjZSBmb3J3YXJkLgoiZ28gZm9yd2FyZCAzIiBtb3ZlcyB0aGUgdHVydGxlIDMgc3BhY2VzIGZvcndhcmQuCiJnbyBmb3J3YXJkIDMgdXAgbGVmdCAyIiBtb3ZlcyB0aGUgdHVydGxlIDMgc3BhY2VzIGZvcndhcmQsIDEgc3BhY2VzIHVwLCB0aGVuIGxlZnQgMTgwIGRlZ3JlZXMu","isDir":false,"name":"go","size":0},"root/help/gps":{"data":"Z3BzIGNhbiBiZSB1c2VkIHRvIGhvc3QgYSBHUFMgc2VydmVyLCBvciB0byBkZXRlcm1pbmUgYSBwb3NpdGlvbiB1c2luZyB0cmlsYXRlcmF0aW9uLgpUeXBlICJoZWxwIGdwc2FwaSIgZm9yIGhlbHAgdXNpbmcgR1BTIGZ1bmN0aW9ucyBpbiBsdWEgcHJvZ3JhbXMuCgpleDoKImdwcyBsb2NhdGUiIHdpbGwgY29ubmVjdCB0byBuZWFyYnkgR1BTIHNlcnZlcnMsIGFuZCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29tcHV0ZXIgb3IgdHVydGxlLgoiZ3BzIGhvc3QiIHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGUgcG9zaXRpb24sIGFuZCBob3N0IGEgR1BTIHNlcnZlciBpZiBzdWNjZXNzZnVsLgoiZ3BzIGhvc3QgMTAgMjAgMzAiIHdpbGwgaG9zdCBhIEdQUyBzZXJ2ZXIsIHVzaW5nIHRoZSBtYW51YWxseSBlbnRlcmVkIHBvc2l0aW9uIDEwLDIwLDMwLiAKClRha2UgY2FyZSB3aGVuIG1hbnVhbGx5IGVudGVyaW5nIGhvc3QgcG9zaXRpb25zLiBJZiB0aGUgcG9zaXRpb25zIGVudGVyZWQgaW50byBtdWx0aXBsZSBHUFMgaG9zdHMKYXJlIG5vdCBjb25zaXN0ZW50LCB0aGUgcmVzdWx0cyBvZiBsb2NhdGUgY2FsbHMgd2lsbCBiZSBpbmNvcnJlY3Qu","isDir":false,"name":"gps","size":0},"root/help/gpsapi":{"data":"RnVuY3Rpb25zIGluIHRoZSBHUFMgQVBJOgpncHMubG9jYXRlKCB0aW1lb3V0ICkKClRoZSBsb2NhdGUgZnVuY3Rpb24gd2lsbCBzZW5kIGEgc2lnbmFsIHRvIG5lYXJieSBncHMgc2VydmVycywgYW5kIHdhaXQgZm9yIHJlc3BvbnNlcyBiZWZvcmUgdGhlIHRpbWVvdXQuIElmIGl0IHJlY2VpdmVzIGVub3VnaCByZXNwb25zZXMgdG8gZGV0ZXJtaW5lIHRoaXMgY29tcHV0ZXJzIHBvc2l0aW9uIHRoZW4geCwgeSBhbmQgeiBjby1vcmRpbmF0ZXMgd2lsbCBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIG5pbC4gSWYgR1BTIGhvc3RzIGRvIG5vdCBoYXZlIHRoZWlyIHBvc2l0aW9ucyBjb25maWd1cmVkIGNvcnJlY3RseSwgcmVzdWx0cyB3aWxsIGJlIGluYWNjdXJhdGUu","isDir":false,"name":"gpsapi","size":0},"root/help/hello":{"data":"aGVsbG8gcHJpbnRzIHRoZSB0ZXh0ICJIZWxsbyBXb3JsZCEiIHRvIHRoZSBzY3JlZW4u","isDir":false,"name":"hello","size":0},"root/help/help":{"data":"aGVscCBpcyB0aGUgaGVscCB0b29sIHlvdSdyZSBjdXJyZW50bHkgdXNpbmcuClR5cGUgImhlbHAgaW5kZXgiIHRvIHNlZSBhbGwgaGVscCB0b3BpY3MuClR5cGUgImhlbHAiIHRvIHNlZSB0aGUgaGVscCBpbnRyby4KVHlwZSAiaGVscCBoZWxwYXBpIiBmb3IgaW5mb3JtYXRpb24gb24gdGhlIGhlbHAgTHVhIEFQSS4=","isDir":false,"name":"help","size":0},"root/help/helpapi":{"data":"RnVuY3Rpb25zIGluIHRoZSBoZWxwIEFQSToKaGVscC5zZXRQYXRoKCBwYXRoICkKaGVscC5sb29rdXAoIHRvcGljICkKaGVscC50b3BpY3MoKQ==","isDir":false,"name":"helpapi","size":0},"root/help/http":{"data":"RnVuY3Rpb25zIGluIHRoZSBIVFRQIEFQSToKaHR0cC5jaGVja1VSTCggdXJsICkKaHR0cC5yZXF1ZXN0KCB1cmwsIFtwb3N0RGF0YV0sIFtoZWFkZXJzXSApCmh0dHAuZ2V0KCB1cmwsIFtoZWFkZXJzXSApCmh0dHAucG9zdCggdXJsLCBwb3N0RGF0YSwgW2hlYWRlcnNdICkKClRoZSBIVFRQIEFQSSBtYXkgYmUgZGlzYWJsZWQgaW4gQ29tcHV0ZXJDcmFmdC5jZmcKQSBwZXJpb2Qgb2YgdGltZSBhZnRlciBhIGh0dHAucmVxdWVzdCgpIGNhbGwgaXMgbWFkZSwgYSAiaHR0cF9zdWNjZXNzIiBvciAiaHR0cF9mYWlsdXJlIiBldmVudCB3aWxsIGJlIHJhaXNlZC4gQXJndW1lbnRzIGFyZSB0aGUgdXJsIGFuZCBhIGZpbGUgaGFuZGxlIGlmIHN1Y2Nlc3NmdWwuIGh0dHAuZ2V0KCkgYW5kIGh0dHAucG9zdCgpIGJsb2NrIHVudGlsIHRoaXMgZXZlbnQgZmlyZXMgaW5zdGVhZC4=","isDir":false,"name":"http","size":0},"root/help/id":{"data":"aWQgcHJpbnRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGlzIGNvbXB1dGVyLCBvciBhIERpc2sgaW4gYW4gYXR0YWNoZWQgRGlzayBEcml2ZS4KCmV4OgoiaWQiIHdpbGwgcHJpbnQgdGhpcyBDb21wdXRlcnMgSUQgYW5kIGxhYmVsCiJpZCBsZWZ0IiB3aWxsIHByaW50IHRoZSBJRCBhbmQgbGFiZWwgb2YgdGhlIGRpc2sgaW4gdGhlIERpc2sgRHJpdmUgb24gdGhlIGxlZnQ=","isDir":false,"name":"id","size":0},"root/help/intro":{"data":"V2VsY29tZSB0byBDcmFmdE9TIQpUeXBlICJwcm9ncmFtcyIgdG8gc2VlIHRoZSBwcm9ncmFtcyB5b3UgY2FuIHJ1bi4KVHlwZSAiaGVscCA8cHJvZ3JhbT4iIHRvIHNlZSBoZWxwIGZvciBhIHNwZWNpZmljIHByb2dyYW0uClR5cGUgImhlbHAgcHJvZ3JhbW1pbmciIHRvIGxlYXJuIGFib3V0IHByb2dyYW1taW5nLgpUeXBlICJoZWxwIHdoYXRzbmV3IiB0byBmaW5kIG91dCBhYm91dCBuZXcgZmVhdHVyZXMuClR5cGUgImhlbHAgY3JlZGl0cyIgdG8gbGVhcm4gd2hvIG1hZGUgYWxsIHRoaXMuClR5cGUgImhlbHAgaW5kZXgiIHRvIHNlZSBhbGwgaGVscCB0b3BpY3Mu","isDir":false,"name":"intro","size":0},"root/help/io":{"data":"aW8gaXMgYSBzdGFuZGFyZCBMdWE1LjEgQVBJLCByZWltcGxlbWVudGVkIGZvciBDcmFmdE9TLiBOb3QgYWxsIHRoZSBmZWF0dXJlcyBhcmUgYXZhaWxpYWJsZS4KUmVmZXIgdG8gaHR0cDovL3d3dy5sdWEub3JnL21hbnVhbC81LjEvIGZvciBtb3JlIGluZm9ybWF0aW9uLg==","isDir":false,"name":"io","size":0},"root/help/keys":{"data":"VGhlIGtleXMgQVBJIGNvbnRhaW5zIGNvbnN0YW50cyBmb3IgYWxsIHRoZSBrZXkgY29kZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlICJrZXkiIGV2ZW50OgoKRXhhbXBsZSB1c2FnZToKbG9jYWwgc0V2ZW50LCBuS2V5ID0gb3MucHVsbEV2ZW50KCkKaWYgc0V2ZW50ID09ICJrZXkiIGFuZCBuS2V5ID09IGtleXMuZW50ZXIgdGhlbgogICAtLSBEbyBzb21ldGhpbmcgIAplbmQKClNlZSBodHRwOi8vd3d3Lm1pbmVjcmFmdHdpa2kubmV0L3dpa2kvS2V5X2NvZGVzLCBvciB0aGUgc291cmNlIGNvZGUsIGZvciBhIGNvbXBsZXRlIHJlZmVyZW5jZS4=","isDir":false,"name":"keys","size":0},"root/help/label":{"data":"bGFiZWwgZ2V0cyBvciBzZXRzIHRoZSBsYWJlbCBvZiB0aGUgQ29tcHV0ZXIsIG9yIG9mIEZsb3BweSBEaXNrcyBpbiBhdHRhY2hlZCBkaXNrIGRyaXZlcy4KCmV4OgoibGFiZWwgZ2V0IiBwcmludHMgdGhlIGxhYmVsIG9mIHRoZSBjb21wdXRlci4KImxhYmVsIGdldCBsZWZ0IiBwcmludHMgdGhlIGxhYmVsIG9mIHRoZSBkaXNrIGluIHRoZSBsZWZ0IGRyaXZlLgoibGFiZWwgc2V0ICJNeSBDb21wdXRlciIiIHNldCB0aGUgbGFiZWwgb2YgdGhlIGNvbXB1dGVyIHRvICJNeSBDb21wdXRlciIuCiJsYWJlbCBzZXQgbGVmdCAiTXkgUHJvZ3JhbXMiIiAtIHNldHMgdGhlIGxhYmVsIG9mIHRoZSBkaXNrIGluIHRoZSBsZWZ0IGRyaXZlIHRvICJNeSBQcm9ncmFtcyIuCiJsYWJlbCBjbGVhciIgY2xlYXJzIHRoZSBsYWJlbCBvZiB0aGUgY29tcHV0ZXIuCiJsYWJlbCBjbGVhciBsZWZ0IiBjbGVhcnMgdGhlIGxhYmVsIG9mIHRoZSBkaXNrIGluIHRoZSBsZWZ0IGRyaXZlLg==","isDir":false,"name":"label","size":0},"root/help/licenses":{"children":["luaj"],"isDir":true,"name":"licenses","parents":["/root","/root/help","/root/help/licenses"],"size":0},"root/help/licenses/luaj":{"data":"Q29weXJpZ2h0IChjKSAyMDA3IEx1YUouIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==","isDir":false,"name":"luaj","size":0},"root/help/list":{"data":"bHMgd2lsbCBsaXN0IGFsbCB0aGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBVc2UgInR5cGUiIHRvIGZpbmQgb3V0IGlmIGFuIGl0ZW0gaXMgYSBmaWxlIG9yIGEgZGlyZWN0b3J5Lg==","isDir":false,"name":"list","size":0},"root/help/lua":{"data":"bHVhIGlzIGFuIGludGVyYWN0aXZlIHByb21wdCBmb3IgdGhlIGx1YSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gSXQncyBhIHVzZWZ1bCB0b29sIGZvciBsZWFybmluZyB0aGUgbGFuZ3VhZ2Uu","isDir":false,"name":"lua","size":0},"root/help/math":{"data":"bWF0aCBpcyBhIHN0YW5kYXJkIEx1YTUuMSBBUEkuClJlZmVyIHRvIGh0dHA6Ly93d3cubHVhLm9yZy9tYW51YWwvNS4xLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4=","isDir":false,"name":"math","size":0},"root/help/mkdir":{"data":"bWtkaXIgY3JlYXRlcyBhIGRpcmVjdG9yeSBpbiB0aGUgY3VycmVudCBsb2NhdGlvbi4KCmV4OgoibWtkaXIgZm9vIiBjcmVhdGVzIGEgZGlyZWN0b3J5IG5hbWVkICJmb28iLgoibWtkaXIgLi4vZm9vIiBjcmVhdGVzIGEgZGlyZWN0b3J5IG5hbWVkICJmb28iIGluIHRoZSBkaXJlY3RvcnkgYWJvdmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Lg==","isDir":false,"name":"mkdir","size":0},"root/help/modems":{"data":"V2lyZWQgYW5kIFdpcmVsZXNzIE1vZGVtcyBhcmUgcGVyaXBoZXJhbCBkZXZpY2VzIGF2YWlsYWJsZSBmb3IgQ3JhZnRPUy4gVHlwZSAiaGVscCBwZXJpcGhlcmFsIiB0byBsZWFybiBhYm91dCB1c2luZyB0aGUgUGVyaXBoZXJhbCBBUEkgdG8gY29ubmVjdCB3aXRoIHBlcmlwaGVyYWxzLiBXaGVuIGEgTW9kZW0gaXMgY29ubmVjdGVkLCBwZXJpcGhlcmFsLmdldFR5cGUoKSB3aWxsIHJldHVybiAibW9kZW0iLgoKTWV0aG9kcyBleHBvc2VkIGJ5IE1vZGVtczoKb3BlbiggY2hhbm5lbCApCmlzT3BlbiggY2hhbm5lbCApCmNsb3NlKCBjaGFubmVsICkKY2xvc2VBbGwoKQp0cmFuc21pdCggY2hhbm5lbCwgcmVwbHlDaGFubmVsLCBtZXNzYWdlICkKaXNXaXJlbGVzcygpCgpFdmVudHMgZmlyZWQgYnkgTW9kZW1zOgoibW9kZW1fbWVzc2FnZSIgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb24gYW4gb3BlbiBjaGFubmVsLiBBcmd1bWVudHMgYXJlIG5hbWUsIGNoYW5uZWwsIHJlcGx5Q2hhbm5lbCwgbWVzc2FnZSwgZGlzdGFuY2U=","isDir":false,"name":"modems","size":0},"root/help/monitor":{"data":"bW9uaXRvciB3aWxsIGNvbm5lY3QgdG8gYW4gYXR0YWNoZWQgTW9uaXRvciBwZXJpcGhlcmFsLCBhbmQgcnVuIGEgcHJvZ3JhbSBvbiBpdHMgZGlzcGxheS4KCmV4OgoibW9uaXRvciBsZWZ0IGhlbGxvIiB3aWxsIHJ1biB0aGUgImhlbGxvIiBwcm9ncmFtIG9uIHRoZSBtb25pdG9yIHRvIHRoZSBsZWZ0IG9mIHRoZSBjb21wdXRlci4KIm1vbml0b3IgdG9wIGVkaXQgZm9vIiB3aWxsIHJ1biB0aGUgZWRpdCBwcm9ncmFtIG9uIHRoZSB0b3AgbW9uaXRvciwgZWRpdGluZyB0aGUgZmlsZSAiZm9vIi4=","isDir":false,"name":"monitor","size":0},"root/help/monitors":{"data":"VGhlIE1vbml0b3IgaXMgYSBwZXJpcGhlcmFsIGRldmljZSBhdmFpbGFibGUgZm9yIENyYWZ0T1MuIFR5cGUgImhlbHAgcGVyaXBoZXJhbCIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgdGhlIFBlcmlwaGVyYWwgQVBJIHRvIGNvbm5lY3Qgd2l0aCBwZXJpcGhlcmFscy4gV2hlbiBhIE1vbml0b3IgaXMgY29ubmVjdGVkLCBwZXJpcGhlcmFsLmdldFR5cGUoKSB3aWxsIHJldHVybiAibW9uaXRvciIuIEEgd3JhcHBlZCBtb25pdG9yIGNhbiBiZSB1c2VkIHdpdGggdGVybS5yZWRpcmVjdCgpIHRvIHNlbmQgYWxsIHRlcm1pbmFsIG91dHB1dCB0byB0aGUgbW9uaXRvci4KCk1ldGhvZHMgZXhwb3NlZCBieSB0aGUgTW9uaXRvcjoKd3JpdGUoIHRleHQgKQpjbGVhcigpCmNsZWFyTGluZSgpCmdldEN1cnNvclBvcygpCnNldEN1cnNvclBvcyggeCwgeSApCnNldEN1cnNvckJsaW5rKCBibGluayApCmlzQ29sb3IoKQpzZXRUZXh0Q29sb3IoIGNvbG9yICkKc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvciApCmdldFNpemUoKQpzY3JvbGwoIG4gKQoKRXZlbnRzIGZpcmVkIGJ5IHRoZSBNb25pdG9yOgoibW9uaXRvcl90b3VjaCIgd2hlbiBhbiBBZHZhbmNlZCBNb25pdG9yIGlzIHRvdWNoZWQgYnkgdGhlIHBsYXllci4gQXJndW1lbnRzIGFyZSBuYW1lLCB4LCB5CiJtb25pdG9yX3Jlc2l6ZSIgd2hlbiB0aGUgc2l6ZSBvZiBhIE1vbml0b3IgY2hhbmdlcy4gQXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIG1vbml0b3Iu","isDir":false,"name":"monitors","size":0},"root/help/move":{"data":"bXYgbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLgoKZXg6CiJtdiBmb28gYmFyIiByZW5hbWVzIHRoZSBmaWxlICJmb28iIHRvICJiYXIiLgoibXYgZm9vIGJhci9mb28iIG1vdmVzIHRoZSBmaWxlICJmb28iIHRvIGEgZm9sZGVyIGNhbGxlZCAiYmFyIi4KIm12IGRpc2svKiBkaXNrMiIgbW92ZXMgdGhlIGNvbnRlbnRzIG9mIG9uZSBkaXNrIHRvIGFub3RoZXI=","isDir":false,"name":"move","size":0},"root/help/multishell":{"data":"bXVsdGlzaGVsbCBpcyB0aGUgdG9wbGV2ZWwgcHJvZ3JhbSBvbiBBZHZhbmNlZCBDb21wdXRlcnMgd2hpY2ggbWFuYWdlcyBiYWNrZ3JvdW5kIHRhYnMuClR5cGUgImhlbHAgc2hlbGxhcGkiIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2hlbGwgbHVhIGFwaS4=","isDir":false,"name":"multishell","size":0},"root/help/os":{"data":"RnVuY3Rpb25zIGluIHRoZSBvcyAoT3BlcmF0aW5nIFN5c3RlbSkgQVBJOgpvcy52ZXJzaW9uKCkKb3MuZ2V0Q29tcHV0ZXJJRCgpCm9zLmdldENvbXB1dGVyTGFiZWwoKQpvcy5zZXRDb21wdXRlckxhYmVsKCkKb3MucnVuKCBlbnZpcm9ubWVudCwgcHJvZ3JhbXBhdGgsIGFyZ3VtZW50cyApCm9zLmxvYWRBUEkoIHBhdGggKQpvcy51bmxvYWRBUEkoIG5hbWUgKQpvcy5wdWxsRXZlbnQoIFtmaWx0ZXJdICkKb3MucXVldWVFdmVudCggZXZlbnQsIGFyZ3VtZW50cyApCm9zLmNsb2NrKCkKb3Muc3RhcnRUaW1lciggdGltZW91dCApCm9zLmNhbmNlbFRpbWVyKCB0b2tlbiApCm9zLnNsZWVwKCB0aW1lb3V0ICkKb3MudGltZSgpCm9zLmRheSgpCm9zLnNldEFsYXJtKCB0aW1lICkKb3MuY2FuY2VsQWxhcm0oIHRva2VuICkKb3Muc2h1dGRvd24oKQpvcy5yZWJvb3QoKQoKRXZlbnRzIGVtaXR0ZWQgYnkgdGhlIG9zIEFQSToKInRpbWVyIiB3aGVuIGEgdGltZW91dCBzdGFydGVkIGJ5IG9zLnN0YXJ0VGltZXIoKSBjb21wbGV0ZXMuIEFyZ3VtZW50IGlzIHRoZSB0b2tlbiByZXR1cm5lZCBieSBvcy5zdGFydFRpbWVyKCkuCiJhbGFybSIgd2hlbiBhIHRpbWUgcGFzc2VkIHRvIG9zLnNldEFsYXJtKCkgaXMgcmVhY2hlZC4gQXJndW1lbnQgaXMgdGhlIHRva2VuIHJldHVybmVkIGJ5IG9zLnNldEFsYXJtKCkuClR5cGUgImhlbHAgZXZlbnRzIiB0byBsZWFybiBhYm91dCB0aGUgZXZlbnQgc3lzdGVtLg==","isDir":false,"name":"os","size":0},"root/help/paint":{"data":"cGFpbnQgaXMgYSBwcm9ncmFtIGZvciBjcmVhdGluZyBpbWFnZXMgb24gQWR2YW5jZWQgQ29tcHV0ZXJzLiBTZWxlY3QgY29sb3JzIGZyb20gdGhlIGNvbG9yIHBhbGxldHRlIG9uIHRoZSByaWdodCwgYW5kIGNsaWNrIG9uIHRoZSBjYW52YXMgdG8gZHJhdy4gUHJlc3MgQ3RybCB0byBhY2Nlc3MgdGhlIG1lbnUgYW5kIHNhdmUgeW91ciBwaWN0dXJlcy4KCmV4OgoiZWRpdCBtYXJpbyIgb3BlbnMgYW4gaW1hZ2UgY2FsbGVkICJtYXJpbyIgZm9yIGVkaXRpbmcu","isDir":false,"name":"paint","size":0},"root/help/paintutils":{"data":"RnVuY3Rpb25zIGluIHRoZSBQYWludCBVdGlsaXRpZXMgQVBJOgpwYWludHV0aWxzLmRyYXdQaXhlbCggeCwgeSwgY29sb3VyICkKcGFpbnR1dGlscy5kcmF3TGluZSggc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGNvbG91ciApCnBhaW50dXRpbHMuZHJhd0JveCggc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGNvbG91ciApCnBhaW50dXRpbHMuZHJhd0ZpbGxlZEJveCggc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGNvbG91ciApCnBhaW50dXRpbHMubG9hZEltYWdlKCBwYXRoICkKcGFpbnR1dGlscy5kcmF3SW1hZ2UoIGltYWdlLCB4LCB5ICk=","isDir":false,"name":"paintutils","size":0},"root/help/parallel":{"data":"RnVuY3Rpb25zIGluIHRoZSBQYXJhbGxlbCBBUEk6CnBhcmFsbGVsLndhaXRGb3JBbnkoIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCAuLi4gKQpwYXJhbGxlbC53YWl0Rm9yQWxsKCBmdW5jdGlvbjEsIGZ1bmN0aW9uMiwgLi4uICkKVGhlc2UgbWV0aG9kcyBwcm92aWRlIGFuIGVhc3kgd2F5IHRvIHJ1biBtdWx0aXBsZSBsdWEgZnVuY3Rpb25zIHNpbXVsdGFuZW91c2x5Lg==","isDir":false,"name":"parallel","size":0},"root/help/pastebin":{"data":"cGFzdGViaW4gaXMgYSBwcm9ncmFtIGZvciB1cGxvYWRpbmcgZmlsZXMgdG8gYW5kIGRvd25sb2FkaW5nIGZpbGVzIGZyb20gcGFzdGViaW4uY29tLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2hhcmluZyBwcm9ncmFtcyB3aXRoIG90aGVyIHBsYXllcnMuClRoZSBIVFRQIEFQSSBtdXN0IGJlIGVuYWJsZWQgaW4gQ29tcHV0ZXJDcmFmdC5jZmcgdG8gdXNlIHRoaXMgcHJvZ3JhbS4KCmV4OgoicGFzdGViaW4gcHV0IGZvbyIgd2lsbCB1cGxvYWQgdGhlIGZpbGUgImZvbyIgdG8gcGFzdGViaW4uY29tLCBhbmQgcHJpbnQgdGhlIFVSTC4KInBhc3RlYmluIGdldCB4cTVnYzdMQiBmb28iIHdpbGwgZG93bmxvYWQgdGhlIGZpbGUgZnJvbSB0aGUgVVJMIGh0dHA6Ly9wYXN0ZWJpbi5jb20veHE1Z2M3TEIsIGFuZCBzYXZlIGl0IGFzICJmb28iLgoicGFzdGViaW4gcnVuIEN4YVdtUHJYIiB3aWxsIGRvd25sb2FkIHRoZSBmaWxlIGZyb20gdGhlIFVSTCBodHRwOi8vcGFzdGViaW4uY29tL0N4YVdtUHJYLCBhbmQgaW1tZWRpYXRlbHkgcnVuIGl0Lg==","isDir":false,"name":"pastebin","size":0},"root/help/peripheral":{"data":"VGhlIHBlcmlwaGVyYWwgQVBJIGlzIGZvciBpbnRlcmFjdGluZyB3aXRoIGV4dGVybmFsIHBlcmlwaGVyYWwgZGV2aWNlcy4gVHlwZSAiaGVscCBwZXJpcGhlcmFscyIgdG8gbGVhcm4gYWJvdXQgdGhlIHBlcmlwaGVyYWxzIGF2YWlsYWJsZS4KCkZ1bmN0aW9ucyBpbiB0aGUgcGVyaXBoZXJhbCBBUEk6CnBlcmlwaGVyYWwuZ2V0TmFtZXMoKQpwZXJpcGhlcmFsLmlzUHJlc2VudCggbmFtZSApCnBlcmlwaGVyYWwuZ2V0VHlwZSggbmFtZSApCnBlcmlwaGVyYWwuZ2V0TWV0aG9kcyggbmFtZSApCnBlcmlwaGVyYWwuY2FsbCggbmFtZSwgbWV0aG9kTmFtZSwgcGFyYW0xLCBwYXJhbTIsIGV0YyApCnBlcmlwaGVyYWwud3JhcCggbmFtZSApCnBlcmlwaGVyYWwuZmluZCggdHlwZSwgW2ZuRmlsdGVyXSApCgpFdmVudHMgZmlyZWQgYnkgdGhlIHBlcmlwaGVyYWwgQVBJOgoicGVyaXBoZXJhbCIgd2hlbiBhIG5ldyBwZXJpcGhlcmFsIGlzIGF0dGFjaGVkLiBBcmd1bWVudCBpcyB0aGUgbmFtZS4KInBlcmlwaGVyYWxfZGV0YWNoIiB3aGVuIGEgcGVyaXBoZXJhbCBpcyByZW1vdmVkLiBBcmd1bWVudCBpcyB0aGUgbmFtZS4KVHlwZSAiaGVscCBldmVudHMiIHRvIGxlYXJuIGFib3V0IHRoZSBldmVudCBzeXN0ZW0u","isDir":false,"name":"peripheral","size":0},"root/help/peripherals":{"data":"UGVyaXBoZXJhbHMgYXJlIGV4dGVybmFsIGRldmljZXMgd2hpY2ggQ3JhZnRPUyBDb21wdXRlcnMgYW5kIFR1cnRsZXMgY2FuIGludGVyYWN0IHdpdGggdXNpbmcgdGhlIHBlcmlwaGVyYWwgQVBJLgpUeXBlICJoZWxwIHBlcmlwaGVyYWwiIHRvIGxlYXJuIGFib3V0IHVzaW5nIHRoZSBwZXJpcGhlcmFsIEFQSS4KVHlwZSAiaGVscCBkcml2ZXMiIHRvIGxlYXJuIGFib3V0IHVzaW5nIERpc2sgRHJpdmVzLgpUeXBlICJoZWxwIG1vZGVtcyIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgV2lyZWxlc3MgTW9kZW1zLgpUeXBlICJoZWxwIG1vbml0b3JzIiB0byBsZWFybiBhYm91dCB1c2luZyBNb25pdG9ycy4KVHlwZSAiaGVscCBwcmludGVycyIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgUHJpbnRlcnMu","isDir":false,"name":"peripherals","size":0},"root/help/printers":{"data":"VGhlIFByaW50ZXIgaXMgYSBwZXJpcGhlcmFsIGRldmljZSBhdmFpbGFibGUgZm9yIENyYWZ0T1MuIFR5cGUgImhlbHAgcGVyaXBoZXJhbCIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgdGhlIFBlcmlwaGVyYWwgQVBJIHRvIGNvbm5lY3Qgd2l0aCBwZXJpcGhlcmFscy4gV2hlbiBhIFByaW50ZXIgaXMgY29ubmVjdGVkLCBwZXJpcGhlcmFsLmdldFR5cGUoKSB3aWxsIHJldHVybiAicHJpbnRlciIuCgpNZXRob2RzIGV4cG9zZWQgYnkgdGhlIFByaW50ZXI6CmdldElua0xldmVsKCkKZ2V0UGFwZXJMZXZlbCgpCm5ld1BhZ2UoKQpzZXRQYWdlVGl0bGUoIHRpdGxlICkKZ2V0UGFnZVNpemUoKQpzZXRDdXJzb3JQb3MoIHgsIHkgKQpnZXRDdXJzb3JQb3MoKQp3cml0ZSggdGV4dCApCmVuZFBhZ2UoKQ==","isDir":false,"name":"printers","size":0},"root/help/programming":{"data":"VG8gbGVhcm4gdGhlIGx1YSBwcm9ncmFtbWluZyBsYW5ndWFnZSwgdmlzaXQgaHR0cDovL2x1YS11c2Vycy5vcmcvd2lraS9UdXRvcmlhbERpcmVjdG9yeS4KClRvIGV4cGVyaW1lbnQgd2l0aCBsdWEgaW4gQ3JhZnRPUywgcnVuIHRoZSAibHVhIiBwcm9ncmFtIGFuZCBzdGFydCB0eXBpbmcgY29kZS4KVG8gY3JlYXRlIHByb2dyYW1zLCB1c2UgImVkaXQiIHRvIGNyZWF0ZSBmaWxlcywgdGhlbiB0eXBlIHRoZWlyIG5hbWVzIGluIHRoZSBzaGVsbCB0byBydW4gdGhlbS4gSWYgeW91IG5hbWUgYSBwcm9ncmFtICJzdGFydHVwIiBhbmQgcGxhY2UgaXQgaW4gdGhlIHJvb3Qgb3Igb24gYSBkaXNrIGRyaXZlLCBpdCB3aWxsIHJ1biBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbXB1dGVyIHN0YXJ0cy4KClRvIHRlcm1pbmF0ZSBhIHByb2dyYW0gc3R1Y2sgaW4gYSBsb29wLCBob2xkIEN0cmwrVCBmb3IgMSBzZWNvbmQuClRvIHF1aWNrbHkgc2h1dGRvd24gYSBjb21wdXRlciwgaG9sZCBDdHJsK1MgZm9yIDEgc2Vjb25kLgpUbyBxdWlja2x5IHJlYm9vdCBhIGNvbXB1dGVyLCBob2xkIEN0cmwrUiBmb3IgMSBzZWNvbmQuCgpUbyBsZWFybiBhYm91dCB0aGUgcHJvZ3JhbW1pbmcgQVBJcyBhdmFpbGlhYmxlLCB0eXBlICJhcGlzIiBvciAiaGVscCBhcGlzIi4KSWYgeW91IGdldCBzdHVjaywgdmlzaXQgdGhlIGZvcnVtcyBhdCBodHRwOi8vd3d3LmNvbXB1dGVyY3JhZnQuaW5mby8gZm9yIGFkdmljZSBhbmQgdHV0b3JpYWxzLg==","isDir":false,"name":"programming","size":0},"root/help/programs":{"data":"cHJvZ3JhbXMgbGlzdHMgYWxsIHRoZSBwcm9ncmFtcyBvbiB0aGUgcm9tIG9mIHRoZSBjb21wdXRlci4=","isDir":false,"name":"programs","size":0},"root/help/reboot":{"data":"cmVib290IHdpbGwgdHVybiB0aGUgY29tcHV0ZXIgb2ZmIGFuZCBvbiBhZ2Fpbi4KWW91IGNhbiBhbHNvIGhvbGQgQ3RybCtSIGF0IGFueSB0aW1lIHRvIHF1aWNrbHkgcmVib290Lg==","isDir":false,"name":"reboot","size":0},"root/help/redirection":{"data":"UmVkaXJlY3Rpb24gQ29tcHV0ZXJDcmFmdCBFZGl0aW9uIGlzIHRoZSBDcmFmdE9TIHZlcnNpb24gb2YgYSBmdW4gbmV3IHB1enpsZSBnYW1lIGJ5IERhbjIwMCwgdGhlIGF1dGhvciBvZiBDb21wdXRlckNyYWZ0LgpQbGF5IGl0IG9uIGFueSBBZHZhbmNlZCBDb21wdXRlciwgdGhlbiB2aXNpdCBodHRwOi8vd3d3LnJlZGlyZWN0aW9uZ2FtZS5jb20gdG8gcGxheSB0aGUgZnVsbCBnYW1lIQ==","isDir":false,"name":"redirection","size":0},"root/help/rednet":{"data":"VGhlIHJlZG5ldCBBUEkgcHJvdmlkZXMgYSBzaW1wbGUgY29tcHV0ZXIgbmV0d29ya2luZyBtb2RlbCB1c2luZyBtb2RlbXMuCgpGdW5jdGlvbnMgaW4gdGhlIHJlZG5ldCBBUEk6CnJlZG5ldC5vcGVuKCBzaWRlICkKcmVkbmV0LmNsb3NlKCBbc2lkZV0gKQpyZWRuZXQuaXNPcGVuKCBbc2lkZV0gKQpyZWRuZXQuc2VuZCggcmVjZWl2ZXJJRCwgbWVzc2FnZSwgW3Byb3RvY29sXSApIC0tIFNlbmQgdG8gYSBzcGVjaWZpYyBjb21wdXRlcgpyZWRuZXQuYnJvYWRjYXN0KCBtZXNzYWdlLCBbcHJvdG9jb2xdICkgLS0gU2VuZCB0byBhbGwgY29tcHV0ZXJzCnJlZG5ldC5yZWNlaXZlKCBbcHJvdG9jb2xdLCBbdGltZW91dF0gKSAtLSBSZXR1cm5zOiBzZW5kZXJJRCwgbWVzc2FnZSwgcHJvdG9jb2wKcmVkbmV0Lmhvc3QoIHByb3RvY29sLCBob3N0bmFtZSApCnJlZG5ldC51bmhvc3QoIHByb3RvY29sICkKcmVkbmV0Lmxvb2t1cCggcHJvdG9jb2wsIFtob3N0bmFtZV0gKSAtLSBSZXR1cm5zOiBJRAoKRXZlbnRzIGZpcmVkIGJ5IHRoZSByZWRuZXQgQVBJOgoicmVkbmV0X21lc3NhZ2UiIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkLiBBcmd1bWVudHMgYXJlIHNlbmRlcklELCBtZXNzYWdlLCBwcm90b2NvbApUeXBlICJoZWxwIGV2ZW50cyIgdG8gbGVhcm4gYWJvdXQgdGhlIGV2ZW50IHN5c3RlbS4KClJlZG5ldCBpcyBub3QgdGhlIG9ubHkgd2F5IHRvIHVzZSBtb2RlbXMgZm9yIG5ldHdvcmtpbmcuIEludGVyZmFjaW5nIHdpdGggdGhlIG1vZGVtIGRpcmVjdGx5IHVzaW5nIHRoZSBwZXJpcGhlcmFsIEFQSSBhbmQgbGlzdGVuaW5nIGZvciB0aGUgIm1vZGVtX21lc3NhZ2UiIGV2ZW50IGFsbG93cyBmb3IgbG93ZXIgbGV2ZWwgY29udHJvbCwgYXQgdGhlIGV4cGVuc2Ugb2YgcG93ZXJmdWwgaGlnaCBsZXZlbCBuZXR3b3JraW5nIGZlYXR1cmVzLg==","isDir":false,"name":"rednet","size":0},"root/help/redstone":{"data":"VGhlIHJlZHN0b25lIHByb2dyYW0gY2FuIGJlIHVzZWQgdG8gZ2V0LCBzZXQgb3IgcHVsc2UgcmVkc3RvbmUgaW5wdXRzIGFuZCBvdXRwdXRzIGZyb20gdGhlIGNvbXB1dGVyLgoKZXg6CiJyZWRzdG9uZSBwcm9iZSIgd2lsbCBsaXN0IGFsbCB0aGUgcmVkc3RvbmUgaW5wdXRzIHRvIHRoZSBjb21wdXRlcgoicmVkc3RvbmUgc2V0IGxlZnQgdHJ1ZSIgdHVybnMgb24gdGhlIGxlZnQgcmVkc3RvbmUgb3V0cHV0LgoicmVkc3RvbmUgc2V0IHJpZ2h0IGJsdWUgZmFsc2UiIHR1cm5zIG9mZiB0aGUgYmx1ZSB3aXJlIGluIHRoZSBidW5kbGVkIGNhYmxlIG9uIHRoZSByaWdodCByZWRzdG9uZSBvdXRwdXQuCiJyZWRzdG9uZSBwdWxzZSBmcm9udCAxMCAxIiBlbWl0cyAxMCBvbmUgc2Vjb25kIHJlZHN0b25lIHB1bHNlcyBvbiB0aGUgZnJvbnQgcmVkc3RvbmUgb3V0cHV0LgoKVHlwZSAiaGVscCByZWRzdG9uZWFwaSIgb3IgImhlbHAgcnMiIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgcmVkc3RvbmUgTHVhIEFQSS4=","isDir":false,"name":"redstone","size":0},"root/help/redstoneapi":{"data":"RnVuY3Rpb25zIGluIHRoZSBSZWRzdG9uZSBBUEk6CnJlZHN0b25lLmdldFNpZGVzKCApCnJlZHN0b25lLmdldElucHV0KCBzaWRlICkKcmVkc3RvbmUuc2V0T3V0cHV0KCBzaWRlLCBib29sZWFuICkKcmVkc3RvbmUuZ2V0T3V0cHV0KCBzaWRlICkKcmVkc3RvbmUuZ2V0QW5hbG9nSW5wdXQoIHNpZGUgKQpyZWRzdG9uZS5zZXRBbmFsb2dPdXRwdXQoIHNpZGUsIG51bWJlciApCnJlZHN0b25lLmdldEFuYWxvZ091dHB1dCggc2lkZSApCgpGdW5jdGlvbnMgaW4gdGhlIFJlZHN0b25lIEFQSSBmb3Igd29ya2luZyB3aXRoIGJ1bmRsZWQgY2FibGVzOgpyZWRzdG9uZS5nZXRCdW5kbGVkSW5wdXQoIHNpZGUgKQpyZWRzdG9uZS50ZXN0QnVuZGxlZElucHV0KCBzaWRlLCBjb2xvciApCnJlZHN0b25lLnNldEJ1bmRsZWRPdXRwdXQoIHNpZGUsIGNvbG9ycyApCnJlZHN0b25lLmdldEJ1bmRsZWRPdXRwdXQoIHNpZGUgKQpUeXBlICJoZWxwIGJ1bmRsZWQiIGZvciB1c2FnZSBleGFtcGxlcy4KCkV2ZW50cyBlbWl0dGVkIGJ5IHRoZSByZWRzdG9uZSBBUEk6CiJyZWRzdG9uZSIsIHdoZW4gdGhlIHN0YXRlIG9mIGFueSByZWRzdG9uZSBpbnB1dCBjaGFuZ2VzLiBVc2UgZ2V0SW5wdXQoKSBvciBnZXRCdW5kbGVkSW5wdXQoKSB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzClR5cGUgImhlbHAgZXZlbnRzIiB0byBsZWFybiBhYm91dCB0aGUgZXZlbnQgc3lzdGVtLg==","isDir":false,"name":"redstoneapi","size":0},"root/help/refuel":{"data":"cmVmdWVsIGlzIGEgcHJvZ3JhbSBmb3IgVHVydGxlcy4gUmVmdWVsIHdpbGwgY29uc3VtZSBpdGVtcyBmcm9tIHRoZSBpbnZlbnRvcnkgYXMgZnVlbCBmb3IgdHVydGxlLgoKZXg6CiJyZWZ1ZWwiIHdpbGwgcmVmdWVsIHdpdGggYXQgbW9zdCBvbmUgZnVlbCBpdGVtCiJyZWZ1ZWwgMTAiIHdpbGwgcmVmdWVsIHdpdGggYXQgbW9zdCAxMCBmdWVsIGl0ZW1zCiJyZWZ1ZWwgYWxsIiB3aWxsIHJlZnVlbCB3aXRoIGFzIG1hbnkgZnVlbCBpdGVtcyBhcyBwb3NzaWJsZQ==","isDir":false,"name":"refuel","size":0},"root/help/rename":{"data":"cmVuYW1lIHJlbmFtZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS4KCmV4OgoicmVuYW1lIGZvbyBiYXIiIHJlbmFtZXMgdGhlIGZpbGUgImZvbyIgdG8gImJhciIu","isDir":false,"name":"rename","size":0},"root/help/repeat":{"data":"cmVwZWF0IGlzIGEgcHJvZ3JhbSBmb3IgcmVwZWF0aW5nIHJlZG5ldCBtZXNzYWdlcyBhY3Jvc3MgbG9uZyBkaXN0YW5jZXMuIFRvIHVzZSwgY29ubmVjdCAyIG9yIG1vcmUgbW9kZW1zIHRvIGEgY29tcHV0ZXIgYW5kIHJ1biB0aGUgInJlcGVhdCIgcHJvZ3JhbTsgZnJvbSB0aGVuIG9uLCBhbnkgcmVkbmV0IG1lc3NhZ2Ugc2VudCBmcm9tIGFueSBjb21wdXRlciBpbiB3aXJlbGVzcyByYW5nZSBvciBjb25uZWN0ZWQgYnkgbmV0d29ya2luZyBjYWJsZSB0byBlaXRoZXIgb2YgdGhlIG1vZGVtcyB3aWxsIGJlIHJlcGVhdGVkIHRvIHRob3NlIG9uIHRoZSBvdGhlciBzaWRlLg==","isDir":false,"name":"repeat","size":0},"root/help/rs":{"data":"RnVuY3Rpb25zIGluIHRoZSBSZWRzdG9uZSBBUEk6CnJzLmdldFNpZGVzKCApCnJzLmdldElucHV0KCBzaWRlICkKcnMuc2V0T3V0cHV0KCBzaWRlLCBib29sZWFuICkKcnMuZ2V0T3V0cHV0KCBzaWRlICkKcnMuZ2V0QW5hbG9nSW5wdXQoIHNpZGUgKQpycy5zZXRBbmFsb2dPdXRwdXQoIHNpZGUsIG51bWJlciApCnJzLmdldEFuYWxvZ091dHB1dCggc2lkZSApCgpGdW5jdGlvbnMgaW4gdGhlIFJlZHN0b25lIEFQSSBmb3Igd29ya2luZyB3aXRoIFJlZFBvd2VyIGJ1bmRsZWQgY2FibGVzOgpycy5nZXRCdW5kbGVkSW5wdXQoIHNpZGUgKQpycy50ZXN0QnVuZGxlZElucHV0KCBzaWRlLCBjb2xvciApCnJzLnNldEJ1bmRsZWRPdXRwdXQoIHNpZGUsIGNvbG9ycyApCnJzLmdldEJ1bmRsZWRPdXRwdXQoIHNpZGUgKQpUeXBlICJoZWxwIGJ1bmRsZWQiIGZvciB1c2FnZSBleGFtcGxlcy4KCkV2ZW50cyBlbWl0dGVkIGJ5IHRoZSByZWRzdG9uZSBBUEk6CiJyZWRzdG9uZSIsIHdoZW4gdGhlIHN0YXRlIG9mIGFueSByZWRzdG9uZSBpbnB1dCBjaGFuZ2VzLiBVc2UgZ2V0SW5wdXQoKSBvciBnZXRCdW5kbGVkSW5wdXQoKSB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzClR5cGUgImhlbHAgZXZlbnRzIiB0byBsZWFybiBhYm91dCB0aGUgZXZlbnQgc3lzdGVtLg==","isDir":false,"name":"rs","size":0},"root/help/shell":{"data":"c2hlbGwgaXMgdGhlIHRvcGxldmVsIHByb2dyYW0gd2hpY2ggaW50ZXJwcmV0cyBjb21tYW5kcyBhbmQgcnVucyBwcm9ncmFtLgpUeXBlICJoZWxwIHNoZWxsYXBpIiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNoZWxsIGx1YSBhcGku","isDir":false,"name":"shell","size":0},"root/help/shellapi":{"data":"RnVuY3Rpb25zIGluIHRoZSBTaGVsbCBBUEk6CnNoZWxsLmV4aXQoKQpzaGVsbC5kaXIoKQpzaGVsbC5zZXREaXIoIHBhdGggKQpzaGVsbC5wYXRoKCkKc2hlbGwuc2V0UGF0aCggcGF0aCApCnNoZWxsLnJlc29sdmUoIGxvY2FscGF0aCApCnNoZWxsLnJlc29sdmVQcm9ncmFtKCBuYW1lICkKc2hlbGwuYWxpYXNlcygpCnNoZWxsLnNldEFsaWFzKCBhbGlhcywgY29tbWFuZCApCnNoZWxsLmNsZWFyQWxpYXMoIGFsaWFzICkKc2hlbGwucHJvZ3JhbXMoKQpzaGVsbC5ydW4oIHByb2dyYW0sIGFyZ3VtZW50cyApCnNoZWxsLmdldFJ1bm5pbmdQcm9ncmFtKCkKc2hlbGwub3BlblRhYiggcHJvZ3JhbSwgYXJndW1lbnRzICkgKEFkdmFuY2VkIENvbXB1dGVyIHJlcXVpcmVkKQpzaGVsbC5zd2l0Y2hUYWIoIG4gKSAoQWR2YW5jZWQgQ29tcHV0ZXIgcmVxdWlyZWQp","isDir":false,"name":"shellapi","size":0},"root/help/shutdown":{"data":"c2h1dGRvd24gd2lsbCB0dXJuIG9mZiB0aGUgY29tcHV0ZXIu","isDir":false,"name":"shutdown","size":0},"root/help/sleep":{"data":"c2xlZXAgbWFrZXMgdGhlIGNvbXB1dGVyIGlkbGUgZm9yIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHNlY29uZHMuCgpleDoKInNsZWVwIDEwIiBwdXRzIHRoZSBjb21wdXRlciB0byBzbGVlcCBmb3IgMTAgc2Vjb25kcw==","isDir":false,"name":"sleep","size":0},"root/help/string":{"data":"c3RyaW5nIGlzIGEgc3RhbmRhcmQgTHVhNS4xIEFQSS4KUmVmZXIgdG8gaHR0cDovL3d3dy5sdWEub3JnL21hbnVhbC81LjEvIGZvciBtb3JlIGluZm9ybWF0aW9uLg==","isDir":false,"name":"string","size":0},"root/help/table":{"data":"dGFibGUgaXMgYSBzdGFuZGFyZCBMdWE1LjEgQVBJLgpSZWZlciB0byBodHRwOi8vd3d3Lmx1YS5vcmcvbWFudWFsLzUuMS8gZm9yIG1vcmUgaW5mb3JtYXRpb24u","isDir":false,"name":"table","size":0},"root/help/term":{"data":"RnVuY3Rpb25zIGluIHRoZSBUZXJtaW5hbCBBUEk6CnRlcm0ud3JpdGUoIHRleHQgKQp0ZXJtLmNsZWFyKCkKdGVybS5jbGVhckxpbmUoKQp0ZXJtLmdldEN1cnNvclBvcygpCnRlcm0uc2V0Q3Vyc29yUG9zKCB4LCB5ICkKdGVybS5zZXRDdXJzb3JCbGluayggYmxpbmsgKQp0ZXJtLmlzQ29sb3IoKQp0ZXJtLnNldFRleHRDb2xvciggY29sb3IgKQp0ZXJtLnNldEJhY2tncm91bmRDb2xvciggY29sb3IgKQp0ZXJtLmdldFNpemUoKQp0ZXJtLnNjcm9sbCggbiApCnRlcm0ucmVkaXJlY3QoIG9iamVjdCApCnRlcm0uY3VycmVudCgpCgpFdmVudHMgZW1pdHRlZCBieSB0aGUgdGVybWluYWxzOgoidGVybV9yZXNpemUiLCB3aGVuIHRoZSBzaXplIG9mIGEgdGVybWluYWwgY2hhbmdlcy4gVGhpcyBjYW4gaGFwcGVuIGluIG11bHRpdGFza2luZyBlbnZpcm9ubWVudHMsIG9yIHdoZW4gdGhlIHRlcm1pbmFsIG91dCBpcyBiZWluZyByZWRpcmVjdGVkIGJ5IHRoZSAibW9uaXRvciIgcHJvZ3JhbS4=","isDir":false,"name":"term","size":0},"root/help/textutils":{"data":"RnVuY3Rpb25zIGluIHRoZSBUZXh0IFV0aWxpdGllcyBBUEk6CnRleHR1dGlscy5zbG93UHJpbnQoIHRleHQgKQp0ZXh0dXRpbHMudGFidWxhdGUoIHRhYmxlLCB0YWJsZTIsIC4uLiApCnRleHR1dGlscy5wYWdlZFRhYnVsYXRlKCB0YWJsZSwgdGFibGUyLCAuLi4gKQp0ZXh0dXRpbHMuZm9ybWF0VGltZSggdGltZSwgYlR3ZW50eUZvdXJIb3VyICkKdGV4dHV0aWxzLnNlcmlhbGl6ZSggdGFibGUgKQp0ZXh0dXRpbHMudW5zZXJpYWxpemUoIHN0cmluZyApCnRleHR1dGlscy51cmxFbmNvZGUoIHN0cmluZyAp","isDir":false,"name":"textutils","size":0},"root/help/time":{"data":"dGltZSBwcmludHMgdGhlIGN1cnJlbnQgdGltZSBvZiBkYXku","isDir":false,"name":"time","size":0},"root/help/tunnel":{"data":"dHVubmVsIGlzIGEgcHJvZ3JhbSBmb3IgTWluaW5nIFR1cnRsZXMuIFR1bm5lbCB3aWxsIG1pbmUgYSAzeDIgdHVubmVsIG9mIHRoZSBkZXB0aCBzcGVjaWZpZWQuCgpleDoKInR1bm5lbCAyMCIgd2lsbCB0dW5uZWwgYSB0dW5uZWwgMjAgYmxvY2tzIGxvbmcu","isDir":false,"name":"tunnel","size":0},"root/help/turn":{"data":"dHVybiBpcyBhIHByb2dyYW0gZm9yIFR1cnRsZXMsIHVzZWQgdG8gdHVybiB0aGUgdHVydGxlIGFyb3VuZCB3aXRob3V0IHByb2dyYW1taW5nLiBJdCBhY2NlcHRzIG9uZSBvciBtb3JlIGNvbW1hbmRzIGFzIGEgZGlyZWN0aW9uIGFuZCBhIG51bWJlciBvZiB0dXJucy4gVGhlICJnbyIgcHJvZ3JhbSBjYW4gYWxzbyBiZSB1c2VkIGZvciB0dXJuaW5nLgoKZXg6CiJ0dXJuIGxlZnQiIHR1cm5zIHRoZSB0dXJ0bGUgOTAgZGVncmVlcyBsZWZ0LgoidHVybiByaWdodCAyIiB0dXJucyB0aGUgdHVydGxlIDE4MCBkZWdyZWVzIHJpZ2h0LgoidHVybiBsZWZ0IDIgcmlnaHQiIHR1cm5zIGxlZnQgMTgwIGRlZ3JlZXMsIHRoZW4gcmlnaHQgOTAgZGVncmVlcy4=","isDir":false,"name":"turn","size":0},"root/help/turtle":{"data":"dHVydGxlIGlzIGFuIGFwaSBhdmFpbGlhYmxlIG9uIFR1cnRsZXMsIHdoaWNoIGNvbnRyb2xzIHRoZWlyIG1vdmVtZW50LgpGdW5jdGlvbnMgaW4gdGhlIFR1cnRsZSBBUEk6CnR1cnRsZS5mb3J3YXJkKCkKdHVydGxlLmJhY2soKQp0dXJ0bGUudXAoKQp0dXJ0bGUuZG93bigpCnR1cnRsZS50dXJuTGVmdCgpCnR1cnRsZS50dXJuUmlnaHQoKQp0dXJ0bGUuc2VsZWN0KCBzbG90TnVtICkKdHVydGxlLmdldFNlbGVjdGVkU2xvdCgpCnR1cnRsZS5nZXRJdGVtQ291bnQoIFtzbG90TnVtXSApCnR1cnRsZS5nZXRJdGVtU3BhY2UoIFtzbG90TnVtXSApCnR1cnRsZS5nZXRJdGVtRGV0YWlsKCBbc2xvdE51bV0gKQp0dXJ0bGUuZXF1aXBMZWZ0KCkKdHVydGxlLmVxdWlwUmlnaHQoKQp0dXJ0bGUuZGlnKCBbdG9vbFNpZGVdICkKdHVydGxlLmRpZ1VwKCBbdG9vbFNpZGVdICkKdHVydGxlLmRpZ0Rvd24oIFt0b29sU2lkZV0gKQp0dXJ0bGUucGxhY2UoKQp0dXJ0bGUucGxhY2VVcCgpCnR1cnRsZS5wbGFjZURvd24oKQp0dXJ0bGUuYXR0YWNrKCBbdG9vbFNpZGVdICkKdHVydGxlLmF0dGFja1VwKCBbdG9vbFNpZGVdICkKdHVydGxlLmF0dGFja0Rvd24oIFt0b29sU2lkZV0gKQp0dXJ0bGUuZGV0ZWN0KCkKdHVydGxlLmRldGVjdFVwKCkKdHVydGxlLmRldGVjdERvd24oKQp0dXJ0bGUuY29tcGFyZSgpCnR1cnRsZS5jb21wYXJlVXAoKQp0dXJ0bGUuY29tcGFyZURvd24oKQp0dXJ0bGUuaW5zcGVjdCgpCnR1cnRsZS5pbnNwZWN0VXAoKQp0dXJ0bGUuaW5zcGVjdERvd24oKQp0dXJ0bGUuaW5zcGVjdFNsb3QoIFtzbG90TnVtXSApCnR1cnRsZS5jb21wYXJlVG8oIHNsb3ROdW0gKQp0dXJ0bGUudHJhbnNmZXJUbyggc2xvdE51bSwgW3F1YW50aXR5XSApCnR1cnRsZS5kcm9wKCBbcXVhbnRpdHldICkKdHVydGxlLmRyb3BVcCggW3F1YW50aXR5XSApCnR1cnRsZS5kcm9wRG93biggW3F1YW50aXR5XSApCnR1cnRsZS5zdWNrKCBbcXVhbnRpdHldICkKdHVydGxlLnN1Y2tVcCggW3F1YW50aXR5XSApCnR1cnRsZS5zdWNrRG93biggW3F1YW50aXR5XSApCnR1cnRsZS5nZXRGdWVsTGV2ZWwoKQp0dXJ0bGUuZ2V0RnVlbExpbWl0KCkKdHVydGxlLnJlZnVlbCggW3F1YW50aXR5XSApCnR1cnRsZS5jcmFmdCggW3F1YW50aXR5XSApIChyZXF1aXJlcyBDcmFmdHkgVHVydGxlKQoKRXZlbnRzIGZpcmVkIGJ5IHRoZSBUdXJ0bGUgQVBJOgoidHVydGxlX2ludmVudG9yeSIgd2hlbiBhbnkgb2YgdGhlIGl0ZW1zIGluIHRoZSBpbnZlbnRvcnkgYXJlIGNoYW5nZWQuIFVzZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgdG8gaW5zcGVjdCB0aGUgY2hhbmdlcy4=","isDir":false,"name":"turtle","size":0},"root/help/type":{"data":"dHlwZSBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkuIFByaW50cyAiZmlsZSIsICJkaXJlY3RvcnkiIG9yICJkb2VzIG5vdCBleGlzdCIu","isDir":false,"name":"type","size":0},"root/help/unequip":{"data":"dW5lcXVpcCBpcyBhIHByb2dyYW0gZm9yIFR1cnRsZXMuIHVuZXF1aXAgd2lsbCByZW1vdmUgdG9vbHMgb2YgcGVyaXBoZXJhbHMgZnJvbSB0aGUgc3BlY2lmaWVkIHNpZGUgb2YgdGhlIHR1cnRsZS4KCmV4OgoidW5lcXVpcCBsZWZ0IiB3aWxsIHJlbW92ZSB0aGUgaXRlbSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0dXJ0bGU=","isDir":false,"name":"unequip","size":0},"root/help/vector":{"data":"RnVuY3Rpb25zIGluIHRoZSAzRCBWZWN0b3IgTWF0aCBBUEk6CnZlY3Rvci5uZXcoIHgseSx6ICkKClZlY3RvcnMgcmV0dXJuZWQgYnkgdmVjdG9yLm5ldygpIGhhdmUgdGhlIGZvbGxvd2luZyBmaWVsZHMgYW5kIG1ldGhvZHM6CnZlY3Rvci54CnZlY3Rvci55CnZlY3Rvci56CnZlY3RvcjphZGQoIHZlY3RvciApCnZlY3RvcjpzdWIoIHZlY3RvciApCnZlY3RvcjptdWwoIG51bWJlciApCnZlY3Rvcjpkb3QoIHZlY3RvciApCnZlY3Rvcjpjcm9zcyggdmVjdG9yICkKdmVjdG9yOmxlbmd0aCgpCnZlY3Rvcjpub3JtYWxpemUoKQp2ZWN0b3I6cm91bmQoKQp2ZWN0b3I6dG9zdHJpbmcoKQpUaGUgKywgLSBhbmQgKiBvcGVyYXRvcnMgY2FuIGFsc28gYmUgdXNlZCBvbiB2ZWN0b3JzLg==","isDir":false,"name":"vector","size":0},"root/help/whatsnew":{"data":"TmV3IEZlYXR1cmVzIGluIENvbXB1dGVyQ3JhZnQgMS42NToKCiogRml4ZWQgYSBtdWx0aXBsYXllci1vbmx5IGNyYXNoIHdpdGggdHVydGxlLnBsYWNlKCkKKiBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggaHR0cC5wb3N0KCkKKiBGaXhlZCBmcy5nZXREcml2ZSgpIHJldHVybmluZyBpbmNvcnJlY3QgcmVzdWx0cyBvbiByZW1vdGUgcGVyaXBoZXJhbHMKClR5cGUgImhlbHAgY2hhbmdlbG9nIiB0byBzZWUgdGhlIGZ1bGwgdmVyc2lvbiBoaXN0b3J5Lg==","isDir":false,"name":"whatsnew","size":0},"root/help/window":{"data":"RnVuY3Rpb25zIGluIHRoZSB3aW5kb3cgQVBJOgp3aW5kb3cuY3JlYXRlKCBwYXJlbnQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHZpc2libGUgKQoKV2luZG93cyBjcmVhdGVkIHdpdGggdGhlIHdpbmRvdyBBUEkgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CndyaXRlKCB0ZXh0ICkKY2xlYXIoKQpjbGVhckxpbmUoKQpnZXRDdXJzb3JQb3MoKQpzZXRDdXJzb3JQb3MoIHgsIHkgKQpzZXRDdXJzb3JCbGluayggYmxpbmsgKQppc0NvbG9yKCkKc2V0VGV4dENvbG9yKCBjb2xvciApCnNldEJhY2tncm91bmRDb2xvciggY29sb3IgKQpnZXRTaXplKCkKc2Nyb2xsKCBuICkKc2V0VmlzaWJsZSggYlZpc2libGUgKQpyZWRyYXcoKQpyZXN0b3JlQ3Vyc29yKCkKZ2V0UG9zaXRpb24oKQpyZXBvc2l0aW9uKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk=","isDir":false,"name":"window","size":0},"root/help/workbench":{"data":"V29ya2JlbmNoZXMgYXJlIHBlcmlwaGVyYWwgZGV2aWNlcyBmb3VuZCBvbiBDcmFmdHkgVHVydGxlcyBydW5uaW5nIENyYWZ0T1MuIFR5cGUgImhlbHAgcGVyaXBoZXJhbCIgdG8gbGVhcm4gYWJvdXQgdXNpbmcgdGhlIFBlcmlwaGVyYWwgQVBJIHRvIGNvbm5lY3Qgd2l0aCBwZXJpcGhlcmFscy4gV2hlbiBhIHdvcmtiZW5jaCBpcyBhdHRhY2hlZCB0byBhIHR1cnRsZSwgcGVyaXBoZXJhbC5nZXRUeXBlKCkgd2lsbCByZXR1cm4gIndvcmtiZW5jaCIuCgpNZXRob2RzIGV4cG9zZWQgYnkgV29ya2JlbmNoZXM6CmNyYWZ0KCBjaGFubmVsICk=","isDir":false,"name":"workbench","size":0},"root/help/worm":{"data":"WW91J3ZlIHBsYXllZCBpdCBpbiB0aGUgYXJjYWRlcywgbm93IGV4cGVyaWVuY2UgdGhlIGhpZ2gtb2N0YW5lIHRocmlsbHMgb2YgdGhlIGhpdCBnYW1lICJXT1JNISIgb24geW91ciBob21lIGNvbXB1dGVyISBPbmx5IG9uIENyYWZ0T1Mh","isDir":false,"name":"worm","size":0},"root/programs":{"children":["advanced","alias","apis","cd","clear","copy","delete","drive","edit","eject","exit","fun","gps","help","id","label","list","lua","mkdir","monitor","move","programs","reboot","rednet","redstone","rename","shell","shutdown","time","turtle","type"],"isDir":true,"name":"programs","parents":["/root","/root/programs"],"size":0},"root/programs/advanced":{"children":["bg","fg","multishell"],"isDir":true,"name":"advanced","parents":["/root","/root/programs","/root/programs/advanced"],"size":0},"root/programs/advanced/bg":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPiAwIHRoZW4KICAgIHNoZWxsLm9wZW5UYWIoIHVucGFjayggdEFyZ3MgKSApCmVsc2UKICAgIHNoZWxsLm9wZW5UYWIoICJzaGVsbCIgKQplbmQ=","isDir":false,"name":"bg","size":0},"root/programs/advanced/fg":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPiAwIHRoZW4KICAgIGxvY2FsIG5UYXNrID0gc2hlbGwub3BlblRhYiggdW5wYWNrKCB0QXJncyApICkKICAgIGlmIG5UYXNrIHRoZW4KICAgICAgICBzaGVsbC5zd2l0Y2hUYWIoIG5UYXNrICkKICAgIGVuZAplbHNlCiAgICBsb2NhbCBuVGFzayA9IHNoZWxsLm9wZW5UYWIoICJzaGVsbCIgKQogICAgaWYgblRhc2sgdGhlbgogICAgICAgIHNoZWxsLnN3aXRjaFRhYiggblRhc2sgKQogICAgZW5kCmVuZA==","isDir":false,"name":"fg","size":0},"root/programs/advanced/multishell":{"data":"Ci0tIFNldHVwIHByb2Nlc3Mgc3dpdGNoaW5nCmxvY2FsIHBhcmVudFRlcm0gPSB0ZXJtLmN1cnJlbnQoKQpsb2NhbCB3LGggPSBwYXJlbnRUZXJtLmdldFNpemUoKQoKbG9jYWwgdFByb2Nlc3NlcyA9IHt9CmxvY2FsIG5DdXJyZW50UHJvY2VzcyA9IG5pbApsb2NhbCBuUnVubmluZ1Byb2Nlc3MgPSBuaWwKbG9jYWwgYlNob3dNZW51ID0gZmFsc2UKbG9jYWwgYldpbmRvd3NSZXNpemVkID0gZmFsc2UKCmxvY2FsIGZ1bmN0aW9uIHNlbGVjdFByb2Nlc3MoIG4gKQogICAgaWYgbkN1cnJlbnRQcm9jZXNzIH49IG4gdGhlbgogICAgICAgIGlmIG5DdXJyZW50UHJvY2VzcyB0aGVuCiAgICAgICAgICAgIGxvY2FsIHRPbGRQcm9jZXNzID0gdFByb2Nlc3Nlc1sgbkN1cnJlbnRQcm9jZXNzIF0KICAgICAgICAgICAgdE9sZFByb2Nlc3Mud2luZG93LnNldFZpc2libGUoIGZhbHNlICkKICAgICAgICBlbmQKICAgICAgICBuQ3VycmVudFByb2Nlc3MgPSBuCiAgICAgICAgaWYgbkN1cnJlbnRQcm9jZXNzIHRoZW4KICAgICAgICAgICAgbG9jYWwgdE5ld1Byb2Nlc3MgPSB0UHJvY2Vzc2VzWyBuQ3VycmVudFByb2Nlc3MgXQogICAgICAgICAgICB0TmV3UHJvY2Vzcy53aW5kb3cuc2V0VmlzaWJsZSggdHJ1ZSApCiAgICAgICAgICAgIHROZXdQcm9jZXNzLmJJbnRlcmFjdGVkID0gdHJ1ZQogICAgICAgIGVuZAogICAgZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gc2V0UHJvY2Vzc1RpdGxlKCBuLCBzVGl0bGUgKQogICAgdFByb2Nlc3Nlc1sgbiBdLnNUaXRsZSA9IHNUaXRsZQplbmQKCmxvY2FsIGZ1bmN0aW9uIHJlc3VtZVByb2Nlc3MoIG5Qcm9jZXNzLCBzRXZlbnQsIC4uLiApCiAgICBsb2NhbCB0UHJvY2VzcyA9IHRQcm9jZXNzZXNbIG5Qcm9jZXNzIF0KICAgIGxvY2FsIHNGaWx0ZXIgPSB0UHJvY2Vzcy5zRmlsdGVyCiAgICBpZiBzRmlsdGVyID09IG5pbCBvciBzRmlsdGVyID09IHNFdmVudCBvciBzRXZlbnQgPT0gInRlcm1pbmF0ZSIgdGhlbgogICAgICAgIGxvY2FsIG5QcmV2aW91c1Byb2Nlc3MgPSBuUnVubmluZ1Byb2Nlc3MKICAgICAgICBuUnVubmluZ1Byb2Nlc3MgPSBuUHJvY2VzcwogICAgICAgIHRlcm0ucmVkaXJlY3QoIHRQcm9jZXNzLnRlcm1pbmFsICkKICAgICAgICBsb2NhbCBvaywgcmVzdWx0ID0gY29yb3V0aW5lLnJlc3VtZSggdFByb2Nlc3MuY28sIHNFdmVudCwgLi4uICkKICAgICAgICB0UHJvY2Vzcy50ZXJtaW5hbCA9IHRlcm0uY3VycmVudCgpCiAgICAgICAgaWYgb2sgdGhlbgogICAgICAgICAgICB0UHJvY2Vzcy5zRmlsdGVyID0gcmVzdWx0CiAgICAgICAgZWxzZQogICAgICAgICAgICBwcmludEVycm9yKCByZXN1bHQgKQogICAgICAgIGVuZAogICAgICAgIG5SdW5uaW5nUHJvY2VzcyA9IG5QcmV2aW91c1Byb2Nlc3MKICAgIGVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIGxhdW5jaFByb2Nlc3MoIHRQcm9ncmFtRW52LCBzUHJvZ3JhbVBhdGgsIC4uLiApCiAgICBsb2NhbCB0UHJvZ3JhbUFyZ3MgPSB7IC4uLiB9CiAgICBsb2NhbCBuUHJvY2VzcyA9ICN0UHJvY2Vzc2VzICsgMQogICAgbG9jYWwgdFByb2Nlc3MgPSB7fQogICAgdFByb2Nlc3Muc1RpdGxlID0gZnMuZ2V0TmFtZSggc1Byb2dyYW1QYXRoICkKICAgIGlmIGJTaG93TWVudSB0aGVuCiAgICAgICAgdFByb2Nlc3Mud2luZG93ID0gd2luZG93LmNyZWF0ZSggcGFyZW50VGVybSwgMSwgMiwgdywgaC0xLCBmYWxzZSApCiAgICBlbHNlCiAgICAgICAgdFByb2Nlc3Mud2luZG93ID0gd2luZG93LmNyZWF0ZSggcGFyZW50VGVybSwgMSwgMSwgdywgaCwgZmFsc2UgKQogICAgZW5kCiAgICB0UHJvY2Vzcy5jbyA9IGNvcm91dGluZS5jcmVhdGUoIGZ1bmN0aW9uKCkKICAgICAgICBvcy5ydW4oIHRQcm9ncmFtRW52LCBzUHJvZ3JhbVBhdGgsIHVucGFjayggdFByb2dyYW1BcmdzICkgKQogICAgICAgIGlmIG5vdCB0UHJvY2Vzcy5iSW50ZXJhY3RlZCB0aGVuCiAgICAgICAgICAgIHRlcm0uc2V0Q3Vyc29yQmxpbmsoIGZhbHNlICkKICAgICAgICAgICAgcHJpbnQoICJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIiApCiAgICAgICAgICAgIG9zLnB1bGxFdmVudCggImNoYXIiICkKICAgICAgICBlbmQKICAgIGVuZCApCiAgICB0UHJvY2Vzcy5zRmlsdGVyID0gbmlsCiAgICB0UHJvY2Vzcy50ZXJtaW5hbCA9IHRQcm9jZXNzLndpbmRvdwogICAgdFByb2Nlc3MuYkludGVyYWN0ZWQgPSBmYWxzZQogICAgdFByb2Nlc3Nlc1sgblByb2Nlc3MgXSA9IHRQcm9jZXNzCiAgICByZXN1bWVQcm9jZXNzKCBuUHJvY2VzcyApCiAgICByZXR1cm4gblByb2Nlc3MKZW5kCgpsb2NhbCBmdW5jdGlvbiBjdWxsUHJvY2VzcyggblByb2Nlc3MgKQogICAgbG9jYWwgdFByb2Nlc3MgPSB0UHJvY2Vzc2VzWyBuUHJvY2VzcyBdCiAgICBpZiBjb3JvdXRpbmUuc3RhdHVzKCB0UHJvY2Vzcy5jbyApID09ICJkZWFkIiB0aGVuCiAgICAgICAgaWYgbkN1cnJlbnRQcm9jZXNzID09IG5Qcm9jZXNzIHRoZW4KICAgICAgICAgICAgc2VsZWN0UHJvY2VzcyggbmlsICkKICAgICAgICBlbmQKICAgICAgICB0YWJsZS5yZW1vdmUoIHRQcm9jZXNzZXMsIG5Qcm9jZXNzICkKICAgICAgICBpZiBuQ3VycmVudFByb2Nlc3MgPT0gbmlsIHRoZW4KICAgICAgICAgICAgaWYgblByb2Nlc3MgPiAxIHRoZW4KICAgICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MoIG5Qcm9jZXNzIC0gMSApCiAgICAgICAgICAgIGVsc2VpZiAjdFByb2Nlc3NlcyA+IDAgdGhlbgogICAgICAgICAgICAgICAgc2VsZWN0UHJvY2VzcyggMSApCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIHJldHVybiB0cnVlCiAgICBlbmQKICAgIHJldHVybiBmYWxzZQplbmQKCmxvY2FsIGZ1bmN0aW9uIGN1bGxQcm9jZXNzZXMoKQogICAgbG9jYWwgY3VsbGVkID0gZmFsc2UKICAgIGZvciBuPSN0UHJvY2Vzc2VzLDEsLTEgZG8KICAgICAgICBjdWxsZWQgPSBjdWxsZWQgb3IgY3VsbFByb2Nlc3MoIG4gKQogICAgZW5kCiAgICByZXR1cm4gY3VsbGVkCmVuZAoKLS0gU2V0dXAgdGhlIG1haW4gbWVudQpsb2NhbCBtZW51TWFpblRleHRDb2xvciwgbWVudU1haW5CZ0NvbG9yLCBtZW51T3RoZXJUZXh0Q29sb3IsIG1lbnVPdGhlckJnQ29sb3IKaWYgcGFyZW50VGVybS5pc0NvbG9yKCkgdGhlbgogICAgbWVudU1haW5UZXh0Q29sb3IsIG1lbnVNYWluQmdDb2xvciA9IGNvbG9ycy55ZWxsb3csIGNvbG9ycy5ibGFjawogICAgbWVudU90aGVyVGV4dENvbG9yLCBtZW51T3RoZXJCZ0NvbG9yID0gY29sb3JzLmJsYWNrLCBjb2xvcnMuZ3JheQplbHNlCiAgICBtZW51TWFpblRleHRDb2xvciwgbWVudU1haW5CZ0NvbG9yID0gY29sb3JzLndoaXRlLCBjb2xvcnMuYmxhY2sKICAgIG1lbnVPdGhlclRleHRDb2xvciwgbWVudU90aGVyQmdDb2xvciA9IGNvbG9ycy5ibGFjaywgY29sb3JzLndoaXRlCmVuZAoKbG9jYWwgZnVuY3Rpb24gcmVkcmF3TWVudSgpCiAgICBpZiBiU2hvd01lbnUgdGhlbgogICAgICAgIC0tIERyYXcgbWVudQogICAgICAgIHBhcmVudFRlcm0uc2V0Q3Vyc29yUG9zKCAxLCAxICkKICAgICAgICBwYXJlbnRUZXJtLnNldEJhY2tncm91bmRDb2xvciggbWVudU90aGVyQmdDb2xvciApCiAgICAgICAgcGFyZW50VGVybS5jbGVhckxpbmUoKQogICAgICAgIGZvciBuPTEsI3RQcm9jZXNzZXMgZG8KICAgICAgICAgICAgaWYgbiA9PSBuQ3VycmVudFByb2Nlc3MgdGhlbgogICAgICAgICAgICAgICAgcGFyZW50VGVybS5zZXRUZXh0Q29sb3IoIG1lbnVNYWluVGV4dENvbG9yICkKICAgICAgICAgICAgICAgIHBhcmVudFRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBtZW51TWFpbkJnQ29sb3IgKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwYXJlbnRUZXJtLnNldFRleHRDb2xvciggbWVudU90aGVyVGV4dENvbG9yICkKICAgICAgICAgICAgICAgIHBhcmVudFRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBtZW51T3RoZXJCZ0NvbG9yICkKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIHBhcmVudFRlcm0ud3JpdGUoICIgIiAuLiB0UHJvY2Vzc2VzW25dLnNUaXRsZSAuLiAiICIgKQogICAgICAgIGVuZAoKICAgICAgICAtLSBQdXQgdGhlIGN1cnNvciBiYWNrIHdoZXJlIGl0IHNob3VsZCBiZQogICAgICAgIGxvY2FsIHRQcm9jZXNzID0gdFByb2Nlc3Nlc1sgbkN1cnJlbnRQcm9jZXNzIF0KICAgICAgICBpZiB0UHJvY2VzcyB0aGVuCiAgICAgICAgICAgIHRQcm9jZXNzLndpbmRvdy5yZXN0b3JlQ3Vyc29yKCkKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIHJlc2l6ZVdpbmRvd3MoKQogICAgbG9jYWwgd2luZG93WSwgd2luZG93SGVpZ2h0CiAgICBpZiBiU2hvd01lbnUgdGhlbgogICAgICAgIHdpbmRvd1kgPSAyCiAgICAgICAgd2luZG93SGVpZ2h0ID0gaC0xCiAgICBlbHNlCiAgICAgICAgd2luZG93WSA9IDEKICAgICAgICB3aW5kb3dIZWlnaHQgPSBoCiAgICBlbmQKICAgIGZvciBuPTEsI3RQcm9jZXNzZXMgZG8KICAgICAgICBsb2NhbCB0UHJvY2VzcyA9IHRQcm9jZXNzZXNbbl0KICAgICAgICBsb2NhbCB3aW5kb3cgPSB0UHJvY2Vzcy53aW5kb3cKICAgICAgICBsb2NhbCB4LHkgPSB0UHJvY2Vzcy53aW5kb3cuZ2V0Q3Vyc29yUG9zKCkKICAgICAgICBpZiB5ID4gd2luZG93SGVpZ2h0IHRoZW4KICAgICAgICAgICAgdFByb2Nlc3Mud2luZG93LnNjcm9sbCggeSAtIHdpbmRvd0hlaWdodCApCiAgICAgICAgICAgIHRQcm9jZXNzLndpbmRvdy5zZXRDdXJzb3JQb3MoIHgsIHdpbmRvd0hlaWdodCApCiAgICAgICAgZW5kCiAgICAgICAgdFByb2Nlc3Mud2luZG93LnJlcG9zaXRpb24oIDEsIHdpbmRvd1ksIHcsIHdpbmRvd0hlaWdodCApCiAgICBlbmQKICAgIGJXaW5kb3dzUmVzaXplZCA9IHRydWUKZW5kCgpsb2NhbCBmdW5jdGlvbiBzZXRNZW51VmlzaWJsZSggYlZpcyApCiAgICBpZiBiU2hvd01lbnUgfj0gYlZpcyB0aGVuCiAgICAgICAgYlNob3dNZW51ID0gYlZpcwogICAgICAgIHJlc2l6ZVdpbmRvd3MoKQogICAgICAgIHJlZHJhd01lbnUoKQogICAgZW5kCmVuZAoKbG9jYWwgbXVsdGlzaGVsbCA9IHt9CgpmdW5jdGlvbiBtdWx0aXNoZWxsLmdldEZvY3VzKCkKICAgIHJldHVybiBuQ3VycmVudFByb2Nlc3MKZW5kCgpmdW5jdGlvbiBtdWx0aXNoZWxsLnNldEZvY3VzKCBuICkKICAgIGlmIG4gPj0gMSBhbmQgbiA8PSAjdFByb2Nlc3NlcyB0aGVuCiAgICAgICAgc2VsZWN0UHJvY2VzcyggbiApCiAgICAgICAgcmVkcmF3TWVudSgpCiAgICAgICAgcmV0dXJuIHRydWUKICAgIGVuZAogICAgcmV0dXJuIGZhbHNlCmVuZAoKZnVuY3Rpb24gbXVsdGlzaGVsbC5nZXRUaXRsZSggbiApCiAgICBpZiBuID49IDEgYW5kIG4gPD0gI3RQcm9jZXNzZXMgdGhlbgogICAgICAgIHJldHVybiB0UHJvY2Vzc2VzW25dLnNUaXRsZQogICAgZW5kCiAgICByZXR1cm4gbmlsCmVuZAoKZnVuY3Rpb24gbXVsdGlzaGVsbC5zZXRUaXRsZSggbiwgc1RpdGxlICkKICAgIGlmIG4gPj0gMSBhbmQgbiA8PSAjdFByb2Nlc3NlcyB0aGVuCiAgICAgICAgc2V0UHJvY2Vzc1RpdGxlKCBuLCBzVGl0bGUgKQogICAgICAgIHJlZHJhd01lbnUoKQogICAgZW5kCmVuZAoKZnVuY3Rpb24gbXVsdGlzaGVsbC5nZXRDdXJyZW50KCkKICAgIHJldHVybiBuUnVubmluZ1Byb2Nlc3MKZW5kCgpmdW5jdGlvbiBtdWx0aXNoZWxsLmxhdW5jaCggdFByb2dyYW1FbnYsIHNQcm9ncmFtUGF0aCwgLi4uICkKICAgIGxvY2FsIHByZXZpb3VzVGVybSA9IHRlcm0uY3VycmVudCgpCiAgICBzZXRNZW51VmlzaWJsZSggKCN0UHJvY2Vzc2VzICsgMSkgPj0gMiApCiAgICBsb2NhbCBuUmVzdWx0ID0gbGF1bmNoUHJvY2VzcyggdFByb2dyYW1FbnYsIHNQcm9ncmFtUGF0aCwgLi4uICkKICAgIHJlZHJhd01lbnUoKQogICAgdGVybS5yZWRpcmVjdCggcHJldmlvdXNUZXJtICkKICAgIHJldHVybiBuUmVzdWx0CmVuZAoKZnVuY3Rpb24gbXVsdGlzaGVsbC5nZXRDb3VudCgpCiAgICByZXR1cm4gI3RQcm9jZXNzZXMKZW5kCgotLSBCZWdpbgpwYXJlbnRUZXJtLmNsZWFyKCkKc2V0TWVudVZpc2libGUoIGZhbHNlICkKc2VsZWN0UHJvY2VzcyggbGF1bmNoUHJvY2VzcyggewogICAgWyJzaGVsbCJdID0gc2hlbGwsCiAgICBbIm11bHRpc2hlbGwiXSA9IG11bHRpc2hlbGwsCn0sICIvcm9tL3Byb2dyYW1zL3NoZWxsIiApICkKcmVkcmF3TWVudSgpCgotLSBSdW4gcHJvY2Vzc2VzCndoaWxlICN0UHJvY2Vzc2VzID4gMCBkbwogICAgLS0gR2V0IHRoZSBldmVudAogICAgbG9jYWwgdEV2ZW50RGF0YSA9IHsgb3MucHVsbEV2ZW50UmF3KCkgfQogICAgbG9jYWwgc0V2ZW50ID0gdEV2ZW50RGF0YVsxXQogICAgaWYgc0V2ZW50ID09ICJ0ZXJtX3Jlc2l6ZSIgdGhlbgogICAgICAgIC0tIFJlc2l6ZSBldmVudAogICAgICAgIHcsaCA9IHBhcmVudFRlcm0uZ2V0U2l6ZSgpCiAgICAgICAgcmVzaXplV2luZG93cygpCiAgICAgICAgcmVkcmF3TWVudSgpCgogICAgZWxzZWlmIHNFdmVudCA9PSAiY2hhciIgb3Igc0V2ZW50ID09ICJrZXkiIG9yIHNFdmVudCA9PSAicGFzdGUiIG9yIHNFdmVudCA9PSAidGVybWluYXRlIiB0aGVuCiAgICAgICAgLS0gS2V5Ym9hcmQgZXZlbnQKICAgICAgICAtLSBQYXNzdGhyb3VnaCB0byBjdXJyZW50IHByb2Nlc3MKICAgICAgICByZXN1bWVQcm9jZXNzKCBuQ3VycmVudFByb2Nlc3MsIHVucGFjayggdEV2ZW50RGF0YSApICkKICAgICAgICBpZiBjdWxsUHJvY2VzcyggbkN1cnJlbnRQcm9jZXNzICkgdGhlbgogICAgICAgICAgICBzZXRNZW51VmlzaWJsZSggI3RQcm9jZXNzZXMgPj0gMiApCiAgICAgICAgICAgIHJlZHJhd01lbnUoKQogICAgICAgIGVuZAoKICAgIGVsc2VpZiBzRXZlbnQgPT0gIm1vdXNlX2NsaWNrIiB0aGVuCiAgICAgICAgLS0gQ2xpY2sgZXZlbnQKICAgICAgICBsb2NhbCBidXR0b24sIHgsIHkgPSB0RXZlbnREYXRhWzJdLCB0RXZlbnREYXRhWzNdLCB0RXZlbnREYXRhWzRdCiAgICAgICAgaWYgYlNob3dNZW51IGFuZCB5ID09IDEgdGhlbgogICAgICAgICAgICAtLSBTd2l0Y2ggcHJvY2VzcwogICAgICAgICAgICBsb2NhbCB0YWJTdGFydCA9IDEKICAgICAgICAgICAgZm9yIG49MSwjdFByb2Nlc3NlcyBkbwogICAgICAgICAgICAgICAgdGFiRW5kID0gdGFiU3RhcnQgKyBzdHJpbmcubGVuKCB0UHJvY2Vzc2VzW25dLnNUaXRsZSApICsgMQogICAgICAgICAgICAgICAgaWYgeCA+PSB0YWJTdGFydCBhbmQgeCA8PSB0YWJFbmQgdGhlbgogICAgICAgICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MoIG4gKQogICAgICAgICAgICAgICAgICAgIHJlZHJhd01lbnUoKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIHRhYlN0YXJ0ID0gdGFiRW5kICsgMQogICAgICAgICAgICBlbmQKICAgICAgICBlbHNlCiAgICAgICAgICAgIC0tIFBhc3N0aHJvdWdoIHRvIGN1cnJlbnQgcHJvY2VzcwogICAgICAgICAgICByZXN1bWVQcm9jZXNzKCBuQ3VycmVudFByb2Nlc3MsIHNFdmVudCwgYnV0dG9uLCB4LCAoYlNob3dNZW51IGFuZCB5LTEpIG9yIHkgKQogICAgICAgICAgICBpZiBjdWxsUHJvY2VzcyggbkN1cnJlbnRQcm9jZXNzICkgdGhlbgogICAgICAgICAgICAgICAgc2V0TWVudVZpc2libGUoICN0UHJvY2Vzc2VzID49IDIgKQogICAgICAgICAgICAgICAgcmVkcmF3TWVudSgpCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAoKICAgIGVsc2VpZiBzRXZlbnQgPT0gIm1vdXNlX2RyYWciIG9yIHNFdmVudCA9PSAibW91c2Vfc2Nyb2xsIiB0aGVuCiAgICAgICAgLS0gT3RoZXIgbW91c2UgZXZlbnQKICAgICAgICBsb2NhbCBwMSwgeCwgeSA9IHRFdmVudERhdGFbMl0sIHRFdmVudERhdGFbM10sIHRFdmVudERhdGFbNF0KICAgICAgICBpZiBub3QgKGJTaG93TWVudSBhbmQgeSA9PSAxKSB0aGVuCiAgICAgICAgICAgIC0tIFBhc3N0aHJvdWdoIHRvIGN1cnJlbnQgcHJvY2VzcwogICAgICAgICAgICByZXN1bWVQcm9jZXNzKCBuQ3VycmVudFByb2Nlc3MsIHNFdmVudCwgcDEsIHgsIChiU2hvd01lbnUgYW5kIHktMSkgb3IgeSApCiAgICAgICAgICAgIGlmIGN1bGxQcm9jZXNzKCBuQ3VycmVudFByb2Nlc3MgKSB0aGVuCiAgICAgICAgICAgICAgICBzZXRNZW51VmlzaWJsZSggI3RQcm9jZXNzZXMgPj0gMiApCiAgICAgICAgICAgICAgICByZWRyYXdNZW51KCkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCgogICAgZWxzZQogICAgICAgIC0tIE90aGVyIGV2ZW50CiAgICAgICAgLS0gUGFzc3Rocm91Z2ggdG8gYWxsIHByb2Nlc3NlcwogICAgICAgIGxvY2FsIG5MaW1pdCA9ICN0UHJvY2Vzc2VzIC0tIFN0b3JpbmcgdGhpcyBlbnN1cmVzIGFueSBuZXcgdGhpbmdzIHNwYXduZWQgZG9uJ3QgZ2V0IHRoZSBldmVudAogICAgICAgIGZvciBuPTEsbkxpbWl0IGRvCiAgICAgICAgICAgIHJlc3VtZVByb2Nlc3MoIG4sIHVucGFjayggdEV2ZW50RGF0YSApICkKICAgICAgICBlbmQKICAgICAgICBpZiBjdWxsUHJvY2Vzc2VzKCkgdGhlbgogICAgICAgICAgICBzZXRNZW51VmlzaWJsZSggI3RQcm9jZXNzZXMgPj0gMiApCiAgICAgICAgICAgIHJlZHJhd01lbnUoKQogICAgICAgIGVuZAogICAgZW5kCgogICAgaWYgYldpbmRvd3NSZXNpemVkIHRoZW4KICAgICAgICAtLSBQYXNzIHRlcm1fcmVzaXplIHRvIGFsbCBwcm9jZXNzZXMKICAgICAgICBsb2NhbCBuTGltaXQgPSAjdFByb2Nlc3NlcyAtLSBTdG9yaW5nIHRoaXMgZW5zdXJlcyBhbnkgbmV3IHRoaW5ncyBzcGF3bmVkIGRvbid0IGdldCB0aGUgZXZlbnQKICAgICAgICBmb3Igbj0xLG5MaW1pdCBkbwogICAgICAgICAgICByZXN1bWVQcm9jZXNzKCBuLCAidGVybV9yZXNpemUiICkKICAgICAgICBlbmQKICAgICAgICBiV2luZG93c1Jlc2l6ZWQgPSBmYWxzZQogICAgICAgIGlmIGN1bGxQcm9jZXNzZXMoKSB0aGVuCiAgICAgICAgICAgIHNldE1lbnVWaXNpYmxlKCAjdFByb2Nlc3NlcyA+PSAyICkKICAgICAgICAgICAgcmVkcmF3TWVudSgpCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgotLSBTaHV0ZG93bgp0ZXJtLnJlZGlyZWN0KCBwYXJlbnRUZXJtICk=","isDir":false,"name":"multishell","size":0},"root/programs/alias":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPiAyIHRoZW4KCXByaW50KCAiVXNhZ2U6IGFsaWFzIDxhbGlhcz4gPHByb2dyYW0+IiApCglyZXR1cm4KZW5kCgpsb2NhbCBzQWxpYXMgPSB0QXJnc1sxXQpsb2NhbCBzUHJvZ3JhbSA9IHRBcmdzWzJdCgppZiBzQWxpYXMgYW5kIHNQcm9ncmFtIHRoZW4KCS0tIFNldCBhbGlhcwoJc2hlbGwuc2V0QWxpYXMoIHNBbGlhcywgc1Byb2dyYW0gKQplbHNlaWYgc0FsaWFzIHRoZW4KCS0tIENsZWFyIGFsaWFzCglzaGVsbC5jbGVhckFsaWFzKCBzQWxpYXMgKQplbHNlCgktLSBMaXN0IGFsaWFzZXMKCWxvY2FsIHRBbGlhc2VzID0gc2hlbGwuYWxpYXNlcygpCglsb2NhbCB0TGlzdCA9IHt9Cglmb3Igc0FsaWFzLCBzQ29tbWFuZCBpbiBwYWlycyggdEFsaWFzZXMgKSBkbwoJCXRhYmxlLmluc2VydCggdExpc3QsIHNBbGlhcyApCgllbmQKCXRhYmxlLnNvcnQoIHRMaXN0ICkKCXRleHR1dGlscy5wYWdlZFRhYnVsYXRlKCB0TGlzdCApCmVuZAoJ","isDir":false,"name":"alias","size":0},"root/programs/apis":{"data":"CmxvY2FsIHRBcGlzID0ge30KZm9yIGssdiBpbiBwYWlycyggX0cgKSBkbwoJaWYgdHlwZShrKSA9PSAic3RyaW5nIiBhbmQgdHlwZSh2KSA9PSAidGFibGUiIGFuZCBrIH49ICJfRyIgdGhlbgoJCXRhYmxlLmluc2VydCggdEFwaXMsIGsgKQoJZW5kCmVuZAp0YWJsZS5pbnNlcnQoIHRBcGlzLCAic2hlbGwiICkKdGFibGUuc29ydCggdEFwaXMgKQoKdGV4dHV0aWxzLnBhZ2VkVGFidWxhdGUoIHRBcGlzICk=","isDir":false,"name":"apis","size":0},"root/programs/cd":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAxIHRoZW4KCXByaW50KCAiVXNhZ2U6IGNkIDxwYXRoPiIgKQoJcmV0dXJuCmVuZAoKbG9jYWwgc05ld0RpciA9IHNoZWxsLnJlc29sdmUoIHRBcmdzWzFdICkKaWYgZnMuaXNEaXIoIHNOZXdEaXIgKSB0aGVuCglzaGVsbC5zZXREaXIoIHNOZXdEaXIgKQplbHNlCiAgCXByaW50KCAiTm90IGEgZGlyZWN0b3J5IiApCiAgCXJldHVybgplbmQ=","isDir":false,"name":"cd","size":0},"root/programs/clear":{"data":"dGVybS5jbGVhcigpCnRlcm0uc2V0Q3Vyc29yUG9zKCAxLCAxICk=","isDir":false,"name":"clear","size":0},"root/programs/copy":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAyIHRoZW4KCXByaW50KCAiVXNhZ2U6IGNwIDxzb3VyY2U+IDxkZXN0aW5hdGlvbj4iICkKCXJldHVybgplbmQKCmxvY2FsIHNTb3VyY2UgPSBzaGVsbC5yZXNvbHZlKCB0QXJnc1sxXSApCmxvY2FsIHNEZXN0ID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMl0gKQpsb2NhbCB0RmlsZXMgPSBmcy5maW5kKCBzU291cmNlICkKaWYgI3RGaWxlcyA+IDAgdGhlbgogICAgZm9yIG4sc0ZpbGUgaW4gaXBhaXJzKCB0RmlsZXMgKSBkbwogICAgICAgIGlmIGZzLmlzRGlyKCBzRGVzdCApIHRoZW4KICAgICAgICAgICAgZnMuY29weSggc0ZpbGUsIGZzLmNvbWJpbmUoIHNEZXN0LCBmcy5nZXROYW1lKHNGaWxlKSApICkKICAgICAgICBlbHNlaWYgI3RGaWxlcyA9PSAxIHRoZW4KICAgICAgICAgICAgZnMuY29weSggc0ZpbGUsIHNEZXN0ICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50RXJyb3IoICJDYW5ub3Qgb3ZlcndyaXRlIGZpbGUgbXVsdGlwbGUgdGltZXMiICkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZW5kCiAgICBlbmQKZWxzZQogICAgcHJpbnRFcnJvciggIk5vIG1hdGNoaW5nIGZpbGVzIiApCmVuZA==","isDir":false,"name":"copy","size":0},"root/programs/delete":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAxIHRoZW4KCXByaW50KCAiVXNhZ2U6IHJtIDxwYXRoPiIgKQoJcmV0dXJuCmVuZAoKbG9jYWwgc1BhdGggPSBzaGVsbC5yZXNvbHZlKCB0QXJnc1sxXSApCmxvY2FsIHRGaWxlcyA9IGZzLmZpbmQoIHNQYXRoICkKaWYgI3RGaWxlcyA+IDAgdGhlbgogICAgZm9yIG4sc0ZpbGUgaW4gaXBhaXJzKCB0RmlsZXMgKSBkbwogICAgICAgIGZzLmRlbGV0ZSggc0ZpbGUgKQogICAgZW5kCmVsc2UKICAgIHByaW50RXJyb3IoICJObyBtYXRjaGluZyBmaWxlcyIgKQplbmQ=","isDir":false,"name":"delete","size":0},"root/programs/drive":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9CgotLSBHZXQgd2hlcmUgYSBkaXJlY3RvcnkgaXMgbW91bnRlZApsb2NhbCBzUGF0aCA9IHNoZWxsLmRpcigpCmlmIHRBcmdzWzFdIH49IG5pbCB0aGVuCglzUGF0aCA9IHNoZWxsLnJlc29sdmUoIHRBcmdzWzFdICkKZW5kCgppZiBmcy5leGlzdHMoIHNQYXRoICkgdGhlbgoJd3JpdGUoIGZzLmdldERyaXZlKCBzUGF0aCApIC4uICIgKCIgKQoJbG9jYWwgblNwYWNlID0gZnMuZ2V0RnJlZVNwYWNlKCBzUGF0aCApCglpZiBuU3BhY2UgPiAxMDI0ICogMTAyNCB0aGVuCgkJcHJpbnQoIChtYXRoLmZsb29yKCBuU3BhY2UgLyAoMTAwICogMTAwMCkgKSAvIDEwKSAuLiAiTUIgcmVtYWluaW5nKSIgKQoJZWxzZWlmIG5TcGFjZSA+IDEwMjQgdGhlbgoJCXByaW50KCBtYXRoLmZsb29yKCBuU3BhY2UgLyAxMDAwICkgLi4gIktCIHJlbWFpbmluZykiICkKCWVsc2UKCQlwcmludCAoIG5TcGFjZSAuLiAiQiByZW1haW5pbmcpIiApCgllbmQKZWxzZQoJcHJpbnQoICJObyBzdWNoIHBhdGgiICkKZW5k","isDir":false,"name":"drive","size":0},"root/programs/edit":{"data":"LS0gR2V0IGZpbGUgdG8gZWRpdApsb2NhbCB0QXJncyA9IHsgLi4uIH0KaWYgI3RBcmdzID09IDAgdGhlbgoJcHJpbnQoICJVc2FnZTogZWRpdCA8cGF0aD4iICkKCXJldHVybgplbmQKCi0tIEVycm9yIGNoZWNraW5nCmxvY2FsIHNQYXRoID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMV0gKQpsb2NhbCBiUmVhZE9ubHkgPSBmcy5pc1JlYWRPbmx5KCBzUGF0aCApCmlmIGZzLmV4aXN0cyggc1BhdGggKSBhbmQgZnMuaXNEaXIoIHNQYXRoICkgdGhlbgoJcHJpbnQoICJDYW5ub3QgZWRpdCBhIGRpcmVjdG9yeS4iICkKCXJldHVybgplbmQKCmxvY2FsIHgseSA9IDEsMQpsb2NhbCB3LGggPSB0ZXJtLmdldFNpemUoKQpsb2NhbCBzY3JvbGxYLCBzY3JvbGxZID0gMCwwCgpsb2NhbCB0TGluZXMgPSB7fQpsb2NhbCBiUnVubmluZyA9IHRydWUKCi0tIENvbG91cnMKbG9jYWwgaGlnaGxpZ2h0Q29sb3VyLCBrZXl3b3JkQ29sb3VyLCBjb21tZW50Q29sb3VyLCB0ZXh0Q29sb3VyLCBiZ0NvbG91cgppZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJYmdDb2xvdXIgPSBjb2xvdXJzLmJsYWNrCgl0ZXh0Q29sb3VyID0gY29sb3Vycy53aGl0ZQoJaGlnaGxpZ2h0Q29sb3VyID0gY29sb3Vycy55ZWxsb3cKCWtleXdvcmRDb2xvdXIgPSBjb2xvdXJzLnllbGxvdwoJY29tbWVudENvbG91ciA9IGNvbG91cnMuZ3JlZW4KCXN0cmluZ0NvbG91ciA9IGNvbG91cnMucmVkCmVsc2UKCWJnQ29sb3VyID0gY29sb3Vycy5ibGFjawoJdGV4dENvbG91ciA9IGNvbG91cnMud2hpdGUKCWhpZ2hsaWdodENvbG91ciA9IGNvbG91cnMud2hpdGUKCWtleXdvcmRDb2xvdXIgPSBjb2xvdXJzLndoaXRlCgljb21tZW50Q29sb3VyID0gY29sb3Vycy53aGl0ZQoJc3RyaW5nQ29sb3VyID0gY29sb3Vycy53aGl0ZQplbmQKCi0tIE1lbnVzCmxvY2FsIGJNZW51ID0gZmFsc2UKbG9jYWwgbk1lbnVJdGVtID0gMQpsb2NhbCB0TWVudUl0ZW1zCmlmIGJSZWFkT25seSB0aGVuCgl0TWVudUl0ZW1zID0geyAiRXhpdCIsICJQcmludCIgfQplbHNlCgl0TWVudUl0ZW1zID0geyAiU2F2ZSIsICJFeGl0IiwgIlByaW50IiB9CmVuZAoJCmxvY2FsIHNTdGF0dXMgPSAiUHJlc3MgQ3RybCB0byBhY2Nlc3MgbWVudSIKCmxvY2FsIGZ1bmN0aW9uIGxvYWQoIF9zUGF0aCApCgl0TGluZXMgPSB7fQoJaWYgZnMuZXhpc3RzKCBfc1BhdGggKSB0aGVuCgkJbG9jYWwgZmlsZSA9IGlvLm9wZW4oIF9zUGF0aCwgInIiICkKCQlsb2NhbCBzTGluZSA9IGZpbGU6cmVhZCgpCgkJd2hpbGUgc0xpbmUgZG8KCQkJdGFibGUuaW5zZXJ0KCB0TGluZXMsIHNMaW5lICkKCQkJc0xpbmUgPSBmaWxlOnJlYWQoKQoJCWVuZAoJCWZpbGU6Y2xvc2UoKQoJZW5kCgkKCWlmICN0TGluZXMgPT0gMCB0aGVuCgkJdGFibGUuaW5zZXJ0KCB0TGluZXMsICIiICkKCWVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIHNhdmUoIF9zUGF0aCApCgktLSBDcmVhdGUgaW50ZXJ2ZW5pbmcgZm9sZGVyCglsb2NhbCBzRGlyID0gc1BhdGg6c3ViKDEsIHNQYXRoOmxlbigpIC0gZnMuZ2V0TmFtZShzUGF0aCk6bGVuKCkgKQoJaWYgbm90IGZzLmV4aXN0cyggc0RpciApIHRoZW4KCQlmcy5tYWtlRGlyKCBzRGlyICkKCWVuZAoKCS0tIFNhdmUKCWxvY2FsIGZpbGUgPSBuaWwKCWxvY2FsIGZ1bmN0aW9uIGlubmVyU2F2ZSgpCgkJZmlsZSA9IGZzLm9wZW4oIF9zUGF0aCwgInciICkKCQlpZiBmaWxlIHRoZW4KCQkJZm9yIG4sIHNMaW5lIGluIGlwYWlycyggdExpbmVzICkgZG8KCQkJCWZpbGUud3JpdGUoIHNMaW5lIC4uICJcbiIgKQoJCQllbmQKCQllbHNlCgkJCWVycm9yKCAiRmFpbGVkIHRvIG9wZW4gIi4uX3NQYXRoICkKCQllbmQKCWVuZAoJCglsb2NhbCBvayA9IHBjYWxsKCBpbm5lclNhdmUgKQoJaWYgZmlsZSB0aGVuIAoJCWZpbGUuY2xvc2UoKQoJZW5kCglyZXR1cm4gb2sKZW5kCgpsb2NhbCB0S2V5d29yZHMgPSB7CglbImFuZCJdID0gdHJ1ZSwKCVsiYnJlYWsiXSA9IHRydWUsCglbImRvIl0gPSB0cnVlLAoJWyJlbHNlIl0gPSB0cnVlLAoJWyJlbHNlaWYiXSA9IHRydWUsCglbImVuZCJdID0gdHJ1ZSwKCVsiZmFsc2UiXSA9IHRydWUsCglbImZvciJdID0gdHJ1ZSwKCVsiZnVuY3Rpb24iXSA9IHRydWUsCglbImlmIl0gPSB0cnVlLAoJWyJpbiJdID0gdHJ1ZSwKCVsibG9jYWwiXSA9IHRydWUsCglbIm5pbCJdID0gdHJ1ZSwKCVsibm90Il0gPSB0cnVlLAoJWyJvciJdID0gdHJ1ZSwKCVsicmVwZWF0Il0gPSB0cnVlLAoJWyJyZXR1cm4iXSA9IHRydWUsCglbInRoZW4iXSA9IHRydWUsCglbInRydWUiXSA9IHRydWUsCglbInVudGlsIl09IHRydWUsCglbIndoaWxlIl0gPSB0cnVlLAp9Cgpsb2NhbCBmdW5jdGlvbiB0cnlXcml0ZSggc0xpbmUsIHJlZ2V4LCBjb2xvdXIgKQoJbG9jYWwgbWF0Y2ggPSBzdHJpbmcubWF0Y2goIHNMaW5lLCByZWdleCApCglpZiBtYXRjaCB0aGVuCgkJaWYgdHlwZShjb2xvdXIpID09ICJudW1iZXIiIHRoZW4KCQkJdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXIgKQoJCWVsc2UKCQkJdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXIobWF0Y2gpICkKCQllbmQKCQl0ZXJtLndyaXRlKCBtYXRjaCApCgkJdGVybS5zZXRUZXh0Q29sb3VyKCB0ZXh0Q29sb3VyICkKCQlyZXR1cm4gc3RyaW5nLnN1Yiggc0xpbmUsIHN0cmluZy5sZW4obWF0Y2gpICsgMSApCgllbmQKCXJldHVybiBuaWwKZW5kCgpsb2NhbCBmdW5jdGlvbiB3cml0ZUhpZ2hsaWdodGVkKCBzTGluZSApCgl3aGlsZSBzdHJpbmcubGVuKHNMaW5lKSA+IDAgZG8JCgkJc0xpbmUgPSAKCQkJdHJ5V3JpdGUoIHNMaW5lLCAiXiUtJS0lWyVbLi0lXSVdIiwgY29tbWVudENvbG91ciApIG9yCgkJCXRyeVdyaXRlKCBzTGluZSwgIl4lLSUtLioiLCBjb21tZW50Q29sb3VyICkgb3IKCQkJdHJ5V3JpdGUoIHNMaW5lLCAiXlwiLi1bXlxcXVwiIiwgc3RyaW5nQ29sb3VyICkgb3IKCQkJdHJ5V3JpdGUoIHNMaW5lLCAiXlwnLi1bXlxcXVwnIiwgc3RyaW5nQ29sb3VyICkgb3IKCQkJdHJ5V3JpdGUoIHNMaW5lLCAiXiVbJVsuLSVdJV0iLCBzdHJpbmdDb2xvdXIgKSBvcgoJCQl0cnlXcml0ZSggc0xpbmUsICJeWyV3X10rIiwgZnVuY3Rpb24oIG1hdGNoICkKCQkJCWlmIHRLZXl3b3Jkc1sgbWF0Y2ggXSB0aGVuCgkJCQkJcmV0dXJuIGtleXdvcmRDb2xvdXIKCQkJCWVuZAoJCQkJcmV0dXJuIHRleHRDb2xvdXIKCQkJZW5kICkgb3IKCQkJdHJ5V3JpdGUoIHNMaW5lLCAiXlteJXdfXSIsIHRleHRDb2xvdXIgKQoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gcmVkcmF3VGV4dCgpCglmb3IgeT0xLGgtMSBkbwoJCXRlcm0uc2V0Q3Vyc29yUG9zKCAxIC0gc2Nyb2xsWCwgeSApCgkJdGVybS5jbGVhckxpbmUoKQoKCQlsb2NhbCBzTGluZSA9IHRMaW5lc1sgeSArIHNjcm9sbFkgXQoJCWlmIHNMaW5lIH49IG5pbCB0aGVuCgkJCXdyaXRlSGlnaGxpZ2h0ZWQoIHNMaW5lICkKCQllbmQKCWVuZAoJdGVybS5zZXRDdXJzb3JQb3MoIHggLSBzY3JvbGxYLCB5IC0gc2Nyb2xsWSApCmVuZAoKbG9jYWwgZnVuY3Rpb24gcmVkcmF3TGluZShfblkpCglsb2NhbCBzTGluZSA9IHRMaW5lc1tfblldCgl0ZXJtLnNldEN1cnNvclBvcyggMSAtIHNjcm9sbFgsIF9uWSAtIHNjcm9sbFkgKQoJdGVybS5jbGVhckxpbmUoKQoJd3JpdGVIaWdobGlnaHRlZCggc0xpbmUgKQoJdGVybS5zZXRDdXJzb3JQb3MoIHggLSBzY3JvbGxYLCBfblkgLSBzY3JvbGxZICkKZW5kCgpsb2NhbCBmdW5jdGlvbiByZWRyYXdNZW51KCkKICAgIC0tIENsZWFyIGxpbmUKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKCAxLCBoICkKCXRlcm0uY2xlYXJMaW5lKCkKCiAgICAtLSBEcmF3IGxpbmUgbnVtYmVycwogICAgdGVybS5zZXRDdXJzb3JQb3MoIHcgLSBzdHJpbmcubGVuKCAiTG4gIi4ueSApICsgMSwgaCApCiAgICB0ZXJtLnNldFRleHRDb2xvdXIoIGhpZ2hsaWdodENvbG91ciApCiAgICB0ZXJtLndyaXRlKCAiTG4gIiApCiAgICB0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQogICAgdGVybS53cml0ZSggeSApCgogICAgdGVybS5zZXRDdXJzb3JQb3MoIDEsIGggKQoJaWYgYk1lbnUgdGhlbgogICAgICAgIC0tIERyYXcgbWVudQoJCXRlcm0uc2V0VGV4dENvbG91ciggdGV4dENvbG91ciApCgkJZm9yIG5JdGVtLHNJdGVtIGluIHBhaXJzKCB0TWVudUl0ZW1zICkgZG8KCQkJaWYgbkl0ZW0gPT0gbk1lbnVJdGVtIHRoZW4KCQkJCXRlcm0uc2V0VGV4dENvbG91ciggaGlnaGxpZ2h0Q29sb3VyICkKCQkJCXRlcm0ud3JpdGUoICJbIiApCgkJCQl0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQoJCQkJdGVybS53cml0ZSggc0l0ZW0gKQoJCQkJdGVybS5zZXRUZXh0Q29sb3VyKCBoaWdobGlnaHRDb2xvdXIgKQoJCQkJdGVybS53cml0ZSggIl0iICkKICAgICAgICAJCXRlcm0uc2V0VGV4dENvbG91ciggdGV4dENvbG91ciApCgkJCWVsc2UKCQkJCXRlcm0ud3JpdGUoICIgIi4uc0l0ZW0uLiIgIiApCgkJCWVuZAoJCWVuZAogICAgZWxzZQogICAgICAgIC0tIERyYXcgc3RhdHVzCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3VyKCBoaWdobGlnaHRDb2xvdXIgKQogICAgICAgIHRlcm0ud3JpdGUoIHNTdGF0dXMgKQogICAgICAgIHRlcm0uc2V0VGV4dENvbG91ciggdGV4dENvbG91ciApCiAgICBlbmQKCgktLSBSZXNldCBjdXJzb3IKCXRlcm0uc2V0Q3Vyc29yUG9zKCB4IC0gc2Nyb2xsWCwgeSAtIHNjcm9sbFkgKQplbmQKCmxvY2FsIHRNZW51RnVuY3MgPSB7IAoJU2F2ZT1mdW5jdGlvbigpCgkJaWYgYlJlYWRPbmx5IHRoZW4KCQkJc1N0YXR1cyA9ICJBY2Nlc3MgZGVuaWVkIgoJCWVsc2UKCQkJbG9jYWwgb2ssIGVyciA9IHNhdmUoIHNQYXRoICkKCQkJaWYgb2sgdGhlbgoJCQkJc1N0YXR1cz0iU2F2ZWQgdG8gIi4uc1BhdGgKCQkJZWxzZQoJCQkJc1N0YXR1cz0iRXJyb3Igc2F2aW5nIHRvICIuLnNQYXRoCgkJCWVuZAoJCWVuZAoJCXJlZHJhd01lbnUoKQoJZW5kLAoJUHJpbnQ9ZnVuY3Rpb24oKQoJCWxvY2FsIHByaW50ZXIgPSBwZXJpcGhlcmFsLmZpbmQoICJwcmludGVyIiApCgkJaWYgbm90IHByaW50ZXIgdGhlbgoJCQlzU3RhdHVzID0gIk5vIHByaW50ZXIgYXR0YWNoZWQiCgkJCXJldHVybgoJCWVuZAoKCQlsb2NhbCBuUGFnZSA9IDAKCQlsb2NhbCBzTmFtZSA9IGZzLmdldE5hbWUoIHNQYXRoICkKCQlpZiBwcmludGVyLmdldElua0xldmVsKCkgPCAxIHRoZW4KCQkJc1N0YXR1cyA9ICJQcmludGVyIG91dCBvZiBpbmsiCgkJCXJldHVybgoJCWVsc2VpZiBwcmludGVyLmdldFBhcGVyTGV2ZWwoKSA8IDEgdGhlbgoJCQlzU3RhdHVzID0gIlByaW50ZXIgb3V0IG9mIHBhcGVyIgoJCQlyZXR1cm4KCQllbmQKCgkJbG9jYWwgc2NyZWVuVGVybWluYWwgPSB0ZXJtLmN1cnJlbnQoKQoJCWxvY2FsIHByaW50ZXJUZXJtaW5hbCA9IHsKCQkJZ2V0Q3Vyc29yUG9zID0gcHJpbnRlci5nZXRDdXJzb3JQb3MsCgkJCXNldEN1cnNvclBvcyA9IHByaW50ZXIuc2V0Q3Vyc29yUG9zLAoJCQlnZXRTaXplID0gcHJpbnRlci5nZXRQYWdlU2l6ZSwKCQkJd3JpdGUgPSBwcmludGVyLndyaXRlLAoJCX0KCQlwcmludGVyVGVybWluYWwuc2Nyb2xsID0gZnVuY3Rpb24oKQoJCQlpZiBuUGFnZSA9PSAxIHRoZW4KCQkJCXByaW50ZXIuc2V0UGFnZVRpdGxlKCBzTmFtZS4uIiAocGFnZSAiLi5uUGFnZS4uIikiICkJCQkKCQkJZW5kCgkJCQoJCQl3aGlsZSBub3QgcHJpbnRlci5uZXdQYWdlKCkJZG8KCQkJCWlmIHByaW50ZXIuZ2V0SW5rTGV2ZWwoKSA8IDEgdGhlbgoJCQkJCXNTdGF0dXMgPSAiUHJpbnRlciBvdXQgb2YgaW5rLCBwbGVhc2UgcmVmaWxsIgoJCQkJZWxzZWlmIHByaW50ZXIuZ2V0UGFwZXJMZXZlbCgpIDwgMSB0aGVuCgkJCQkJc1N0YXR1cyA9ICJQcmludGVyIG91dCBvZiBwYXBlciwgcGxlYXNlIHJlZmlsbCIKCQkJCWVsc2UKCQkJCQlzU3RhdHVzID0gIlByaW50ZXIgb3V0cHV0IHRyYXkgZnVsbCwgcGxlYXNlIGVtcHR5IgoJCQkJZW5kCgkKCQkJCXRlcm0ucmVkaXJlY3QoIHNjcmVlblRlcm1pbmFsICkKCQkJCXJlZHJhd01lbnUoKQoJCQkJdGVybS5yZWRpcmVjdCggcHJpbnRlclRlcm1pbmFsICkKCQkJCQoJCQkJbG9jYWwgdGltZXIgPSBvcy5zdGFydFRpbWVyKDAuNSkKCQkJCXNsZWVwKDAuNSkKCQkJZW5kCgoJCQluUGFnZSA9IG5QYWdlICsgMQoJCQlpZiBuUGFnZSA9PSAxIHRoZW4KCQkJCXByaW50ZXIuc2V0UGFnZVRpdGxlKCBzTmFtZSApCgkJCWVsc2UKCQkJCXByaW50ZXIuc2V0UGFnZVRpdGxlKCBzTmFtZS4uIiAocGFnZSAiLi5uUGFnZS4uIikiICkKCQkJZW5kCgkJZW5kCgkJCgkJYk1lbnUgPSBmYWxzZQoJCXRlcm0ucmVkaXJlY3QoIHByaW50ZXJUZXJtaW5hbCApCgkJbG9jYWwgb2ssIGVycm9yID0gcGNhbGwoIGZ1bmN0aW9uKCkKCQkJdGVybS5zY3JvbGwoKQoJCQlmb3Igbiwgc0xpbmUgaW4gaXBhaXJzKCB0TGluZXMgKSBkbwoJCQkJcHJpbnQoIHNMaW5lICkKCQkJZW5kCgkJZW5kICkKICAgICAgICB0ZXJtLnJlZGlyZWN0KCBzY3JlZW5UZXJtaW5hbCApCgkJaWYgbm90IG9rIHRoZW4KCQkJcHJpbnQoIGVycm9yICkKCQllbmQKCQkKCQl3aGlsZSBub3QgcHJpbnRlci5lbmRQYWdlKCkgZG8KCQkJc1N0YXR1cyA9ICJQcmludGVyIG91dHB1dCB0cmF5IGZ1bGwsIHBsZWFzZSBlbXB0eSIKCQkJcmVkcmF3TWVudSgpCgkJCXNsZWVwKCAwLjUgKQoJCWVuZAoJCWJNZW51ID0gdHJ1ZQoJCQkKCQlpZiBuUGFnZSA+IDEgdGhlbgoJCQlzU3RhdHVzID0gIlByaW50ZWQgIi4ublBhZ2UuLiIgUGFnZXMiCgkJZWxzZQoJCQlzU3RhdHVzID0gIlByaW50ZWQgMSBQYWdlIgoJCWVuZAoJCXJlZHJhd01lbnUoKQoJZW5kLAoJRXhpdD1mdW5jdGlvbigpCgkJYlJ1bm5pbmcgPSBmYWxzZQoJZW5kCn0KCmxvY2FsIGZ1bmN0aW9uIGRvTWVudUl0ZW0oIF9uICkKCXRNZW51RnVuY3NbdE1lbnVJdGVtc1tfbl1dKCkKCWlmIGJNZW51IHRoZW4KCQliTWVudSA9IGZhbHNlCgkJdGVybS5zZXRDdXJzb3JCbGluayggdHJ1ZSApCgllbmQKCXJlZHJhd01lbnUoKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHNldEN1cnNvciggeCwgeSApCglsb2NhbCBzY3JlZW5YID0geCAtIHNjcm9sbFgKCWxvY2FsIHNjcmVlblkgPSB5IC0gc2Nyb2xsWQoJCglsb2NhbCBiUmVkcmF3ID0gZmFsc2UKCWlmIHNjcmVlblggPCAxIHRoZW4KCQlzY3JvbGxYID0geCAtIDEKCQlzY3JlZW5YID0gMQoJCWJSZWRyYXcgPSB0cnVlCgllbHNlaWYgc2NyZWVuWCA+IHcgdGhlbgoJCXNjcm9sbFggPSB4IC0gdwoJCXNjcmVlblggPSB3CgkJYlJlZHJhdyA9IHRydWUKCWVuZAoJCglpZiBzY3JlZW5ZIDwgMSB0aGVuCgkJc2Nyb2xsWSA9IHkgLSAxCgkJc2NyZWVuWSA9IDEKCQliUmVkcmF3ID0gdHJ1ZQoJZWxzZWlmIHNjcmVlblkgPiBoLTEgdGhlbgoJCXNjcm9sbFkgPSB5IC0gKGgtMSkKCQlzY3JlZW5ZID0gaC0xCgkJYlJlZHJhdyA9IHRydWUKCWVuZAoJCglpZiBiUmVkcmF3IHRoZW4KCQlyZWRyYXdUZXh0KCkKCWVuZAoJdGVybS5zZXRDdXJzb3JQb3MoIHNjcmVlblgsIHNjcmVlblkgKQoJCgktLSBTdGF0dXNiYXIgbm93IHBlcnRhaW5zIHRvIG1lbnUsIGl0IHdvdWxkIHByb2JhYmx5IGJlIHNhZmUgdG8gcmVkcmF3IHRoZSBtZW51IG9uIGV2ZXJ5IGtleSBldmVudC4KCXJlZHJhd01lbnUoKQplbmQKCi0tIEFjdHVhbCBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkgYmVnaW5zCmxvYWQoc1BhdGgpCgp0ZXJtLnNldEJhY2tncm91bmRDb2xvdXIoIGJnQ29sb3VyICkKdGVybS5jbGVhcigpCnRlcm0uc2V0Q3Vyc29yUG9zKHgseSkKdGVybS5zZXRDdXJzb3JCbGluayggdHJ1ZSApCgpyZWRyYXdUZXh0KCkKcmVkcmF3TWVudSgpCgotLSBIYW5kbGUgaW5wdXQKd2hpbGUgYlJ1bm5pbmcgZG8KCWxvY2FsIHNFdmVudCwgcGFyYW0sIHBhcmFtMiwgcGFyYW0zID0gb3MucHVsbEV2ZW50KCkKCWlmIHNFdmVudCA9PSAia2V5IiB0aGVuCgkJaWYgcGFyYW0gPT0ga2V5cy51cCB0aGVuCgkJCS0tIFVwCgkJCWlmIG5vdCBiTWVudSB0aGVuCgkJCQlpZiB5ID4gMSB0aGVuCgkJCQkJLS0gTW92ZSBjdXJzb3IgdXAKCQkJCQl5ID0geSAtIDEKCQkJCQl4ID0gbWF0aC5taW4oIHgsIHN0cmluZy5sZW4oIHRMaW5lc1t5XSApICsgMSApCgkJCQkJc2V0Q3Vyc29yKCB4LCB5ICkKCQkJCWVuZAoJCQllbmQKCQllbHNlaWYgcGFyYW0gPT0ga2V5cy5kb3duIHRoZW4KCQkJLS0gRG93bgoJCQlpZiBub3QgYk1lbnUgdGhlbgoJCQkJLS0gTW92ZSBjdXJzb3IgZG93bgoJCQkJaWYgeSA8ICN0TGluZXMgdGhlbgoJCQkJCXkgPSB5ICsgMQoJCQkJCXggPSBtYXRoLm1pbiggeCwgc3RyaW5nLmxlbiggdExpbmVzW3ldICkgKyAxICkKCQkJCQlzZXRDdXJzb3IoIHgsIHkgKQoJCQkJZW5kCgkJCWVuZAoJCWVsc2VpZiBwYXJhbSA9PSBrZXlzLnRhYiB0aGVuCgkJCS0tIFRhYgoJCQlpZiBub3QgYk1lbnUgYW5kIG5vdCBiUmVhZE9ubHkgdGhlbgoJCQkJLS0gSW5kZW50IGxpbmUKCQkJCXRMaW5lc1t5XT0iICAiLi50TGluZXNbeV0KCQkJCXggPSB4ICsgMgoJCQkJc2V0Q3Vyc29yKCB4LCB5ICkKCQkJCXJlZHJhd0xpbmUoeSkKCQkJZW5kCgkJZWxzZWlmIHBhcmFtID09IGtleXMucGFnZVVwIHRoZW4KCQkJLS0gUGFnZSBVcAoJCQlpZiBub3QgYk1lbnUgdGhlbgoJCQkJLS0gTW92ZSB1cCBhIHBhZ2UKCQkJCWlmIHkgLSAoaCAtIDEpID49IDEgdGhlbgoJCQkJCXkgPSB5IC0gKGggLSAxKQoJCQkJZWxzZQoJCQkJCXkgPSAxCgkJCQllbmQKCQkJCXggPSBtYXRoLm1pbiggeCwgc3RyaW5nLmxlbiggdExpbmVzW3ldICkgKyAxICkKCQkJCXNldEN1cnNvciggeCwgeSApCgkJCWVuZAoJCWVsc2VpZiBwYXJhbSA9PSBrZXlzLnBhZ2VEb3duIHRoZW4KCQkJLS0gUGFnZSBEb3duCgkJCWlmIG5vdCBiTWVudSB0aGVuCgkJCQktLSBNb3ZlIGRvd24gYSBwYWdlCgkJCQlpZiB5ICsgKGggLSAxKSA8PSAjdExpbmVzIHRoZW4KCQkJCQl5ID0geSArIChoIC0gMSkKCQkJCWVsc2UKCQkJCQl5ID0gI3RMaW5lcwoJCQkJZW5kCgkJCQl4ID0gbWF0aC5taW4oIHgsIHN0cmluZy5sZW4oIHRMaW5lc1t5XSApICsgMSApCgkJCQlzZXRDdXJzb3IoIHgsIHkgKQoJCQllbmQKCQllbHNlaWYgcGFyYW0gPT0ga2V5cy5ob21lIHRoZW4KCQkJLS0gSG9tZQoJCQlpZiBub3QgYk1lbnUgdGhlbgoJCQkJLS0gTW92ZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZwoJCQkJeD0xCgkJCQlzZXRDdXJzb3IoeCx5KQoJCQllbmQKCQllbHNlaWYgcGFyYW0gPT0ga2V5c1siZW5kIl0gdGhlbgoJCQktLSBFbmQKCQkJaWYgbm90IGJNZW51IHRoZW4KCQkJCS0tIE1vdmUgY3Vyc29yIHRvIHRoZSBlbmQKCQkJCXggPSBzdHJpbmcubGVuKCB0TGluZXNbeV0gKSArIDEKCQkJCXNldEN1cnNvcih4LHkpCgkJCWVuZAoJCWVsc2VpZiBwYXJhbSA9PSBrZXlzLmxlZnQgdGhlbgoJCQktLSBMZWZ0CgkJCWlmIG5vdCBiTWVudSB0aGVuCgkJCQlpZiB4ID4gMSB0aGVuCgkJCQkJLS0gTW92ZSBjdXJzb3IgbGVmdAoJCQkJCXggPSB4IC0gMQoJCQkJZWxzZWlmIHg9PTEgYW5kIHk+MSB0aGVuCgkJCQkJeCA9IHN0cmluZy5sZW4oIHRMaW5lc1t5LTFdICkgKyAxCgkJCQkJeSA9IHkgLSAxCgkJCQllbmQKCQkJCXNldEN1cnNvciggeCwgeSApCgkJCWVsc2UKCQkJCS0tIE1vdmUgbWVudSBsZWZ0CgkJCQluTWVudUl0ZW0gPSBuTWVudUl0ZW0gLSAxCgkJCQlpZiBuTWVudUl0ZW0gPCAxIHRoZW4KCQkJCQluTWVudUl0ZW0gPSAjdE1lbnVJdGVtcwoJCQkJZW5kCgkJCQlyZWRyYXdNZW51KCkKCQkJZW5kCgkJZWxzZWlmIHBhcmFtID09IGtleXMucmlnaHQgdGhlbgoJCQktLSBSaWdodAoJCQlpZiBub3QgYk1lbnUgdGhlbgoJCQkJaWYgeCA8IHN0cmluZy5sZW4oIHRMaW5lc1t5XSApICsgMSB0aGVuCgkJCQkJLS0gTW92ZSBjdXJzb3IgcmlnaHQKCQkJCQl4ID0geCArIDEKCQkJCWVsc2VpZiB4PT1zdHJpbmcubGVuKCB0TGluZXNbeV0gKSArIDEgYW5kIHk8I3RMaW5lcyB0aGVuCgkJCQkJeCA9IDEKCQkJCQl5ID0geSArIDEKCQkJCWVuZAoJCQkJc2V0Q3Vyc29yKCB4LCB5ICkKCQkJZWxzZQoJCQkJLS0gTW92ZSBtZW51IHJpZ2h0CgkJCQluTWVudUl0ZW0gPSBuTWVudUl0ZW0gKyAxCgkJCQlpZiBuTWVudUl0ZW0gPiAjdE1lbnVJdGVtcyB0aGVuCgkJCQkJbk1lbnVJdGVtID0gMQoJCQkJZW5kCgkJCQlyZWRyYXdNZW51KCkKCQkJZW5kCgkJZWxzZWlmIHBhcmFtID09IGtleXMuZGVsZXRlIHRoZW4KCQkJLS0gRGVsZXRlCgkJCWlmIG5vdCBiTWVudSBhbmQgbm90IGJSZWFkT25seSB0aGVuCgkJCQlpZiAgeCA8IHN0cmluZy5sZW4oIHRMaW5lc1t5XSApICsgMSB0aGVuCgkJCQkJbG9jYWwgc0xpbmUgPSB0TGluZXNbeV0KCQkJCQl0TGluZXNbeV0gPSBzdHJpbmcuc3ViKHNMaW5lLDEseC0xKSAuLiBzdHJpbmcuc3ViKHNMaW5lLHgrMSkKCQkJCQlyZWRyYXdMaW5lKHkpCgkJCQllbHNlaWYgeTwjdExpbmVzIHRoZW4KCQkJCQl0TGluZXNbeV0gPSB0TGluZXNbeV0gLi4gdExpbmVzW3krMV0KCQkJCQl0YWJsZS5yZW1vdmUoIHRMaW5lcywgeSsxICkKCQkJCQlyZWRyYXdUZXh0KCkKCQkJCQlyZWRyYXdNZW51KCkKCQkJCWVuZAoJCQllbmQKCQllbHNlaWYgcGFyYW0gPT0ga2V5cy5iYWNrc3BhY2UgdGhlbgoJCQktLSBCYWNrc3BhY2UKCQkJaWYgbm90IGJNZW51IGFuZCBub3QgYlJlYWRPbmx5IHRoZW4KCQkJCWlmIHggPiAxIHRoZW4KCQkJCQktLSBSZW1vdmUgY2hhcmFjdGVyCgkJCQkJbG9jYWwgc0xpbmUgPSB0TGluZXNbeV0KCQkJCQl0TGluZXNbeV0gPSBzdHJpbmcuc3ViKHNMaW5lLDEseC0yKSAuLiBzdHJpbmcuc3ViKHNMaW5lLHgpCgkJCQkJcmVkcmF3TGluZSh5KQoJCQkKCQkJCQl4ID0geCAtIDEKCQkJCQlzZXRDdXJzb3IoIHgsIHkgKQoJCQkJZWxzZWlmIHkgPiAxIHRoZW4KCQkJCQktLSBSZW1vdmUgbmV3bGluZQoJCQkJCWxvY2FsIHNQcmV2TGVuID0gc3RyaW5nLmxlbiggdExpbmVzW3ktMV0gKQoJCQkJCXRMaW5lc1t5LTFdID0gdExpbmVzW3ktMV0gLi4gdExpbmVzW3ldCgkJCQkJdGFibGUucmVtb3ZlKCB0TGluZXMsIHkgKQoJCQkJCXJlZHJhd1RleHQoKQoJCQkJCgkJCQkJeCA9IHNQcmV2TGVuICsgMQoJCQkJCXkgPSB5IC0gMQoJCQkJCXNldEN1cnNvciggeCwgeSApCgkJCQllbmQKCQkJZW5kCgkJZWxzZWlmIHBhcmFtID09IGtleXMuZW50ZXIgdGhlbgoJCQktLSBFbnRlcgoJCQlpZiBub3QgYk1lbnUgYW5kIG5vdCBiUmVhZE9ubHkgdGhlbgoJCQkJLS0gTmV3bGluZQoJCQkJbG9jYWwgc0xpbmUgPSB0TGluZXNbeV0KCQkJCWxvY2FsIF8sc3BhY2VzPXN0cmluZy5maW5kKHNMaW5lLCJeWyBdKyIpCgkJCQlpZiBub3Qgc3BhY2VzIHRoZW4KCQkJCQlzcGFjZXM9MAoJCQkJZW5kCgkJCQl0TGluZXNbeV0gPSBzdHJpbmcuc3ViKHNMaW5lLDEseC0xKQoJCQkJdGFibGUuaW5zZXJ0KCB0TGluZXMsIHkrMSwgc3RyaW5nLnJlcCgnICcsc3BhY2VzKS4uc3RyaW5nLnN1YihzTGluZSx4KSApCgkJCQlyZWRyYXdUZXh0KCkKCQkJCgkJCQl4ID0gc3BhY2VzKzEKCQkJCXkgPSB5ICsgMQoJCQkJc2V0Q3Vyc29yKCB4LCB5ICkKCQkJZWxzZWlmIGJNZW51IHRoZW4KCQkJCS0tIE1lbnUgc2VsZWN0aW9uCgkJCQlkb01lbnVJdGVtKCBuTWVudUl0ZW0gKQoJCQllbmQKCQllbHNlaWYgcGFyYW0gPT0ga2V5cy5sZWZ0Q3RybCBvciBwYXJhbSA9PSBrZXlzLnJpZ2h0Q3RybCB0aGVuCgkJCS0tIE1lbnUgdG9nZ2xlCgkJCWJNZW51ID0gbm90IGJNZW51CgkJCWlmIGJNZW51IHRoZW4KCQkJCXRlcm0uc2V0Q3Vyc29yQmxpbmsoIGZhbHNlICkKCQkJZWxzZQoJCQkJdGVybS5zZXRDdXJzb3JCbGluayggdHJ1ZSApCgkJCWVuZAoJCQlyZWRyYXdNZW51KCkKCQllbmQKCQkKCWVsc2VpZiBzRXZlbnQgPT0gImNoYXIiIHRoZW4KCQlpZiBub3QgYk1lbnUgYW5kIG5vdCBiUmVhZE9ubHkgdGhlbgoJCQktLSBJbnB1dCB0ZXh0CgkJCWxvY2FsIHNMaW5lID0gdExpbmVzW3ldCgkJCXRMaW5lc1t5XSA9IHN0cmluZy5zdWIoc0xpbmUsMSx4LTEpIC4uIHBhcmFtIC4uIHN0cmluZy5zdWIoc0xpbmUseCkKCQkJcmVkcmF3TGluZSh5KQoJCQoJCQl4ID0geCArIDEKCQkJc2V0Q3Vyc29yKCB4LCB5ICkKCQllbHNlaWYgYk1lbnUgdGhlbgoJCQktLSBTZWxlY3QgbWVudSBpdGVtcwoJCQlmb3IgbixzTWVudUl0ZW0gaW4gaXBhaXJzKCB0TWVudUl0ZW1zICkgZG8KCQkJCWlmIHN0cmluZy5sb3dlcihzdHJpbmcuc3ViKHNNZW51SXRlbSwxLDEpKSA9PSBzdHJpbmcubG93ZXIocGFyYW0pIHRoZW4KCQkJCQlkb01lbnVJdGVtKCBuICkKCQkJCQlicmVhawoJCQkJZW5kCgkJCWVuZAoJCWVuZAoKCWVsc2VpZiBzRXZlbnQgPT0gInBhc3RlIiB0aGVuCgkJaWYgbm90IGJNZW51IGFuZCBub3QgYlJlYWRPbmx5IHRoZW4KCQkJLS0gSW5wdXQgdGV4dAoJCQlsb2NhbCBzTGluZSA9IHRMaW5lc1t5XQoJCQl0TGluZXNbeV0gPSBzdHJpbmcuc3ViKHNMaW5lLDEseC0xKSAuLiBwYXJhbSAuLiBzdHJpbmcuc3ViKHNMaW5lLHgpCgkJCXJlZHJhd0xpbmUoeSkKCgkJCXggPSB4ICsgc3RyaW5nLmxlbiggcGFyYW0gKQoJCQlzZXRDdXJzb3IoIHgsIHkgKQoJCWVuZAoJCQoJZWxzZWlmIHNFdmVudCA9PSAibW91c2VfY2xpY2siIHRoZW4KCQlpZiBub3QgYk1lbnUgdGhlbgoJCQlpZiBwYXJhbSA9PSAxIHRoZW4KCQkJCS0tIExlZnQgY2xpY2sKCQkJCWxvY2FsIGN4LGN5ID0gcGFyYW0yLCBwYXJhbTMKCQkJCWlmIGN5IDwgaCB0aGVuCgkJCQkJeSA9IG1hdGgubWluKCBtYXRoLm1heCggc2Nyb2xsWSArIGN5LCAxICksICN0TGluZXMgKQoJCQkJCXggPSBtYXRoLm1pbiggbWF0aC5tYXgoIHNjcm9sbFggKyBjeCwgMSApLCBzdHJpbmcubGVuKCB0TGluZXNbeV0gKSArIDEgKQoJCQkJCXNldEN1cnNvciggeCwgeSApCgkJCQllbmQKCQkJZW5kCgkJZW5kCgkJCgllbHNlaWYgc0V2ZW50ID09ICJtb3VzZV9zY3JvbGwiIHRoZW4KCQlpZiBub3QgYk1lbnUgdGhlbgoJCQlpZiBwYXJhbSA9PSAtMSB0aGVuCgkJCQktLSBTY3JvbGwgdXAKCQkJCWlmIHNjcm9sbFkgPiAwIHRoZW4KCQkJCQktLSBNb3ZlIGN1cnNvciB1cAoJCQkJCXNjcm9sbFkgPSBzY3JvbGxZIC0gMQoJCQkJCXJlZHJhd1RleHQoKQoJCQkJZW5kCgkJCQoJCQllbHNlaWYgcGFyYW0gPT0gMSB0aGVuCgkJCQktLSBTY3JvbGwgZG93bgoJCQkJbG9jYWwgbk1heFNjcm9sbCA9ICN0TGluZXMgLSAoaC0xKQoJCQkJaWYgc2Nyb2xsWSA8IG5NYXhTY3JvbGwgdGhlbgoJCQkJCS0tIE1vdmUgY3Vyc29yIGRvd24KCQkJCQlzY3JvbGxZID0gc2Nyb2xsWSArIDEKCQkJCQlyZWRyYXdUZXh0KCkKCQkJCWVuZAoJCQkJCgkJCWVuZAoJCWVuZAoKCWVsc2VpZiBzRXZlbnQgPT0gInRlcm1fcmVzaXplIiB0aGVuCgkgICAgdyxoID0gdGVybS5nZXRTaXplKCkKICAgICAgICBzZXRDdXJzb3IoIHgsIHkgKQogICAgICAgIHJlZHJhd01lbnUoKQogICAgICAgIHJlZHJhd1RleHQoKQoKCWVuZAplbmQKCi0tIENsZWFudXAKdGVybS5jbGVhcigpCnRlcm0uc2V0Q3Vyc29yQmxpbmsoIGZhbHNlICkKdGVybS5zZXRDdXJzb3JQb3MoIDEsIDEgKQ==","isDir":false,"name":"edit","size":0},"root/programs/eject":{"data":"Ci0tIEdldCBhcmd1bWVudHMKbG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA9PSAwIHRoZW4KCXByaW50KCAiVXNhZ2U6IGVqZWN0IDxkcml2ZT4iICkKCXJldHVybgplbmQKCmxvY2FsIHNEcml2ZSA9IHRBcmdzWzFdCgotLSBDaGVjayB0aGUgZGlzayBleGlzdHMKbG9jYWwgYlByZXNlbnQgPSBkaXNrLmlzUHJlc2VudCggc0RyaXZlICkKaWYgbm90IGJQcmVzZW50IHRoZW4KCXByaW50KCAiTm90aGluZyBpbiAiLi5zRHJpdmUuLiIgZHJpdmUiICkKCXJldHVybgplbmQKCmRpc2suZWplY3QoIHNEcml2ZSAp","isDir":false,"name":"eject","size":0},"root/programs/exit":{"data":"c2hlbGwuZXhpdCgp","isDir":false,"name":"exit","size":0},"root/programs/fun":{"children":["advanced","adventure","dj","hello","worm"],"isDir":true,"name":"fun","parents":["/root","/root/programs","/root/programs/fun"],"size":0},"root/programs/fun/advanced":{"children":["levels","paint","redirection"],"isDir":true,"name":"advanced","parents":["/root","/root/programs","/root/programs/fun","/root/programs/fun/advanced"],"size":0},"root/programs/fun/advanced/levels":{"children":["0","1","10","11","12","2","3","4","5","6","7","8","9"],"isDir":true,"name":"levels","parents":["/root","/root/programs","/root/programs/fun","/root/programs/fun/advanced","/root/programs/fun/advanced/levels"],"size":0},"root/programs/fun/advanced/levels/0":{"data":"MAo3NyAgICAgNzcKNzE4ODg4ODg3CiA4ICAgICA4CiA4ICAgICA4CiA4ICAgICA4Cjc4ODg4ODg5Nwo3NyAgICAgNzc=","isDir":false,"name":"0","size":0},"root/programs/fun/advanced/levels/1":{"data":"MQogICAgIDc3NwogICAgIDdiNwogICAgIDc4Nwo3Nzc3Nzc4Nzc3CjcxODg4ODg4ODcKNzc3Nzc3Nzc3Nw==","isDir":false,"name":"1","size":0},"root/programs/fun/advanced/levels/10":{"data":"NQogNzc3ICAgIDc3Nzc3CiA3Mjc3Nzc3Nzg4MzcKIDc4ODg4ODg3ODc4NwogNzg3Nzc3ODg4ODg3Cjc3ODc3Nzc4Nzc3Nzc3CjdlOGI3ODg4Yjg4OGU3Cjc3ODc3ODdiNzc3ODc3CiA3Nzc4ODc4ODc4ODcKICAgNzQ4NzgwNzQ4NwogICA3Nzc3Nzc3Nzc3","isDir":false,"name":"10","size":0},"root/programs/fun/advanced/levels/11":{"data":"NAogICA3Nzc3Nzc3NzcKICAgNzI3ODcyNzg3CiAgIDc4Nzg3ODc4Nwo3Nzc3ODc4Nzg3ODc3NzcKN2JlODg4ODg4ODg4YmU3Cjc3Nzc4Nzg3ODc4Nzc3NwogICA3ODc4Nzg3ODcKICAgNzg3NDc4NzQ3CiAgIDc3Nzc3Nzc3Nw==","isDir":false,"name":"11","size":0},"root/programs/fun/advanced/levels/12":{"data":"Ngo3NyAgNzc3ICA3Nwo3Mjg4ODg4ODg5NwogOCAgIDggICA4CiA4IDhiODg4IDgKNzggZTg4ODggODcKNzg4ODg3ODg4ODcKNzggODg4OGUgODcKIDggODg4YjggOAogOCAgIDggICA4Cjc1ODg4ODg4ODA3Cjc3ICA3NzcgIDc3","isDir":false,"name":"12","size":0},"root/programs/fun/advanced/levels/2":{"data":"MQo3Nzc3Nzc3NzcKNzg4ODg4OGI3Cjc4Nzc3ODg4Nwo3ODcgNzg3NzcKNzg3Nzc4Nwo3ODg4ODg3Cjc3Nzc3ODcKICAgIDcwNwogICAgNzc3","isDir":false,"name":"2","size":0},"root/programs/fun/advanced/levels/3":{"data":"MgogIDc3Nzc3Nzc3Cjc3Nzg4ODE4ODc3Nwo3Yjc4Nzc3Nzg3YjcKNzg3ODcgIDc4Nzg3Cjc4Nzg3ICA3ODc4Nwo3ODg4NyAgNzg4ODcKNzc3ODc3Nzc4Nzc3CiAgNzg4Mzg4ODcKICA3Nzc3Nzc3Nw==","isDir":false,"name":"3","size":0},"root/programs/fun/advanced/levels/4":{"data":"MgogICAgNzc3Nzc3NzcKNzc3Nzc4ODg4ODg3Cjc4ODg4ODc3Nzc4Nwo3Yjc3Nzg3ICA3ODcKNzg3IDc4NyAgNzg3CjdiNzc3ODcgIDc4Nwo3ODg4ODg3ICA3ODcKNzc3NzcwNyAgNzA3CiAgICA3NzcgIDc3Nw==","isDir":false,"name":"4","size":0},"root/programs/fun/advanced/levels/5":{"data":"Mwo3Nzc3Nzc3NzcKNzg4ODg4ODg3Cjc4Nzc4Nzc4Nwo3ODc3ODc3ODcKNzg4ODg4ODg3Cjc4Nzc4Nzc4Nwo3ODc3ODc3ODcKNzhlNzQ4ODg3Cjc3Nzc3Nzc3Nw==","isDir":false,"name":"5","size":0},"root/programs/fun/advanced/levels/6":{"data":"NAo3Nzc3Nzc3Nzc3CjcyODg4ODg4MzcKNzggICAgICA4Nwo3ODg4ODhiIDg3Cjc4ODg4OGIgODcKNzg4ODg4YiA4Nwo3ODg4ODhiIDg3Cjc4ICAgICAgODcKNzE4ODg4ODgwNwo3Nzc3Nzc3Nzc3","isDir":false,"name":"6","size":0},"root/programs/fun/advanced/levels/7":{"data":"Mwo3Mjg3Nzc3NzhiNwo3ODg4ODg4ODg4Nwo3ODc3Nzg3Nzc4Nwo3ODcgNzg3IDc4Nwo3ODcgNzg3Nzc4OAo3ODcgNzg4ODg4OQo4ODc3Nzg3Nzc3NwplODg4ODg3Cjc3Nzc4ODc=","isDir":false,"name":"7","size":0},"root/programs/fun/advanced/levels/8":{"data":"NAo3Nzc3NzcgNzc3Nwo3Mjg3YjcgNzg2Nwo3ODg3ODcgNzg4Nwo3Nzg3ODc3Nzg3NwogNzg4OGViODg4NwogNzc4Nzc3ODc4NzcKIDc4ODcgNzg3ODg3CiA3NDg3IDdlNzgwNwogNzc3NyA3Nzc3Nzc=","isDir":false,"name":"8","size":0},"root/programs/fun/advanced/levels/9":{"data":"MgogICAgNzc3ICA3NzcKICA3Nzc4Nzc3Nzg3NzcKICA3ODg4Mzg4ODg4ODcKNzc3OGJiYmJiYmJiODc3Nwo3ODg4Yjg4ODg4OGI4ODk3Cjc4NzhiZTg4ODhlYjg3ODcKNzU4OGI4ODg4ODhiODg4Nwo3Nzc4YmJiYmJiYmI4Nzc3CiAgNzg4ODg4ODE4ODg3CiAgNzc3ODc3Nzc4Nzc3CiAgICA3NzcgIDc3Nw==","isDir":false,"name":"9","size":0},"root/programs/fun/advanced/paint":{"data":"LS0gUGFpbnQgY3JlYXRlZCBieSBuaXRyb2dlbmZpbmdlcnMgKGVkaXRlZCBieSBkYW4yMDApCi0tIGh0dHA6Ly93d3cueW91dHViZS5jb20vdXNlci9OaXRyb2dlbkZpbmdlcnMKCi0tLS0tLS0tLS0tLQotLSBGaWVsZHMgLS0KLS0tLS0tLS0tLS0tCgotLSBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdGVybWluYWwKbG9jYWwgdyxoID0gdGVybS5nZXRTaXplKCkKCi0tIFRoZSBzZWxlY3RlZCBjb2xvdXJzIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b24sIGFuZCB0aGUgY29sb3VyIG9mIHRoZSBjYW52YXMKbG9jYWwgbGVmdENvbG91ciwgcmlnaHRDb2xvdXIgPSBjb2xvdXJzLndoaXRlLCBuaWwKbG9jYWwgY2FudmFzQ29sb3VyID0gY29sb3Vycy5ibGFjawoKLS0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGNhbnZhcwpsb2NhbCBjYW52YXMgPSB7fQoKLS0gVGhlIG1lbnUgb3B0aW9ucwpsb2NhbCBtQ2hvaWNlcyA9IHsgIlNhdmUiLCJFeGl0IiB9CgotLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgaW4gdGhlIGZvb3RlciBiYXIKbG9jYWwgZk1lc3NhZ2UgPSAiUHJlc3MgQ3RybCB0byBhY2Nlc3MgbWVudSIKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gSW5pdGlhbGlzYXRpb24gLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0gRGV0ZXJtaW5lIGlmIHdlIGNhbiBldmVuIHJ1biB0aGlzCmlmIG5vdCB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJcHJpbnQoIlJlcXVpcmVzIGFuIEFkdmFuY2VkIENvbXB1dGVyIikKCXJldHVybgplbmQKCi0tIERldGVybWluZXMgaWYgdGhlIGZpbGUgZXhpc3RzLCBhbmQgY2FuIGJlIGVkaXRlZCBvbiB0aGlzIGNvbXB1dGVyCmxvY2FsIHRBcmdzID0gey4uLn0KaWYgI3RBcmdzID09IDAgdGhlbgoJcHJpbnQoIlVzYWdlOiBwYWludCA8cGF0aD4iKQoJcmV0dXJuCmVuZApsb2NhbCBzUGF0aCA9IHNoZWxsLnJlc29sdmUodEFyZ3NbMV0pCmxvY2FsIGJSZWFkT25seSA9IGZzLmlzUmVhZE9ubHkoc1BhdGgpCmlmIGZzLmV4aXN0cyhzUGF0aCkgYW5kIGZzLmlzRGlyKHNQYXRoKSB0aGVuCglwcmludCgiQ2Fubm90IGVkaXQgYSBkaXJlY3RvcnkuIikKCXJldHVybgplbmQKCi0tLS0tLS0tLS0tLS0tLQotLSBGdW5jdGlvbnMgLS0KLS0tLS0tLS0tLS0tLS0tCgpsb2NhbCBmdW5jdGlvbiBnZXRDYW52YXNQaXhlbCggeCwgeSApCiAgICBpZiBjYW52YXNbeV0gdGhlbgogICAgICAgIHJldHVybiBjYW52YXNbeV1beF0KICAgIGVuZAogICAgcmV0dXJuIG5pbAplbmQKCi0tW1sKCUNvbnZlcnRzIGEgY29sb3VyIHZhbHVlIHRvIGEgdGV4dCBjaGFyYWN0ZXIKCXBhcmFtczogY29sb3VyID0gdGhlIG51bWJlciB0byBjb252ZXJ0IHRvIGEgaGV4IHZhbHVlCglyZXR1cm5zOiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNob3NlbiBjb2xvdXIKXV0KbG9jYWwgZnVuY3Rpb24gZ2V0Q2hhck9mKCBjb2xvdXIgKQoJLS0gSW5jb3JyZWN0IHZhbHVlcyBhbHdheXMgY29udmVydCB0byBuaWwKCWlmIHR5cGUoY29sb3VyKSA9PSAibnVtYmVyIiB0aGVuCgkJbG9jYWwgdmFsdWUgPSBtYXRoLmZsb29yKCBtYXRoLmxvZyhjb2xvdXIpIC8gbWF0aC5sb2coMikgKSArIDEKCQlpZiB2YWx1ZSA+PSAxIGFuZCB2YWx1ZSA8PSAxNiB0aGVuCgkJCXJldHVybiBzdHJpbmcuc3ViKCAiMDEyMzQ1Njc4OWFiY2RlZiIsIHZhbHVlLCB2YWx1ZSApCgkJZW5kCgllbmQKCXJldHVybiAiICIKZW5kCQoKLS1bWwoJQ29udmVydHMgYSB0ZXh0IGNoYXJhY3RlciB0byBjb2xvdXIgdmFsdWUKCXBhcmFtczogY2hhciA9IHRoZSBjaGFyIChmcm9tIHN0cmluZy5ieXRlKSB0byBjb252ZXJ0IHRvIG51bWJlcgoJcmV0dXJuczogdGhlIGNvbG91ciBudW1iZXIgb2YgdGhlIGhleCB2YWx1ZQpdXQpsb2NhbCB0Q29sb3VyTG9va3VwID0ge30KZm9yIG49MSwxNiBkbwoJdENvbG91ckxvb2t1cFsgc3RyaW5nLmJ5dGUoICIwMTIzNDU2Nzg5YWJjZGVmIixuLG4gKSBdID0gMl4obi0xKQplbmQKbG9jYWwgZnVuY3Rpb24gZ2V0Q29sb3VyT2YoIGNoYXIgKQoJLS0gVmFsdWVzIG5vdCBpbiB0aGUgaGV4IHRhYmxlIGFyZSB0cmFuc3BhcmVudCAoY2FudmFzIGNvbG91cmVkKQoJcmV0dXJuIHRDb2xvdXJMb29rdXBbY2hhcl0KZW5kCgotLVtbIAoJTG9hZHMgdGhlIGZpbGUgaW50byB0aGUgY2FudmFzCglwYXJhbXM6IHBhdGggPSB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBvcGVuCglyZXR1cm5zOiBuaWwKXV0KbG9jYWwgZnVuY3Rpb24gbG9hZChwYXRoKQoJLS0gTG9hZCB0aGUgZmlsZQoJaWYgZnMuZXhpc3RzKHBhdGgpIHRoZW4KCQlsb2NhbCBmaWxlID0gZnMub3BlbihzUGF0aCwgInIiKQoJCWxvY2FsIHNMaW5lID0gZmlsZS5yZWFkTGluZSgpCgkJd2hpbGUgc0xpbmUgZG8KCQkJbG9jYWwgbGluZSA9IHt9CgkJCWZvciB4PTEsdy0yIGRvCgkJCQlsaW5lW3hdID0gZ2V0Q29sb3VyT2YoIHN0cmluZy5ieXRlKHNMaW5lLHgseCkgKQoJCQllbmQKCQkJdGFibGUuaW5zZXJ0KCBjYW52YXMsIGxpbmUgKQoJCQlzTGluZSA9IGZpbGUucmVhZExpbmUoKQoJCWVuZAoJCWZpbGUuY2xvc2UoKQoJZW5kCmVuZAoKLS1bWyAgCglTYXZlcyB0aGUgY3VycmVudCBjYW52YXMgdG8gZmlsZSAgCglwYXJhbXM6IHBhdGggPSB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBzYXZlCglyZXR1cm5zOiB0cnVlIGlmIHNhdmUgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQpdXQpsb2NhbCBmdW5jdGlvbiBzYXZlKHBhdGgpCiAgICAtLSBPcGVuIGZpbGUKCWxvY2FsIHNEaXIgPSBzdHJpbmcuc3ViKHNQYXRoLCAxLCAjc1BhdGggLSAjZnMuZ2V0TmFtZShzUGF0aCkpCglpZiBub3QgZnMuZXhpc3RzKHNEaXIpIHRoZW4KCQlmcy5tYWtlRGlyKHNEaXIpCgllbmQKCglsb2NhbCBmaWxlID0gZnMub3BlbiggcGF0aCwgInciICkKCWlmIG5vdCBmaWxlIHRoZW4KCSAgICByZXR1cm4gZmFsc2UKCWVuZAoKICAgIC0tIEVuY29kZSAoYW5kIHRyaW0pCglsb2NhbCB0TGluZXMgPSB7fQoJbG9jYWwgbkxhc3RMaW5lID0gMAoJZm9yIHk9MSxoLTEgZG8KCSAgICBsb2NhbCBzTGluZSA9ICIiCgkgICAgbG9jYWwgbkxhc3RDaGFyID0gMAoJCWZvciB4PTEsdy0yIGRvCgkJICAgIGxvY2FsIGMgPSBnZXRDaGFyT2YoIGdldENhbnZhc1BpeGVsKCB4LCB5ICkgKQoJCSAgICBzTGluZSA9IHNMaW5lIC4uIGMKCQkgICAgaWYgYyB+PSAiICIgdGhlbgoJCSAgICAgICAgbkxhc3RDaGFyID0geAoJCSAgICBlbmQKCQllbmQKCQlzTGluZSA9IHN0cmluZy5zdWIoIHNMaW5lLCAxLCBuTGFzdENoYXIgKQoJCXRMaW5lc1t5XSA9IHNMaW5lCgkJaWYgc3RyaW5nLmxlbiggc0xpbmUgKSA+IDAgdGhlbgoJCSAgICBuTGFzdExpbmUgPSB5CgkJZW5kCgllbmQKCiAgICAtLSBTYXZlIG91dAoJZm9yIG49MSxuTGFzdExpbmUgZG8KICAgCSAgICBmaWxlLndyaXRlTGluZSggdExpbmVzWyBuIF0gKQoJZW5kCglmaWxlLmNsb3NlKCkKCXJldHVybiB0cnVlCmVuZAoKLS1bWyAgCglEcmF3cyBjb2xvdXIgcGlja2VyIHNpZGViYXIsIHRoZSBwYWxsZXR0ZSBhbmQgdGhlIGZvb3RlcgoJcmV0dXJuczogbmlsCl1dCmxvY2FsIGZ1bmN0aW9uIGRyYXdJbnRlcmZhY2UoKQoJLS0gRm9vdGVyCgl0ZXJtLnNldEN1cnNvclBvcygxLCBoKQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKGNvbG91cnMuYmxhY2spCgl0ZXJtLnNldFRleHRDb2xvdXIoY29sb3Vycy55ZWxsb3cpCgl0ZXJtLmNsZWFyTGluZSgpCgl0ZXJtLndyaXRlKGZNZXNzYWdlKQoJCgktLSBDb2xvdXIgUGlja2VyCglmb3IgaT0xLDE2IGRvCgkJdGVybS5zZXRDdXJzb3JQb3Mody0xLCBpKQoJCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggMl4oaS0xKSApCgkJdGVybS53cml0ZSgiICAiKQoJZW5kCgoJdGVybS5zZXRDdXJzb3JQb3Mody0xLCAxNykKCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggY2FudmFzQ29sb3VyICkKCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy5ncmV5ICkKCXRlcm0ud3JpdGUoIlhYIikKCQkJCgktLSBMZWZ0IGFuZCBSaWdodCBTZWxlY3RlZCBDb2xvdXJzCglmb3IgaT0xOCwxOCBkbwoJCXRlcm0uc2V0Q3Vyc29yUG9zKHctMSwgaSkKCQlpZiBsZWZ0Q29sb3VyIH49IG5pbCB0aGVuCgkJCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggbGVmdENvbG91ciApCgkJCXRlcm0ud3JpdGUoIiAiKQoJCWVsc2UKCQkJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKCBjYW52YXNDb2xvdXIgKQoJCQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMuZ3JleSApCgkJCXRlcm0ud3JpdGUoIlgiKQoJCWVuZAoJCWlmIHJpZ2h0Q29sb3VyIH49IG5pbCB0aGVuCgkJCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggcmlnaHRDb2xvdXIgKQoJCQl0ZXJtLndyaXRlKCIgIikKCQllbHNlCgkJCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggY2FudmFzQ29sb3VyICkKCQkJdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLmdyZXkgKQoJCQl0ZXJtLndyaXRlKCJYIikKCQllbmQKCWVuZAoKCS0tIFBhZGRpbmcKCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggY2FudmFzQ29sb3VyICkKCWZvciBpPTIwLGgtMSBkbwoJCXRlcm0uc2V0Q3Vyc29yUG9zKHctMSwgaSkKCQl0ZXJtLndyaXRlKCIgICIpCgllbmQKZW5kCgotLVtbICAKCUNvbnZlcnRzIGEgc2luZ2xlIHBpeGVsIG9mIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGNhbnZhcyBhbmQgZHJhd3MgaXQKCXJldHVybnM6IG5pbApdXQpsb2NhbCBmdW5jdGlvbiBkcmF3Q2FudmFzUGl4ZWwoIHgsIHkgKQoJbG9jYWwgcGl4ZWwgPSBnZXRDYW52YXNQaXhlbCggeCwgeSApCglpZiBwaXhlbCB0aGVuCgkJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKCBwaXhlbCBvciBjYW52YXNDb2xvdXIgKQoJCXRlcm0uc2V0Q3Vyc29yUG9zKHgsIHkpCgkJdGVybS53cml0ZSgiICIpCgllbHNlCgkJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKCBjYW52YXNDb2xvdXIgKQoJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy5ncmV5ICkKCQl0ZXJtLnNldEN1cnNvclBvcyh4LCB5KQogICAgICAgIHRlcm0ud3JpdGUoIi0iKQoJZW5kCmVuZAoKLS1bWyAgCglDb252ZXJ0cyBlYWNoIGNvbG91ciBpbiBhIHNpbmdsZSBsaW5lIG9mIHRoZSBjYW52YXMgYW5kIGRyYXdzIGl0CglyZXR1cm5zOiBuaWwKXV0KbG9jYWwgZnVuY3Rpb24gZHJhd0NhbnZhc0xpbmUoIHkgKQoJZm9yIHggPSAxLCB3LTIgZG8KCQlkcmF3Q2FudmFzUGl4ZWwoIHgsIHkgKQoJZW5kCmVuZAoKLS1bWyAgCglDb252ZXJ0cyBlYWNoIGNvbG91ciBpbiB0aGUgY2FudmFzIGFuZCBkcmF3cyBpdAoJcmV0dXJuczogbmlsCl1dCmxvY2FsIGZ1bmN0aW9uIGRyYXdDYW52YXMoKQoJZm9yIHkgPSAxLCBoLTEgZG8KCQlkcmF3Q2FudmFzTGluZSggeSApCgllbmQKZW5kCgotLVtbCglEcmF3cyBtZW51IG9wdGlvbnMgYW5kIGhhbmRsZXMgaW5wdXQgZnJvbSB3aXRoaW4gdGhlIG1lbnUuCglyZXR1cm5zOiB0cnVlIGlmIHRoZSBwcm9ncmFtIGlzIHRvIGJlIGV4aXRlZDsgZmFsc2Ugb3RoZXJ3aXNlCl1dCmxvY2FsIGZ1bmN0aW9uIGFjY2Vzc01lbnUoKQoJLS0gU2VsZWN0ZWQgbWVudSBvcHRpb24KCWxvY2FsIHNlbGVjdGlvbiA9IDEKCQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKGNvbG91cnMuYmxhY2spCgl3aGlsZSB0cnVlIGRvCgkJLS0gRHJhdyB0aGUgbWVudQoJCXRlcm0uc2V0Q3Vyc29yUG9zKDEsaCkKCQl0ZXJtLmNsZWFyTGluZSgpCgkJdGVybS5zZXRUZXh0Q29sb3VyKGNvbG91cnMud2hpdGUpCgkJZm9yIGssdiBpbiBwYWlycyhtQ2hvaWNlcykgZG8KCQkJaWYgc2VsZWN0aW9uPT1rIHRoZW4gCgkJCQl0ZXJtLnNldFRleHRDb2xvdXIoY29sb3Vycy55ZWxsb3cpCgkJCQlsb2NhbCBveCxfID0gdGVybS5nZXRDdXJzb3JQb3MoKQoJCQkJdGVybS53cml0ZSgiWyIuLnN0cmluZy5yZXAoIiAiLCN2KS4uIl0iKQoJCQkJdGVybS5zZXRDdXJzb3JQb3Mob3grMSxoKQoJCQkJdGVybS5zZXRUZXh0Q29sb3VyKGNvbG91cnMud2hpdGUpCgkJCQl0ZXJtLndyaXRlKHYpCgkJCQl0ZXJtLnNldEN1cnNvclBvcyh0ZXJtLmdldEN1cnNvclBvcygpKzEsaCkKCQkJZWxzZQoJCQkJdGVybS53cml0ZSgiICIuLnYuLiIgIikKCQkJZW5kCgkJZW5kCgkJCgkJLS0gSGFuZGxlIGlucHV0IGluIHRoZSBtZW51CgkJbG9jYWwgaWQsa2V5ID0gb3MucHVsbEV2ZW50KCJrZXkiKQoJCWlmIGlkID09ICJrZXkiIHRoZW4KCQkJLS0gUyBhbmQgRSBhcmUgc2hvcnRjdXRzCgkJCWlmIGtleSA9PSBrZXlzLnMgdGhlbgoJCQkJc2VsZWN0aW9uID0gMQoJCQkJa2V5ID0ga2V5cy5lbnRlcgoJCQllbHNlaWYga2V5ID09IGtleXMuZSB0aGVuCgkJCQlzZWxlY3Rpb24gPSAyCgkJCQlrZXkgPSBrZXlzLmVudGVyCgkJCWVuZAoJCQoJCQlpZiBrZXkgPT0ga2V5cy5yaWdodCB0aGVuCgkJCQktLSBNb3ZlIHJpZ2h0CgkJCQlzZWxlY3Rpb24gPSBzZWxlY3Rpb24gKyAxCgkJCQlpZiBzZWxlY3Rpb24gPiAjbUNob2ljZXMgdGhlbgoJCQkJCXNlbGVjdGlvbiA9IDEKCQkJCWVuZAoJCQkJCgkJCWVsc2VpZiBrZXkgPT0ga2V5cy5sZWZ0IGFuZCBzZWxlY3Rpb24gPiAxIHRoZW4KCQkJCS0tIE1vdmUgbGVmdAoJCQkJc2VsZWN0aW9uID0gc2VsZWN0aW9uIC0gMQoJCQkJaWYgc2VsZWN0aW9uIDwgMSB0aGVuCgkJCQkJc2VsZWN0aW9uID0gI21DaG9pY2VzCgkJCQllbmQKCQkJCQoJCQllbHNlaWYga2V5ID09IGtleXMuZW50ZXIgdGhlbgoJCQkJLS0gU2VsZWN0IGFuIG9wdGlvbgoJCQkJaWYgbUNob2ljZXNbc2VsZWN0aW9uXT09IlNhdmUiIHRoZW4gCgkJCQkJaWYgYlJlYWRPbmx5IHRoZW4gCgkJCQkJCWZNZXNzYWdlID0gIkFjY2VzcyBEZW5pZWQiCgkJCQkJCXJldHVybiBmYWxzZQoJCQkJCWVuZAoJCQkJCWxvY2FsIHN1Y2Nlc3MgPSBzYXZlKHNQYXRoKQoJCQkJCWlmIHN1Y2Nlc3MgdGhlbgoJCQkJCQlmTWVzc2FnZSA9ICJTYXZlZCB0byAiLi5zUGF0aAoJCQkJCWVsc2UKCQkJCQkJZk1lc3NhZ2UgPSAiRXJyb3Igc2F2aW5nIHRvICIuLnNQYXRoCgkJCQkJZW5kCgkJCQkJcmV0dXJuIGZhbHNlCgkJCQllbHNlaWYgbUNob2ljZXNbc2VsZWN0aW9uXT09IkV4aXQiIHRoZW4gCgkJCQkJcmV0dXJuIHRydWUKCQkJCWVuZAoJCQllbHNlaWYga2V5ID09IGtleXMubGVmdEN0cmwgb3Iga2V5cyA9PSBrZXlzLnJpZ2h0Q3RybCB0aGVuCgkJCQktLSBDYW5jZWwgdGhlIG1lbnUKCQkJCXJldHVybiBmYWxzZSAKCQkJZW5kCgkJZW5kCgllbmQKZW5kCgotLVtbICAKCVJ1bnMgdGhlIG1haW4gdGhyZWFkIG9mIGV4ZWN1dGlvbi4gRHJhd3MgdGhlIGNhbnZhcyBhbmQgaW50ZXJmYWNlLCBhbmQgaGFuZGxlcwoJbW91c2UgYW5kIGtleSBldmVudHMuCglyZXR1cm5zOiBuaWwKXV0KbG9jYWwgZnVuY3Rpb24gaGFuZGxlRXZlbnRzKCkKCWxvY2FsIHByb2dyYW1BY3RpdmUgPSB0cnVlCgl3aGlsZSBwcm9ncmFtQWN0aXZlIGRvCgkJbG9jYWwgaWQscDEscDIscDMgPSBvcy5wdWxsRXZlbnQoKQoJCWlmIGlkPT0ibW91c2VfY2xpY2siIG9yIGlkPT0ibW91c2VfZHJhZyIgdGhlbgoJCQlpZiBwMiA+PSB3LTEgYW5kIHAzID49IDEgYW5kIHAzIDw9IDE3IHRoZW4KCQkJCWlmIGlkIH49ICJtb3VzZV9kcmFnIiB0aGVuCgkJCQkJLS0gU2VsZWN0aW5nIGFuIGl0ZW1zIGluIHRoZSBjb2xvdXIgcGlja2VyCgkJCQkJaWYgcDMgPD0gMTYgdGhlbgoJCQkJCQlpZiBwMT09MSB0aGVuCgkJCQkJCQlsZWZ0Q29sb3VyID0gMl4ocDMtMSkKCQkJCQkJZWxzZQoJCQkJCQkJcmlnaHRDb2xvdXIgPSAyXihwMy0xKQoJCQkJCQllbmQKCQkJCQllbHNlCgkJCQkJCWlmIHAxPT0xIHRoZW4KCQkJCQkJCWxlZnRDb2xvdXIgPSBuaWwKCQkJCQkJZWxzZQoJCQkJCQkJcmlnaHRDb2xvdXIgPSBuaWwKCQkJCQkJZW5kCgkJCQkJZW5kCgkJCQkJLS1kcmF3Q2FudmFzKCkKCQkJCQlkcmF3SW50ZXJmYWNlKCkKCQkJCWVuZAoJCQllbHNlaWYgcDIgPCB3LTEgYW5kIHAzIDw9IGgtMSB0aGVuCgkJCQktLSBDbGlja2luZyBvbiB0aGUgY2FudmFzCgkJCQlsb2NhbCBwYWludENvbG91ciA9IG5pbAoJCQkJaWYgcDE9PTEgdGhlbgoJCQkJCXBhaW50Q29sb3VyID0gbGVmdENvbG91cgoJCQkJZWxzZWlmIHAxPT0yIHRoZW4KCQkJCQlwYWludENvbG91ciA9IHJpZ2h0Q29sb3VyCgkJCQllbmQKCQkJCWlmIG5vdCBjYW52YXNbcDNdIHRoZW4KICAgICAgICAgICAgICAgICAgICBjYW52YXNbcDNdID0ge30KICAgIAkJCWVuZAogICAgICAgICAgICAgICAgY2FudmFzW3AzXVtwMl0gPSBwYWludENvbG91cgoKCQkJCWRyYXdDYW52YXNQaXhlbCggcDIsIHAzICkKCQkJZW5kCgkJZWxzZWlmIGlkPT0ia2V5IiB0aGVuCgkJCWlmIHAxPT1rZXlzLmxlZnRDdHJsIG9yIHAxPT1rZXlzLnJpZ2h0Q3RybCB0aGVuCgkJCQlwcm9ncmFtQWN0aXZlID0gbm90IGFjY2Vzc01lbnUoKQoJCQkJZHJhd0ludGVyZmFjZSgpCgkJCWVuZAoJCWVsc2VpZiBpZD09InRlcm1fcmVzaXplIiB0aGVuCgkJICAgIHcsaCA9IHRlcm0uZ2V0U2l6ZSgpCiAgICAgICAgICAgIGRyYXdDYW52YXMoKQogICAgICAgICAgICBkcmF3SW50ZXJmYWNlKCkKICAgICAgICBlbmQKCWVuZAplbmQKCi0tIEluaXQKbG9hZChzUGF0aCkKZHJhd0NhbnZhcygpCmRyYXdJbnRlcmZhY2UoKQoKLS0gTWFpbiBsb29wCmhhbmRsZUV2ZW50cygpCgotLSBTaHV0ZG93bgp0ZXJtLnNldEJhY2tncm91bmRDb2xvdXIoY29sb3Vycy5ibGFjaykKdGVybS5zZXRUZXh0Q29sb3VyKGNvbG91cnMud2hpdGUpCnRlcm0uY2xlYXIoKQp0ZXJtLnNldEN1cnNvclBvcygxLDEp","isDir":false,"name":"paint","size":0},"root/programs/fun/advanced/redirection":{"data":"LS1DQ1JlZGlyZWN0aW9uIGJ5IDogUmFtaUxlZ280R2FtZSBhbmQgRGFuMjAwLS0KLS1CYXNlZCBvbiBSZWRpcmVjdGlvbiBieSBEYW4yMDA6IGh0dHA6Ly93d3cucmVkaXJlY3Rpb25nYW1lLmNvbS0tCi0tQ2xlYXJpbmcgU2NyZWVuLS0KCi0tVmFycy0tCmxvY2FsIFRlcm1XLFRlcm1IID0gdGVybS5nZXRTaXplKCkKCmxvY2FsIHNMZXZlbFRpdGxlCmxvY2FsIHRTY3JlZW4KbG9jYWwgb1NjcmVlbgpsb2NhbCBTaXplVyxTaXplSApsb2NhbCBhRXhpdHMKbG9jYWwgZkV4aXQKbG9jYWwgblNwZWVkCmxvY2FsIFNwZWVkCmxvY2FsIGZTcGVlZApsb2NhbCBmU3BlZWRTCmxvY2FsIGJQYXVzZWQKbG9jYWwgVGljawpsb2NhbCBCbG9ja3MKbG9jYWwgWE9yZ2luLFlPcmdpbgoKbG9jYWwgZnVuY3Rpb24gcmVzZXQoKQogICAgc0xldmVsVGl0bGUgPSAiIgogICAgdFNjcmVlbiA9IHt9CiAgICBvU2NyZWVuID0ge30KICAgIFNpemVXLFNpemVIID0gVGVybVcsVGVybUgKICAgIGFFeGl0cyA9IDAKICAgIGZFeGl0ID0gIm5vcCIKICAgIG5TcGVlZCA9IDAuNgogICAgU3BlZWQgPSBuU3BlZWQKICAgIGZTcGVlZCA9IDAuMgogICAgZlNwZWVkUyA9IGZhbHNlCiAgICBiUGF1c2VkID0gZmFsc2UKICAgIFRpY2sgPSBvcy5zdGFydFRpbWVyKFNwZWVkKQogICAgQmxvY2tzID0gMAogICAgWE9yZ2luLFlPcmdpbiA9IDEsMQoKICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICAgIHRlcm0uc2V0VGV4dENvbG9yKGNvbG9ycy53aGl0ZSkKICAgIHRlcm0uY2xlYXIoKQplbmQKCmxvY2FsIEludGVyRmFjZSA9IHt9CkludGVyRmFjZS5jRXhpdCA9IGNvbG9ycy5yZWQKSW50ZXJGYWNlLmNTcGVlZEQgPSBjb2xvcnMud2hpdGUKSW50ZXJGYWNlLmNTcGVlZEEgPSBjb2xvcnMucmVkCkludGVyRmFjZS5jVGl0bGUgPSBjb2xvcnMucmVkCgpsb2NhbCBjRyA9IGNvbG9ycy5saWdodEdyYXkKbG9jYWwgY1cgPSBjb2xvcnMuZ3JheQpsb2NhbCBjUyA9IGNvbG9ycy5ibGFjawpsb2NhbCBjUjEgPSBjb2xvcnMuYmx1ZQpsb2NhbCBjUjIgPSBjb2xvcnMucmVkCmxvY2FsIGNSMyA9IGNvbG9ycy5ncmVlbgpsb2NhbCBjUjQgPSBjb2xvcnMueWVsbG93Cgpsb2NhbCB0QXJncyA9IHsgLi4uIH0KCi0tRnVuY3Rpb25zLS0KbG9jYWwgZnVuY3Rpb24gcHJpbnRDZW50cmVkKCB5Yywgc3RnICkKCWxvY2FsIHhjID0gbWF0aC5mbG9vcigoVGVybVcgLSBzdHJpbmcubGVuKHN0ZykpIC8gMikgKyAxCgl0ZXJtLnNldEN1cnNvclBvcyh4Yyx5YykKCXRlcm0ud3JpdGUoIHN0ZyApCmVuZAoKbG9jYWwgZnVuY3Rpb24gY2VudGVyT3JnaW4oKQoJWE9yZ2luID0gbWF0aC5mbG9vcigoVGVybVcvMiktKFNpemVXLzIpKQoJWU9yZ2luID0gbWF0aC5mbG9vcigoVGVybUgvMiktKFNpemVILzIpKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHJlTWFwKCkKCXRTY3JlZW4gPSBuaWwKCXRTY3JlZW4gPSB7fQoJZm9yIHg9MSxTaXplVyBkbwoJCXRTY3JlZW5beF0gPSB7fQoJCWZvciB5PTEsU2l6ZUggZG8KCQkJdFNjcmVlblt4XVt5XSA9IHsgc3BhY2UgPSB0cnVlLCB3YWxsID0gZmFsc2UsIGdyb3VuZCA9IGZhbHNlLCByb2JvdCA9ICJ6eiIsIHN0YXJ0ID0gInp6IiwgZXhpdCA9ICJ6eiIgfQoJCWVuZAoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gdGFibGVjb3B5KHQpCiAgbG9jYWwgdDIgPSB7fQogIGZvciBrLHYgaW4gcGFpcnModCkgZG8KICAgIHQyW2tdID0gdgogIGVuZAogIHJldHVybiB0MgplbmQKCmxvY2FsIGZ1bmN0aW9uIGJ1TWFwKCkKCW9TY3JlZW4gPSBuaWwKCW9TY3JlZW4gPSB7fQoJZm9yIHg9MSxTaXplVyBkbwoJCW9TY3JlZW5beF0gPSB7fQoJCWZvciB5PTEsU2l6ZUggZG8KCQkJb1NjcmVlblt4XVt5XSA9IHRhYmxlY29weSh0U2NyZWVuW3hdW3ldKQoJCWVuZAoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gYWRkUm9ib3QoeCx5LHNpZGUsY29sb3IpCglsb2NhbCBvYmogPSB0U2NyZWVuW3hdW3ldCglsb2NhbCBkYXRhID0gc2lkZS4uY29sb3IKCWlmIG9iai53YWxsID09IG5pbCBhbmQgb2JqLnJvYm90ID09IG5pbCB0aGVuCgkJdFNjcmVlblt4XVt5XS5yb2JvdCA9IGRhdGEKCWVsc2UKCQlvYmoud2FsbCA9IG5pbAoJCW9iai5yb2JvdCA9ICJ6eiIKCQl0U2NyZWVuW3hdW3ldLnJvYm90ID0gZGF0YQoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gYWRkU3RhcnQoeCx5LHNpZGUsY29sb3IpCglsb2NhbCBvYmogPSB0U2NyZWVuW3hdW3ldCglsb2NhbCBkYXRhID0gc2lkZS4uY29sb3IKCWlmIG9iai53YWxsID09IG5pbCBhbmQgb2JqLnNwYWNlID09IG5pbCB0aGVuCgkJdFNjcmVlblt4XVt5XS5zdGFydCA9IGRhdGEKCWVsc2UKCQlvYmoud2FsbCA9IG5pbAoJCW9iai5zcGFjZSA9IG5pbAoJCXRTY3JlZW5beF1beV0uc3RhcnQgPSBkYXRhCgllbmQKCWFFeGl0cyA9IGFFeGl0cysxCmVuZAoKbG9jYWwgZnVuY3Rpb24gYWRkR3JvdW5kKHgseSkKCWxvY2FsIG9iaiA9IHRTY3JlZW5beF1beV0KCWlmIG9iai5zcGFjZSA9PSBuaWwgYW5kIG9iai5leGl0ID09IG5pbCBhbmQgb2JqLndhbGwgPT0gbmlsIGFuZCBvYmoucm9ib3QgPT0gbmlsIGFuZCBvYmouc3RhcnQgPT0gbmlsIHRoZW4KCQl0U2NyZWVuW3hdW3ldLmdyb3VuZCA9IHRydWUKCWVsc2UKCQlvYmouc3BhY2UgPSBuaWwKCQlvYmouZXhpdCA9ICJ6eiIKCQlvYmoud2FsbCA9IG5pbAoJCW9iai5yb2JvdCA9ICJ6eiIKCQlvYmouc3RhcnQgPSAienoiCgkJdFNjcmVlblt4XVt5XS5ncm91bmQgPSB0cnVlCgllbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBhZGRFeGl0KHgseSxjbCkKCWxvY2FsIG9iaiA9IHRTY3JlZW5beF1beV0KCWlmIG9iai5zcGFjZSA9PSBuaWwgYW5kIG9iai5ncm91bmQgPT0gbmlsIGFuZCBvYmoud2FsbCA9PSBuaWwgYW5kIG9iai5yb2JvdCA9PSBuaWwgYW5kIG9iai5zdGFydCA9PSBuaWwgdGhlbgoJCXRTY3JlZW5beF1beV0uZXhpdCA9IGNsCgllbHNlCgkJb2JqLnNwYWNlID0gbmlsCgkJb2JqLmdyb3VuZCA9IG5pbAoJCW9iai53YWxsID0gbmlsCgkJb2JqLnJvYm90ID0gInp6IgoJCW9iai5zdGFydCA9ICJ6eiIKCQl0U2NyZWVuW3hdW3ldLmV4aXQgPSBjbAoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gYWRkV2FsbCh4LHkpCglsb2NhbCBvYmogPSB0U2NyZWVuW3hdW3ldCglpZiBvYmogPT0gbmlsIHRoZW4KCQlyZXR1cm4gZXJyb3IoIkhlcmUgWCIuLnguLiIgWSIuLnkpCgllbmQKCWlmIG9iai5zcGFjZSA9PSBuaWwgYW5kIG9iai5leGl0ID09IG5pbCBhbmQgb2JqLmdyb3VuZCA9PSBuaWwgYW5kIG9iai5yb2JvdCA9PSBuaWwgYW5kIG9iai5zdGFydCA9PSBuaWwgdGhlbgoJCXRTY3JlZW5beF1beV0ud2FsbCA9IHRydWUKCWVsc2UKCQlvYmouc3BhY2UgPSBuaWwKCQlvYmouZXhpdCA9IG5pbAoJCW9iai5ncm91bmQgPSBuaWwKCQlvYmoucm9ib3QgPSBuaWwKCQlvYmouc3RhcnQgPSBuaWwKCQl0U2NyZWVuW3hdW3ldLndhbGwgPSB0cnVlCgllbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBsb2FkTGV2ZWwobk51bSkKICAgIHNMZXZlbFRpdGxlID0gIkxldmVsICIuLm5OdW0KCWlmIG5OdW0gPT0gbmlsIHRoZW4gcmV0dXJuIGVycm9yKCJuTnVtID09IG5pbCIpIGVuZAoJbG9jYWwgc0RpciA9IGZzLmdldERpciggc2hlbGwuZ2V0UnVubmluZ1Byb2dyYW0oKSApCglsb2NhbCBzTGV2ZWxEID0gc0RpciAuLiAiL2xldmVscy8iIC4uIHRvc3RyaW5nKG5OdW0pCglpZiBub3QgKCBmcy5leGlzdHMoc0xldmVsRCkgb3IgZnMuaXNEaXIoc0xldmVsRCkgKSB0aGVuIHJldHVybiBlcnJvcigiTGV2ZWwgTm90IEV4aXN0cyA6ICIuLnNMZXZlbEQpIGVuZAoJZkxldmVsID0gZnMub3BlbihzTGV2ZWxELCJyIikKCWxvY2FsIExpbmUgPSAwCglsb2NhbCB3bCA9IHRydWUKCUJsb2NrcyA9IHRvbnVtYmVyKHN0cmluZy5zdWIoZkxldmVsLnJlYWRMaW5lKCksMSwxKSkKCWxvY2FsIHhTaXplID0gc3RyaW5nLmxlbihmTGV2ZWwucmVhZExpbmUoKSkrMgoJbG9jYWwgTGluZXMgPSAzCgl3aGlsZSB3bCBkbwoJCWxvY2FsIHdMaW5lID0gZkxldmVsLnJlYWRMaW5lKCkKCQlpZiB3TGluZSA9PSBuaWwgdGhlbgoJCQlmTGV2ZWwuY2xvc2UoKQoJCQl3bCA9IGZhbHNlCgkJZWxzZQogICAgCSAgICB4U2l6ZSA9IG1hdGgubWF4KHN0cmluZy5sZW4od0xpbmUpKzIseFNpemUpCgkJCUxpbmVzID0gTGluZXMgKyAxCgkJZW5kCgllbmQKCVNpemVXLFNpemVIID0geFNpemUsTGluZXMKCXJlTWFwKCkKCWZMZXZlbCA9IGZzLm9wZW4oc0xldmVsRCwiciIpCglmTGV2ZWwucmVhZExpbmUoKQoJZm9yIExpbmU9MixMaW5lcy0xIGRvCgkJc0xpbmUgPSBmTGV2ZWwucmVhZExpbmUoKQoJCWxvY2FsIGNoYXJzID0gc3RyaW5nLmxlbihzTGluZSkKCQlmb3IgY2hhciA9IDEsIGNoYXJzIGRvCgkJCWxvY2FsIGVsID0gc3RyaW5nLnN1YihzTGluZSxjaGFyLGNoYXIpCgkJCWlmIGVsID09ICI4IiB0aGVuCgkJCQlhZGRHcm91bmQoY2hhcisxLExpbmUpCgkJCWVsc2VpZiBlbCA9PSAiMCIgdGhlbgoJCQkJYWRkU3RhcnQoY2hhcisxLExpbmUsImEiLCJhIikKCQkJZWxzZWlmIGVsID09ICIxIiB0aGVuCgkJCQlhZGRTdGFydChjaGFyKzEsTGluZSwiYiIsImEiKQoJCQllbHNlaWYgZWwgPT0gIjIiIHRoZW4KCQkJCWFkZFN0YXJ0KGNoYXIrMSxMaW5lLCJjIiwiYSIpCgkJCWVsc2VpZiBlbCA9PSAiMyIgdGhlbgoJCQkJYWRkU3RhcnQoY2hhcisxLExpbmUsImQiLCJhIikKCQkJZWxzZWlmIGVsID09ICI0IiB0aGVuCgkJCQlhZGRTdGFydChjaGFyKzEsTGluZSwiYSIsImIiKQoJCQllbHNlaWYgZWwgPT0gIjUiIHRoZW4KCQkJCWFkZFN0YXJ0KGNoYXIrMSxMaW5lLCJiIiwiYiIpCgkJCWVsc2VpZiBlbCA9PSAiNiIgdGhlbgoJCQkJYWRkU3RhcnQoY2hhcisxLExpbmUsImMiLCJiIikKCQkJZWxzZWlmIGVsID09ICI5IiB0aGVuCgkJCQlhZGRTdGFydChjaGFyKzEsTGluZSwiZCIsImIiKQoJCQllbHNlaWYgZWwgPT0gImIiIHRoZW4KCQkJCWFkZEV4aXQoY2hhcisxLExpbmUsImEiKQoJCQllbHNlaWYgZWwgPT0gImUiIHRoZW4KCQkJCWFkZEV4aXQoY2hhcisxLExpbmUsImIiKQoJCQllbHNlaWYgZWwgPT0gIjciIHRoZW4KCQkJCWFkZFdhbGwoY2hhcisxLExpbmUpCgkJCWVuZAoJCWVuZAoJZW5kCglmTGV2ZWwuY2xvc2UoKQplbmQKCmxvY2FsIGZ1bmN0aW9uIGRyYXdTdGFycygpCgktLUNDUiBCYWNrZ3JvdW5kIEJ5IDogUmFtaUxlZ28tLQoJbG9jYWwgY1N0YXIsY1N0YXJHLGNyU3RhcixjclN0YXJCID0gY29sb3JzLmxpZ2h0R3JheSxjb2xvcnMuZ3JheSwiLiIsIioiCglsb2NhbCBEU3RhcixCU3RhcixuU3RhcixnU3RhciA9IDE0LDEwLDE2LDMKCWxvY2FsIFRlcm1XLFRlcm1IID0gdGVybS5nZXRTaXplKCkKCiAgICB0ZXJtLmNsZWFyKCkKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDEsMSkKCWZvciB4PTEsVGVybVcgZG8KCQlmb3IgeT0xLFRlcm1IIGRvCgkJCWxvY2FsIFN0YXJUID0gbWF0aC5yYW5kb20oMSwzMCkKCQkJaWYgU3RhclQgPT0gRFN0YXIgdGhlbgoJCQkJdGVybS5zZXRDdXJzb3JQb3MoeCx5KQoJCQkJdGVybS5zZXRUZXh0Q29sb3IoY1N0YXIpCgkJCQl3cml0ZShjclN0YXIpCgkJCWVsc2VpZiBTdGFyVCA9PSBCU3RhciB0aGVuCgkJCQl0ZXJtLnNldEN1cnNvclBvcyh4LHkpCgkJCQl0ZXJtLnNldFRleHRDb2xvcihjU3RhcikKCQkJCXdyaXRlKGNyU3RhckIpCgkJCWVsc2VpZiBTdGFyVCA9PSBuU3RhciB0aGVuCgkJCQl0ZXJtLnNldEN1cnNvclBvcyh4LHkpCgkJCQl0ZXJtLnNldFRleHRDb2xvcihjU3RhckcpCgkJCQl3cml0ZShjclN0YXIpCgkJCWVsc2VpZiBTdGFyVCA9PSBnU3RhciB0aGVuCgkJCQl0ZXJtLnNldEN1cnNvclBvcyh4LHkpCgkJCQl0ZXJtLnNldFRleHRDb2xvcihjU3RhckcpCgkJCQl3cml0ZShjclN0YXJCKQoJCQllbmQKCQllbmQKCWVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIGRyYXdNYXAoKQoJZm9yIHg9MSxTaXplVyBkbwoJCWZvciB5PTEsU2l6ZUggZG8KCQkgIAoJCQlsb2NhbCBvYmogPSB0U2NyZWVuW3hdW3ldCgkJCWlmIG9iai5ncm91bmQgPT0gdHJ1ZSB0aGVuCgkJCQlwYWludHV0aWxzLmRyYXdQaXhlbChYT3JnaW4reCxZT3JnaW4reSsxLGNHKQoJCQllbmQKCQkJaWYgb2JqLndhbGwgPT0gdHJ1ZSB0aGVuCgkJCQlwYWludHV0aWxzLmRyYXdQaXhlbChYT3JnaW4reCxZT3JnaW4reSsxLGNXKQoJCQllbmQKCQkgCgkJIGxvY2FsIGV4ID0gdG9zdHJpbmcodFNjcmVlblt4XVt5XS5leGl0KQoJCQlpZiBub3QoZXggPT0gInp6IiBvciBleCA9PSAibmlsIikgdGhlbgoJCQkJaWYgZXggPT0gImEiIHRoZW4KCQkJCQlleCA9IGNSMQoJCQkJZWxzZWlmIGV4ID09ICJiIiB0aGVuCgkJCQkJZXggPSBjUjIKCQkJCWVsc2VpZiBleCA9PSAiYyIgdGhlbgoJCQkJCWV4ID0gY1IzCgkJCQllbHNlaWYgZXggPT0gImQiIHRoZW4KCQkJCQlleCA9IGNSNAoJCQkJZWxzZQoJCQkJCXJldHVybiBlcnJvcigiRXhpdCBDb2xvciBPdXQiKQoJCQkJZW5kCgkJCQl0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjRykKCQkJCXRlcm0uc2V0VGV4dENvbG9yKGV4KQoJCQkJdGVybS5zZXRDdXJzb3JQb3MoWE9yZ2luK3gsWU9yZ2luK3krMSkKCQkJCXByaW50KCJYIikKCQkJZW5kCgkJIAoJCSBsb2NhbCBzdCA9IHRvc3RyaW5nKHRTY3JlZW5beF1beV0uc3RhcnQpCgkJCWlmIG5vdChzdCA9PSAienoiIG9yIHN0ID09ICJuaWwiKSB0aGVuCgkJCQlsb2NhbCBDciA9IHN0cmluZy5zdWIoc3QsMiwyKQoJCQkJaWYgQ3IgPT0gImEiIHRoZW4KCQkJCQlDciA9IGNSMQoJCQkJZWxzZWlmIENyID09ICJiIiB0aGVuCgkJCQkJQ3IgPSBjUjIKCQkJCWVsc2VpZiBDciA9PSAiYyIgdGhlbgoJCQkJCUNyID0gY1IzCgkJCQllbHNlaWYgQ3IgPT0gImQiIHRoZW4KCQkJCQlDciA9IGNSNAoJCQkJZWxzZQoJCQkJCXJldHVybiBlcnJvcigiU3RhcnQgQ29sb3IgT3V0IikKCQkJCWVuZAoJCQkKCQkJCXRlcm0uc2V0VGV4dENvbG9yKENyKQoJCQl0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjRykKCQkJCXRlcm0uc2V0Q3Vyc29yUG9zKFhPcmdpbit4LFlPcmdpbit5KzEpCgkJCQoJCQkJc1NpZGUgPSBzdHJpbmcuc3ViKHN0LDEsMSkKCQkJCWlmIHNTaWRlID09ICJhIiB0aGVuCgkJCQkJcHJpbnQoIl4iKQoJCQkJZWxzZWlmIHNTaWRlID09ICJiIiB0aGVuCgkJCQkJcHJpbnQoIj4iKQoJCQkJZWxzZWlmIHNTaWRlID09ICJjIiB0aGVuCgkJCQkJcHJpbnQoInYiKQoJCQkJZWxzZWlmIHNTaWRlID09ICJkIiB0aGVuCgkJCQkJcHJpbnQoIjwiKQoJCQkJZWxzZQoJCQkJCXByaW50KCJAIikKCQkJCWVuZAoJCQllbmQKCQkJCgkJCWlmIG9iai5zcGFjZSA9PSB0cnVlIHRoZW4KCQkJCXBhaW50dXRpbHMuZHJhd1BpeGVsKFhPcmdpbit4LFlPcmdpbit5KzEsY1MpCgkJCWVuZAoJCQkKCQkJbG9jYWwgcmIgPSB0b3N0cmluZyh0U2NyZWVuW3hdW3ldLnJvYm90KQoJCQlpZiBub3QocmIgPT0gInp6IiBvciByYiA9PSAibmlsIikgdGhlbgoJCQkJbG9jYWwgQ3IgPSBzdHJpbmcuc3ViKHJiLDIsMikKCQkJCWlmIENyID09ICJhIiB0aGVuCgkJCQkJQ3IgPSBjUjEKCQkJCWVsc2VpZiBDciA9PSAiYiIgdGhlbgoJCQkJCUNyID0gY1IyCgkJCQllbHNlaWYgQ3IgPT0gImMiIHRoZW4KCQkJCQlDciA9IGNSMwoJCQkJZWxzZWlmIENyID09ICJkIiB0aGVuCgkJCQkJQ3IgPSBjUjQKCQkJCWVsc2UKCQkJCQlDciA9IGNvbG9ycy53aGl0ZQoJCQkJZW5kCgkJCQl0ZXJtLnNldEJhY2tncm91bmRDb2xvcihDcikKCQkJCXRlcm0uc2V0VGV4dENvbG9yKGNvbG9ycy53aGl0ZSkKCQkJCXRlcm0uc2V0Q3Vyc29yUG9zKFhPcmdpbit4LFlPcmdpbit5KzEpCgkJCQlzU2lkZSA9IHN0cmluZy5zdWIocmIsMSwxKQoJCQkJaWYgc1NpZGUgPT0gImEiIHRoZW4KCQkJCQlwcmludCgiXiIpCgkJCQllbHNlaWYgc1NpZGUgPT0gImIiIHRoZW4KCQkJCQlwcmludCgiPiIpCgkJCQllbHNlaWYgc1NpZGUgPT0gImMiIHRoZW4KCQkJCQlwcmludCgidiIpCgkJCQllbHNlaWYgc1NpZGUgPT0gImQiIHRoZW4KCQkJCQlwcmludCgiPCIpCgkJCQllbHNlCgkJCQkJcHJpbnQoIkAiKQoJCQkJZW5kCgkJCWVuZAoJCWVuZAoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gaXNCcmljayh4LHkpCglsb2NhbCBicmIgPSB0b3N0cmluZyh0U2NyZWVuW3hdW3ldLnJvYm90KQoJbG9jYWwgYm9iaiA9IG9TY3JlZW5beF1beV0KCWlmIChicmIgPT0gInp6IiBvciBicmIgPT0gIm5pbCIpIGFuZCBub3QgYm9iai53YWxsID09IHRydWUgdGhlbgoJCXJldHVybiBmYWxzZQoJZWxzZQoJCXJldHVybiB0cnVlCgllbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBnUmVuZGVyKHNDb250ZXh0KQoJaWYgc0NvbnRleHQgPT0gInN0YXJ0IiB0aGVuCgkJZm9yIHg9MSxTaXplVyBkbwoJCQlmb3IgeT0xLFNpemVIIGRvCgkJCQlsb2NhbCBzdCA9IHRvc3RyaW5nKHRTY3JlZW5beF1beV0uc3RhcnQpCgkJCQlpZiBub3Qoc3QgPT0gInp6IiBvciBzdCA9PSAibmlsIikgdGhlbgoJCQkJCWxvY2FsIENyID0gc3RyaW5nLnN1YihzdCwyLDIpCgkJCQkJbG9jYWwgc1NpZGUgPSBzdHJpbmcuc3ViKHN0LDEsMSkKCQkJCQlhZGRSb2JvdCh4LHksc1NpZGUsQ3IpCgkJCQllbmQKCQkJZW5kCgkJZW5kCgllbHNlaWYgc0NvbnRleHQgPT0gInRpY2siIHRoZW4KCQlidU1hcCgpCiAgICAgICAgZm9yIHg9MSxTaXplVyBkbwogICAgICAgICAgICBmb3IgeT0xLFNpemVIIGRvCiAgICAgICAgICAgICAgICBsb2NhbCByYiA9IHRvc3RyaW5nKG9TY3JlZW5beF1beV0ucm9ib3QpCiAgICAgICAgICAgICAgICBpZiBub3QocmIgPT0gInp6IiBvciByYiA9PSAibmlsIikgdGhlbgogICAgICAgICAgICAgICAgICAgIGxvY2FsIENyID0gc3RyaW5nLnN1YihyYiwyLDIpCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgc1NpZGUgPSBzdHJpbmcuc3ViKHJiLDEsMSkKICAgICAgICAgICAgICAgICAgICBsb2NhbCBzb2JqID0gb1NjcmVlblt4XVt5XQogICAgICAgICAgICAgICAgICAgIGlmIHNvYmouc3BhY2UgPT0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHRTY3JlZW5beF1beV0ucm9ib3QgPSAienoiCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzU2lkZSA9PSAiZyIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LCJnIixDcikKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmIHNvYmouZXhpdCA9PSBDciB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNTaWRlID09ICJhIiBvciBzU2lkZSA9PSAiYiIgb3Igc1NpZGUgPT0gImMiIG9yIHNTaWRlID09ICJkIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHRTY3JlZW5beF1beV0ucm9ib3QgPSAienoiCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvYm90KHgseSwiZyIsQ3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGFFeGl0cyA9IGFFeGl0cy0xCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVsc2VpZiBzU2lkZSA9PSAiYSIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBvYmogPSBpc0JyaWNrKHgseS0xKQogICAgICAgICAgICAgICAgICAgICAgICB0U2NyZWVuW3hdW3ldLnJvYm90ID0gInp6IgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LTEsc1NpZGUsQ3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIG9iajIgPSBpc0JyaWNrKHgtMSx5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgb2JqMyA9IGlzQnJpY2soeCsxLHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqMiA9PSB0cnVlIGFuZCBub3Qgb2JqMyA9PSB0cnVlIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBDciA9PSAiYSIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImQiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBDciA9PSAiYiIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImIiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIG9iaiA9PSB0cnVlIGFuZCBvYmoyID09IHRydWUgYW5kIG9iajMgPT0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LCJjIixDcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvYmozID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImQiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBvYmoyID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImIiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVsc2VpZiBzU2lkZSA9PSAiYiIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBvYmogPSBpc0JyaWNrKHgrMSx5KQogICAgICAgICAgICAgICAgICAgICAgICB0U2NyZWVuW3hdW3ldLnJvYm90ID0gInp6IgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCsxLHksc1NpZGUsQ3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIG9iajIgPSBpc0JyaWNrKHgseS0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgb2JqMyA9IGlzQnJpY2soeCx5KzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqMiA9PSB0cnVlIGFuZCBub3Qgb2JqMyA9PSB0cnVlIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBDciA9PSAiYSIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImEiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBDciA9PSAiYiIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImMiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIG9iaiA9PSB0cnVlIGFuZCBvYmoyID09IHRydWUgYW5kIG9iajMgPT0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LCJkIixDcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvYmozID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImEiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBvYmoyID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImMiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVsc2VpZiBzU2lkZSA9PSAiYyIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBvYmogPSBpc0JyaWNrKHgseSsxKQogICAgICAgICAgICAgICAgICAgICAgICB0U2NyZWVuW3hdW3ldLnJvYm90ID0gInp6IgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5KzEsc1NpZGUsQ3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIG9iajIgPSBpc0JyaWNrKHgtMSx5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgb2JqMyA9IGlzQnJpY2soeCsxLHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqMiA9PSB0cnVlIGFuZCBub3Qgb2JqMyA9PSB0cnVlIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBDciA9PSAiYSIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImIiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBDciA9PSAiYiIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImQiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIG9iaiA9PSB0cnVlIGFuZCBvYmoyID09IHRydWUgYW5kIG9iajMgPT0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LCJhIixDcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvYmozID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImQiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBvYmoyID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImIiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVsc2VpZiBzU2lkZSA9PSAiZCIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBvYmogPSBpc0JyaWNrKHgtMSx5KQogICAgICAgICAgICAgICAgICAgICAgICB0U2NyZWVuW3hdW3ldLnJvYm90ID0gInp6IgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeC0xLHksc1NpZGUsQ3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIG9iajIgPSBpc0JyaWNrKHgseS0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgb2JqMyA9IGlzQnJpY2soeCx5KzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2JqMiA9PSB0cnVlIGFuZCBub3Qgb2JqMyA9PSB0cnVlIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBDciA9PSAiYSIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImMiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBDciA9PSAiYiIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImEiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIG9iaiA9PSB0cnVlIGFuZCBvYmoyID09IHRydWUgYW5kIG9iajMgPT0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LCJiIixDcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvYmozID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImEiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiBvYmoyID09IHRydWUgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb2JvdCh4LHksImMiLENyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9ib3QoeCx5LHNTaWRlLCJnIikKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIEludGVyRmFjZS5kcmF3QmFyKCkKCXRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvcnMuYmxhY2sgKQoJdGVybS5zZXRUZXh0Q29sb3IoIEludGVyRmFjZS5jVGl0bGUgKQoJcHJpbnRDZW50cmVkKCAxLCAiICAiLi5zTGV2ZWxUaXRsZS4uIiAgIiApCgkKCXRlcm0uc2V0Q3Vyc29yUG9zKDEsMSkKCXRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBjVyApCgl3cml0ZSggIiAiICkKCXRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvcnMuYmxhY2sgKQoJd3JpdGUoICIgeCAiLi50b3N0cmluZyhCbG9ja3MpLi4iICIgKQoJCgl0ZXJtLnNldEN1cnNvclBvcyggVGVybVctOCxUZXJtSCApCgl0ZXJtLnNldEJhY2tncm91bmRDb2xvciggY29sb3JzLmJsYWNrICkKICAgIHRlcm0uc2V0VGV4dENvbG91cihJbnRlckZhY2UuY1NwZWVkRCkKCXdyaXRlKCIgPDwiICkKCWlmIGJQYXVzZWQgdGhlbgoJCXRlcm0uc2V0VGV4dENvbG91cihJbnRlckZhY2UuY1NwZWVkQSkKCWVsc2UKCQl0ZXJtLnNldFRleHRDb2xvdXIoSW50ZXJGYWNlLmNTcGVlZEQpCgllbmQKCXdyaXRlKCIgfHwiKQoJaWYgZlNwZWVkUyB0aGVuCgkJdGVybS5zZXRUZXh0Q29sb3VyKEludGVyRmFjZS5jU3BlZWRBKQoJZWxzZQoJCXRlcm0uc2V0VGV4dENvbG91cihJbnRlckZhY2UuY1NwZWVkRCkKCWVuZAoJd3JpdGUoIiA+PiIpCgoJdGVybS5zZXRDdXJzb3JQb3MoIFRlcm1XLTEsIDEgKQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoIGNvbG9ycy5ibGFjayApCgl0ZXJtLnNldFRleHRDb2xvdXIoIEludGVyRmFjZS5jRXhpdCApCgl3cml0ZSgiIFgiKQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3JzLmJsYWNrKQplbmQKCmZ1bmN0aW9uIEludGVyRmFjZS5yZW5kZXIoKQoJbG9jYWwgaWQscDEscDIscDMgPSBvcy5wdWxsRXZlbnQoKQoJaWYgaWQgPT0gIm1vdXNlX2NsaWNrIiB0aGVuCgkJaWYgcDMgPT0gMSBhbmQgcDIgPT0gVGVybVcgdGhlbgogICAgICAgICAgICByZXR1cm4gImVuZCIKICAgICAgICBlbHNlaWYgcDMgPT0gVGVybUggYW5kIHAyID49IFRlcm1XLTcgYW5kIHAyIDw9IFRlcm1XLTYgdGhlbgogICAgICAgICAgICByZXR1cm4gInJldHJ5IgogICAgICAgIGVsc2VpZiBwMyA9PSBUZXJtSCBhbmQgcDIgPj0gVGVybVctNCBhbmQgcDIgPD0gVGVybVctMyB0aGVuCiAgICAgICAgICAgIGJQYXVzZWQgPSBub3QgYlBhdXNlZAogICAgICAgICAgICBmU3BlZWRTID0gZmFsc2UKICAgICAgICAgICAgU3BlZWQgPSAoYlBhdXNlZCBhbmQgMCkgb3IgblNwZWVkCiAgICAgICAgICAgIGlmIFNwZWVkID4gMCB0aGVuCiAgICAgICAgICAgICAgICBUaWNrID0gb3Muc3RhcnRUaW1lcihTcGVlZCkKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgVGljayA9IG5pbAogICAgICAgICAgICBlbmQKICAgICAgICAgICAgSW50ZXJGYWNlLmRyYXdCYXIoKQogICAgICAgIGVsc2VpZiBwMyA9PSBUZXJtSCBhbmQgcDIgPj0gVGVybVctMSB0aGVuCiAgICAgICAgICAgIGJQYXVzZWQgPSBmYWxzZQogICAgICAgICAgICBmU3BlZWRTID0gbm90IGZTcGVlZFMKICAgICAgICAgICAgU3BlZWQgPSAoZlNwZWVkUyBhbmQgZlNwZWVkKSBvciBuU3BlZWQKICAgICAgICAgICAgVGljayA9IG9zLnN0YXJ0VGltZXIoU3BlZWQpCiAgICAgICAgICAgIEludGVyRmFjZS5kcmF3QmFyKCkKCQllbHNlaWYgcDMtMSA8IFlPcmdpbitTaXplSCsxIGFuZCBwMy0xID4gWU9yZ2luIGFuZAogICAgICAgICAgICAgICBwMiA8IFhPcmdpbitTaXplVysxIGFuZCBwMiA+IFhPcmdpbiB0aGVuCiAgICAgICAgICAgIGxvY2FsIGVvYmogPSB0U2NyZWVuW3AyLVhPcmdpbl1bcDMtWU9yZ2luLTFdCiAgICAgICAgICAgIGxvY2FsIGVyb2JqID0gdG9zdHJpbmcodFNjcmVlbltwMi1YT3JnaW5dW3AzLVlPcmdpbi0xXS5yb2JvdCkKICAgICAgICAgICAgaWYgKGVyb2JqID09ICJ6eiIgb3IgZXJvYmogPT0gIm5pbCIpIGFuZCBub3QgZW9iai53YWxsID09IHRydWUgYW5kIG5vdCBlb2JqLnNwYWNlID09IHRydWUgYW5kIEJsb2NrcyA+IDAgdGhlbgogICAgICAgICAgICAgICAgYWRkV2FsbChwMi1YT3JnaW4scDMtWU9yZ2luLTEpCiAgICAgICAgICAgICAgICBCbG9ja3MgPSBCbG9ja3MtMQogICAgICAgICAgICAgICAgSW50ZXJGYWNlLmRyYXdCYXIoKQogICAgICAgICAgICAgICAgZHJhd01hcCgpCiAgICAgICAgICAgIGVuZAoJCWVuZAoJZWxzZWlmIGlkID09ICJ0aW1lciIgYW5kIHAxID09IFRpY2sgdGhlbgoJCWdSZW5kZXIoInRpY2siKQogICAgICAgIGRyYXdNYXAoKQogICAgICAgIGlmIFNwZWVkID4gMCB0aGVuCiAgICAgICAgICAgIFRpY2sgPSBvcy5zdGFydFRpbWVyKFNwZWVkKQogICAgICAgIGVsc2UKICAgICAgICAgICAgVGljayA9IG5pbAogICAgICAgIGVuZAoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gc3RhcnRHKExldmVsTikKCWRyYXdTdGFycygpCglsb2FkTGV2ZWwoTGV2ZWxOKQoJY2VudGVyT3JnaW4oKQoJbG9jYWwgY3JlYXRlID0gdHJ1ZQoJZHJhd01hcCgpCglJbnRlckZhY2UuZHJhd0JhcigpCglnUmVuZGVyKCJzdGFydCIpCglkcmF3TWFwKCkKCQoJbG9jYWwgTkV4aXQgPSB0cnVlCglpZiBhRXhpdHMgPT0gMCB0aGVuCgkJTkV4aXQgPSBmYWxzZQoJZW5kCgkKCXdoaWxlIHRydWUgZG8KCQlsb2NhbCBpc0V4aXQgPSBJbnRlckZhY2UucmVuZGVyKCkKCQlpZiBpc0V4aXQgPT0gImVuZCIgdGhlbgoJCSAgICByZXR1cm4gbmlsCgkJZWxzZWlmIGlzRXhpdCA9PSAicmV0cnkiIHRoZW4KCQkgICAgcmV0dXJuIExldmVsTgoJCWVsc2VpZiBmRXhpdCA9PSAieWVzIiB0aGVuCgkJCWlmIGZzLmV4aXN0cyggZnMuZ2V0RGlyKCBzaGVsbC5nZXRSdW5uaW5nUHJvZ3JhbSgpICkgLi4gIi9sZXZlbHMvIiAuLiB0b3N0cmluZyhMZXZlbE4gKyAxKSApIHRoZW4KCQkJICAgIHJldHVybiBMZXZlbE4gKyAxCgkJCWVsc2UKCQkJICAgIHJldHVybiBuaWwKCQkJZW5kCgkJZW5kCgkJaWYgYUV4aXRzID09IDAgYW5kIE5FeGl0ID09IHRydWUgdGhlbgoJCQlmRXhpdCA9ICJ5ZXMiCgkJZW5kCgllbmQKZW5kCgpsb2NhbCBvaywgZXJyID0gdHJ1ZSwgbmlsCgotLU1lbnUtLQpsb2NhbCBzU3RhcnRMZXZlbCA9IHRBcmdzWzFdCmlmIG9rIGFuZCBub3Qgc1N0YXJ0TGV2ZWwgdGhlbgogICAgb2ssIGVyciA9IHBjYWxsKCBmdW5jdGlvbigpCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoY29sb3JzLndoaXRlKQogICAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvcnMuYmxhY2sgKQogICAgICAgIHRlcm0uY2xlYXIoKQogICAgICAgIGRyYXdTdGFycygpCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoIGNvbG9ycy5yZWQgKQogICAgICAgIHByaW50Q2VudHJlZCggVGVybUgvMiAtIDEsICIgIFJFRElSRUNUSU9OICAiICkKICAgICAgICBwcmludENlbnRyZWQoIFRlcm1ILzIgLSAwLCAiICBDb21wdXRlckNyYWZ0IEVkaXRpb24gICIgKQogICAgICAgIHRlcm0uc2V0VGV4dENvbG9yKCBjb2xvcnMueWVsbG93ICkKICAgICAgICBwcmludENlbnRyZWQoIFRlcm1ILzIgKyAyLCAiICBDbGljayB0byBCZWdpbiAgIiApCiAgICAgICAgb3MucHVsbEV2ZW50KCAibW91c2VfY2xpY2siICkKICAgIGVuZCApCmVuZAoKLS1HYW1lLS0KaWYgb2sgdGhlbgogICAgb2ssZXJyID0gcGNhbGwoIGZ1bmN0aW9uKCkKICAgICAgICBsb2NhbCBuTGV2ZWwKICAgICAgICBpZiBzU3RhcnRMZXZlbCB0aGVuCiAgICAgICAgICAgIG5MZXZlbCA9IHRvbnVtYmVyKCBzU3RhcnRMZXZlbCApCiAgICAgICAgZWxzZQogICAgICAgICAgICBuTGV2ZWwgPSAxCiAgICAgICAgZW5kCiAgICAgICAgd2hpbGUgbkxldmVsIGRvCiAgICAgICAgICAgIHJlc2V0KCkKICAgICAgICAgICAgbkxldmVsID0gc3RhcnRHKG5MZXZlbCkKICAgICAgICBlbmQKICAgIGVuZCApCmVuZAoKLS1VcHNlbGwgc2NyZWVuLS0KaWYgb2sgdGhlbgogICAgb2ssIGVyciA9IHBjYWxsKCBmdW5jdGlvbigpCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoY29sb3JzLndoaXRlKQogICAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBjb2xvcnMuYmxhY2sgKQogICAgICAgIHRlcm0uY2xlYXIoKQogICAgICAgIGRyYXdTdGFycygpCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoIGNvbG9ycy5yZWQgKQogICAgICAgIGlmIFRlcm1XID49IDQwIHRoZW4KICAgICAgICAgICAgcHJpbnRDZW50cmVkKCBUZXJtSC8yIC0gMSwgIiAgVGhhbmsgeW91IGZvciBwbGF5aW5nIFJlZGlyZWN0aW9uICAiICkKICAgICAgICAgICAgcHJpbnRDZW50cmVkKCBUZXJtSC8yIC0gMCwgIiAgQ29tcHV0ZXJDcmFmdCBFZGl0aW9uICAiICkKICAgICAgICAgICAgcHJpbnRDZW50cmVkKCBUZXJtSC8yICsgMiwgIiAgQ2hlY2sgb3V0IHRoZSBmdWxsIGdhbWU6ICAiICkKICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IoIGNvbG9ycy55ZWxsb3cgKQogICAgICAgICAgICBwcmludENlbnRyZWQoIFRlcm1ILzIgKyAzLCAiICBodHRwOi8vd3d3LnJlZGlyZWN0aW9uZ2FtZS5jb20gICIgKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRDZW50cmVkKCBUZXJtSC8yIC0gMiwgIiAgVGhhbmsgeW91IGZvciAgIiApCiAgICAgICAgICAgIHByaW50Q2VudHJlZCggVGVybUgvMiAtIDEsICIgIHBsYXlpbmcgUmVkaXJlY3Rpb24gICIgKQogICAgICAgICAgICBwcmludENlbnRyZWQoIFRlcm1ILzIgLSAwLCAiICBDb21wdXRlckNyYWZ0IEVkaXRpb24gICIgKQogICAgICAgICAgICBwcmludENlbnRyZWQoIFRlcm1ILzIgKyAyLCAiICBDaGVjayBvdXQgdGhlIGZ1bGwgZ2FtZTogICIgKQogICAgICAgICAgICB0ZXJtLnNldFRleHRDb2xvciggY29sb3JzLnllbGxvdyApCiAgICAgICAgICAgIHByaW50Q2VudHJlZCggVGVybUgvMiArIDMsICIgIHd3dy5yZWRpcmVjdGlvbmdhbWUuY29tICAiICkKICAgICAgICBlbmQKICAgICAgICBwYXJhbGxlbC53YWl0Rm9yQWxsKAogICAgICAgICAgICBmdW5jdGlvbigpIHNsZWVwKDIpIGVuZCwKICAgICAgICAgICAgZnVuY3Rpb24oKSBvcy5wdWxsRXZlbnQoICJtb3VzZV9jbGljayIgKSBlbmQKICAgICAgICApCiAgICBlbmQgKQplbmQKCi0tQ2xlYXIgYW5kIGV4aXQtLQp0ZXJtLnNldEN1cnNvclBvcygxLDEpCnRlcm0uc2V0VGV4dENvbG9yKGNvbG9ycy53aGl0ZSkKdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3JzLmJsYWNrKQp0ZXJtLmNsZWFyKCkKaWYgbm90IG9rIHRoZW4KICAgIGlmIGVyciA9PSAiVGVybWluYXRlZCIgdGhlbgogICAgICAgIHByaW50KCAiQ2hlY2sgb3V0IHRoZSBmdWxsIHZlcnNpb24gb2YgUmVkaXJlY3Rpb246IiApCiAgICAgICAgcHJpbnQoICJodHRwOi8vd3d3LnJlZGlyZWN0aW9uZ2FtZS5jb20iICkKICAgIGVsc2UKICAgICAgICBwcmludEVycm9yKCBlcnIgKQogICAgZW5kCmVuZA==","isDir":false,"name":"redirection","size":0},"root/programs/fun/adventure":{"data":"CmxvY2FsIHRCaW9tZXMgPSB7CgkiaW4gYSBmb3Jlc3QiLAoJImluIGEgcGluZSBmb3Jlc3QiLAoJImtuZWUgZGVlcCBpbiBhIHN3YW1wIiwKCSJpbiBhIG1vdW50YWluIHJhbmdlIiwKCSJpbiBhIGRlc2VydCIsCgkiaW4gYSBncmFzc3kgcGxhaW4iLAoJImluIGZyb3plbiB0dW5kcmEiLAp9Cgpsb2NhbCBmdW5jdGlvbiBoYXNUcmVlcyggX25CaW9tZSApCglyZXR1cm4gX25CaW9tZSA8PSAzCmVuZAoKbG9jYWwgZnVuY3Rpb24gaGFzU3RvbmUoIF9uQmlvbWUgKQoJcmV0dXJuIF9uQmlvbWUgPT0gNAplbmQKCmxvY2FsIGZ1bmN0aW9uIGhhc1JpdmVycyggX25CaW9tZSApCglyZXR1cm4gX25CaW9tZSB+PSAzIGFuZCBfbkJpb21lIH49IDUKZW5kCgpsb2NhbCBpdGVtcyA9IHsKCVsibm8gdGVhIl0gPSB7CgkJZHJvcHBhYmxlID0gZmFsc2UsCgkJZGVzYyA9ICJQdWxsIHlvdXJzZWxmIHRvZ2V0aGVyIG1hbi4iLAoJfSwKCVsiYSBwaWciXSA9IHsKCQloZWF2eSA9IHRydWUsCgkJY3JlYXR1cmUgPSB0cnVlLAoJCWRyb3BzID0geyAic29tZSBwb3JrIiB9LAoJCWFsaWFzZXMgPSB7ICJwaWciIH0sCgkJZGVzYyA9ICJUaGUgcGlnIGhhcyBhIHNxdWFyZSBub3NlLiIsCgl9LAoJWyJhIGNvdyJdID0gewoJCWhlYXZ5ID0gdHJ1ZSwKCQljcmVhdHVyZSA9IHRydWUsCgkJYWxpYXNlcyA9IHsgImNvdyIgfSwKCQlkZXNjID0gIlRoZSBjb3cgc3RhcmVzIGF0IHlvdSBibGFua2x5LiIsCgl9LAoJWyJhIHNoZWVwIl0gPSB7CgkJaGVhdnkgPSB0cnVlLAoJCWNyZWF0dXJlID0gdHJ1ZSwKCQloaXREcm9wcyA9IHsgInNvbWUgd29vbCIgfSwKCQlhbGlhc2VzID0geyAic2hlZXAiIH0sCgkJZGVzYyA9ICJUaGUgc2hlZXAgaXMgZmx1ZmZ5LiIsCgl9LAoJWyJhIGNoaWNrZW4iXSA9IHsKCQloZWF2eSA9IHRydWUsCgkJY3JlYXR1cmUgPSB0cnVlLAoJCWRyb3BzID0geyAic29tZSBjaGlja2VuIiB9LAoJCWFsaWFzZXMgPSB7ICJjaGlja2VuIiB9LAoJCWRlc2MgPSAiVGhlIGNoaWNrZW4gbG9va3MgZGVsaWNpb3VzLiIsCgl9LAoJWyJhIGNyZWVwZXIiXSA9IHsKCQloZWF2eSA9IHRydWUsCgkJY3JlYXR1cmUgPSB0cnVlLAoJCW1vbnN0ZXIgPSB0cnVlLAoJCWFsaWFzZXMgPSB7ICJjcmVlcGVyIiB9LAoJCWRlc2MgPSAiVGhlIGNyZWVwZXIgbmVlZHMgYSBodWcuIiwKCX0sCglbImEgc2tlbGV0b24iXSA9IHsKCQloZWF2eSA9IHRydWUsCgkJY3JlYXR1cmUgPSB0cnVlLAoJCW1vbnN0ZXIgPSB0cnVlLAoJCWFsaWFzZXMgPSB7ICJza2VsZXRvbiIgfSwKCQlub2N0dXJuYWwgPSB0cnVlLAoJCWRlc2MgPSAiVGhlIGhlYWQgYm9uZSdzIGNvbm5lY3RlZCB0byB0aGUgbmVjayBib25lLCB0aGUgbmVjayBib25lJ3MgY29ubmVjdGVkIHRvIHRoZSBjaGVzdCBib25lLCB0aGUgY2hlc3QgYm9uZSdzIGNvbm5lY3RlZCB0byB0aGUgYXJtIGJvbmUsIHRoZSBhcm0gYm9uZSdzIGNvbm5lY3RlZCB0byB0aGUgYm93LCBhbmQgdGhlIGJvdyBpcyBwb2ludGVkIGF0IHlvdS4iLAoJfSwKCVsiYSB6b21iaWUiXSA9IHsKCQloZWF2eSA9IHRydWUsCgkJY3JlYXR1cmUgPSB0cnVlLAoJCW1vbnN0ZXIgPSB0cnVlLAoJCWFsaWFzZXMgPSB7ICJ6b21iaWUiIH0sCgkJbm9jdHVybmFsID0gdHJ1ZSwKCQlkZXNjID0gIkFsbCBoZSB3YW50cyB0byBkbyBpcyBlYXQgeW91ciBicmFpbnMuIiwKCX0sCglbImEgc3BpZGVyIl0gPSB7CgkJaGVhdnkgPSB0cnVlLAoJCWNyZWF0dXJlID0gdHJ1ZSwKCQltb25zdGVyID0gdHJ1ZSwKCQlhbGlhc2VzID0geyAic3BpZGVyIiB9LAoJCWRlc2MgPSAiRG96ZW5zIG9mIGV5ZXMgc3RhcmUgYmFjayBhdCB5b3UuIiwKCX0sCglbImEgY2F2ZSBlbnRyYW5jZSJdID0gewoJCWhlYXZ5ID0gdHJ1ZSwKCQlhbGlhc2VzID0geyAiY2F2ZSBlbnRhbmNlIiwgImNhdmUiLCAiZW50cmFuY2UiIH0sCgkJZGVzYyA9ICJUaGUgZW50cmFuY2UgdG8gdGhlIGNhdmUgaXMgZGFyaywgYnV0IGl0IGxvb2tzIGxpa2UgeW91IGNhbiBjbGltYiBkb3duLiIsCgl9LAoJWyJhbiBleGl0IHRvIHRoZSBzdXJmYWNlIl0gPSB7CgkJaGVhdnkgPSB0cnVlLAoJCWFsaWFzZXMgPSB7ICJleGl0IHRvIHRoZSBzdXJmYWNlIiwgImV4aXQiLCAib3BlbmluZyIgfSwKCQlkZXNjID0gIllvdSBjYW4ganVzdCBzZWUgdGhlIHNreSB0aHJvdWdoIHRoZSBvcGVuaW5nLiIsCgl9LAoJWyJhIHJpdmVyIl0gPSB7CgkJaGVhdnkgPSB0cnVlLAoJCWFsaWFzZXMgPSB7ICJyaXZlciIgfSwKCQlkZXNjID0gIlRoZSByaXZlciBmbG93cyBtYWplc3RpY2FsbHkgdG93YXJkcyB0aGUgaG9yaXpvbi4gSXQgZG9lc24ndCBkbyBhbnl0aGluZyBlbHNlLiIsCgl9LAoJWyJzb21lIHdvb2QiXSA9IHsKCQlhbGlhc2VzID0geyAid29vZCIgfSwKCQltYXRlcmlhbCA9IHRydWUsCgkJZGVzYyA9ICJZb3UgY291bGQgZWFzaWxseSBjcmFmdCB0aGlzIHdvb2QgaW50byBwbGFua3MuIiwKCX0sCglbInNvbWUgcGxhbmtzIl0gPSB7CgkJYWxpYXNlcyA9IHsgInBsYW5rcyIsICJ3b29kZW4gcGxhbmtzIiwgIndvb2QgcGxhbmtzIiB9LAoJCWRlc2MgPSAiWW91IGNvdWxkIGVhc2lsbHkgY3JhZnQgdGhlc2UgcGxhbmtzIGludG8gc3RpY2tzLiIsCgl9LAoJWyJzb21lIHN0aWNrcyJdID0gewoJCWFsaWFzZXMgPSB7ICJzdGlja3MiLCAid29vZGVuIHN0aWNrcyIsICJ3b29kIHN0aWNrcyIgfSwKCQlkZXNjID0gIkEgcGVyZmVjdCBoYW5kbGUgZm9yIHRvcmNoZXMgb3IgYSBwaWNrYXhlLiIsCgl9LAoJWyJhIGNyYWZ0aW5nIHRhYmxlIl0gPSB7CgkJYWxpYXNlcyA9IHsgImNyYWZ0aW5nIHRhYmxlIiwgImNyYWZ0IHRhYmxlIiwgIndvcmsgYmVuY2giLCAid29ya2JlbmNoIiwgImNyYWZ0aW5nIGJlbmNoIiwgInRhYmxlIiwgfSwKCQlkZXNjID0gIkl0J3MgYSBjcmFmdGluZyB0YWJsZS4gSSBzaG91bGRuJ3QgdGVsbCB5b3UgdGhpcywgYnV0IHRoZXNlIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGluIHRoaXMgZ2FtZSwgeW91IGNhbiBjcmFmdCB0b29scyB3aGVuZXZlciB5b3UgbGlrZS4iLAoJfSwKCVsiYSBmdXJuYWNlIl0gPSB7CgkJYWxpYXNlcyA9IHsgImZ1cm5hY2UiIH0sCgkJZGVzYyA9ICJJdCdzIGEgZnVybmFjZS4gQmV0d2VlbiB5b3UgYW5kIG1lLCB0aGVzZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBpbiB0aGlzIGdhbWUuIiwKCX0sCglbImEgd29vZGVuIHBpY2theGUiXSA9IHsKCQlhbGlhc2VzID0geyAicGlja2F4ZSIsICJwaWNrIiwgIndvb2RlbiBwaWNrIiwgIndvb2RlbiBwaWNrYXhlIiwgIndvb2QgcGljayIsICJ3b29kIHBpY2theGUiIH0sCgkJdG9vbCA9IHRydWUsCgkJdG9vbExldmVsID0gMSwKCQl0b29sVHlwZSA9ICJwaWNrIiwKCQlkZXNjID0gIlRoZSBwaWNrYXhlIGxvb2tzIGdvb2QgZm9yIGJyZWFraW5nIHN0b25lIGFuZCBjb2FsLiIsCgl9LAoJWyJhIHN0b25lIHBpY2theGUiXSA9IHsKCQlhbGlhc2VzID0geyAicGlja2F4ZSIsICJwaWNrIiwgInN0b25lIHBpY2siLCAic3RvbmUgcGlja2F4ZSIgfSwKCQl0b29sID0gdHJ1ZSwKCQl0b29sTGV2ZWwgPSAyLAoJCXRvb2xUeXBlID0gInBpY2siLAoJCWRlc2MgPSAiVGhlIHBpY2theGUgbG9va3MgZ29vZCBmb3IgYnJlYWtpbmcgaXJvbi4iLAoJfSwKCVsiYW4gaXJvbiBwaWNrYXhlIl0gPSB7CgkJYWxpYXNlcyA9IHsgInBpY2theGUiLCAicGljayIsICJpcm9uIHBpY2siLCAiaXJvbiBwaWNrYXhlIiB9LAoJCXRvb2wgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDMsCgkJdG9vbFR5cGUgPSAicGljayIsCgkJZGVzYyA9ICJUaGUgcGlja2F4ZSBsb29rcyBzdHJvbmcgZW5vdWdoIHRvIGJyZWFrIGRpYW1vbmQuIiwKCX0sCglbImEgZGlhbW9uZCBwaWNrYXhlIl0gPSB7CgkJYWxpYXNlcyA9IHsgInBpY2theGUiLCAicGljayIsICJkaWFtb25kIHBpY2siLCAiZGlhbW9uZCBwaWNrYXhlIiB9LAoJCXRvb2wgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDQsCgkJdG9vbFR5cGUgPSAicGljayIsCgkJZGVzYyA9ICJCZXN0LiBQaWNrYXhlLiBFdmVyLiIsCgl9LAoJWyJhIHdvb2RlbiBzd29yZCJdID0gewoJCWFsaWFzZXMgPSB7ICJzd29yZCIsICJ3b29kZW4gc3dvcmQiLCAid29vZCBzd29yZCIgfSwKCQl0b29sID0gdHJ1ZSwKCQl0b29sTGV2ZWwgPSAxLAoJCXRvb2xUeXBlID0gInN3b3JkIiwKCQlkZXNjID0gIkZsaW1zeSwgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcuIiwKCX0sCglbImEgc3RvbmUgc3dvcmQiXSA9IHsKCQlhbGlhc2VzID0geyAic3dvcmQiLCAic3RvbmUgc3dvcmQiIH0sCgkJdG9vbCA9IHRydWUsCgkJdG9vbExldmVsID0gMiwKCQl0b29sVHlwZSA9ICJzd29yZCIsCgkJZGVzYyA9ICJBIHByZXR0eSBnb29kIHN3b3JkLiIsCgl9LAoJWyJhbiBpcm9uIHN3b3JkIl0gPSB7CgkJYWxpYXNlcyA9IHsgInN3b3JkIiwgImlyb24gc3dvcmQiIH0sCgkJdG9vbCA9IHRydWUsCgkJdG9vbExldmVsID0gMywKCQl0b29sVHlwZSA9ICJzd29yZCIsCgkJZGVzYyA9ICJUaGlzIHN3b3JkIGNhbiBzbGF5IGFueSBlbmVteS4iLAoJfSwKCVsiYSBkaWFtb25kIHN3b3JkIl0gPSB7CgkJYWxpYXNlcyA9IHsgInN3b3JkIiwgImRpYW1vbmQgc3dvcmQiIH0sCgkJdG9vbCA9IHRydWUsCgkJdG9vbExldmVsID0gNCwKCQl0b29sVHlwZSA9ICJzd29yZCIsCgkJZGVzYyA9ICJCZXN0LiBTd29yZC4gRXZlci4iLAoJfSwKCVsiYSB3b29kZW4gc2hvdmVsIl0gPSB7CgkJYWxpYXNlcyA9IHsgInNob3ZlbCIsICJ3b29kZW4gc2hvdmVsIiwgIndvb2Qgc2hvdmVsIiB9LAoJCXRvb2wgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDEsCgkJdG9vbFR5cGUgPSAic2hvdmVsIiwKCQlkZXNjID0gIkdvb2QgZm9yIGRpZ2dpbmcgaG9sZXMuIiwKCX0sCglbImEgc3RvbmUgc2hvdmVsIl0gPSB7CgkJYWxpYXNlcyA9IHsgInNob3ZlbCIsICJzdG9uZSBzaG92ZWwiIH0sCgkJdG9vbCA9IHRydWUsCgkJdG9vbExldmVsID0gMiwKCQl0b29sVHlwZSA9ICJzaG92ZWwiLAoJCWRlc2MgPSAiR29vZCBmb3IgZGlnZ2luZyBob2xlcy4iLAoJfSwKCVsiYW4gaXJvbiBzaG92ZWwiXSA9IHsKCQlhbGlhc2VzID0geyAic2hvdmVsIiwgImlyb24gc2hvdmVsIiB9LAoJCXRvb2wgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDMsCgkJdG9vbFR5cGUgPSAic2hvdmVsIiwKCQlkZXNjID0gIkdvb2QgZm9yIGRpZ2dpbmcgaG9sZXMuIiwKCX0sCglbImEgZGlhbW9uZCBzaG92ZWwiXSA9IHsKCQlhbGlhc2VzID0geyAic2hvdmVsIiwgImRpYW1vbmQgc2hvdmVsIiB9LAoJCXRvb2wgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDQsCgkJdG9vbFR5cGUgPSAic2hvdmVsIiwKCQlkZXNjID0gIkdvb2QgZm9yIGRpZ2dpbmcgaG9sZXMuIiwKCX0sCglbInNvbWUgY29hbCJdID0gewoJCWFsaWFzZXMgPSB7ICJjb2FsIiB9LAoJCW9yZSA9IHRydWUsCgkJdG9vbExldmVsID0gMSwKCQl0b29sVHlwZSA9ICJwaWNrIiwKCQlkZXNjID0gIlRoYXQgY29hbCBsb29rcyB1c2VmdWwgZm9yIGJ1aWxkaW5nIHRvcmNoZXMsIGlmIG9ubHkgeW91IGhhZCBhIHBpY2theGUgdG8gbWluZSBpdC4iLAoJfSwKCVsic29tZSBkaXJ0Il0gPSB7CgkJYWxpYXNlcyA9IHsgImRpcnQiIH0sCgkJbWF0ZXJpYWwgPSB0cnVlLAoJCWRlc2MgPSAiV2h5IG5vdCBidWlsZCBhIG11ZCBodXQ/IiwKCX0sCglbInNvbWUgc3RvbmUiXSA9IHsKCQlhbGlhc2VzID0geyAic3RvbmUiLCAiY29iYmxlc3RvbmUiIH0sCgkJbWF0ZXJpYWwgPSB0cnVlLAoJCW9yZSA9IHRydWUsCgkJaW5maW5pdGUgPSB0cnVlLAoJCXRvb2xMZXZlbCA9IDEsCgkJdG9vbFR5cGUgPSAicGljayIsCgkJZGVzYyA9ICJTdG9uZSBpcyB1c2VmdWwgZm9yIGJ1aWxkaW5nIHRoaW5ncywgYW5kIG1ha2luZyBzdG9uZSBwaWNrYXhlcy4iLAoJfSwKCVsic29tZSBpcm9uIl0gPSB7CgkJYWxpYXNlcyA9IHsgImlyb24iIH0sCgkJbWF0ZXJpYWwgPSB0cnVlLAoJCW9yZSA9IHRydWUsCgkJdG9vbExldmVsID0gMiwKCQl0b29sVHlwZSA9ICJwaWNrIiwKCQlkZXNjID0gIlRoYXQgaXJvbiBsb29rcyBtaWdodHkgc3Ryb25nLCB5b3UnbGwgbmVlZCBhIHN0b25lIHBpY2theGUgdG8gbWluZSBpdC4iLAoJfSwKCVsic29tZSBkaWFtb25kIl0gPSB7CgkJYWxpYXNlcyA9IHsgImRpYW1vbmQiLCAiZGlhbW9uZHMiIH0sCgkJbWF0ZXJpYWwgPSB0cnVlLAoJCW9yZSA9IHRydWUsCgkJdG9vbExldmVsID0gMywKCQl0b29sVHlwZSA9ICJwaWNrIiwKCQlkZXNjID0gIlNwYXJrbHksIHJhcmUsIGFuZCBpbXBvc3NpYmxlIHRvIG1pbmUgd2l0aG91dCBhbiBpcm9uIHBpY2theGUuIiwKCX0sCglbInNvbWUgdG9yY2hlcyJdID0gewoJCWFsaWFzZXMgPSB7ICJ0b3JjaGVzIiwgInRvcmNoIiB9LAoJCWRlc2MgPSAiVGhlc2Ugd29uJ3QgcnVuIG91dCBmb3IgYSB3aGlsZS4iLAoJfSwKCVsiYSB0b3JjaCJdID0gewoJCWFsaWFzZXMgPSB7ICJ0b3JjaCIgfSwKCQlkZXNjID0gIkZpcmUsIGZpcmUsIGJ1cm4gc28gYnJpZ2h0LCB3b24ndCB5b3UgbGlnaHQgbXkgY2F2ZSB0b25pZ2h0PyIsCgl9LAoJWyJzb21lIHdvb2wiXSA9IHsKCQlhbGlhc2VzID0geyAid29vbCIgfSwKCQltYXRlcmlhbCA9IHRydWUsCgkJZGVzYyA9ICJTb2Z0IGFuZCBnb29kIGZvciBidWlsZGluZy4iLAoJfSwKCVsic29tZSBwb3JrIl0gPSB7CgkJYWxpYXNlcyA9IHsgInBvcmsiLCAicG9ya2Nob3BzIiB9LAoJCWZvb2QgPSB0cnVlLAoJCWRlc2MgPSAiRGVsaWNpb3VzIGFuZCBudXRyaWNpb3VzLiIsCgl9LAoJWyJzb21lIGNoaWNrZW4iXSA9IHsKCQlhbGlhc2VzID0geyAiY2hpY2tlbiIgfSwKCQlmb29kID0gdHJ1ZSwKCQlkZXNjID0gIkZpbmdlciBsaWNraW5nIGdvb2QuIiwKCX0sCn0KCmxvY2FsIHRBbmltYWxzID0gewoJImEgcGlnIiwgImEgY293IiwgImEgc2hlZXAiLCAiYSBjaGlja2VuIiwKfQoKbG9jYWwgdE1vbnN0ZXJzID0gewoJImEgY3JlZXBlciIsICJhIHNrZWxldG9uIiwgImEgem9tYmllIiwgImEgc3BpZGVyIgp9Cgpsb2NhbCB0UmVjaXBlcyA9IHsKCVsic29tZSBwbGFua3MiXSA9IHsgInNvbWUgd29vZCIgfSwKCVsic29tZSBzdGlja3MiXSA9IHsgInNvbWUgcGxhbmtzIiB9LAoJWyJzb21lIHN0aWNrcyJdID0geyAic29tZSBwbGFua3MiIH0sCglbImEgY3JhZnRpbmcgdGFibGUiXSA9IHsgInNvbWUgcGxhbmtzIiB9LAoJWyJhIGZ1cm5hY2UiXSA9IHsgInNvbWUgc3RvbmUiIH0sCglbInNvbWUgdG9yY2hlcyJdID0geyAic29tZSBzdGlja3MiLCAic29tZSBjb2FsIiB9LAoJCglbImEgd29vZGVuIHBpY2theGUiXSA9IHsgInNvbWUgcGxhbmtzIiwgInNvbWUgc3RpY2tzIiB9LAoJWyJhIHN0b25lIHBpY2theGUiXSA9IHsgInNvbWUgc3RvbmUiLCAic29tZSBzdGlja3MiIH0sCglbImFuIGlyb24gcGlja2F4ZSJdID0geyAic29tZSBpcm9uIiwgInNvbWUgc3RpY2tzIiB9LAoJWyJhIGRpYW1vbmQgcGlja2F4ZSJdID0geyAic29tZSBkaWFtb25kIiwgInNvbWUgc3RpY2tzIiB9LAoKCVsiYSB3b29kZW4gc3dvcmQiXSA9IHsgInNvbWUgcGxhbmtzIiwgInNvbWUgc3RpY2tzIiB9LAoJWyJhIHN0b25lIHN3b3JkIl0gPSB7ICJzb21lIHN0b25lIiwgInNvbWUgc3RpY2tzIiB9LAoJWyJhbiBpcm9uIHN3b3JkIl0gPSB7ICJzb21lIGlyb24iLCAic29tZSBzdGlja3MiIH0sCglbImEgZGlhbW9uZCBzd29yZCJdID0geyAic29tZSBkaWFtb25kIiwgInNvbWUgc3RpY2tzIiB9LAoKCVsiYSB3b29kZW4gc2hvdmVsIl0gPSB7ICJzb21lIHBsYW5rcyIsICJzb21lIHN0aWNrcyIgfSwKCVsiYSBzdG9uZSBzaG92ZWwiXSA9IHsgInNvbWUgc3RvbmUiLCAic29tZSBzdGlja3MiIH0sCglbImFuIGlyb24gc2hvdmVsIl0gPSB7ICJzb21lIGlyb24iLCAic29tZSBzdGlja3MiIH0sCglbImEgZGlhbW9uZCBzaG92ZWwiXSA9IHsgInNvbWUgZGlhbW9uZCIsICJzb21lIHN0aWNrcyIgfSwKfQoKbG9jYWwgdEdvV2VzdCA9IHsKCSIobGlmZSBpcyBwZWFjZWZ1bCB0aGVyZSkiLAoJIihsb3RzIG9mIG9wZW4gYWlyKSIsCgkiKHRvIGJlZ2luIGxpZmUgYW5ldykiLAoJIih0aGlzIGlzIHdoYXQgd2UnbGwgZG8pIiwKCSIoc3VuIGluIHdpbnRlciB0aW1lKSIsCgkiKHdlIHdpbGwgZG8ganVzdCBmaW5lKSIsCgkiKHdoZXJlIHRoZSBza2llcyBhcmUgYmx1ZSkiLAoJIih0aGlzIGFuZCBtb3JlIHdlJ2xsIGRvKSIsCn0KbG9jYWwgbkdvV2VzdCA9IDAKCmxvY2FsIGJSdW5uaW5nID0gdHJ1ZQpsb2NhbCB0TWFwID0geyB7IHt9LCB9LCB9CmxvY2FsIHgseSx6ID0gMCwwLDAKbG9jYWwgaW52ZW50b3J5ID0gewoJWyJubyB0ZWEiXSA9IGl0ZW1zWyJubyB0ZWEiXSwKfQoKbG9jYWwgblR1cm4gPSAwCmxvY2FsIG5UaW1lSW5Sb29tID0gMApsb2NhbCBiSW5qdXJlZCA9IGZhbHNlCgpsb2NhbCB0RGF5Q3ljbGUgPSB7CgkiSXQgaXMgZGF5dGltZS4iLAoJIkl0IGlzIGRheXRpbWUuIiwKCSJJdCBpcyBkYXl0aW1lLiIsCgkiSXQgaXMgZGF5dGltZS4iLAoJIkl0IGlzIGRheXRpbWUuIiwKCSJJdCBpcyBkYXl0aW1lLiIsCgkiSXQgaXMgZGF5dGltZS4iLAoJIkl0IGlzIGRheXRpbWUuIiwKCSJUaGUgc3VuIGlzIHNldHRpbmcuIiwKCSJJdCBpcyBuaWdodC4iLAoJIkl0IGlzIG5pZ2h0LiIsCgkiSXQgaXMgbmlnaHQuIiwKCSJJdCBpcyBuaWdodC4iLAoJIkl0IGlzIG5pZ2h0LiIsCgkiVGhlIHN1biBpcyByaXNpbmcuIiwKfQoKbG9jYWwgZnVuY3Rpb24gZ2V0VGltZU9mRGF5KCkKCXJldHVybiBtYXRoLmZtb2QoIG1hdGguZmxvb3IoblR1cm4vMyksICN0RGF5Q3ljbGUgKSArIDEKZW5kCgpsb2NhbCBmdW5jdGlvbiBpc1N1bm55KCkKCXJldHVybiAoZ2V0VGltZU9mRGF5KCkgPCAxMCkKZW5kCgpsb2NhbCBmdW5jdGlvbiBnZXRSb29tKCB4LCB5LCB6LCBkb250Q3JlYXRlICkKCXRNYXBbeF0gPSB0TWFwW3hdIG9yIHt9Cgl0TWFwW3hdW3ldID0gdE1hcFt4XVt5XSBvciB7fQoJaWYgbm90IHRNYXBbeF1beV1bel0gYW5kIGRvbnRDcmVhdGUgfj0gdHJ1ZSB0aGVuCiAJCWxvY2FsIHJvb20gPSB7CiAJCQlpdGVtcyA9IHt9LAogCQkJZXhpdHMgPSB7fSwKIAkJCW5Nb25zdGVycyA9IDAsCiAJCX0KCQl0TWFwW3hdW3ldW3pdID0gcm9vbQoJCQoJCWlmIHkgPT0gMCB0aGVuCgkJCS0tIFJvb20gaXMgYWJvdmUgZ3JvdW5kCgoJCQktLSBQaWNrIGJpb21lCgkJCXJvb20ubkJpb21lID0gbWF0aC5yYW5kb20oIDEsICN0QmlvbWVzICkKCQkJcm9vbS50cmVlcyA9IGhhc1RyZWVzKCByb29tLm5CaW9tZSApCgkJCgkJCS0tIEFkZCBhbmltYWxzCgkJCWlmIG1hdGgucmFuZG9tKDEsMykgPT0gMSB0aGVuCgkJCQlmb3IgbiA9IDEsbWF0aC5yYW5kb20oMSwyKSBkbwoJCQkJCWxvY2FsIHNBbmltYWwgPSB0QW5pbWFsc1sgbWF0aC5yYW5kb20oIDEsICN0QW5pbWFscyApIF0KCQkJCQlyb29tLml0ZW1zWyBzQW5pbWFsIF0gPSBpdGVtc1sgc0FuaW1hbCBdCgkJCQllbmQKCQkJZW5kCgkJCQoJCQktLSBBZGQgc3VyZmFjZSBvcmUKCQkJaWYgbWF0aC5yYW5kb20oMSw1KSA9PSAxIG9yIGhhc1N0b25lKCByb29tLm5CaW9tZSApIHRoZW4KCQkJCXJvb20uaXRlbXNbICJzb21lIHN0b25lIiBdID0gaXRlbXNbICJzb21lIHN0b25lIiBdCgkJCWVuZAoJCQlpZiBtYXRoLnJhbmRvbSgxLDgpID09IDEgdGhlbgoJCQkJcm9vbS5pdGVtc1sgInNvbWUgY29hbCIgXSA9IGl0ZW1zWyAic29tZSBjb2FsIiBdCgkJCWVuZAoJCQlpZiBtYXRoLnJhbmRvbSgxLDgpID09IDEgYW5kIGhhc1JpdmVycyggcm9vbS5uQmlvbWUgKSB0aGVuCgkJCQlyb29tLml0ZW1zWyAiYSByaXZlciIgXSA9IGl0ZW1zWyAiYSByaXZlciIgXQoJCQllbmQKCgkJCS0tIEFkZCBleGl0cwoJCQlyb29tLmV4aXRzID0gewoJCQkJWyJub3J0aCJdID0gdHJ1ZSwKCQkJCVsic291dGgiXSA9IHRydWUsCgkJCQlbImVhc3QiXSA9IHRydWUsCgkJCQlbIndlc3QiXSA9IHRydWUsCgkJCX0KCQkJaWYgbWF0aC5yYW5kb20oMSw4KSA9PSAxIHRoZW4KCQkJCXJvb20uZXhpdHNbImRvd24iXSA9IHRydWUKCQkJCXJvb20uaXRlbXNbImEgY2F2ZSBlbnRyYW5jZSJdID0gaXRlbXNbImEgY2F2ZSBlbnRyYW5jZSJdCgkJCWVuZAoJCQkJCQkKCQllbHNlCgkJCS0tIFJvb20gaXMgdW5kZXJncm91bmQKCQkJLS0gQWRkIGV4aXRzCgkJCWxvY2FsIGZ1bmN0aW9uIHRyeUV4aXQoIHNEaXIsIHNPcHAsIHgsIHksIHogKQoJCQkJbG9jYWwgYWRqID0gZ2V0Um9vbSggeCwgeSwgeiwgdHJ1ZSApCgkJCQlpZiBhZGogdGhlbgoJCQkJCWlmIGFkai5leGl0c1tzT3BwXSB0aGVuCgkJCQkJCXJvb20uZXhpdHNbc0Rpcl0gPSB0cnVlCgkJCQkJZW5kCgkJCQllbHNlCgkJCQkJaWYgbWF0aC5yYW5kb20oMSwzKSA9PSAxIHRoZW4KCQkJCQkJcm9vbS5leGl0c1tzRGlyXSA9IHRydWUKCQkJCQllbmQKCQkJCWVuZAoJCQllbmQKCQkJCgkJCWlmIHkgPT0gLTEgdGhlbgoJCQkJbG9jYWwgYWJvdmUgPSBnZXRSb29tKCB4LCB5ICsgMSwgeiApCgkJCQlpZiBhYm92ZS5leGl0c1siZG93biJdIHRoZW4KCQkJCQlyb29tLmV4aXRzWyJ1cCJdID0gdHJ1ZQoJCQkJCXJvb20uaXRlbXNbImFuIGV4aXQgdG8gdGhlIHN1cmZhY2UiXSA9IGl0ZW1zWyJhbiBleGl0IHRvIHRoZSBzdXJmYWNlIl0KCQkJCWVuZAoJCQllbHNlCgkJCQl0cnlFeGl0KCAidXAiLCAiZG93biIsIHgsIHkgKyAxLCB6ICkKCQkJZW5kCgkJCQoJCQlpZiB5ID4gLTMgdGhlbgoJCQkJdHJ5RXhpdCggImRvd24iLCAidXAiLCB4LCB5IC0gMSwgeiApCgkJCWVuZAoJCQkKCQkJdHJ5RXhpdCggImVhc3QiLCAid2VzdCIsIHggLSAxLCB5LCB6ICkKCQkJdHJ5RXhpdCggIndlc3QiLCAiZWFzdCIsIHggKyAxLCB5LCB6ICkKCQkJdHJ5RXhpdCggIm5vcnRoIiwgInNvdXRoIiwgeCwgeSwgeiArIDEgKQoJCQl0cnlFeGl0KCAic291dGgiLCAibm9ydGgiLCB4LCB5LCB6IC0gMSApCQoJCQkKCQkJLS0gQWRkIG9yZXMKCQkJcm9vbS5pdGVtc1sgInNvbWUgc3RvbmUiIF0gPSBpdGVtc1sgInNvbWUgc3RvbmUiIF0KCQkJaWYgbWF0aC5yYW5kb20oMSwzKSA9PSAxIHRoZW4KCQkJCXJvb20uaXRlbXNbICJzb21lIGNvYWwiIF0gPSBpdGVtc1sgInNvbWUgY29hbCIgXQoJCQllbmQKCQkJaWYgbWF0aC5yYW5kb20oMSw4KSA9PSAxIHRoZW4KCQkJCXJvb20uaXRlbXNbICJzb21lIGlyb24iIF0gPSBpdGVtc1sgInNvbWUgaXJvbiIgXQoJCQllbmQKCQkJaWYgeSA9PSAtMyBhbmQgbWF0aC5yYW5kb20oMSwxNSkgPT0gMSB0aGVuCgkJCQlyb29tLml0ZW1zWyAic29tZSBkaWFtb25kIiBdID0gaXRlbXNbICJzb21lIGRpYW1vbmQiIF0KCQkJZW5kCgkJCQoJCQktLSBUdXJuIG91dCB0aGUgbGlnaHRzCgkJCXJvb20uZGFyayA9IHRydWUKCQllbmQKCWVuZAoJcmV0dXJuIHRNYXBbeF1beV1bel0KZW5kCgpsb2NhbCBmdW5jdGlvbiBpdGVtaXplKCB0ICkKCWxvY2FsIGl0ZW0gPSBuZXh0KCB0ICkKCWlmIGl0ZW0gPT0gbmlsIHRoZW4KCQlyZXR1cm4gIm5vdGhpbmciCgllbmQKCQoJbG9jYWwgdGV4dCA9ICIiCgl3aGlsZSBpdGVtIGRvCgkJdGV4dCA9IHRleHQgLi4gaXRlbQoJCQoJCWxvY2FsIG5leHRJdGVtID0gbmV4dCggdCwgaXRlbSApCgkJaWYgbmV4dEl0ZW0gfj0gbmlsIHRoZW4KCQkJbG9jYWwgbmV4dE5leHRJdGVtID0gbmV4dCggdCwgbmV4dEl0ZW0gKQoJCQlpZiBuZXh0TmV4dEl0ZW0gPT0gbmlsIHRoZW4KCQkJCXRleHQgPSB0ZXh0IC4uICIgYW5kICIKCQkJZWxzZQoJCQkJdGV4dCA9IHRleHQgLi4gIiwgIgoJCQllbmQKCQllbmQKCQlpdGVtID0gbmV4dEl0ZW0KCWVuZAoJcmV0dXJuIHRleHQKZW5kCgpmdW5jdGlvbiBmaW5kSXRlbSggX3RMaXN0LCBfc1F1ZXJ5ICkKCWZvciBzSXRlbSwgdEl0ZW0gaW4gcGFpcnMoIF90TGlzdCApIGRvCgkJaWYgc0l0ZW0gPT0gX3NRdWVyeSB0aGVuCgkJCXJldHVybiBzSXRlbQoJCWVuZAoJCWlmIHRJdGVtLmFsaWFzZXMgfj0gbmlsIHRoZW4KCQkJZm9yIG4sIHNBbGlhcyBpbiBwYWlycyggdEl0ZW0uYWxpYXNlcyApIGRvCgkJCQlpZiBzQWxpYXMgPT0gX3NRdWVyeSB0aGVuCgkJCQkJcmV0dXJuIHNJdGVtCgkJCQllbmQKCQkJZW5kCgkJZW5kCgllbmQKCXJldHVybiBuaWwKZW5kCgpsb2NhbCB0TWF0Y2hlcyA9IHsKCVsid2FpdCJdID0gewoJCSJ3YWl0IiwKCX0sCglbImxvb2siXSA9IHsKCQkibG9vayBhdCB0aGUgKFslYSBdKykiLAoJCSJsb29rIGF0IChbJWEgXSspIiwKCQkibG9vayIsCgkJImluc3BlY3QgKFslYSBdKykiLAoJCSJpbnNwZWN0IHRoZSAoWyVhIF0rKSIsCgkJImluc3BlY3QiLAoJfSwKCVsiaW52ZW50b3J5Il0gPSB7CgkJImNoZWNrIHNlbGYiLAoJCSJjaGVjayBpbnZlbnRvcnkiLAoJCSJpbnZlbnRvcnkiLAoJCSJpIiwKCX0sCglbImdvIl0gPSB7CgkJImdvICglYSspIiwKCQkidHJhdmVsICglYSspIiwKCQkid2FsayAoJWErKSIsCgkJInJ1biAoJWErKSIsCgkJImdvIiwKCX0sCglbImRpZyJdID0gewoJCSJkaWcgKCVhKykgdXNpbmcgKFslYSBdKykiLAoJCSJkaWcgKCVhKykgd2l0aCAoWyVhIF0rKSIsCgkJImRpZyAoJWErKSIsCgkJImRpZyIsCgl9LAoJWyJ0YWtlIl0gPSB7CgkJInBpY2sgdXAgdGhlIChbJWEgXSspIiwKCQkicGljayB1cCAoWyVhIF0rKSIsCgkJInBpY2t1cCAoWyVhIF0rKSIsCgkJInRha2UgdGhlIChbJWEgXSspIiwKCQkidGFrZSAoWyVhIF0rKSIsCgkJInRha2UiLAoJfSwKCVsiZHJvcCJdID0gewoJCSJwdXQgZG93biB0aGUgKFslYSBdKykiLAoJCSJwdXQgZG93biAoWyVhIF0rKSIsCgkJImRyb3AgdGhlIChbJWEgXSspIiwKCQkiZHJvcCAoWyVhIF0rKSIsCgkJImRyb3AiLAoJfSwKCVsicGxhY2UiXSA9IHsKCQkicGxhY2UgdGhlIChbJWEgXSspIiwKCQkicGxhY2UgKFslYSBdKykiLAoJCSJwbGFjZSIsCgl9LAoJWyJjYnJlYWsiXSA9IHsKCQkicHVuY2ggdGhlIChbJWEgXSspIiwKCQkicHVuY2ggKFslYSBdKykiLAoJCSJwdW5jaCIsCgkJImJyZWFrIHRoZSAoWyVhIF0rKSB3aXRoIHRoZSAoWyVhIF0rKSIsCgkJImJyZWFrIChbJWEgXSspIHdpdGggKFslYSBdKykgIiwKCQkiYnJlYWsgdGhlIChbJWEgXSspIiwKCQkiYnJlYWsgKFslYSBdKykiLAoJCSJicmVhayIsCgl9LAoJWyJtaW5lIl0gPSB7CgkJIm1pbmUgdGhlIChbJWEgXSspIHdpdGggdGhlIChbJWEgXSspIiwKCQkibWluZSAoWyVhIF0rKSB3aXRoIChbJWEgXSspIiwKCQkibWluZSAoWyVhIF0rKSIsCgkJIm1pbmUiLAoJfSwKCVsiYXR0YWNrIl0gPSB7CgkJImF0dGFjayB0aGUgKFslYSBdKykgd2l0aCB0aGUgKFslYSBdKykiLAoJCSJhdHRhY2sgKFslYSBdKykgd2l0aCAoWyVhIF0rKSIsCgkJImF0dGFjayAoWyVhIF0rKSIsCgkJImF0dGFjayIsCgkJImtpbGwgdGhlIChbJWEgXSspIHdpdGggdGhlIChbJWEgXSspIiwKCQkia2lsbCAoWyVhIF0rKSB3aXRoIChbJWEgXSspIiwKCQkia2lsbCAoWyVhIF0rKSIsCgkJImtpbGwiLAoJCSJoaXQgdGhlIChbJWEgXSspIHdpdGggdGhlIChbJWEgXSspIiwKCQkiaGl0IChbJWEgXSspIHdpdGggKFslYSBdKykiLAoJCSJoaXQgKFslYSBdKykiLAoJCSJoaXQiLAoJfSwKCVsiY3JhZnQiXSA9IHsKCQkiY3JhZnQgYSAoWyVhIF0rKSIsCgkJImNyYWZ0IHNvbWUgKFslYSBdKykiLAoJCSJjcmFmdCAoWyVhIF0rKSIsCgkJImNyYWZ0IiwKCQkibWFrZSBhIChbJWEgXSspIiwKCQkibWFrZSBzb21lIChbJWEgXSspIiwKCQkibWFrZSAoWyVhIF0rKSIsCgkJIm1ha2UiLAoJfSwKCVsiYnVpbGQiXSA9IHsKCQkiYnVpbGQgKFslYSBdKykgb3V0IG9mIChbJWEgXSspIiwKCQkiYnVpbGQgKFslYSBdKykgZnJvbSAoWyVhIF0rKSIsCgkJImJ1aWxkIChbJWEgXSspIiwKCQkiYnVpbGQiLAoJfSwKCVsiZWF0Il0gPSB7CgkJImVhdCBhIChbJWEgXSspIiwKCQkiZWF0IHRoZSAoWyVhIF0rKSIsCgkJImVhdCAoWyVhIF0rKSIsCgkJImVhdCIsCgl9LAoJWyJoZWxwIl0gPSB7CgkJImhlbHAgbWUiLAoJCSJoZWxwIiwKCX0sCglbImV4aXQiXSA9IHsKCQkiZXhpdCIsCgkJInF1aXQiLAoJCSJnb29kYnllIiwKCQkiZ29vZCBieWUiLAoJCSJieWUiLAoJCSJmYXJld2VsbCIsCgl9LAp9Cgpsb2NhbCBjb21tYW5kcyA9IHt9CmZ1bmN0aW9uIGRvQ29tbWFuZCggdGV4dCApCglpZiB0ZXh0ID09ICIiIHRoZW4KCQljb21tYW5kc1sgIm5vaW5wdXQiIF0oKQoJCXJldHVybgoJZW5kCgkKCWZvciBzQ29tbWFuZCwgdCBpbiBwYWlycyggdE1hdGNoZXMgKSBkbwoJCWZvciBuLCBzTWF0Y2ggaW4gcGFpcnMoIHQgKSBkbwoJCQlsb2NhbCB0Q2FwdHVyZXMgPSB7IHN0cmluZy5tYXRjaCggdGV4dCwgIl4iIC4uIHNNYXRjaCAuLiAiJCIgKSB9CgkJCWlmICN0Q2FwdHVyZXMgfj0gMCB0aGVuCgkJCQlsb2NhbCBmbkNvbW1hbmQgPSBjb21tYW5kc1sgc0NvbW1hbmQgXQoJCQkJaWYgI3RDYXB0dXJlcyA9PSAxIGFuZCB0Q2FwdHVyZXNbMV0gPT0gc01hdGNoIHRoZW4KCQkJCQlmbkNvbW1hbmQoKQoJCQkJZWxzZQoJCQkJCWZuQ29tbWFuZCggdW5wYWNrKCB0Q2FwdHVyZXMgKSApCgkJCQllbmQKCQkJCXJldHVybgoJCQllbmQKCQllbmQKCWVuZAoJY29tbWFuZHNbICJiYWRpbnB1dCIgXSgpCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMud2FpdCgpCglwcmludCggIlRpbWUgcGFzc2VzLi4uIiApCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMubG9vayggX3NUYXJnZXQgKQoJbG9jYWwgcm9vbSA9IGdldFJvb20oIHgseSx6ICkKCWlmIHJvb20uZGFyayB0aGVuCgkJcHJpbnQoICJJdCBpcyBwaXRjaCBkYXJrLiIgKQoJCXJldHVybgoJZW5kCgoJaWYgX3NUYXJnZXQgPT0gbmlsIHRoZW4KCQktLSBMb29rIGF0IHRoZSB3b3JsZAoJCWlmIHkgPT0gMCB0aGVuCgkJCWlvLndyaXRlKCAiWW91IGFyZSBzdGFuZGluZyAiIC4uIHRCaW9tZXNbcm9vbS5uQmlvbWVdIC4uICIuICIgKQoJCQlwcmludCggdERheUN5Y2xlWyBnZXRUaW1lT2ZEYXkoKSBdICkKCQllbHNlCgkJCWlvLndyaXRlKCAiWW91IGFyZSB1bmRlcmdyb3VuZC4gIiApCgkJCWlmIG5leHQoIHJvb20uZXhpdHMgKSB+PSBuaWwgdGhlbgoJCQkJcHJpbnQoICJZb3UgY2FuIHRyYXZlbCAiLi5pdGVtaXplKCByb29tLmV4aXRzICkuLiIuIiApCgkJCWVsc2UKCQkJCXByaW50KCkKCQkJZW5kCgkJZW5kCgkJaWYgbmV4dCggcm9vbS5pdGVtcyApIH49IG5pbCB0aGVuCgkJCXByaW50KCAiVGhlcmUgaXMgIiAuLiBpdGVtaXplKCByb29tLml0ZW1zICkgLi4gIiBoZXJlLiIgKQoJCWVuZAoJCWlmIHJvb20udHJlZXMgdGhlbgoJCQlwcmludCggIlRoZXJlIGFyZSB0cmVlcyBoZXJlLiIgKQoJCWVuZAoJCQoJZWxzZQoJCS0tIExvb2sgYXQgc3R1ZmYKCQlpZiByb29tLnRyZWVzIGFuZCAoX3NUYXJnZXQgPT0gInRyZWUiIG9yIF9zVGFyZ2V0ID09ICJ0cmVlcyIpIHRoZW4KCQkJcHJpbnQoICJUaGUgdHJlZXMgbG9vayBlYXN5IHRvIGJyZWFrLiIgKQoJCWVsc2VpZiBfc1RhcmdldCA9PSAic2VsZiIgb3IgX3NUYXJnZXQgPT0gIm15c2VsZiIgdGhlbgoJCQlwcmludCggIlZlcnkgaGFuZHNvbWUuIiApCgkJZWxzZQoJCQlsb2NhbCB0SXRlbSA9IG5pbAoJCQlsb2NhbCBzSXRlbSA9IGZpbmRJdGVtKCByb29tLml0ZW1zLCBfc1RhcmdldCApCgkJCWlmIHNJdGVtIHRoZW4KCQkJCXRJdGVtID0gcm9vbS5pdGVtc1tzSXRlbV0KCQkJZWxzZQoJCQkJc0l0ZW0gPSBmaW5kSXRlbSggaW52ZW50b3J5LCBfc1RhcmdldCApCgkJCQlpZiBzSXRlbSB0aGVuCgkJCQkJdEl0ZW0gPSBpbnZlbnRvcnlbc0l0ZW1dCgkJCQllbmQKCQkJZW5kCgkJCQoJCQlpZiB0SXRlbSB0aGVuCgkJCQlwcmludCggdEl0ZW0uZGVzYyBvciAoIllvdSBzZWUgbm90aGluZyBzcGVjaWFsIGFib3V0ICIuLnNJdGVtLi4iLiIpICkKCQkJZWxzZQoJCQkJcHJpbnQoICJZb3UgZG9uJ3Qgc2VlIGFueSAiLi5fc1RhcmdldC4uIiBoZXJlLiIgKQoJCQllbmQKCQllbmQKCWVuZAplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLmdvKCBfc0RpciApCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCx5LHogKQoJaWYgX3NEaXIgPT0gbmlsIHRoZW4KCQlwcmludCggIkdvIHdoZXJlPyIgKQoJCXJldHVybgoJZW5kCgkKCWlmIG5Hb1dlc3Qgfj0gbmlsIHRoZW4KCQlpZiBfc0RpciA9PSAid2VzdCIgdGhlbgoJCQluR29XZXN0ID0gbkdvV2VzdCArIDEKCQkJaWYgbkdvV2VzdCA+ICN0R29XZXN0IHRoZW4KCQkJCW5Hb1dlc3QgPSAxCgkJCWVuZAoJCQlwcmludCggdEdvV2VzdFsgbkdvV2VzdCBdICkKCQllbHNlCgkJCWlmIG5Hb1dlc3QgPiAwIG9yIG5UdXJuID4gNiB0aGVuCgkJCQluR29XZXN0ID0gbmlsCgkJCWVuZAoJCWVuZAoJZW5kCgkKCWlmIHJvb20uZXhpdHNbX3NEaXJdID09IG5pbCB0aGVuCgkJcHJpbnQoICJZb3UgY2FuJ3QgZ28gdGhhdCB3YXkuIiApCgkJcmV0dXJuCgllbmQKCQoJaWYgX3NEaXIgPT0gIm5vcnRoIiB0aGVuCgkJeiA9IHogKyAxCgllbHNlaWYgX3NEaXIgPT0gInNvdXRoIiB0aGVuCgkJeiA9IHogLSAxCgllbHNlaWYgX3NEaXIgPT0gImVhc3QiIHRoZW4KCQl4ID0geCAtIDEKCWVsc2VpZiBfc0RpciA9PSAid2VzdCIgdGhlbgoJCXggPSB4ICsgMQoJZWxzZWlmIF9zRGlyID09ICJ1cCIgdGhlbgoJCXkgPSB5ICsgMQoJZWxzZWlmIF9zRGlyID09ICJkb3duIiB0aGVuCgkJeSA9IHkgLSAxCgllbHNlCgkJcHJpbnQoICJJIGRvbid0IHVuZGVyc3RhbmQgdGhhdCBkaXJlY3Rpb24uIiApCgkJcmV0dXJuCgllbmQKCQoJblRpbWVJblJvb20gPSAwCglkb0NvbW1hbmQoICJsb29rIiApCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMuZGlnKCBfc0RpciwgX3NUb29sICkKCWxvY2FsIHJvb20gPSBnZXRSb29tKCB4LHkseiApCglpZiBfc0RpciA9PSBuaWwgdGhlbgoJCXByaW50KCAiRGlnIHdoZXJlPyIgKQoJCXJldHVybgoJZW5kCgkKCWxvY2FsIHNUb29sID0gbmlsCglsb2NhbCB0VG9vbCA9IG5pbAoJaWYgX3NUb29sIH49IG5pbCB0aGVuCgkJc1Rvb2wgPSBmaW5kSXRlbSggaW52ZW50b3J5LCBfc1Rvb2wgKQoJCWlmIG5vdCBzVG9vbCB0aGVuCgkJCXByaW50KCAiWW91J3JlIG5vdCBjYXJyeWluZyBhICIuLl9zVG9vbC4uIi4iICkKCQkJcmV0dXJuCgkJZW5kCgkJdFRvb2wgPSBpbnZlbnRvcnlbIHNUb29sIF0KCWVuZAoJCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCwgeSwgeiApCglsb2NhbCBiQWN0dWFsbHlEaWdnaW5nID0gKHJvb20uZXhpdHNbIF9zRGlyIF0gfj0gdHJ1ZSkKCWlmIGJBY3R1YWxseURpZ2dpbmcgdGhlbgoJCWlmIHNUb29sID09IG5pbCBvciB0VG9vbC50b29sVHlwZSB+PSAicGljayIgdGhlbgoJCQlwcmludCggIllvdSBuZWVkIHRvIHVzZSBhIHBpY2theGUgdG8gZGlnIHRocm91Z2ggc3RvbmUuIiApCgkJCXJldHVybgoJCWVuZAoJZW5kCgkKCWlmIF9zRGlyID09ICJub3J0aCIgdGhlbgoJCXJvb20uZXhpdHNbIm5vcnRoIl0gPSB0cnVlCgkJeiA9IHogKyAxCgkJZ2V0Um9vbSggeCwgeSwgeiApLmV4aXRzWyJzb3V0aCJdID0gdHJ1ZQoKCWVsc2VpZiBfc0RpciA9PSAic291dGgiIHRoZW4KCQlyb29tLmV4aXRzWyJzb3V0aCJdID0gdHJ1ZQoJCXogPSB6IC0gMQoJCWdldFJvb20oIHgsIHksIHogKS5leGl0c1sibm9ydGgiXSA9IHRydWUKCQkKCWVsc2VpZiBfc0RpciA9PSAiZWFzdCIgdGhlbgoJCXJvb20uZXhpdHNbImVhc3QiXSA9IHRydWUKCQl4ID0geCAtIDEKCQlnZXRSb29tKCB4LCB5LCB6ICkuZXhpdHNbIndlc3QiXSA9IHRydWUKCQkKCWVsc2VpZiBfc0RpciA9PSAid2VzdCIgdGhlbgoJCXJvb20uZXhpdHNbIndlc3QiXSA9IHRydWUKCQl4ID0geCArIDEKCQlnZXRSb29tKCB4LCB5LCB6ICkuZXhpdHNbImVhc3QiXSA9IHRydWUKCQkKCWVsc2VpZiBfc0RpciA9PSAidXAiIHRoZW4KCQlpZiB5ID09IDAgdGhlbgoJCQlwcmludCggIllvdSBjYW4ndCBkaWcgdGhhdCB3YXkuIiApCgkJCXJldHVybgoJCWVuZAoKCQlyb29tLmV4aXRzWyJ1cCJdID0gdHJ1ZQoJCWlmIHkgPT0gLTEgdGhlbgoJCQlyb29tLml0ZW1zWyAiYW4gZXhpdCB0byB0aGUgc3VyZmFjZSIgXSA9IGl0ZW1zWyAiYW4gZXhpdCB0byB0aGUgc3VyZmFjZSIgXQoJCWVuZAoJCXkgPSB5ICsgMQoJCQoJCXJvb20gPSBnZXRSb29tKCB4LCB5LCB6ICkKCQlyb29tLmV4aXRzWyJkb3duIl0gPSB0cnVlCgkJaWYgeSA9PSAwIHRoZW4KCQkJcm9vbS5pdGVtc1sgImEgY2F2ZSBlbnRyYW5jZSIgXSA9IGl0ZW1zWyAiYSBjYXZlIGVudHJhbmNlIiBdCgkJZW5kCgkJCgllbHNlaWYgX3NEaXIgPT0gImRvd24iIHRoZW4KCQlpZiB5IDw9IC0zIHRoZW4KCQkJcHJpbnQoICJZb3UgaGl0IGJlZHJvY2suIiApCgkJCXJldHVybgoJCWVuZAoKCQlyb29tLmV4aXRzWyJkb3duIl0gPSB0cnVlCgkJaWYgeSA9PSAwIHRoZW4KCQkJcm9vbS5pdGVtc1sgImEgY2F2ZSBlbnRyYW5jZSIgXSA9IGl0ZW1zWyAiYSBjYXZlIGVudHJhbmNlIiBdCgkJZW5kCgkJeSA9IHkgLSAxCgkJCgkJcm9vbSA9IGdldFJvb20oIHgsIHksIHogKQoJCXJvb20uZXhpdHNbInVwIl0gPSB0cnVlCgkJaWYgeSA9PSAtMSB0aGVuCgkJCXJvb20uaXRlbXNbICJhbiBleGl0IHRvIHRoZSBzdXJmYWNlIiBdID0gaXRlbXNbICJhbiBleGl0IHRvIHRoZSBzdXJmYWNlIiBdCgkJZW5kCgkJCgllbHNlCgkJcHJpbnQoICJJIGRvbid0IHVuZGVyc3RhbmQgdGhhdCBkaXJlY3Rpb24uIiApCgkJcmV0dXJuCgllbmQKCQoJLS0KCWlmIGJBY3R1YWxseURpZ2dpbmcgdGhlbgoJCWlmIF9zRGlyID09ICJkb3duIiBhbmQgeSA9PSAtMSBvcgoJCSAgIF9zRGlyID09ICJ1cCIgYW5kIHkgPT0gMCB0aGVuCgkJCWludmVudG9yeVsgInNvbWUgZGlydCIgXSA9IGl0ZW1zWyAic29tZSBkaXJ0IiBdCgkJCWludmVudG9yeVsgInNvbWUgc3RvbmUiIF0gPSBpdGVtc1sgInNvbWUgc3RvbmUiIF0KCQkJcHJpbnQoICJZb3UgZGlnICIuLl9zRGlyLi4iIHVzaW5nICIuLnNUb29sLi4iIGFuZCBjb2xsZWN0IHNvbWUgZGlydCBhbmQgc3RvbmUuIiApCgkJZWxzZQoJCQlpbnZlbnRvcnlbICJzb21lIHN0b25lIiBdID0gaXRlbXNbICJzb21lIHN0b25lIiBdCgkJCXByaW50KCAiWW91IGRpZyAiLi5fc0Rpci4uIiB1c2luZyAiLi5zVG9vbC4uIiBhbmQgY29sbGVjdCBzb21lIHN0b25lLiIgKQoJCWVuZAoJZW5kCgkKCW5UaW1lSW5Sb29tID0gMAoJZG9Db21tYW5kKCAibG9vayIgKQplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLmludmVudG9yeSgpCglwcmludCggIllvdSBhcmUgY2FycnlpbmcgIiAuLiBpdGVtaXplKCBpbnZlbnRvcnkgKSAuLiAiLiIgKQplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLmRyb3AoIF9zSXRlbSApCglpZiBfc0l0ZW0gPT0gbmlsIHRoZW4KCQlwcmludCggIkRyb3Agd2hhdD8iICkKCQlyZXR1cm4KCWVuZAoJCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCx5LHogKQoJbG9jYWwgc0l0ZW0gPSBmaW5kSXRlbSggaW52ZW50b3J5LCBfc0l0ZW0gKQoJaWYgc0l0ZW0gdGhlbgoJCWxvY2FsIHRJdGVtID0gaW52ZW50b3J5WyBzSXRlbSBdCgkJaWYgdEl0ZW0uZHJvcHBhYmxlID09IGZhbHNlIHRoZW4KCQkJcHJpbnQoICJZb3UgY2FuJ3QgZHJvcCB0aGF0LiIgKQoJCWVsc2UKCQkJcm9vbS5pdGVtc1sgc0l0ZW0gXSA9IHRJdGVtCgkJCWludmVudG9yeVsgc0l0ZW0gXSA9IG5pbAoJCQlwcmludCggIkRyb3BwZWQuIiApCgkJZW5kCgllbHNlCgkJcHJpbnQoICJZb3UgZG9uJ3QgaGF2ZSBhICIuLl9zSXRlbS4uIi4iICkKCWVuZAplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLnBsYWNlKCBfc0l0ZW0gKQoJaWYgX3NJdGVtID09IG5pbCB0aGVuCgkJcHJpbnQoICJQbGFjZSB3aGF0PyIgKQoJCXJldHVybgoJZW5kCgkKCWlmIF9zSXRlbSA9PSAidG9yY2giIG9yIF9zSXRlbSA9PSAiYSB0b3JjaCIgdGhlbgoJCWxvY2FsIHJvb20gPSBnZXRSb29tKCB4LHkseiApCgkJaWYgaW52ZW50b3J5WyJzb21lIHRvcmNoZXMiXSBvciBpbnZlbnRvcnlbImEgdG9yY2giXSB0aGVuCgkJCWludmVudG9yeVsiYSB0b3JjaCJdID0gbmlsCgkJCXJvb20uaXRlbXNbImEgdG9yY2giXSA9IGl0ZW1zWyJhIHRvcmNoIl0KCQkJaWYgcm9vbS5kYXJrIHRoZW4KCQkJCXByaW50KCAiVGhlIGNhdmUgbGlnaHRzIHVwIHVuZGVyIHRoZSB0b3JjaGZsYW1lLiIgKQoJCQkJcm9vbS5kYXJrID0gZmFsc2UKCQkJZWxzZWlmIHkgPT0gMCBhbmQgbm90IGlzU3VubnkoKSB0aGVuCgkJCQlwcmludCggIlRoZSBuaWdodCBnZXRzIGEgbGl0dGxlIGJyaWdodGVyLiIgKQoJCQllbHNlCgkJCQlwcmludCggIlBsYWNlZC4iICkKCQkJZW5kCgkJZWxzZQoJCQlwcmludCggIllvdSBkb24ndCBoYXZlIHRvcmNoZXMuIiApCgkJZW5kCgkJcmV0dXJuCgllbmQKCQoJY29tbWFuZHMuZHJvcCggX3NJdGVtICkKZW5kCgpmdW5jdGlvbiBjb21tYW5kcy50YWtlKCBfc0l0ZW0gKQoJaWYgX3NJdGVtID09IG5pbCB0aGVuCgkJcHJpbnQoICJUYWtlIHdoYXQ/IiApCgkJcmV0dXJuCgllbmQKCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCx5LHogKQoJbG9jYWwgc0l0ZW0gPSBmaW5kSXRlbSggcm9vbS5pdGVtcywgX3NJdGVtICkKCWlmIHNJdGVtIHRoZW4KCQlsb2NhbCB0SXRlbSA9IHJvb20uaXRlbXNbIHNJdGVtIF0KCQlpZiB0SXRlbS5oZWF2eSA9PSB0cnVlIHRoZW4KCQkJcHJpbnQoICJZb3UgY2FuJ3QgY2FycnkgIi4uc0l0ZW0uLiIuIiApCgkJZWxzZWlmIHRJdGVtLm9yZSA9PSB0cnVlIHRoZW4KCQkJcHJpbnQoICJZb3UgbmVlZCB0byBtaW5lIHRoaXMgb3JlLiIgKQoJCWVsc2UKCQkJaWYgdEl0ZW0uaW5maW5pdGUgfj0gdHJ1ZSB0aGVuCgkJCQlyb29tLml0ZW1zWyBzSXRlbSBdID0gbmlsCgkJCWVuZAoJCQlpbnZlbnRvcnlbIHNJdGVtIF0gPSB0SXRlbQoJCQkKCQkJaWYgaW52ZW50b3J5WyJzb21lIHRvcmNoZXMiXSBhbmQgaW52ZW50b3J5WyJhIHRvcmNoIl0gdGhlbgoJCQkJaW52ZW50b3J5WyJhIHRvcmNoIl0gPSBuaWwKCQkJZW5kCgkJCWlmIHNJdGVtID09ICJhIHRvcmNoIiBhbmQgeSA8IDAgdGhlbgoJCQkJcm9vbS5kYXJrID0gdHJ1ZQoJCQkJcHJpbnQoICJUaGUgY2F2ZSBwbHVuZ2VzIGludG8gZGFya25lc3MuIiApCgkJCWVsc2UKCQkJCXByaW50KCAiVGFrZW4uIiApCgkJCWVuZAoJCWVuZAoJZWxzZQoJCXByaW50KCAiWW91IGRvbid0IHNlZSBhICIuLl9zSXRlbS4uIiBoZXJlLiIgKQoJZW5kCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMubWluZSggX3NJdGVtLCBfc1Rvb2wgKQoJaWYgX3NJdGVtID09IG5pbCB0aGVuCgkJcHJpbnQoICJNaW5lIHdoYXQ/IiApCgkJcmV0dXJuCgllbmQKCWlmIF9zVG9vbCA9PSBuaWwgdGhlbgoJCXByaW50KCAiTWluZSAiLi5fc0l0ZW0uLiIgd2l0aCB3aGF0PyIgKQoJCXJldHVybgoJZW5kCQoJY29tbWFuZHMuY2JyZWFrKCBfc0l0ZW0sIF9zVG9vbCApCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMuYXR0YWNrKCBfc0l0ZW0sIF9zVG9vbCApCglpZiBfc0l0ZW0gPT0gbmlsIHRoZW4KCQlwcmludCggIkF0dGFjayB3aGF0PyIgKQoJCXJldHVybgoJZW5kCgljb21tYW5kcy5jYnJlYWsoIF9zSXRlbSwgX3NUb29sICkKZW5kCgpmdW5jdGlvbiBjb21tYW5kcy5jYnJlYWsoIF9zSXRlbSwgX3NUb29sICkKCWlmIF9zSXRlbSA9PSBuaWwgdGhlbgoJCXByaW50KCAiQnJlYWsgd2hhdD8iICkKCQlyZXR1cm4KCWVuZAoJCglsb2NhbCBzVG9vbCA9IG5pbAoJaWYgX3NUb29sIH49IG5pbCB0aGVuCgkJc1Rvb2wgPSBmaW5kSXRlbSggaW52ZW50b3J5LCBfc1Rvb2wgKQoJCWlmIHNUb29sID09IG5pbCB0aGVuCgkJCXByaW50KCAiWW91J3JlIG5vdCBjYXJyeWluZyBhICIuLl9zVG9vbC4uIi4iICkKCQkJcmV0dXJuCgkJZW5kCgllbmQKCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCx5LHogKQoJaWYgX3NJdGVtID09ICJ0cmVlIiBvciBfc0l0ZW0gPT0gInRyZWVzIiBvciBfc0l0ZW0gPT0gImEgdHJlZSIgdGhlbgoJCXByaW50KCAiVGhlIHRyZWUgYnJlYWtzIGludG8gYmxvY2tzIG9mIHdvb2QsIHdoaWNoIHlvdSBwaWNrIHVwLiIgKQoJCWludmVudG9yeVsgInNvbWUgd29vZCIgXSA9IGl0ZW1zWyAic29tZSB3b29kIiBdCgkJcmV0dXJuCgllbHNlaWYgX3NJdGVtID09ICJzZWxmIiBvciBfc0l0ZW0gPT0gIm15c2VsZiIgdGhlbgoJCWlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCgkJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy5yZWQgKQoJCWVuZAoJCXByaW50KCAiWW91IGhhdmUgZGllZC4iICkKCQlwcmludCggIlNjb3JlOiAmZTAiICkKCQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQoJCWJSdW5uaW5nID0gZmFsc2UKCQlyZXR1cm4KCWVuZAoJCglsb2NhbCBzSXRlbSA9IGZpbmRJdGVtKCByb29tLml0ZW1zLCBfc0l0ZW0gKQoJaWYgc0l0ZW0gdGhlbgoJCWxvY2FsIHRJdGVtID0gcm9vbS5pdGVtc1sgc0l0ZW0gXQoJCWlmIHRJdGVtLm9yZSA9PSB0cnVlIHRoZW4KCQkJLS0gQnJlYWtpbmcgb3JlCgkJCWlmIG5vdCBzVG9vbCB0aGVuCgkJCQlwcmludCggIllvdSBuZWVkIGEgdG9vbCB0byBicmVhayB0aGlzIG9yZS4iICkKCQkJCXJldHVybgoJCQllbmQKCQkJbG9jYWwgdFRvb2wgPSBpbnZlbnRvcnlbIHNUb29sIF0KCQkJaWYgdFRvb2wudG9vbCB0aGVuCgkJCQlpZiB0VG9vbC50b29sTGV2ZWwgPCB0SXRlbS50b29sTGV2ZWwgdGhlbgoJCQkJCXByaW50KCBzVG9vbCAuLiIgaXMgbm90IHN0cm9uZyBlbm91Z2ggdG8gYnJlYWsgdGhpcyBvcmUuIiApCgkJCQllbHNlaWYgdFRvb2wudG9vbFR5cGUgfj0gdEl0ZW0udG9vbFR5cGUgdGhlbgoJCQkJCXByaW50KCAiWW91IG5lZWQgYSBkaWZmZXJlbnQga2luZCBvZiB0b29sIHRvIGJyZWFrIHRoaXMgb3JlLiIgKQoJCQkJZWxzZQoJCQkJCXByaW50KCAiVGhlIG9yZSBicmVha3MsIGRyb3BwaW5nICIuLnNJdGVtLi4iLCB3aGljaCB5b3UgcGljayB1cC4iICkKCQkJCQlpbnZlbnRvcnlbIHNJdGVtIF0gPSBpdGVtc1sgc0l0ZW0gXQoJCQkJCWlmIHRJdGVtLmluZmluaXRlIH49IHRydWUgdGhlbgoJCQkJCQlyb29tLml0ZW1zWyBzSXRlbSBdID0gbmlsCgkJCQkJZW5kCgkJCQllbmQKCQkJZWxzZQoJCQkJcHJpbnQoICJZb3UgY2FuJ3QgYnJlYWsgIi4uc0l0ZW0uLiIgd2l0aCAiLi5zVG9vbC4uIi4iKQoJCQllbmQKCQkJCgkJZWxzZWlmIHRJdGVtLmNyZWF0dXJlID09IHRydWUgdGhlbgoJCQktLSBGaWdodGluZyBtb25zdGVycyAob3IgcGlncykKCQkJbG9jYWwgdG9vbExldmVsID0gMAoJCQlsb2NhbCB0VG9vbCA9IG5pbAoJCQlpZiBzVG9vbCB0aGVuCgkJCQl0VG9vbCA9IGludmVudG9yeVsgc1Rvb2wgXQoJCQkJaWYgdFRvb2wudG9vbFR5cGUgPT0gInN3b3JkIiB0aGVuCgkJCQkJdG9vbExldmVsID0gdFRvb2wudG9vbExldmVsCgkJCQllbmQKCQkJZW5kCgkJCQkJCQoJCQlsb2NhbCB0Q2hhbmNlcyA9IHsgMC4yLCAwLjQsIDAuNTUsIDAuOCwgMSB9CgkJCWlmIG1hdGgucmFuZG9tKCkgPD0gdENoYW5jZXNbIHRvb2xMZXZlbCArIDEgXSB0aGVuCgkJCQlyb29tLml0ZW1zWyBzSXRlbSBdID0gbmlsCgkJCQlwcmludCggIlRoZSAiLi50SXRlbS5hbGlhc2VzWzFdLi4iIGRpZXMuIiApCgkKCQkJCWlmIHRJdGVtLmRyb3BzIHRoZW4KCQkJCQlmb3Igbiwgc0Ryb3AgaW4gcGFpcnMoIHRJdGVtLmRyb3BzICkgZG8KCQkJCQkJaWYgbm90IHJvb20uaXRlbXNbc0Ryb3BdIHRoZW4KCQkJCQkJCXByaW50KCAiVGhlICIuLnRJdGVtLmFsaWFzZXNbMV0uLiIgZHJvcHBlZCAiLi5zRHJvcC4uIi4iICkKCQkJCQkJCXJvb20uaXRlbXNbc0Ryb3BdID0gaXRlbXNbc0Ryb3BdCgkJCQkJCWVuZAoJCQkJCWVuZAoJCQkJZW5kCgkJCQkKCQkJCWlmIHRJdGVtLm1vbnN0ZXIgdGhlbgoJCQkJCXJvb20ubk1vbnN0ZXJzID0gcm9vbS5uTW9uc3RlcnMgLSAxCgkJCQllbmQKCQkJZWxzZQoJCQkJcHJpbnQoICJUaGUgIi4udEl0ZW0uYWxpYXNlc1sxXS4uIiBpcyBpbmp1cmVkIGJ5IHlvdXIgYmxvdy4iICkKCQkJZW5kCgkJCQoJCQlpZiB0SXRlbS5oaXREcm9wcyB0aGVuCgkJCQlmb3Igbiwgc0Ryb3AgaW4gcGFpcnMoIHRJdGVtLmhpdERyb3BzICkgZG8KCQkJCQlpZiBub3Qgcm9vbS5pdGVtc1tzRHJvcF0gdGhlbgoJCQkJCQlwcmludCggIlRoZSAiLi50SXRlbS5hbGlhc2VzWzFdLi4iIGRyb3BwZWQgIi4uc0Ryb3AuLiIuIiApCgkJCQkJCXJvb20uaXRlbXNbc0Ryb3BdID0gaXRlbXNbc0Ryb3BdCgkJCQkJZW5kCgkJCQllbmQKCQkJZW5kCgkJCgkJZWxzZQoJCQlwcmludCggIllvdSBjYW4ndCBicmVhayAiLi5zSXRlbS4uIi4iICkKCQllbmQKCWVsc2UKCQlwcmludCggIllvdSBkb24ndCBzZWUgYSAiLi5fc0l0ZW0uLiIgaGVyZS4iICkKCWVuZAplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLmNyYWZ0KCBfc0l0ZW0gKQoJaWYgX3NJdGVtID09IG5pbCB0aGVuCgkJcHJpbnQoICJDcmFmdCB3aGF0PyIgKQoJCXJldHVybgoJZW5kCgkKCWlmIF9zSXRlbSA9PSAiY29tcHV0ZXIiIG9yIF9zSXRlbSA9PSAiYSBjb21wdXRlciIgdGhlbgoJCXByaW50KCAiQnkgY3JlYXRpbmcgYSBjb21wdXRlciBpbiBhIGNvbXB1dGVyIGluIGEgY29tcHV0ZXIsIHlvdSB0ZWFyIGEgaG9sZSBpbiB0aGUgc3BhY2V0aW1lIGNvbnRpbnV1bSBmcm9tIHdoaWNoIG5vIG1vcnRhbCBiZWluZyBjYW4gZXNjYXBlLiIgKQoJCWlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCgkJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy5yZWQgKQoJCWVuZAoJCXByaW50KCAiWW91IGhhdmUgZGllZC4iICkKCQlwcmludCggIlNjb3JlOiAmZTAiICkKCQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQoJCWJSdW5uaW5nID0gZmFsc2UKCQlyZXR1cm4KCWVuZAoJCglsb2NhbCByb29tID0gZ2V0Um9vbSggeCx5LHogKQoJbG9jYWwgc0l0ZW0gPSBmaW5kSXRlbSggaXRlbXMsIF9zSXRlbSApCglsb2NhbCB0UmVjaXBlID0gKHNJdGVtIGFuZCB0UmVjaXBlc1sgc0l0ZW0gXSkgb3IgbmlsCglpZiB0UmVjaXBlIHRoZW4KCQlmb3IgbixzUmVxIGluIGlwYWlycyggdFJlY2lwZSApIGRvCgkJCWlmIGludmVudG9yeVtzUmVxXSA9PSBuaWwgdGhlbgoJCQkJcHJpbnQoICJZb3UgZG9uJ3QgaGF2ZSB0aGUgaXRlbXMgeW91IG5lZWQgdG8gY3JhZnQgIi4uc0l0ZW0uLiIuIiApCgkJCQlyZXR1cm4KCQkJZW5kCgkJZW5kCgkJCgkJZm9yIG4sc1JlcSBpbiBpcGFpcnMoIHRSZWNpcGUgKSBkbwoJCQlpbnZlbnRvcnlbc1JlcV0gPSBuaWwKCQllbmQKCQlpbnZlbnRvcnlbIHNJdGVtIF0gPSBpdGVtc1sgc0l0ZW0gXQoJCWlmIGludmVudG9yeVsic29tZSB0b3JjaGVzIl0gYW5kIGludmVudG9yeVsiYSB0b3JjaCJdIHRoZW4KCQkJaW52ZW50b3J5WyJhIHRvcmNoIl0gPSBuaWwKCQllbmQKCQlwcmludCggIkNyYWZ0ZWQuIiApCgllbHNlCgkJcHJpbnQoICJZb3UgZG9uJ3Qga25vdyBob3cgdG8gbWFrZSAiLi4oc0l0ZW0gb3IgX3NJdGVtKS4uIi4iICkKCWVuZAkKZW5kCgpmdW5jdGlvbiBjb21tYW5kcy5idWlsZCggX3NUaGluZywgX3NNYXRlcmlhbCApCglpZiBfc1RoaW5nID09IG5pbCB0aGVuCgkJcHJpbnQoICJCdWlsZCB3aGF0PyIgKQoJCXJldHVybgoJZW5kCgkJCglsb2NhbCBzTWF0ZXJpYWwgPSBuaWwKCWlmIF9zTWF0ZXJpYWwgPT0gbmlsIHRoZW4KCQlmb3Igc0l0ZW0sIHRJdGVtIGluIHBhaXJzKCBpbnZlbnRvcnkgKSBkbwoJCQlpZiB0SXRlbS5tYXRlcmlhbCB0aGVuCgkJCQlzTWF0ZXJpYWwgPSBzSXRlbQoJCQkJYnJlYWsKCQkJZW5kCgkJZW5kCgkJaWYgc01hdGVyaWFsID09IG5pbCB0aGVuCgkJCXByaW50KCAiWW91IGRvbid0IGhhdmUgYW55IGJ1aWxkaW5nIG1hdGVyaWFscy4iICkKCQkJcmV0dXJuCgkJZW5kCgllbHNlCgkJc01hdGVyaWFsID0gZmluZEl0ZW0oIGludmVudG9yeSwgX3NNYXRlcmlhbCApCgkJaWYgbm90IHNNYXRlcmlhbCB0aGVuCgkJCXByaW50KCAiWW91IGRvbid0IGhhdmUgYW55ICIuLl9zTWF0ZXJpYWwgKQoJCQlyZXR1cm4KCQllbmQKCQkKCQlpZiBpbnZlbnRvcnlbc01hdGVyaWFsXS5tYXRlcmlhbCB+PSB0cnVlIHRoZW4KCQkJcHJpbnQoIHNNYXRlcmlhbC4uIiBpcyBub3QgYSBnb29kIGJ1aWxkaW5nIG1hdGVyaWFsLiIgKQoJCQlyZXR1cm4KCQllbmQKCWVuZAoJCglsb2NhbCBhbGlhcyA9IG5pbAoJaWYgc3RyaW5nLnN1Yihfc1RoaW5nLCAxLCAxKSA9PSAiYSIgdGhlbgoJCWFsaWFzID0gc3RyaW5nLm1hdGNoKCBfc1RoaW5nLCAiYSAoWyVhIF0rKSIgKQoJZW5kCgkKCWxvY2FsIHJvb20gPSBnZXRSb29tKCB4LHkseiApCglpbnZlbnRvcnlbc01hdGVyaWFsXSA9IG5pbAoJcm9vbS5pdGVtc1sgX3NUaGluZyBdID0gewoJCWhlYXZ5ID0gdHJ1ZSwKCQlhbGlhc2VzID0geyBhbGlhcyB9LAoJCWRlc2MgPSAiQXMgeW91IGxvb2sgYXQgeW91ciBjcmVhdGlvbiAobWFkZSBmcm9tICIuLnNNYXRlcmlhbC4uIiksIHlvdSBmZWVsIGEgc3dlbGxpbmcgc2Vuc2Ugb2YgcHJpZGUuIiwKCX0KCglwcmludCggIllvdXIgY29uc3RydWN0aW9uIGlzIGNvbXBsZXRlLiIgKQplbmQKCmZ1bmN0aW9uIGNvbW1hbmRzLmhlbHAoKQoJbG9jYWwgc1RleHQgPSAKCQkiV2VsY29tZSB0byBhZHZlbnR1cmUsIHRoZSBncmVhdGVzdCB0ZXh0IGFkdmVudHVyZSBnYW1lIG9uIENyYWZ0T1MuICIgLi4KCQkiVG8gZ2V0IGFyb3VuZCB0aGUgd29ybGQsIHR5cGUgYWN0aW9ucywgYW5kIHRoZSBhZHZlbnR1cmUgd2lsbCAiIC4uCgkJImJlIHJlYWQgYmFjayB0byB5b3UuIFRoZSBhY3Rpb25zIGF2YWlsaWFibGUgdG8geW91IGFyZSBnbywgbG9vaywgaW5zcGVjdCwgaW52ZW50b3J5LCAiIC4uCgkJInRha2UsIGRyb3AsIHBsYWNlLCBwdW5jaCwgYXR0YWNrLCBtaW5lLCBkaWcsIGNyYWZ0LCBidWlsZCwgZWF0IGFuZCBleGl0LiIKCXByaW50KCBzVGV4dCApCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMuZWF0KCBfc0l0ZW0gKQoJaWYgX3NJdGVtID09IG5pbCB0aGVuCgkJcHJpbnQoICJFYXQgd2hhdD8iICkKCQlyZXR1cm4KCWVuZAoKCWxvY2FsIHNJdGVtID0gZmluZEl0ZW0oIGludmVudG9yeSwgX3NJdGVtICkKCWlmIG5vdCBzSXRlbSB0aGVuCgkJcHJpbnQoICJZb3UgZG9uJ3QgaGF2ZSBhbnkgIi4uX3NJdGVtLi4iLiIgKQoJCXJldHVybgoJZW5kCgkKCWxvY2FsIHRJdGVtID0gaW52ZW50b3J5W3NJdGVtXQoJaWYgdEl0ZW0uZm9vZCB0aGVuCgkJcHJpbnQoICJUaGF0IHdhcyBkZWxpY2lvdXMhIiApCgkJaW52ZW50b3J5W3NJdGVtXSA9IG5pbAoJCQoJCWlmIGJJbmp1cmVkIHRoZW4KCQkJcHJpbnQoICJZb3UgYXJlIG5vIGxvbmdlciBpbmp1cmVkLiIgKQoJCQliSW5qdXJlZCA9IGZhbHNlCgkJZW5kCgllbHNlCgkJcHJpbnQoICJZb3UgY2FuJ3QgZWF0ICIuLnNJdGVtLi4iLiIgKQoJZW5kCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMuZXhpdCgpCgliUnVubmluZyA9IGZhbHNlCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMuYmFkaW5wdXQoKQoJbG9jYWwgdFJlc3BvbnNlcyA9IHsKCQkiSSBkb24ndCB1bmRlcnN0YW5kLiIsCgkJIkkgZG9uJ3QgdW5kZXJzdGFuZCB5b3UuIiwKCQkiWW91IGNhbid0IGRvIHRoYXQuIiwKCQkiTm9wZS4iLAoJCSJIdWg/IiwKCQkiU2F5IGFnYWluPyIsCgkJIlRoYXQncyBjcmF6eSB0YWxrLiIsCgkJIlNwZWFrIGNsZWFybHkuIiwKCQkiSSdsbCB0aGluayBhYm91dCBpdC4iLAoJCSJMZXQgbWUgZ2V0IGJhY2sgdG8geW91IG9uIHRoYXQgb25lLiIsCgkJIlRoYXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4iLAoJCSJXaGF0PyIsCgl9CglwcmludCggdFJlc3BvbnNlc1sgbWF0aC5yYW5kb20oMSwjdFJlc3BvbnNlcykgXSApCmVuZAoKZnVuY3Rpb24gY29tbWFuZHMubm9pbnB1dCgpCglsb2NhbCB0UmVzcG9uc2VzID0gewoJCSJTcGVhayB1cC4iLAoJCSJFbnVuY2lhdGUuIiwKCQkiUHJvamVjdCB5b3VyIHZvaWNlLiIsCgkJIkRvbid0IGJlIHNoeS4iLAoJCSJVc2UgeW91ciB3b3Jkcy4iLAoJfQoJcHJpbnQoIHRSZXNwb25zZXNbIG1hdGgucmFuZG9tKDEsI3RSZXNwb25zZXMpIF0gKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHNpbXVsYXRlKCkKCWxvY2FsIGJOZXdNb25zdGVyc1RoaXNSb29tID0gZmFsc2UKCQoJLS0gU3Bhd24gbW9uc3RlcnMgaW4gbmVhcmJ5IHJvb21zCglmb3Igc3ggPSAtMiwyIGRvCgkJZm9yIHN5ID0gLTEsMSBkbwoJCQlmb3Igc3ogPSAtMiwyIGRvCgkJCQlsb2NhbCBoID0geSArIHN5CgkJCQlpZiBoID49IC0zIGFuZCBoIDw9IDAgdGhlbgoJCQkJCWxvY2FsIHJvb20gPSBnZXRSb29tKCB4ICsgc3gsIGgsIHogKyBzeiApCgkJCQkJCgkJCQkJLS0gU3Bhd24gbW9uc3RlcnMKCQkJCQlpZiByb29tLm5Nb25zdGVycyA8IDIgYW5kCgkJCQkJICAgKChoID09IDAgYW5kIG5vdCBpc1N1bm55KCkgYW5kIG5vdCByb29tLml0ZW1zWyJhIHRvcmNoIl0pIG9yIHJvb20uZGFyaykgYW5kCgkJCQkJICAgbWF0aC5yYW5kb20oMSw2KSA9PSAxIHRoZW4KCQkJCQkgICAKCQkJCQkJbG9jYWwgc01vbnN0ZXIgPSB0TW9uc3RlcnNbIG1hdGgucmFuZG9tKDEsI3RNb25zdGVycykgXQoJCQkJCQlpZiByb29tLml0ZW1zWyBzTW9uc3RlciBdID09IG5pbCB0aGVuCgkJCQkJICAgCQlyb29tLml0ZW1zWyBzTW9uc3RlciBdID0gaXRlbXNbIHNNb25zdGVyIF0KCQkJCQkgICAJCXJvb20ubk1vbnN0ZXJzID0gcm9vbS5uTW9uc3RlcnMgKyAxCgkJCQkJICAgCQkKCQkJCQkgICAJCWlmIHN4ID09IDAgYW5kIHN5ID09IDAgYW5kIHN6ID09IDAgYW5kIG5vdCByb29tLmRhcmsgdGhlbgoJCQkJCSAgIAkJCXByaW50KCAiRnJvbSB0aGUgc2hhZG93cywgIi4uc01vbnN0ZXIuLiIgYXBwZWFycy4iICkKCQkJCQkgICAJCQliTmV3TW9uc3RlcnNUaGlzUm9vbSA9IHRydWUKCQkJCQkgICAJCWVuZAoJCQkJCQllbmQJCgkJCQkJZW5kCgkJCQkJCgkJCQkJLS0gQnVybiBtb25zdGVycwoJCQkJCWlmIGggPT0gMCBhbmQgaXNTdW5ueSgpIHRoZW4KCQkJCQkJZm9yIG4sc01vbnN0ZXIgaW4gaXBhaXJzKCB0TW9uc3RlcnMgKSBkbwoJCQkJCQkJaWYgcm9vbS5pdGVtc1tzTW9uc3Rlcl0gYW5kIGl0ZW1zW3NNb25zdGVyXS5ub2N0dXJuYWwgdGhlbgoJCQkJCQkJCXJvb20uaXRlbXNbc01vbnN0ZXJdID0gbmlsCgkJCQkJCSAgIAkJaWYgc3ggPT0gMCBhbmQgc3kgPT0gMCBhbmQgc3ogPT0gMCBhbmQgbm90IHJvb20uZGFyayB0aGVuCgkJCQkJCSAgIAkJCXByaW50KCAiV2l0aCB0aGUgc3VuIGhpZ2ggaW4gdGhlIHNreSwgdGhlICIuLml0ZW1zW3NNb25zdGVyXS5hbGlhc2VzWzFdLi4iIGJ1cnN0cyBpbnRvIGZsYW1lIGFuZCBkaWVzLiIgKQoJCQkJCQkgICAJCWVuZAoJCQkJCQkgICAJCXJvb20ubk1vbnN0ZXJzID0gcm9vbS5uTW9uc3RlcnMgLSAxCgkJCQkJCSAgIAllbmQKCQkJCQkJZW5kCgkJCQkJZW5kCQoJCQkJZW5kCgkJCWVuZAoJCWVuZAoJZW5kCgoJLS0gTWFrZSBtb25zdGVycyBhdHRhY2sKCWxvY2FsIHJvb20gPSBnZXRSb29tKCB4LCB5LCB6ICkKCWlmIG5UaW1lSW5Sb29tID49IDIgYW5kIG5vdCBiTmV3TW9uc3RlcnNUaGlzUm9vbSB0aGVuCgkJZm9yIG4sc01vbnN0ZXIgaW4gaXBhaXJzKCB0TW9uc3RlcnMgKSBkbwoJCQlpZiByb29tLml0ZW1zW3NNb25zdGVyXSB0aGVuCgkJCQlpZiBtYXRoLnJhbmRvbSgxLDQpID09IDEgYW5kCgkJCQkgICBub3QgKHkgPT0gMCBhbmQgaXNTdW5ueSgpIGFuZCAoc01vbnN0ZXIgPT0gImEgc3BpZGVyIikpIHRoZW4KCQkJCQlpZiBzTW9uc3RlciA9PSAiYSBjcmVlcGVyIiB0aGVuCgkJCQkJCWlmIHJvb20uZGFyayB0aGVuCgkJCQkJCQlwcmludCggIkEgY3JlZXBlciBleHBsb2Rlcy4iICkKCQkJCQkJZWxzZQoJCQkJCQkJcHJpbnQoICJUaGUgY3JlZXBlciBleHBsb2Rlcy4iICkKCQkJCQkJZW5kCgkJCQkJCXJvb20uaXRlbXNbc01vbnN0ZXJdID0gbmlsCgkJCQkJCXJvb20ubk1vbnN0ZXJzID0gcm9vbS5uTW9uc3RlcnMgLSAxCgkJCQkJZWxzZQoJCQkJCQlpZiByb29tLmRhcmsgdGhlbgoJCQkJCQkJcHJpbnQoICJBICIuLml0ZW1zW3NNb25zdGVyXS5hbGlhc2VzWzFdLi4iIGF0dGFja3MgeW91LiIgKQoJCQkJCQllbHNlCgkJCQkJCQlwcmludCggIlRoZSAiLi5pdGVtc1tzTW9uc3Rlcl0uYWxpYXNlc1sxXS4uIiBhdHRhY2tzIHlvdS4iICkKCQkJCQkJZW5kCgkJCQkJZW5kCgkJCQkJCgkJCQkJaWYgYkluanVyZWQgdGhlbgoJCQkJCQlpZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJCQkJCQkJdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLnJlZCApCgkJCQkJCWVuZAoJCQkJCQlwcmludCggIllvdSBoYXZlIGRpZWQuIiApCgkJCQkJCXByaW50KCAiU2NvcmU6ICZlMCIgKQoJCQkJCQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQoJCQkJCQliUnVubmluZyA9IGZhbHNlCgkJCQkJCXJldHVybgoJCQkJCWVsc2UKCQkJCQkJYkluanVyZWQgPSB0cnVlCgkJCQkJZW5kCgkJCQkJCgkJCQkJYnJlYWsKCQkJCWVuZAoJCQllbmQKCQllbmQKCWVuZAoJCgktLSBBbHdheXMgcHJpbnQgdGhpcwoJaWYgYkluanVyZWQgdGhlbgoJCWlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCgkJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy5yZWQgKQoJCWVuZAoJCXByaW50KCAiWW91IGFyZSBpbmp1cmVkLiIgKQoJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSApCgllbmQKCQoJLS0gQWR2YW5jZSB0aW1lCgluVHVybiA9IG5UdXJuICsgMQoJblRpbWVJblJvb20gPSBuVGltZUluUm9vbSArIDEKZW5kCgpkb0NvbW1hbmQoICJsb29rIiApCnNpbXVsYXRlKCkKCmxvY2FsIHRDb21tYW5kSGlzdG9yeSA9IHt9CndoaWxlIGJSdW5uaW5nIGRvCglpZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy55ZWxsb3cgKQoJZW5kCiAgICB3cml0ZSggIj8gIiApCgl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQoJCQogICAgbG9jYWwgc1Jhd0xpbmUgPSByZWFkKCBuaWwsIHRDb21tYW5kSGlzdG9yeSApCiAgICB0YWJsZS5pbnNlcnQoIHRDb21tYW5kSGlzdG9yeSwgc1Jhd0xpbmUgKQogICAgCiAgICBsb2NhbCBzTGluZSA9IG5pbAoJZm9yIG1hdGNoIGluIHN0cmluZy5nbWF0Y2goc1Jhd0xpbmUsICIlYSsiKSBkbwoJCWlmIHNMaW5lIHRoZW4KCQkJc0xpbmUgPSBzTGluZSAuLiAiICIgLi4gc3RyaW5nLmxvd2VyKG1hdGNoKQoJCWVsc2UKCQkJc0xpbmUgPSBzdHJpbmcubG93ZXIobWF0Y2gpCgkJZW5kCgllbmQKCQoJZG9Db21tYW5kKCBzTGluZSBvciAiIiApCiAgICBpZiBiUnVubmluZyB0aGVuCgkgICAgc2ltdWxhdGUoKQoJZW5kCmVuZA==","isDir":false,"name":"adventure","size":0},"root/programs/fun/dj":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9Cgpsb2NhbCBmdW5jdGlvbiBwcmludFVzYWdlKCkKCXByaW50KCAiVXNhZ2VzOiIpCglwcmludCggImRqIHBsYXkiICkKCXByaW50KCAiZGogcGxheSA8ZHJpdmU+IiApCglwcmludCggImRqIHN0b3AiICkKZW5kCgppZiAjdEFyZ3MgPiAyIHRoZW4KCXByaW50VXNhZ2UoKQoJcmV0dXJuCmVuZAoKbG9jYWwgc0NvbW1hbmQgPSB0QXJnc1sxXQppZiBzQ29tbWFuZCA9PSAic3RvcCIgdGhlbgoJLS0gU3RvcCBhdWRpbwoJZGlzay5zdG9wQXVkaW8oKQoKZWxzZWlmIHNDb21tYW5kID09ICJwbGF5IiBvciBzQ29tbWFuZCA9PSBuaWwgdGhlbgoJLS0gUGxheSBhdWRpbwoJbG9jYWwgc05hbWUgPSB0QXJnc1syXQoJaWYgc05hbWUgPT0gbmlsIHRoZW4KCQktLSBObyBkaXNjIHNwZWNpZmllZCwgcGljayBvbmUgYXQgcmFuZG9tCgkJbG9jYWwgdE5hbWVzID0ge30KCQlmb3IgbixzTmFtZSBpbiBpcGFpcnMoIHBlcmlwaGVyYWwuZ2V0TmFtZXMoKSApIGRvCgkJCWlmIGRpc2suaXNQcmVzZW50KCBzTmFtZSApIGFuZCBkaXNrLmhhc0F1ZGlvKCBzTmFtZSApIHRoZW4KCQkJCXRhYmxlLmluc2VydCggdE5hbWVzLCBzTmFtZSApCgkJCWVuZAoJCWVuZAoJCWlmICN0TmFtZXMgPT0gMCB0aGVuCgkJCXByaW50KCAiTm8gTXVzaWMgRGlzY3MgaW4gYXR0YWNoZWQgZGlzayBkcml2ZXMiICkKCQkJcmV0dXJuCgkJZW5kCgkJc05hbWUgPSB0TmFtZXNbIG1hdGgucmFuZG9tKDEsI3ROYW1lcykgXQoJZW5kCgoJLS0gUGxheSB0aGUgZGlzYwoJaWYgZGlzay5pc1ByZXNlbnQoIHNOYW1lICkgYW5kIGRpc2suaGFzQXVkaW8oIHNOYW1lICkgdGhlbgoJCXByaW50KCAiUGxheWluZyAiLi5kaXNrLmdldEF1ZGlvVGl0bGUoIHNOYW1lICkgKQoJCWRpc2sucGxheUF1ZGlvKCBzTmFtZSApCgllbHNlCgkJcHJpbnQoICJObyBNdXNpYyBEaXNjIGluIGRpc2sgZHJpdmU6ICIuLnNOYW1lICkKCQlyZXR1cm4KCWVuZAoJCmVsc2UKCXByaW50VXNhZ2UoKQoJCmVuZA==","isDir":false,"name":"dj","size":0},"root/programs/fun/hello":{"data":"aWYgdGVybS5pc0NvbG91cigpIHRoZW4KCXRlcm0uc2V0VGV4dENvbG91ciggMl5tYXRoLnJhbmRvbSgwLDE1KSApCmVuZAp0ZXh0dXRpbHMuc2xvd1ByaW50KCAiSGVsbG8gV29ybGQhIiApCnRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSAp","isDir":false,"name":"hello","size":0},"root/programs/fun/worm":{"data":"Ci0tIERpc3BsYXkgdGhlIHN0YXJ0IHNjcmVlbgpsb2NhbCB3LGggPSB0ZXJtLmdldFNpemUoKQoKbG9jYWwgdGl0bGVDb2xvdXIsIGhlYWRpbmdDb2xvdXIsIHRleHRDb2xvdXIsIHdvcm1Db2xvdXIsIGZydWl0Q29sb3VyCmlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCiAgICB0aXRsZUNvbG91ciA9IGNvbG91cnMucmVkCgloZWFkaW5nQ29sb3VyID0gY29sb3Vycy55ZWxsb3cKCXRleHRDb2xvdXIgPSBjb2xvdXJzLndoaXRlCgl3b3JtQ29sb3VyID0gY29sb3Vycy5ncmVlbgoJZnJ1aXRDb2xvdXIgPSBjb2xvdXJzLnJlZAplbHNlCiAgICB0aXRsZUNvbG91ciA9IGNvbG91cnMud2hpdGUKCWhlYWRpbmdDb2xvdXIgPSBjb2xvdXJzLndoaXRlCgl0ZXh0Q29sb3VyID0gY29sb3Vycy53aGl0ZQoJd29ybUNvbG91ciA9IGNvbG91cnMud2hpdGUKCWZydWl0Q29sb3VyID0gY29sb3Vycy53aGl0ZQplbmQKCmZ1bmN0aW9uIHByaW50Q2VudHJlZCggeSwgcyApCglsb2NhbCB4ID0gbWF0aC5mbG9vcigodyAtIHN0cmluZy5sZW4ocykpIC8gMikKCXRlcm0uc2V0Q3Vyc29yUG9zKHgseSkKCS0tdGVybS5jbGVhckxpbmUoKQoJdGVybS53cml0ZSggcyApCmVuZAoKbG9jYWwgeFZlbCx5VmVsID0gMSwwCmxvY2FsIHhQb3MsIHlQb3MgPSBtYXRoLmZsb29yKHcvMiksIG1hdGguZmxvb3IoaC8yKQpsb2NhbCBweFZlbCwgcHlWZWwgPSBuaWwsIG5pbAoKbG9jYWwgbkxlbmd0aCA9IDEKbG9jYWwgbkV4dHJhTGVuZ3RoID0gNgpsb2NhbCBiUnVubmluZyA9IHRydWUKCmxvY2FsIHRhaWxYLHRhaWxZID0geFBvcyx5UG9zCmxvY2FsIG5TY29yZSA9IDAKbG9jYWwgbkRpZmZpY3VsdHkgPSAyCmxvY2FsIG5TcGVlZCwgbkludGVydmFsCgotLSBTZXR1cCB0aGUgc2NyZWVuCmxvY2FsIHNjcmVlbiA9IHt9CmZvciB4PTEsdyBkbwoJc2NyZWVuW3hdID0ge30KCWZvciB5PTEsaCBkbwoJCXNjcmVlblt4XVt5XSA9IHt9CgllbmQKZW5kCnNjcmVlblt4UG9zXVt5UG9zXSA9IHsgc25ha2UgPSB0cnVlIH0KCmxvY2FsIG5GcnVpdCA9IDEKbG9jYWwgdEZydWl0cyA9IHsKCSJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLAoJIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLCAiUCIsCgkiUSIsICJSIiwgIlMiLCAiVCIsICJVIiwgIlYiLCAiVyIsICJYIiwKCSJZIiwgIloiLAoJImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsCgkiaSIsICJqIiwgImsiLCAibCIsICJtIiwgIm4iLCAibyIsICJwIiwKCSJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLAoJInkiLCAieiIsCgkiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMCIsCgkiQCIsICIkIiwgIiUiLCAiIyIsICImIiwgIiEiLCAiPyIsICIrIiwgIioiLCAifiIKfQoKbG9jYWwgZnVuY3Rpb24gYWRkRnJ1aXQoKQoJd2hpbGUgdHJ1ZSBkbwoJCWxvY2FsIHggPSBtYXRoLnJhbmRvbSgxLHcpCgkJbG9jYWwgeSA9IG1hdGgucmFuZG9tKDIsaCkKCQlsb2NhbCBmcnVpdCA9IHNjcmVlblt4XVt5XQoJCWlmIGZydWl0LnNuYWtlID09IG5pbCBhbmQgZnJ1aXQud2FsbCA9PSBuaWwgYW5kIGZydWl0LmZydWl0ID09IG5pbCB0aGVuCgkJCXNjcmVlblt4XVt5XSA9IHsgZnJ1aXQgPSB0cnVlIH0KCQkJdGVybS5zZXRDdXJzb3JQb3MoeCx5KQoJCQl0ZXJtLnNldEJhY2tncm91bmRDb2xvdXIoIGZydWl0Q29sb3VyICkKCQkJdGVybS53cml0ZSgiICIpCgkJCXRlcm0uc2V0QmFja2dyb3VuZENvbG91ciggY29sb3Vycy5ibGFjayApCgkJCWJyZWFrCgkJZW5kCgllbmQKCQoJbkZydWl0ID0gbkZydWl0ICsgMQoJaWYgbkZydWl0ID4gI3RGcnVpdHMgdGhlbgoJCW5GcnVpdCA9IDEKCWVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIGRyYXdNZW51KCkKCXRlcm0uc2V0VGV4dENvbG91ciggaGVhZGluZ0NvbG91ciApCgl0ZXJtLnNldEN1cnNvclBvcygxLDEpCgl0ZXJtLndyaXRlKCAiU0NPUkUgIiApCgkKCXRlcm0uc2V0VGV4dENvbG91ciggdGV4dENvbG91ciApCgl0ZXJtLnNldEN1cnNvclBvcyg3LDEpCgl0ZXJtLndyaXRlKCB0b3N0cmluZyhuU2NvcmUpICkKCgl0ZXJtLnNldFRleHRDb2xvdXIoIGhlYWRpbmdDb2xvdXIgKQoJdGVybS5zZXRDdXJzb3JQb3Mody0xMSwxKQoJdGVybS53cml0ZSggIkRJRkZJQ1VMVFkgIikKCgl0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQoJdGVybS5zZXRDdXJzb3JQb3ModywxKQoJdGVybS53cml0ZSggdG9zdHJpbmcobkRpZmZpY3VsdHkgb3IgIj8iKSApIAoKCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSApCmVuZAoKbG9jYWwgZnVuY3Rpb24gdXBkYXRlKCApCglsb2NhbCB4LHkgPSB4UG9zLHlQb3MKCWlmIHB4VmVsIGFuZCBweVZlbCB0aGVuCgkJeFZlbCwgeVZlbCA9IHB4VmVsLCBweVZlbAoJCXB4VmVsLCBweVZlbCA9IG5pbCwgbmlsCgllbmQKCgktLSBSZW1vdmUgdGhlIHRhaWwKCWlmIG5FeHRyYUxlbmd0aCA9PSAwIHRoZW4KCQlsb2NhbCB0YWlsID0gc2NyZWVuW3RhaWxYXVt0YWlsWV0KCQlzY3JlZW5bdGFpbFhdW3RhaWxZXSA9IHt9CgkJdGVybS5zZXRDdXJzb3JQb3ModGFpbFgsdGFpbFkpCgkJdGVybS53cml0ZSgiICIpCgkJdGFpbFggPSB0YWlsLm5leHRYCgkJdGFpbFkgPSB0YWlsLm5leHRZCgllbHNlCgkJbkV4dHJhTGVuZ3RoID0gbkV4dHJhTGVuZ3RoIC0gMQoJZW5kCgkKCS0tIFVwZGF0ZSB0aGUgaGVhZAoJbG9jYWwgaGVhZCA9IHNjcmVlblt4UG9zXVt5UG9zXQoJbG9jYWwgbmV3WFBvcyA9IHhQb3MgKyB4VmVsCglsb2NhbCBuZXdZUG9zID0geVBvcyArIHlWZWwKCWlmIG5ld1hQb3MgPCAxIHRoZW4KCQluZXdYUG9zID0gdwoJZWxzZWlmIG5ld1hQb3MgPiB3IHRoZW4KCQluZXdYUG9zID0gMQoJZW5kCglpZiBuZXdZUG9zIDwgMiB0aGVuCgkJbmV3WVBvcyA9IGgKCWVsc2VpZiBuZXdZUG9zID4gaCB0aGVuCgkJbmV3WVBvcyA9IDIKCWVuZAoJCglsb2NhbCBuZXdIZWFkID0gc2NyZWVuW25ld1hQb3NdW25ld1lQb3NdCgl0ZXJtLnNldEN1cnNvclBvcygxLDEpOwoJcHJpbnQoIG5ld0hlYWQuc25ha2UgKQoJaWYgbmV3SGVhZC5zbmFrZSA9PSB0cnVlIG9yIG5ld0hlYWQud2FsbCA9PSB0cnVlIHRoZW4KCQliUnVubmluZyA9IGZhbHNlCgkJCgllbHNlCgkJaWYgbmV3SGVhZC5mcnVpdCA9PSB0cnVlIHRoZW4KCQkJblNjb3JlID0gblNjb3JlICsgMTAKCQkJbkV4dHJhTGVuZ3RoID0gbkV4dHJhTGVuZ3RoICsgMQoJCQlhZGRGcnVpdCgpCgkJZW5kCgkJeFBvcyA9IG5ld1hQb3MKCQl5UG9zID0gbmV3WVBvcwoJCWhlYWQubmV4dFggPSBuZXdYUG9zCgkJaGVhZC5uZXh0WSA9IG5ld1lQb3MKCQlzY3JlZW5bbmV3WFBvc11bbmV3WVBvc10gPSB7IHNuYWtlID0gdHJ1ZSB9CgkJCgllbmQKCQoJdGVybS5zZXRDdXJzb3JQb3MoeFBvcyx5UG9zKQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKCB3b3JtQ29sb3VyICkKCXRlcm0ud3JpdGUoIiAiKQoJdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3VyKCBjb2xvdXJzLmJsYWNrICkKCglkcmF3TWVudSgpCmVuZAoKLS0gRGlzcGxheSB0aGUgZnJvbnRlbmQKdGVybS5jbGVhcigpCmxvY2FsIGZ1bmN0aW9uIGRyYXdGcm9udGVuZCgpCgktLXRlcm0uc2V0VGV4dENvbG91ciggdGl0bGVDb2xvdXIgKQogICAgLS1wcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSAtIDQsICIgVyBPIFIgTSAiICkKCgl0ZXJtLnNldFRleHRDb2xvdXIoIGhlYWRpbmdDb2xvdXIgKQoJcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgLSAzLCAiIiApCglwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSAtIDIsICIgU0VMRUNUIERJRkZJQ1VMVFkgIiApCglwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSAtIDEsICIiICkKCQoJcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAwLCAiICAgICAgICAgICAgIiApCglwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSArIDEsICIgICAgICAgICAgICAiICkKCXByaW50Q2VudHJlZCggbWF0aC5mbG9vcihoLzIpICsgMiwgIiAgICAgICAgICAgICIgKQoJcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgLSAxICsgbkRpZmZpY3VsdHksICIgWyAgICAgICAgXSAiICkKCgl0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQoJcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAwLCAiRUFTWSIgKQoJcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAxLCAiTUVESVVNIiApCglwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSArIDIsICJIQVJEIiApCglwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSArIDMsICIiICkKCgl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQplbmQKCmRyYXdNZW51KCkKZHJhd0Zyb250ZW5kKCkKd2hpbGUgdHJ1ZSBkbwoJbG9jYWwgZSxrZXkgPSBvcy5wdWxsRXZlbnQoICJrZXkiICkKCWlmIGtleSA9PSBrZXlzLnVwIG9yIGtleSA9PSBrZXlzLncgdGhlbgoJCS0tIFVwCgkJaWYgbkRpZmZpY3VsdHkgPiAxIHRoZW4KCQkJbkRpZmZpY3VsdHkgPSBuRGlmZmljdWx0eSAtIDEKCQkJZHJhd01lbnUoKQoJCQlkcmF3RnJvbnRlbmQoKQoJCWVuZAoJZWxzZWlmIGtleSA9PSBrZXlzLmRvd24gb3Iga2V5ID09IGtleXMucyB0aGVuCgkJLS0gRG93bgoJCWlmIG5EaWZmaWN1bHR5IDwgMyB0aGVuCgkJCW5EaWZmaWN1bHR5ID0gbkRpZmZpY3VsdHkgKyAxCgkJCWRyYXdNZW51KCkKCQkJZHJhd0Zyb250ZW5kKCkKCQllbmQKCWVsc2VpZiBrZXkgPT0ga2V5cy5lbnRlciB0aGVuCgkJLS0gRW50ZXIKCQlicmVhawoJZW5kCmVuZAoKbG9jYWwgdFNwZWVkcyA9IHsgNSwgMTAsIDI1IH0KblNwZWVkID0gdFNwZWVkc1tuRGlmZmljdWx0eV0KbkludGVydmFsID0gMSAvIG5TcGVlZAoKLS0gR3JvdyB0aGUgc25ha2UgdG8gaXRzIGludGVuZGVkIHNpemUKdGVybS5jbGVhcigpCmRyYXdNZW51KCkKc2NyZWVuW3RhaWxYXVt0YWlsWV0uc25ha2UgPSB0cnVlCndoaWxlIG5FeHRyYUxlbmd0aCA+IDAgZG8KCXVwZGF0ZSgpCmVuZAphZGRGcnVpdCgpCmFkZEZydWl0KCkKCi0tIFBsYXkgdGhlIGdhbWUKbG9jYWwgdGltZXIgPSBvcy5zdGFydFRpbWVyKDApCndoaWxlIGJSdW5uaW5nIGRvCglsb2NhbCBldmVudCwgcDEsIHAyID0gb3MucHVsbEV2ZW50KCkKCWlmIGV2ZW50ID09ICJ0aW1lciIgYW5kIHAxID09IHRpbWVyIHRoZW4KCQl0aW1lciA9IG9zLnN0YXJ0VGltZXIobkludGVydmFsKQoJCXVwZGF0ZSggZmFsc2UgKQoJCgllbHNlaWYgZXZlbnQgPT0gImtleSIgdGhlbgoJCWxvY2FsIGtleSA9IHAxCgkJaWYga2V5ID09IGtleXMudXAgb3Iga2V5ID09IGtleXMudyB0aGVuCgkJCS0tIFVwCgkJCWlmIHlWZWwgPT0gMCB0aGVuCgkJCQlweFZlbCxweVZlbCA9IDAsLTEKCQkJZW5kCgkJZWxzZWlmIGtleSA9PSBrZXlzLmRvd24gb3Iga2V5ID09IGtleXMucyB0aGVuCgkJCS0tIERvd24KCQkJaWYgeVZlbCA9PSAwIHRoZW4KCQkJCXB4VmVsLHB5VmVsID0gMCwxCgkJCWVuZAoJCWVsc2VpZiBrZXkgPT0ga2V5cy5sZWZ0IG9yIGtleSA9PSBrZXlzLmEgdGhlbgoJCQktLSBMZWZ0CgkJCWlmIHhWZWwgPT0gMCB0aGVuCgkJCQlweFZlbCxweVZlbCA9IC0xLDAKCQkJZW5kCgkJCgkJZWxzZWlmIGtleSA9PSBrZXlzLnJpZ2h0IG9yIGtleSA9PSBrZXlzLmQgdGhlbgoJCQktLSBSaWdodAoJCQlpZiB4VmVsID09IDAgdGhlbgoJCQkJcHhWZWwscHlWZWwgPSAxLDAKCQkJZW5kCgkJCgkJZW5kCQoJZW5kCmVuZAoKLS0gRGlzcGxheSB0aGUgZ2FtZW92ZXIgc2NyZWVuCnRlcm0uc2V0VGV4dENvbG91ciggaGVhZGluZ0NvbG91ciApCnByaW50Q2VudHJlZCggbWF0aC5mbG9vcihoLzIpIC0gMiwgIiAgICAgICAgICAgICAgICAgICAiICkKcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgLSAxLCAiIEcgQSBNIEUgICBPIFYgRSBSICIgKQoKdGVybS5zZXRUZXh0Q29sb3VyKCB0ZXh0Q29sb3VyICkKcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAwLCAiICAgICAgICAgICAgICAgICAiICkKcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAxLCAiIEZJTkFMIFNDT1JFICIuLm5TY29yZS4uIiAiICkKcHJpbnRDZW50cmVkKCBtYXRoLmZsb29yKGgvMikgKyAyLCAiICAgICAgICAgICAgICAgICAiICkKdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLndoaXRlICkKCmxvY2FsIHRpbWVyID0gb3Muc3RhcnRUaW1lcigyLjUpCnJlcGVhdAoJbG9jYWwgZSxwID0gb3MucHVsbEV2ZW50KCkKCWlmIGUgPT0gInRpbWVyIiBhbmQgcCA9PSB0aW1lciB0aGVuCgkJdGVybS5zZXRUZXh0Q29sb3VyKCB0ZXh0Q29sb3VyICkKCQlwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSArIDIsICIgUFJFU1MgQU5ZIEtFWSAiICkKCQlwcmludENlbnRyZWQoIG1hdGguZmxvb3IoaC8yKSArIDMsICIgICAgICAgICAgICAgICAiICkKCQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMud2hpdGUgKQoJZW5kCnVudGlsIGUgPT0gImNoYXIiCgp0ZXJtLmNsZWFyKCkKdGVybS5zZXRDdXJzb3JQb3MoMSwxKQoKCQk=","isDir":false,"name":"worm","size":0},"root/programs/gps":{"data":"CmxvY2FsIGZ1bmN0aW9uIHByaW50VXNhZ2UoKQoJcHJpbnQoICJVc2FnZXM6IiApCglwcmludCggImdwcyBob3N0IiApCglwcmludCggImdwcyBob3N0IDx4PiA8eT4gPHo+IiApCglwcmludCggImdwcyBsb2NhdGUiICkKZW5kCgpsb2NhbCB0QXJncyA9IHsgLi4uIH0KaWYgI3RBcmdzIDwgMSB0aGVuCglwcmludFVzYWdlKCkKCXJldHVybgplbmQKCQpsb2NhbCBzQ29tbWFuZCA9IHRBcmdzWzFdCmlmIHNDb21tYW5kID09ICJsb2NhdGUiIHRoZW4KCS0tICJncHMgbG9jYXRlIgoJLS0gSnVzdCBsb2NhdGUgdGhpcyBjb21wdXRlciAodGhpcyB3aWxsIHByaW50IHRoZSByZXN1bHRzKQoJZ3BzLmxvY2F0ZSggMiwgdHJ1ZSApCgkKZWxzZWlmIHNDb21tYW5kID09ICJob3N0IiB0aGVuCgktLSAiZ3BzIGhvc3QiCgktLSBBY3QgYXMgYSBHUFMgaG9zdAoJaWYgcG9ja2V0IHRoZW4KCSAgICBwcmludCggIkdQUyBIb3N0cyBtdXN0IGJlIHN0YXRpb25hcnkiICkKCSAgICByZXR1cm4KCWVuZAoKCS0tIEZpbmQgYSBtb2RlbQoJbG9jYWwgc01vZGVtU2lkZSA9IG5pbAoJZm9yIG4sc1NpZGUgaW4gaXBhaXJzKCBycy5nZXRTaWRlcygpICkgZG8KCQlpZiBwZXJpcGhlcmFsLmdldFR5cGUoIHNTaWRlICkgPT0gIm1vZGVtIiBhbmQgcGVyaXBoZXJhbC5jYWxsKCBzU2lkZSwgImlzV2lyZWxlc3MiICkgdGhlbgkKCQkJc01vZGVtU2lkZSA9IHNTaWRlCgkJCWJyZWFrCgkJZW5kCgllbmQKCglpZiBzTW9kZW1TaWRlID09IG5pbCB0aGVuCgkJcHJpbnQoICJObyB3aXJlbGVzcyBtb2RlbXMgZm91bmQuIDEgcmVxdWlyZWQuIiApCgkJcmV0dXJuCgllbmQKCQoJLS0gT3BlbiBhIGNoYW5uZWwKCWxvY2FsIG1vZGVtID0gcGVyaXBoZXJhbC53cmFwKCBzTW9kZW1TaWRlICkKICAgIHByaW50KCAiT3BlbmluZyBjaGFubmVsIG9uIG1vZGVtICIuLnNNb2RlbVNpZGUgKQogICAgbW9kZW0ub3BlbiggZ3BzLkNIQU5ORUxfR1BTICkKCgktLSBEZXRlcm1pbmUgcG9zaXRpb24KCWxvY2FsIHgseSx6CglpZiAjdEFyZ3MgPj0gNCB0aGVuCgkJLS0gUG9zaXRpb24gaXMgbWFudWFsbHkgc3BlY2lmaWVkCgkJeCA9IHRvbnVtYmVyKHRBcmdzWzJdKQoJCXkgPSB0b251bWJlcih0QXJnc1szXSkKCQl6ID0gdG9udW1iZXIodEFyZ3NbNF0pCgkJaWYgeCA9PSBuaWwgb3IgeSA9PSBuaWwgb3IgeiA9PSBuaWwgdGhlbgoJCQlwcmludFVzYWdlKCkKCQkJcmV0dXJuCgkJZW5kCgkJcHJpbnQoICJQb3NpdGlvbiBpcyAiLi54Li4iLCIuLnkuLiIsIi4ueiApCgllbHNlCgkJLS0gUG9zaXRpb24gaXMgdG8gYmUgZGV0ZXJtaW5lZCB1c2luZyBsb2NhdGUJCQoJCXgseSx6ID0gZ3BzLmxvY2F0ZSggMiwgdHJ1ZSApCgkJaWYgeCA9PSBuaWwgdGhlbgoJCQlwcmludCggIlJ1biBcImdwcyBob3N0IDx4PiA8eT4gPHo+XCIgdG8gc2V0IHBvc2l0aW9uIG1hbnVhbGx5IiApCgkJCWlmIGJDbG9zZUNoYW5uZWwgdGhlbgoJCQkJcHJpbnQoICJDbG9zaW5nIEdQUyBjaGFubmVsIiApCgkJCQltb2RlbS5jbG9zZSggZ3BzLkNIQU5ORUxfR1BTICkKCQkJZW5kCgkJCXJldHVybgoJCWVuZAoJZW5kCgkKCS0tIFNlcnZlIHJlcXVlc3RzIGluZGVmaW5hdGVseQoJbG9jYWwgblNlcnZlZCA9IDAKCXdoaWxlIHRydWUgZG8KCQlsb2NhbCBlLCBwMSwgcDIsIHAzLCBwNCwgcDUgPSBvcy5wdWxsRXZlbnQoICJtb2RlbV9tZXNzYWdlIiApCgkJaWYgZSA9PSAibW9kZW1fbWVzc2FnZSIgdGhlbgoJCQktLSBXZSByZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSBhIG1vZGVtCgkJCWxvY2FsIHNTaWRlLCBzQ2hhbm5lbCwgc1JlcGx5Q2hhbm5lbCwgc01lc3NhZ2UsIG5EaXN0YW5jZSA9IHAxLCBwMiwgcDMsIHA0LCBwNQoJCQlpZiBzU2lkZSA9PSBzTW9kZW1TaWRlIGFuZCBzQ2hhbm5lbCA9PSBncHMuQ0hBTk5FTF9HUFMgYW5kIHNNZXNzYWdlID09ICJQSU5HIiB0aGVuCgkJCQktLSBXZSByZWNlaXZlZCBhIHBpbmcgbWVzc2FnZSBvbiB0aGUgR1BTIGNoYW5uZWwsIHNlbmQgYSByZXNwb25zZQoJCQkJbW9kZW0udHJhbnNtaXQoIHNSZXBseUNoYW5uZWwsIGdwcy5DSEFOTkVMX0dQUywgeyB4LCB5LCB6IH0gKQoJCQkKCQkJCS0tIFByaW50IHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgaGFuZGxlZAoJCQkJblNlcnZlZCA9IG5TZXJ2ZWQgKyAxCgkJCQlpZiBuU2VydmVkID4gMSB0aGVuCgkJCQkJbG9jYWwgeCx5ID0gdGVybS5nZXRDdXJzb3JQb3MoKQoJCQkJCXRlcm0uc2V0Q3Vyc29yUG9zKDEseS0xKQoJCQkJZW5kCgkJCQlwcmludCggblNlcnZlZC4uIiBHUFMgcmVxdWVzdHMgc2VydmVkIiApCgkJCWVuZAoJCWVuZAoJZW5kCgkKICAgIHByaW50KCAiQ2xvc2luZyBjaGFubmVsIiApCiAgICBtb2RlbS5jbG9zZSggZ3BzLkNIQU5ORUxfR1BTICkKCmVsc2UKCS0tICJncHMgc29tZXRoaW5nZWxzZSIKCS0tIEVycm9yCglwcmludFVzYWdlKCkKCQplbmQ=","isDir":false,"name":"gps","size":0},"root/programs/help":{"data":"dEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA+IDAgdGhlbgoJc1RvcGljID0gdEFyZ3NbMV0KZWxzZQoJc1RvcGljID0gImludHJvIgplbmQKCmlmIHNUb3BpYyA9PSAiaW5kZXgiIHRoZW4KCXByaW50KCAiSGVscCB0b3BpY3MgYXZhaWxpYWJsZToiICkKCWxvY2FsIHRUb3BpY3MgPSBoZWxwLnRvcGljcygpCgl0ZXh0dXRpbHMucGFnZWRUYWJ1bGF0ZSggdFRvcGljcyApCglyZXR1cm4KZW5kCgkKbG9jYWwgdyxoID0gdGVybS5nZXRTaXplKCkKbG9jYWwgc0ZpbGUgPSBoZWxwLmxvb2t1cCggc1RvcGljICkKbG9jYWwgZmlsZSA9ICgoc0ZpbGUgfj0gbmlsKSBhbmQgaW8ub3Blbiggc0ZpbGUgKSkgb3IgbmlsCmxvY2FsIG5MaW5lc1ByaW50ZWQgPSAwCmlmIGZpbGUgdGhlbgoJbG9jYWwgc0xpbmUgPSBmaWxlOnJlYWQoKQoJbG9jYWwgbkxpbmVzID0gMAoJd2hpbGUgc0xpbmUgZG8KCQluTGluZXMgPSBuTGluZXMgKyB0ZXh0dXRpbHMucGFnZWRQcmludCggc0xpbmUsIChoLTMpIC0gbkxpbmVzICkKICAgIAlzTGluZSA9IGZpbGU6cmVhZCgpCiAgICBlbmQKCWZpbGU6Y2xvc2UoKQplbHNlCglwcmludCggIk5vIGhlbHAgYXZhaWxhYmxlIiApCmVuZA==","isDir":false,"name":"help","size":0},"root/programs/http":{"children":["pastebin"],"isDir":true,"name":"http","parents":["/root","/root/programs","/root/programs/http"],"size":0},"root/programs/http/pastebin":{"data":"CmxvY2FsIGZ1bmN0aW9uIHByaW50VXNhZ2UoKQogICAgcHJpbnQoICJVc2FnZXM6IiApCiAgICBwcmludCggInBhc3RlYmluIHB1dCA8ZmlsZW5hbWU+IiApCiAgICBwcmludCggInBhc3RlYmluIGdldCA8Y29kZT4gPGZpbGVuYW1lPiIgKQogICAgcHJpbnQoICJwYXN0ZWJpbiBydW4gPGNvZGU+IDxhcmd1bWVudHM+IiApCmVuZAogCmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAyIHRoZW4KICAgIHByaW50VXNhZ2UoKQogICAgcmV0dXJuCmVuZAogCmlmIG5vdCBodHRwIHRoZW4KICAgIHByaW50RXJyb3IoICJQYXN0ZWJpbiByZXF1aXJlcyBodHRwIEFQSSIgKQogICAgcHJpbnRFcnJvciggIlNldCBodHRwX2VuYWJsZSB0byB0cnVlIGluIENvbXB1dGVyQ3JhZnQuY2ZnIiApCiAgICByZXR1cm4KZW5kCiAKbG9jYWwgZnVuY3Rpb24gZ2V0KHBhc3RlKQogICAgd3JpdGUoICJDb25uZWN0aW5nIHRvIHBhc3RlYmluLmNvbS4uLiAiICkKICAgIGxvY2FsIHJlc3BvbnNlID0gaHR0cC5nZXQoCiAgICAgICAgImh0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPSIuLnRleHR1dGlscy51cmxFbmNvZGUoIHBhc3RlICkKICAgICkKICAgICAgICAKICAgIGlmIHJlc3BvbnNlIHRoZW4KICAgICAgICBwcmludCggIlN1Y2Nlc3MuIiApCiAgICAgICAgCiAgICAgICAgbG9jYWwgc1Jlc3BvbnNlID0gcmVzcG9uc2UucmVhZEFsbCgpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQogICAgICAgIHJldHVybiBzUmVzcG9uc2UKICAgIGVsc2UKICAgICAgICBwcmludEVycm9yKCAiRmFpbGVkLiIgKQogICAgZW5kCmVuZAogCmxvY2FsIHNDb21tYW5kID0gdEFyZ3NbMV0KaWYgc0NvbW1hbmQgPT0gInB1dCIgdGhlbgogICAgLS0gVXBsb2FkIGEgZmlsZSB0byBwYXN0ZWJpbi5jb20KICAgIC0tIERldGVybWluZSBmaWxlIHRvIHVwbG9hZAogICAgbG9jYWwgc0ZpbGUgPSB0QXJnc1syXQogICAgbG9jYWwgc1BhdGggPSBzaGVsbC5yZXNvbHZlKCBzRmlsZSApCiAgICBpZiBub3QgZnMuZXhpc3RzKCBzUGF0aCApIG9yIGZzLmlzRGlyKCBzUGF0aCApIHRoZW4KICAgICAgICBwcmludCggIk5vIHN1Y2ggZmlsZSIgKQogICAgICAgIHJldHVybgogICAgZW5kCiAgICAKICAgIC0tIFJlYWQgaW4gdGhlIGZpbGUKICAgIGxvY2FsIHNOYW1lID0gZnMuZ2V0TmFtZSggc1BhdGggKQogICAgbG9jYWwgZmlsZSA9IGZzLm9wZW4oIHNQYXRoLCAiciIgKQogICAgbG9jYWwgc1RleHQgPSBmaWxlLnJlYWRBbGwoKQogICAgZmlsZS5jbG9zZSgpCiAgICAKICAgIC0tIFBPU1QgdGhlIGNvbnRlbnRzIHRvIHBhc3RlYmluCiAgICB3cml0ZSggIkNvbm5lY3RpbmcgdG8gcGFzdGViaW4uY29tLi4uICIgKQogICAgbG9jYWwga2V5ID0gIjBlYzJlYjI1YjYxNjZjMGMyN2EzOTRhZTExOGFkODI5IgogICAgbG9jYWwgcmVzcG9uc2UgPSBodHRwLnBvc3QoCiAgICAgICAgImh0dHA6Ly9wYXN0ZWJpbi5jb20vYXBpL2FwaV9wb3N0LnBocCIsIAogICAgICAgICJhcGlfb3B0aW9uPXBhc3RlJiIuLgogICAgICAgICJhcGlfZGV2X2tleT0iLi5rZXkuLiImIi4uCiAgICAgICAgImFwaV9wYXN0ZV9mb3JtYXQ9bHVhJiIuLgogICAgICAgICJhcGlfcGFzdGVfbmFtZT0iLi50ZXh0dXRpbHMudXJsRW5jb2RlKHNOYW1lKS4uIiYiLi4KICAgICAgICAiYXBpX3Bhc3RlX2NvZGU9Ii4udGV4dHV0aWxzLnVybEVuY29kZShzVGV4dCkKICAgICkKICAgICAgICAKICAgIGlmIHJlc3BvbnNlIHRoZW4KICAgICAgICBwcmludCggIlN1Y2Nlc3MuIiApCiAgICAgICAgCiAgICAgICAgbG9jYWwgc1Jlc3BvbnNlID0gcmVzcG9uc2UucmVhZEFsbCgpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQogICAgICAgICAgICAgICAgCiAgICAgICAgbG9jYWwgc0NvZGUgPSBzdHJpbmcubWF0Y2goIHNSZXNwb25zZSwgIlteL10rJCIgKQogICAgICAgIHByaW50KCAiVXBsb2FkZWQgYXMgIi4uc1Jlc3BvbnNlICkKICAgICAgICBwcmludCggIlJ1biBcInBhc3RlYmluIGdldCAiLi5zQ29kZS4uIlwiIHRvIGRvd25sb2FkIGFueXdoZXJlIiApCiAKICAgIGVsc2UKICAgICAgICBwcmludCggIkZhaWxlZC4iICkKICAgIGVuZAogICAgCmVsc2VpZiBzQ29tbWFuZCA9PSAiZ2V0IiB0aGVuCiAgICAtLSBEb3dubG9hZCBhIGZpbGUgZnJvbSBwYXN0ZWJpbi5jb20KICAgIGlmICN0QXJncyA8IDMgdGhlbgogICAgICAgIHByaW50VXNhZ2UoKQogICAgICAgIHJldHVybgogICAgZW5kCiAKICAgIC0tIERldGVybWluZSBmaWxlIHRvIGRvd25sb2FkCiAgICBsb2NhbCBzQ29kZSA9IHRBcmdzWzJdCiAgICBsb2NhbCBzRmlsZSA9IHRBcmdzWzNdCiAgICBsb2NhbCBzUGF0aCA9IHNoZWxsLnJlc29sdmUoIHNGaWxlICkKICAgIGlmIGZzLmV4aXN0cyggc1BhdGggKSB0aGVuCiAgICAgICAgcHJpbnQoICJGaWxlIGFscmVhZHkgZXhpc3RzIiApCiAgICAgICAgcmV0dXJuCiAgICBlbmQKICAgIAogICAgLS0gR0VUIHRoZSBjb250ZW50cyBmcm9tIHBhc3RlYmluCiAgICBsb2NhbCByZXMgPSBnZXQoc0NvZGUpCiAgICBpZiByZXMgdGhlbiAgICAgICAgCiAgICAgICAgbG9jYWwgZmlsZSA9IGZzLm9wZW4oIHNQYXRoLCAidyIgKQogICAgICAgIGZpbGUud3JpdGUoIHJlcyApCiAgICAgICAgZmlsZS5jbG9zZSgpCiAgICAgICAgCiAgICAgICAgcHJpbnQoICJEb3dubG9hZGVkIGFzICIuLnNGaWxlICkKICAgIGVuZCAKZWxzZWlmIHNDb21tYW5kID09ICJydW4iIHRoZW4KICAgIGxvY2FsIHNDb2RlID0gdEFyZ3NbMl0KIAogICAgbG9jYWwgcmVzID0gZ2V0KHNDb2RlKQogICAgaWYgcmVzIHRoZW4KICAgICAgICBsb2NhbCBmdW5jLCBlcnIgPSBsb2Fkc3RyaW5nKHJlcykKICAgICAgICBpZiBub3QgZnVuYyB0aGVuCiAgICAgICAgICAgIHByaW50RXJyb3IoIGVyciApCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGVuZAogICAgICAgIHNldGZlbnYoZnVuYywgZ2V0ZmVudigpKQogICAgICAgIGxvY2FsIHN1Y2Nlc3MsIG1zZyA9IHBjYWxsKGZ1bmMsIHVucGFjayh0QXJncywgMykpCiAgICAgICAgaWYgbm90IHN1Y2Nlc3MgdGhlbgogICAgICAgICAgICBwcmludEVycm9yKCBtc2cgKQogICAgICAgIGVuZAogICAgZW5kCmVsc2UKICAgIHByaW50VXNhZ2UoKQogICAgcmV0dXJuCmVuZA==","isDir":false,"name":"pastebin","size":0},"root/programs/id":{"data":"CmxvY2FsIHNEcml2ZSA9IG5pbApsb2NhbCB0QXJncyA9IHsgLi4uIH0KaWYgI3RBcmdzID4gMCB0aGVuCglzRHJpdmUgPSB0b3N0cmluZyggdEFyZ3NbMV0gKQplbmQKCmlmIHNEcml2ZSA9PSBuaWwgdGhlbgoJcHJpbnQoICJUaGlzIGlzIGNvbXB1dGVyICMiLi5vcy5nZXRDb21wdXRlcklEKCkgKQoJCglsb2NhbCBsYWJlbCA9IG9zLmdldENvbXB1dGVyTGFiZWwoKQoJaWYgbGFiZWwgdGhlbgoJCXByaW50KCAiVGhpcyBjb21wdXRlciBpcyBsYWJlbGxlZCBcIiIuLmxhYmVsLi4iXCIiICkKCWVuZAoKZWxzZQoJbG9jYWwgYkRhdGEgPSBkaXNrLmhhc0RhdGEoIHNEcml2ZSApCglpZiBub3QgYkRhdGEgdGhlbgoJCXByaW50KCAiTm8gZGlzayBpbiBkcml2ZSAiLi5zRHJpdmUgKQoJCXJldHVybgoJZW5kCgkKCXByaW50KCAiVGhlIGRpc2sgaXMgIyIuLmRpc2suZ2V0SUQoIHNEcml2ZSApICkKCglsb2NhbCBsYWJlbCA9IGRpc2suZ2V0TGFiZWwoIHNEcml2ZSApCglpZiBsYWJlbCB0aGVuCgkJcHJpbnQoICJUaGUgZGlzayBpcyBsYWJlbGxlZCBcIiIuLmxhYmVsLi4iXCIiICkKCWVuZAplbmQK","isDir":false,"name":"id","size":0},"root/programs/label":{"data":"CmxvY2FsIGZ1bmN0aW9uIHByaW50VXNhZ2UoKQoJcHJpbnQoICJVc2FnZXM6IiApCglwcmludCggImxhYmVsIGdldCIgKQoJcHJpbnQoICJsYWJlbCBnZXQgPGRyaXZlPiIgKQoJcHJpbnQoICJsYWJlbCBzZXQgPHRleHQ+IiApCglwcmludCggImxhYmVsIHNldCA8ZHJpdmU+IDx0ZXh0PiIgKQoJcHJpbnQoICJsYWJlbCBjbGVhciIgKQoJcHJpbnQoICJsYWJlbCBjbGVhciA8ZHJpdmU+IiApCmVuZAoKbG9jYWwgZnVuY3Rpb24gY2hlY2tEcml2ZSggc0RyaXZlICkKICAgIGlmIHBlcmlwaGVyYWwuZ2V0VHlwZSggc0RyaXZlICkgPT0gImRyaXZlIiB0aGVuCiAgICAgICAgLS0gQ2hlY2sgdGhlIGRpc2sgZXhpc3RzCiAgICAgICAgbG9jYWwgYkRhdGEgPSBkaXNrLmhhc0RhdGEoIHNEcml2ZSApCiAgICAgICAgaWYgbm90IGJEYXRhIHRoZW4KICAgICAgICAgICAgcHJpbnQoICJObyBkaXNrIGluICIuLnNEcml2ZS4uIiBkcml2ZSIgKQogICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICBlbmQKICAgIGVsc2UKCSAgICBwcmludCggIk5vIGRpc2sgZHJpdmUgbmFtZWQgIi4uc0RyaXZlICkKICAgICAgICByZXR1cm4gZmFsc2UKCWVuZAoJcmV0dXJuIHRydWUKZW5kCgpsb2NhbCBmdW5jdGlvbiBnZXQoIHNEcml2ZSApCglpZiBzRHJpdmUgfj0gbmlsIHRoZW4KCSAgICBpZiBjaGVja0RyaXZlKCBzRHJpdmUgKSB0aGVuCiAgICAgICAgICAgIGxvY2FsIHNMYWJlbCA9IGRpc2suZ2V0TGFiZWwoIHNEcml2ZSApCiAgICAgICAgICAgIGlmIHNMYWJlbCB0aGVuCiAgICAgICAgICAgICAgICBwcmludCggIkRpc2sgbGFiZWwgaXMgXCIiLi5zTGFiZWwuLiJcIiIgKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludCggIk5vIERpc2sgbGFiZWwiICkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCgllbHNlCgkJbG9jYWwgc0xhYmVsID0gb3MuZ2V0Q29tcHV0ZXJMYWJlbCgpCgkJaWYgc0xhYmVsIHRoZW4KCQkJcHJpbnQoICJDb21wdXRlciBsYWJlbCBpcyBcIiIuLnNMYWJlbC4uIlwiIiApCgkJZWxzZQoJCQlwcmludCggIk5vIENvbXB1dGVyIGxhYmVsIiApCgkJZW5kCgllbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBzZXQoIHNEcml2ZSwgc1RleHQgKQoJaWYgc0RyaXZlIH49IG5pbCB0aGVuCgkgICAgaWYgY2hlY2tEcml2ZSggc0RyaXZlICkgdGhlbgogICAgICAgICAgICBkaXNrLnNldExhYmVsKCBzRHJpdmUsIHNUZXh0ICkKICAgICAgICAgICAgbG9jYWwgc0xhYmVsID0gZGlzay5nZXRMYWJlbCggc0RyaXZlICkKICAgICAgICAgICAgaWYgc0xhYmVsIHRoZW4KICAgICAgICAgICAgICAgIHByaW50KCAiRGlzayBsYWJlbCBzZXQgdG8gXCIiLi5zTGFiZWwuLiJcIiIgKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludCggIkRpc2sgbGFiZWwgY2xlYXJlZCIgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKCWVsc2UKCQlvcy5zZXRDb21wdXRlckxhYmVsKCBzVGV4dCApCgkJbG9jYWwgc0xhYmVsID0gb3MuZ2V0Q29tcHV0ZXJMYWJlbCgpCgkJaWYgc0xhYmVsIHRoZW4KCQkJcHJpbnQoICJDb21wdXRlciBsYWJlbCBzZXQgdG8gXCIiLi5zTGFiZWwuLiJcIiIgKQoJCWVsc2UKCQkJcHJpbnQoICJDb21wdXRlciBsYWJlbCBjbGVhcmVkIiApCgkJZW5kCgllbmQKZW5kCgpsb2NhbCB0QXJncyA9IHsgLi4uIH0KbG9jYWwgc0NvbW1hbmQgPSB0QXJnc1sxXQppZiBzQ29tbWFuZCA9PSAiZ2V0IiB0aGVuCiAgICAtLSBHZXQgYSBsYWJlbAogICAgaWYgI3RBcmdzID09IDEgdGhlbgogICAgICAgIGdldCggbmlsICkKICAgIGVsc2VpZiAjdEFyZ3MgPT0gMiB0aGVuCiAgICAgICAgZ2V0KCB0QXJnc1syXSApCiAgICBlbHNlCiAgICAgICAgcHJpbnRVc2FnZSgpCiAgICBlbmQKZWxzZWlmIHNDb21tYW5kID09ICJzZXQiIHRoZW4KICAgIC0tIFNldCBhIGxhYmVsCiAgICBpZiAjdEFyZ3MgPT0gMiB0aGVuCiAgICAgICAgc2V0KCBuaWwsIHRBcmdzWzJdICkKICAgIGVsc2VpZiAjdEFyZ3MgPT0gMyB0aGVuCiAgICAgICAgc2V0KCB0QXJnc1syXSwgdEFyZ3NbM10gKQogICAgZWxzZQogICAgICAgIHByaW50VXNhZ2UoKQogICAgZW5kCmVsc2VpZiBzQ29tbWFuZCA9PSAiY2xlYXIiIHRoZW4KICAgIC0tIENsZWFyIGEgbGFiZWwKICAgIGlmICN0QXJncyA9PSAxIHRoZW4KICAgICAgICBzZXQoIG5pbCwgbmlsICkKICAgIGVsc2VpZiAjdEFyZ3MgPT0gMiB0aGVuCiAgICAgICAgc2V0KCB0QXJnc1syXSwgbmlsICkKICAgIGVsc2UKICAgICAgICBwcmludFVzYWdlKCkKICAgIGVuZAplbHNlCiAgICBwcmludFVzYWdlKCkKZW5k","isDir":false,"name":"label","size":0},"root/programs/list":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQoKLS0gR2V0IGFsbCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeQpsb2NhbCBzRGlyID0gc2hlbGwuZGlyKCkKaWYgdEFyZ3NbMV0gfj0gbmlsIHRoZW4KCXNEaXIgPSBzaGVsbC5yZXNvbHZlKCB0QXJnc1sxXSApCmVuZAoKLS0gU29ydCBpbnRvIGRpcnMvZmlsZXMsIGFuZCBjYWxjdWxhdGUgY29sdW1uIGNvdW50CmxvY2FsIHRBbGwgPSBmcy5saXN0KCBzRGlyICkKbG9jYWwgdEZpbGVzID0ge30KbG9jYWwgdERpcnMgPSB7fQoKZm9yIG4sIHNJdGVtIGluIHBhaXJzKCB0QWxsICkgZG8KCWlmIHN0cmluZy5zdWIoIHNJdGVtLCAxLCAxICkgfj0gIi4iIHRoZW4KCQlsb2NhbCBzUGF0aCA9IGZzLmNvbWJpbmUoIHNEaXIsIHNJdGVtICkKCQlpZiBmcy5pc0Rpciggc1BhdGggKSB0aGVuCgkJCXRhYmxlLmluc2VydCggdERpcnMsIHNJdGVtICkKCQllbHNlCgkJCXRhYmxlLmluc2VydCggdEZpbGVzLCBzSXRlbSApCgkJZW5kCgllbmQKZW5kCnRhYmxlLnNvcnQoIHREaXJzICkKdGFibGUuc29ydCggdEZpbGVzICkKCmlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCgl0ZXh0dXRpbHMucGFnZWRUYWJ1bGF0ZSggY29sb3JzLmdyZWVuLCB0RGlycywgY29sb3JzLndoaXRlLCB0RmlsZXMgKQplbHNlCgl0ZXh0dXRpbHMucGFnZWRUYWJ1bGF0ZSggdERpcnMsIHRGaWxlcyApCmVuZA==","isDir":false,"name":"list","size":0},"root/programs/lua":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPiAwIHRoZW4KCXByaW50KCAiVGhpcyBpcyBhbiBpbnRlcmFjdGl2ZSBMdWEgcHJvbXB0LiIgKQoJcHJpbnQoICJUbyBydW4gYSBsdWEgcHJvZ3JhbSwganVzdCB0eXBlIGl0cyBuYW1lLiIgKQoJcmV0dXJuCmVuZAoKbG9jYWwgYlJ1bm5pbmcgPSB0cnVlCmxvY2FsIHRDb21tYW5kSGlzdG9yeSA9IHt9CmxvY2FsIHRFbnYgPSB7CglbImV4aXQiXSA9IGZ1bmN0aW9uKCkKCQliUnVubmluZyA9IGZhbHNlCgllbmQsCglbIl9lY2hvIl0gPSBmdW5jdGlvbiggLi4uICkKCSAgICByZXR1cm4gLi4uCgllbmQsCn0Kc2V0bWV0YXRhYmxlKCB0RW52LCB7IF9faW5kZXggPSBnZXRmZW52KCkgfSApCgppZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLnllbGxvdyApCmVuZApwcmludCggIkludGVyYWN0aXZlIEx1YSBwcm9tcHQuIiApCnByaW50KCAiQ2FsbCBleGl0KCkgdG8gZXhpdC4iICkKdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLndoaXRlICkKCndoaWxlIGJSdW5uaW5nIGRvCgktLWlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCgktLQl0ZXJtLnNldFRleHRDb2xvdXIoIGNvbG91cnMueWVsbG93ICkKCS0tZW5kCgl3cml0ZSggImx1YT4gIiApCgktLXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSApCgkKCWxvY2FsIHMgPSByZWFkKCBuaWwsIHRDb21tYW5kSGlzdG9yeSApCgl0YWJsZS5pbnNlcnQoIHRDb21tYW5kSGlzdG9yeSwgcyApCgkKCWxvY2FsIG5Gb3JjZVByaW50ID0gMAoJbG9jYWwgZnVuYywgZSA9IGxvYWRzdHJpbmcoIHMsICJsdWEiICkKCWxvY2FsIGZ1bmMyLCBlMiA9IGxvYWRzdHJpbmcoICJyZXR1cm4gX2VjaG8oIi4ucy4uIik7IiwgImx1YSIgKQoJaWYgbm90IGZ1bmMgdGhlbgoJCWlmIGZ1bmMyIHRoZW4KCQkJZnVuYyA9IGZ1bmMyCgkJCWUgPSBuaWwKCQkJbkZvcmNlUHJpbnQgPSAxCgkJZW5kCgllbHNlCgkJaWYgZnVuYzIgdGhlbgoJCQlmdW5jID0gZnVuYzIKCQllbmQKCWVuZAoJCglpZiBmdW5jIHRoZW4KICAgICAgICBzZXRmZW52KCBmdW5jLCB0RW52ICkKICAgICAgICBsb2NhbCB0UmVzdWx0cyA9IHsgcGNhbGwoIGZ1bmMgKSB9CiAgICAgICAgaWYgdFJlc3VsdHNbMV0gdGhlbgogICAgICAgIAlsb2NhbCBuID0gMQogICAgICAgIAl3aGlsZSAodFJlc3VsdHNbbiArIDFdIH49IG5pbCkgb3IgKG4gPD0gbkZvcmNlUHJpbnQpIGRvCiAgICAgICAgCSAgICBsb2NhbCB2YWx1ZSA9IHRSZXN1bHRzWyBuICsgMSBdCiAgICAgICAgCSAgICBpZiB0eXBlKCB2YWx1ZSApID09ICJ0YWJsZSIgdGhlbgogICAgICAgICAgICAJICAgIGxvY2FsIG9rLCBzZXJpYWxpc2VkID0gcGNhbGwoIHRleHR1dGlscy5zZXJpYWxpc2UsIHZhbHVlICkKICAgICAgICAgICAgCSAgICBpZiBvayB0aGVuCiAgICAgICAgICAgIAkgICAgICAgIHByaW50KCBzZXJpYWxpc2VkICkKICAgICAgICAgICAgCSAgICBlbHNlCiAgICAgICAgICAgIAkgICAgICAgIHByaW50KCB0b3N0cmluZyggdmFsdWUgKSApCiAgICAgICAgICAgIAkgICAgZW5kCiAgICAgICAgICAgIAllbHNlCiAgICAgICAgICAgIAkgICAgcHJpbnQoIHRvc3RyaW5nKCB2YWx1ZSApICkKICAgICAgICAgICAgCWVuZAogICAgICAgIAkJbiA9IG4gKyAxCiAgICAgICAgCWVuZAogICAgICAgIGVsc2UKICAgICAgICAJcHJpbnRFcnJvciggdFJlc3VsdHNbMl0gKQogICAgICAgIGVuZAogICAgZWxzZQogICAgCXByaW50RXJyb3IoIGUgKQogICAgZW5kCiAgICAKZW5k","isDir":false,"name":"lua","size":0},"root/programs/mkdir":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA8IDEgdGhlbgoJcHJpbnQoICJVc2FnZTogbWtkaXIgPHBhdGg+IiApCglyZXR1cm4KZW5kCgpsb2NhbCBzTmV3RGlyID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMV0gKQpmcy5tYWtlRGlyKCBzTmV3RGlyICkK","isDir":false,"name":"mkdir","size":0},"root/programs/monitor":{"data":"CmZ1bmN0aW9uIHByaW50VXNhZ2UoKQoJcHJpbnQoICJVc2FnZTogbW9uaXRvciA8bmFtZT4gPHByb2dyYW0+IDxhcmd1bWVudHM+IiApCglyZXR1cm4KZW5kCgpsb2NhbCB0QXJncyA9IHsgLi4uIH0KaWYgI3RBcmdzIDwgMiB0aGVuCglwcmludFVzYWdlKCkKCXJldHVybgplbmQKCmxvY2FsIHNOYW1lID0gdEFyZ3NbMV0KaWYgcGVyaXBoZXJhbC5nZXRUeXBlKCBzTmFtZSApIH49ICJtb25pdG9yIiB0aGVuCglwcmludCggIk5vIG1vbml0b3IgbmFtZWQgIi4uIHNOYW1lICkKCXJldHVybgplbmQKCmxvY2FsIHNQcm9ncmFtID0gdEFyZ3NbMl0KbG9jYWwgc1BhdGggPSBzaGVsbC5yZXNvbHZlUHJvZ3JhbSggc1Byb2dyYW0gKQppZiBzUGF0aCA9PSBuaWwgdGhlbgoJcHJpbnQoICJObyBzdWNoIHByb2dyYW06ICIuLnNQcm9ncmFtICkKCXJldHVybgplbmQKCnByaW50KCAiUnVubmluZyAiLi5zUHJvZ3JhbS4uIiBvbiBtb25pdG9yICIuLnNOYW1lICkKCmxvY2FsIG1vbml0b3IgPSBwZXJpcGhlcmFsLndyYXAoIHNOYW1lICkKbG9jYWwgcHJldmlvdXNUZXJtID0gdGVybS5yZWRpcmVjdCggbW9uaXRvciApCgpsb2NhbCBjbyA9IGNvcm91dGluZS5jcmVhdGUoIGZ1bmN0aW9uKCkKICAgIHNoZWxsLnJ1biggc1Byb2dyYW0sIHVucGFjayggdEFyZ3MsIDMgKSApCmVuZCApCgpsb2NhbCBmdW5jdGlvbiByZXN1bWUoIC4uLiApCiAgICBsb2NhbCBvaywgcGFyYW0gPSBjb3JvdXRpbmUucmVzdW1lKCBjbywgLi4uICkKICAgIGlmIG5vdCBvayB0aGVuCiAgICAJcHJpbnRFcnJvciggcGFyYW0gKQogICAgZW5kCiAgICByZXR1cm4gcGFyYW0KZW5kCgpsb2NhbCBvaywgcGFyYW0gPSBwY2FsbCggZnVuY3Rpb24oKQoJbG9jYWwgc0ZpbHRlciA9IHJlc3VtZSgpCgl3aGlsZSBjb3JvdXRpbmUuc3RhdHVzKCBjbyApIH49ICJkZWFkIiBkbwoJCWxvY2FsIHRFdmVudCA9IHsgb3MucHVsbEV2ZW50UmF3KCkgfQoJCWlmIHNGaWx0ZXIgPT0gbmlsIG9yIHRFdmVudFsxXSA9PSBzRmlsdGVyIG9yIHRFdmVudFsxXSA9PSAidGVybWluYXRlIiB0aGVuCgkJCXNGaWx0ZXIgPSByZXN1bWUoIHVucGFjayggdEV2ZW50ICkgKQoJCWVuZAoJCWlmIGNvcm91dGluZS5zdGF0dXMoIGNvICkgfj0gImRlYWQiIGFuZCAoc0ZpbHRlciA9PSBuaWwgb3Igc0ZpbHRlciA9PSAibW91c2VfY2xpY2siKSB0aGVuCgkJCWlmIHRFdmVudFsxXSA9PSAibW9uaXRvcl90b3VjaCIgYW5kIHRFdmVudFsyXSA9PSBzTmFtZSB0aGVuCgkJCQlzRmlsdGVyID0gcmVzdW1lKCAibW91c2VfY2xpY2siLCAxLCB1bnBhY2soIHRFdmVudCwgMyApICkKCQkJZW5kCgkJZW5kCgkJaWYgY29yb3V0aW5lLnN0YXR1cyggY28gKSB+PSAiZGVhZCIgYW5kIChzRmlsdGVyID09IG5pbCBvciBzRmlsdGVyID09ICJ0ZXJtX3Jlc2l6ZSIpIHRoZW4KCQkJaWYgdEV2ZW50WzFdID09ICJtb25pdG9yX3Jlc2l6ZSIgYW5kIHRFdmVudFsyXSA9PSBzTmFtZSB0aGVuCgkJCQlzRmlsdGVyID0gcmVzdW1lKCAidGVybV9yZXNpemUiICkKCQkJZW5kCgkJZW5kCgllbmQKZW5kICkKCnRlcm0ucmVkaXJlY3QoIHByZXZpb3VzVGVybSApCmlmIG5vdCBvayB0aGVuCglwcmludEVycm9yKCBwYXJhbSApCmVuZAoJ","isDir":false,"name":"monitor","size":0},"root/programs/move":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAyIHRoZW4KCXByaW50KCAiVXNhZ2U6IG12IDxzb3VyY2U+IDxkZXN0aW5hdGlvbj4iICkKCXJldHVybgplbmQKCmxvY2FsIHNTb3VyY2UgPSBzaGVsbC5yZXNvbHZlKCB0QXJnc1sxXSApCmxvY2FsIHNEZXN0ID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMl0gKQpsb2NhbCB0RmlsZXMgPSBmcy5maW5kKCBzU291cmNlICkKaWYgI3RGaWxlcyA+IDAgdGhlbgogICAgZm9yIG4sc0ZpbGUgaW4gaXBhaXJzKCB0RmlsZXMgKSBkbwogICAgICAgIGlmIGZzLmlzRGlyKCBzRGVzdCApIHRoZW4KICAgICAgICAgICAgZnMubW92ZSggc0ZpbGUsIGZzLmNvbWJpbmUoIHNEZXN0LCBmcy5nZXROYW1lKHNGaWxlKSApICkKICAgICAgICBlbHNlaWYgI3RGaWxlcyA9PSAxIHRoZW4KICAgICAgICAgICAgZnMubW92ZSggc0ZpbGUsIHNEZXN0ICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50RXJyb3IoICJDYW5ub3Qgb3ZlcndyaXRlIGZpbGUgbXVsdGlwbGUgdGltZXMiICkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZW5kCiAgICBlbmQKZWxzZQogICAgcHJpbnRFcnJvciggIk5vIG1hdGNoaW5nIGZpbGVzIiApCmVuZA==","isDir":false,"name":"move","size":0},"root/programs/pocket":{"children":["falling"],"isDir":true,"name":"pocket","parents":["/root","/root/programs","/root/programs/pocket"],"size":0},"root/programs/pocket/falling":{"data":"LS1bWwpGYWxsaW5nIC0gQmFzZWQgb24gVGV0cmlzIGJ5IEFsZXhleSBQYWppdG5vdgpUaGlzIHZlcnNpb24gd3JpdHRlbiBieSBHb3BoZXIsIGF0IHRoZSByZXF1ZXN0IG9mIERhbjIwMCwgZm9yCkNvbXB1dGVyQ3JhZnQgdjEuNi4gTm8gcGFydGljdWxhciByaWdodHMgYXJlIHJlc2VydmVkLgotLV1dCgpsb2NhbCBmdW5jdGlvbiBjb2xvcmFzcyhjLGJ3KQogIHJldHVybiB0ZXJtLmlzQ29sb3IoKSBhbmQgYyBvciBidwplbmQKCmxvY2FsIGJsb2NrX3MxPSB7CiAgICB7CiAgICAgIHsgMSwwLDAsMCwgfSwKICAgICAgeyAxLDEsMCwwLCB9LAogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwwLDAsMCwgfSwKICAgICAgeyAwLDEsMSwwLCB9LAogICAgICB7IDEsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICBjaD1jb2xvcmFzcygiICAiLCJ7fSIpLAogICAgZmc9Y29sb3Jhc3MoY29sb3JzLmJsdWUsY29sb3JzLmJsYWNrKSwKICAgIGJnPWNvbG9yYXNzKGNvbG9ycy5jeWFuLGNvbG9ycy53aGl0ZSksCiAgfQpsb2NhbCBibG9ja19zMj0gewogICAgewogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMSwxLDAsMCwgfSwKICAgICAgeyAxLDAsMCwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgewogICAgICB7IDAsMCwwLDAsIH0sCiAgICAgIHsgMSwxLDAsMCwgfSwKICAgICAgeyAwLDEsMSwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgY2g9Y29sb3Jhc3MoIiAgIiwie30iKSwKICAgIGZnPWNvbG9yYXNzKGNvbG9ycy5ncmVlbixjb2xvcnMuYmxhY2spLAogICAgYmc9Y29sb3Jhc3MoY29sb3JzLmxpbWUsY29sb3JzLndoaXRlKSwKICB9CmxvY2FsIGJsb2NrX2xpbmUgPSB7CiAgICB7CiAgICAgIHsgMCwxLDAsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMCwxLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwwLDAsMCwgfSwKICAgICAgeyAxLDEsMSwxLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICBjaD1jb2xvcmFzcygiICAiLCJbXSIpLAogICAgZmc9Y29sb3Jhc3MoY29sb3JzLnBpbmssY29sb3JzLmJsYWNrKSwKICAgIGJnPWNvbG9yYXNzKGNvbG9ycy5yZWQsY29sb3JzLndoaXRlKSwKICB9CmxvY2FsIGJsb2NrX3NxdWFyZSA9IHsKICAgIHsKICAgICAgeyAxLDEsMCwwLCB9LAogICAgICB7IDEsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgICAgeyAwLDAsMCwwLCB9LAogICAgfSwKICAgIGNoPWNvbG9yYXNzKCIgICIsIltdIiksCiAgICBmZz1jb2xvcmFzcyhjb2xvcnMubGlnaHRCbHVlLGNvbG9ycy5ibGFjayksCiAgICBiZz1jb2xvcmFzcyhjb2xvcnMuYmx1ZSxjb2xvcnMud2hpdGUpLAogIH0KbG9jYWwgYmxvY2tfTDEgPSB7CiAgICB7CiAgICAgIHsgMSwxLDAsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwwLDAsMCwgfSwKICAgICAgeyAxLDEsMSwwLCB9LAogICAgICB7IDEsMCwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwxLDAsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMSwxLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwwLDEsMCwgfSwKICAgICAgeyAxLDEsMSwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICBjaD1jb2xvcmFzcygiICAiLCIoKSIpLAogICAgZmc9Y29sb3Jhc3MoY29sb3JzLm9yYW5nZSxjb2xvcnMuYmxhY2spLAogICAgYmc9Y29sb3Jhc3MoY29sb3JzLnllbGxvdyxjb2xvcnMud2hpdGUpLAogIH0KbG9jYWwgYmxvY2tfTDIgPSB7CiAgICB7CiAgICAgIHsgMCwxLDAsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDEsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwwLDAsMCwgfSwKICAgICAgeyAxLDEsMSwwLCB9LAogICAgICB7IDAsMCwxLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMCwxLDEsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICB7CiAgICAgIHsgMSwwLDAsMCwgfSwKICAgICAgeyAxLDEsMSwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICAgIHsgMCwwLDAsMCwgfSwKICAgIH0sCiAgICBjaD1jb2xvcmFzcygiICAiLCIoKSIpLAogICAgZmc9Y29sb3Jhc3MoY29sb3JzLmJyb3duLGNvbG9ycy5ibGFjayksCiAgICBiZz1jb2xvcmFzcyhjb2xvcnMub3JhbmdlLGNvbG9ycy53aGl0ZSksCiAgfQpsb2NhbCBibG9ja19UID0gewogICAgewogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMSwxLDAsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgewogICAgICB7IDAsMCwwLDAsIH0sCiAgICAgIHsgMSwxLDEsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgewogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMCwxLDEsMCwgfSwKICAgICAgeyAwLDEsMCwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgewogICAgICB7IDAsMSwwLDAsIH0sCiAgICAgIHsgMSwxLDEsMCwgfSwKICAgICAgeyAwLDAsMCwwLCB9LAogICAgICB7IDAsMCwwLDAsIH0sCiAgICB9LAogICAgY2g9Y29sb3Jhc3MoIiAgIiwiPD4iKSwKICAgIGZnPWNvbG9yYXNzKGNvbG9ycy5jeWFuLGNvbG9ycy5ibGFjayksCiAgICBiZz1jb2xvcmFzcyhjb2xvcnMucHVycGxlLGNvbG9ycy53aGl0ZSksCiAgfQoKbG9jYWwgYmxvY2tzPXsgYmxvY2tfbGluZSwgYmxvY2tfc3F1YXJlLCBibG9ja19zMSwgYmxvY2tfczIsIGJsb2NrX0wxLCBibG9ja19MMiwgYmxvY2tfVH0KCmxvY2FsIHBvaW50cz17NCwxMCwzMCwxMjB9Cgpsb2NhbCBmdW5jdGlvbiBscGFkKHRleHQsYW10KQogIHRleHQ9dG9zdHJpbmcodGV4dCkKICByZXR1cm4gc3RyaW5nLnJlcCgiICIsYW10LSN0ZXh0KS4udGV4dAplbmQKCmxvY2FsIHdpZHRoLGhlaWdodD10ZXJtLmdldFNpemUoKQoKaWYgaGVpZ2h0PDE5IG9yIHdpZHRoPDI2IHRoZW4KICBwcmludCgiWW91ciBzY3JlZW4gaXMgdG9vIHNtYWxsIHRvIHBsYXkgOigiKQogIHJldHVybgplbmQKCgpsb2NhbCBzcGVlZHNCeUxldmVsPXsKICAxLjIsCiAgMS4wLAogICAuOCwKICAgLjY1LAogICAuNSwKICAgLjQsCiAgIC4zLAogICAuMjUsCiAgIC4yLAogICAuMTUsCiAgIC4xLAogICAuMDUsfQoKbG9jYWwgbGV2ZWw9MQoKbG9jYWwgZnVuY3Rpb24gcGxheUdhbWUoKQogIGxvY2FsIHNjb3JlPTAKICBsb2NhbCBsaW5lcz0wCiAgbG9jYWwgaW5pdGlhbExldmVsPWxldmVsCiAgbG9jYWwgbmV4dD1ibG9ja3NbbWF0aC5yYW5kb20oMSwjYmxvY2tzKV0KCiAgbG9jYWwgcGl0PXt9CgoKICBsb2NhbCBoZWlnaHRBZGp1c3Q9MAoKICBpZiBoZWlnaHQ8PTE5IHRoZW4KICAgIGhlaWdodEFkanVzdD0xCiAgZW5kCgoKCiAgbG9jYWwgZnVuY3Rpb24gZHJhd1NjcmVlbigpCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcnMud2hpdGUpCiAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcnMuYmxhY2spCiAgICB0ZXJtLmNsZWFyKCkKCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcnMuYmxhY2spCiAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcmFzcyhjb2xvcnMubGlnaHRHcmF5LCBjb2xvcnMud2hpdGUpKQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjIsMikKICAgIHRlcm0ud3JpdGUoIlNjb3JlIikgLS1zY29yZQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjIsNSkKICAgIHRlcm0ud3JpdGUoIkxldmVsIikgIC0tbGV2ZWwKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIyLDgpCiAgICB0ZXJtLndyaXRlKCJMaW5lcyIpICAtLWxpbmVzCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMiwxMikKICAgIHRlcm0ud3JpdGUoIk5leHQiKSAtLW5leHQKCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSwxKQogICAgdGVybS53cml0ZSgiICAgICAgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDIpCiAgICB0ZXJtLndyaXRlKCIgIikgLS1zY29yZQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjEsMykKICAgIHRlcm0ud3JpdGUoIiAiKQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjEsNCkKICAgIHRlcm0ud3JpdGUoIiAgICAgICIpCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSw1KQogICAgdGVybS53cml0ZSgiICIpICAtLWxldmVsCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSw2KQogICAgdGVybS53cml0ZSgiICIpCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSw3KQogICAgdGVybS53cml0ZSgiICAgICAgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDgpCiAgICB0ZXJtLndyaXRlKCIgIikgIC0tbGluZXMKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDkpCiAgICB0ZXJtLndyaXRlKCIgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDEwKQogICAgdGVybS53cml0ZSgiICAgICAgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDExKQogICAgdGVybS53cml0ZSgiICAgICAgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDEyKQogICAgdGVybS53cml0ZSgiICIpIC0tbmV4dAogICAgdGVybS5zZXRDdXJzb3JQb3MoMjYsMTIpCiAgICB0ZXJtLndyaXRlKCIgIikgLS1uZXh0CiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSwxMykKICAgIHRlcm0ud3JpdGUoIiAgICAgICIpCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSwxNCkKICAgIHRlcm0ud3JpdGUoIiAiKQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjEsMTUpCiAgICB0ZXJtLndyaXRlKCIgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDE2KQogICAgdGVybS53cml0ZSgiICIpCiAgICB0ZXJtLnNldEN1cnNvclBvcygyMSwxNykKICAgIHRlcm0ud3JpdGUoIiAiKQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjEsMTgpCiAgICB0ZXJtLndyaXRlKCIgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDE5KQogICAgdGVybS53cml0ZSgiICAgICAgIikKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIxLDIwKQogICAgdGVybS53cml0ZSgiICAgICAgIikKICBlbmQKCiAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlTnVtYmVycygpCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcnMud2hpdGUpCiAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcnMuYmxhY2spCgogICAgdGVybS5zZXRDdXJzb3JQb3MoMjIsMykKICAgIHRlcm0ud3JpdGUobHBhZChzY29yZSw1KSkgLS1zY29yZQogICAgdGVybS5zZXRDdXJzb3JQb3MoMjIsNikKICAgIHRlcm0ud3JpdGUobHBhZChsZXZlbCw1KSkgIC0tbGV2ZWwKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDIyLDkpCiAgICB0ZXJtLndyaXRlKGxwYWQobGluZXMsNSkpICAtLWxpbmVzCiAgZW5kCgogIGxvY2FsIGZ1bmN0aW9uIGRyYXdCbG9ja0F0KGJsb2NrLHhwLHlwLHJvdCkKICAgIHRlcm0uc2V0VGV4dENvbG9yKGJsb2NrLmZnKQogICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoYmxvY2suYmcpCiAgICBmb3IgeT0xLDQgZG8KICAgICAgZm9yIHg9MSw0IGRvCiAgICAgICAgaWYgYmxvY2tbcm90XVt5XVt4XT09MSB0aGVuCiAgICAgICAgICB0ZXJtLnNldEN1cnNvclBvcygoeHAreCkqMi0zLHlwK3ktMS1oZWlnaHRBZGp1c3QpCiAgICAgICAgICB0ZXJtLndyaXRlKGJsb2NrLmNoKQogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAogIGVuZAoKICBsb2NhbCBmdW5jdGlvbiBlcmFzZUJsb2NrQXQoYmxvY2sseHAseXAscm90KQogICAgdGVybS5zZXRUZXh0Q29sb3IoY29sb3JzLndoaXRlKQogICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3JzLmJsYWNrKQogICAgZm9yIHk9MSw0IGRvCiAgICAgIGZvciB4PTEsNCBkbwogICAgICAgIGlmIGJsb2NrW3JvdF1beV1beF09PTEgdGhlbgogICAgICAgICAgdGVybS5zZXRDdXJzb3JQb3MoKHhwK3gpKjItMyx5cCt5LTEtaGVpZ2h0QWRqdXN0KQogICAgICAgICAgdGVybS53cml0ZSgiICAiKQogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAogIGVuZAoKICBsb2NhbCBmdW5jdGlvbiB0ZXN0QmxvY2tBdChibG9jayx4cCx5cCxyb3QpCiAgICBmb3IgeT0xLDQgZG8KICAgICAgbG9jYWwgdHk9eXAreS0xCiAgICAgIGZvciB4PTEsNCBkbwogICAgICAgIGxvY2FsIHR4PXhwK3gtMQogICAgICAgIGlmIGJsb2NrW3JvdF1beV1beF09PTEgdGhlbgogICAgICAgICAgaWYgdHg+MTAgb3IgdHg8MSBvciB0eT4yMCBvciBwaXRbdHldW3R4XX49MCB0aGVuCiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgZW5kCiAgICBlbmQKICBlbmQKCiAgbG9jYWwgZnVuY3Rpb24gcGl0QmxvY2soYmxvY2sseHAseXAscm90KQogICAgZm9yIHk9MSw0IGRvCiAgICAgIGZvciB4PTEsNCBkbwogICAgICAgIGlmIGJsb2NrW3JvdF1beV1beF09PTEgdGhlbgogICAgICAgICAgcGl0W3lwK3ktMV1beHAreC0xXT1ibG9jawogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAogIGVuZAoKCiAgbG9jYWwgZnVuY3Rpb24gY2xlYXJQaXQoKQogICAgZm9yIHJvdz0xLDIwIGRvCiAgICAgIHBpdFtyb3ddPXt9CiAgICAgIGZvciBjb2w9MSwxMCBkbwogICAgICAgIHBpdFtyb3ddW2NvbF09MAogICAgICBlbmQKICAgIGVuZAogIGVuZAoKCgogIGRyYXdTY3JlZW4oKQogIHVwZGF0ZU51bWJlcnMoKQoKICAtLWRlY2xhcmUgJiBpbml0IHRoZSBwaXQKICBjbGVhclBpdCgpCgoKCiAgbG9jYWwgaGFsdD1mYWxzZQogIGxvY2FsIGRyb3BTcGVlZD1zcGVlZHNCeUxldmVsW21hdGgubWluKGxldmVsLDEyKV0KCgogIGxvY2FsIGN1ckJsb2NrPW5leHQKICBuZXh0PWJsb2Nrc1ttYXRoLnJhbmRvbSgxLDcpXQoKICBsb2NhbCBjdXJYLCBjdXJZLCBjdXJSb3Q9NCwgMSwgMQogIGxvY2FsIGRyb3BUaW1lcj1vcy5zdGFydFRpbWVyKGRyb3BTcGVlZCkKCiAgZHJhd0Jsb2NrQXQobmV4dCwxMS41LDE1K2hlaWdodEFkanVzdCwxKQogIGRyYXdCbG9ja0F0KGN1ckJsb2NrLGN1clgsY3VyWSxjdXJSb3QpCgogIGxvY2FsIGZ1bmN0aW9uIHJlZHJhd1BpdCgpCiAgICBmb3Igcj0xK2hlaWdodEFkanVzdCwyMCBkbwogICAgICB0ZXJtLnNldEN1cnNvclBvcygxLHItaGVpZ2h0QWRqdXN0KQogICAgICBmb3IgYz0xLDEwIGRvCiAgICAgICAgaWYgcGl0W3JdW2NdPT0wIHRoZW4KICAgICAgICAgIHRlcm0uc2V0VGV4dENvbG9yKGNvbG9ycy5ibGFjaykKICAgICAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICAgICAgICAgIHRlcm0ud3JpdGUoIiAgIikKICAgICAgICBlbHNlCiAgICAgICAgICB0ZXJtLnNldFRleHRDb2xvcihwaXRbcl1bY10uZmcpCiAgICAgICAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihwaXRbcl1bY10uYmcpCiAgICAgICAgICB0ZXJtLndyaXRlKHBpdFtyXVtjXS5jaCkKICAgICAgICBlbmQKICAgICAgZW5kCiAgICBlbmQKICBlbmQKCiAgbG9jYWwgZnVuY3Rpb24gaGlkZVBpdCgpCiAgICBmb3Igcj0xK2hlaWdodEFkanVzdCwyMCBkbwogICAgICB0ZXJtLnNldEN1cnNvclBvcygxLHItaGVpZ2h0QWRqdXN0KQogICAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcnMuYmxhY2spCiAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICAgICAgdGVybS53cml0ZSgiICAgICAgICAgICAgICAgICAgICAiKQogICAgZW5kCiAgZW5kCgogIGxvY2FsIGZ1bmN0aW9uIG1zZ0JveChtZXNzYWdlKQogICAgbG9jYWwgeD1tYXRoLmZsb29yKCgxNy0jbWVzc2FnZSkvMikKICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yYXNzKGNvbG9ycy5saWdodEdyYXksY29sb3JzLndoaXRlKSkKICAgIHRlcm0uc2V0VGV4dENvbG9yKGNvbG9ycy5ibGFjaykKICAgIHRlcm0uc2V0Q3Vyc29yUG9zKHgsOSkKICAgIHRlcm0ud3JpdGUoIisiLi5zdHJpbmcucmVwKCItIiwjbWVzc2FnZSsyKS4uIisiKQogICAgdGVybS5zZXRDdXJzb3JQb3MoeCwxMCkKICAgIHRlcm0ud3JpdGUoInwiKQogICAgdGVybS5zZXRDdXJzb3JQb3MoeCsjbWVzc2FnZSszLDEwKQogICAgdGVybS53cml0ZSgifCIpCiAgICB0ZXJtLnNldEN1cnNvclBvcyh4LDExKQogICAgdGVybS53cml0ZSgiKyIuLnN0cmluZy5yZXAoIi0iLCNtZXNzYWdlKzIpLi4iKyIpCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcnMud2hpdGUpCiAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcnMuYmxhY2spCiAgICB0ZXJtLnNldEN1cnNvclBvcyh4KzEsMTApCiAgICB0ZXJtLndyaXRlKCIgIi4ubWVzc2FnZS4uIiAiKQogIGVuZAoKICBsb2NhbCBmdW5jdGlvbiBjbGVhclJvd3MoKQogICAgbG9jYWwgcm93cz17fQogICAgZm9yIHI9MSwyMCBkbwogICAgICBsb2NhbCBjb3VudD0wCiAgICAgIGZvciBjPTEsMTAgZG8KICAgICAgICBpZiBwaXRbcl1bY11+PTAgdGhlbgogICAgICAgICAgY291bnQ9Y291bnQrMQogICAgICAgIGVsc2UKICAgICAgICAgIGJyZWFrCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgICBpZiBjb3VudD09MTAgdGhlbgogICAgICAgIHJvd3NbI3Jvd3MrMV09cgogICAgICBlbmQKICAgIGVuZAoKICAgIGlmICNyb3dzPjAgdGhlbgogICAgICBmb3IgaT0xLDQgZG8KICAgICAgICBzbGVlcCguMSkKICAgICAgICBmb3Igcj0xLCNyb3dzIGRvCiAgICAgICAgICByPXJvd3Nbcl0KICAgICAgICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDEsci1oZWlnaHRBZGp1c3QpCiAgICAgICAgICBmb3IgYz0xLDEwIGRvCiAgICAgICAgICAgIHRlcm0uc2V0VGV4dENvbG9yKHBpdFtyXVtjXS5iZykKICAgICAgICAgICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IocGl0W3JdW2NdLmZnKQogICAgICAgICAgICB0ZXJtLndyaXRlKHBpdFtyXVtjXS5jaCkKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIHNsZWVwKC4xKQogICAgICAgIGZvciByPTEsI3Jvd3MgZG8KICAgICAgICAgIHI9cm93c1tyXQogICAgICAgICAgdGVybS5zZXRDdXJzb3JQb3MoMSxyLWhlaWdodEFkanVzdCkKICAgICAgICAgIGZvciBjPTEsMTAgZG8KICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3IocGl0W3JdW2NdLmZnKQogICAgICAgICAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihwaXRbcl1bY10uYmcpCiAgICAgICAgICAgIHRlcm0ud3JpdGUocGl0W3JdW2NdLmNoKQogICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgICAtLW5vdyByZW1vdmUgdGhlIHJvd3MgYW5kIGRyb3AgZXZlcnl0aGlnbiBlbHNlCiAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICAgICAgZm9yIHI9MSwjcm93cyBkbwogICAgICAgIHI9cm93c1tyXQogICAgICAgIHRlcm0uc2V0Q3Vyc29yUG9zKDEsci1oZWlnaHRBZGp1c3QpCiAgICAgICAgdGVybS53cml0ZSgiICAgICAgICAgICAgICAgICAgICAiKQogICAgICBlbmQKICAgICAgc2xlZXAoLjI1KQogICAgICBmb3Igcj0xLCNyb3dzIGRvCiAgICAgICAgdGFibGUucmVtb3ZlKHBpdCxyb3dzW3JdKQogICAgICAgIHRhYmxlLmluc2VydChwaXQsMSx7MCwwLDAsMCwwLDAsMCwwLDAsMH0pCiAgICAgIGVuZAogICAgICByZWRyYXdQaXQoKQogICAgICBsaW5lcz1saW5lcysjcm93cwogICAgICBzY29yZT1zY29yZStwb2ludHNbI3Jvd3NdKm1hdGgubWluKGxldmVsLDIwKQogICAgICBsZXZlbD1tYXRoLmZsb29yKGxpbmVzLzEwKStpbml0aWFsTGV2ZWwKICAgICAgZHJvcFNwZWVkPXNwZWVkc0J5TGV2ZWxbbWF0aC5taW4obGV2ZWwsMTIpXQogICAgICB1cGRhdGVOdW1iZXJzKCkKICAgIGVuZAogICAgc2xlZXAoLjI1KQogIGVuZAoKICBsb2NhbCBmdW5jdGlvbiBibG9ja0ZhbGwoKQogICAgbG9jYWwgcmVzdWx0ID0gZmFsc2UKICAgIGlmIHRlc3RCbG9ja0F0KGN1ckJsb2NrLGN1clgsY3VyWSsxLGN1clJvdCkgdGhlbgogICAgICBwaXRCbG9jayhjdXJCbG9jayxjdXJYLGN1clksY3VyUm90KQogICAgICAtLWRldGVjdCByb3dzIHRoYXQgY2xlYXIKICAgICAgY2xlYXJSb3dzKHJvd3MpCgogICAgICBjdXJCbG9jaz1uZXh0CiAgICAgIGN1clg9NAogICAgICBjdXJZPTEKICAgICAgY3VyUm90PTEKICAgICAgaWYgdGVzdEJsb2NrQXQoY3VyQmxvY2ssY3VyWCxjdXJZLGN1clJvdCkgdGhlbgogICAgICAgIGhhbHQ9dHJ1ZQogICAgICBlbmQKICAgICAgZHJhd0Jsb2NrQXQoY3VyQmxvY2ssY3VyWCxjdXJZLGN1clJvdCkKICAgICAgZXJhc2VCbG9ja0F0KG5leHQsMTEuNSwxNStoZWlnaHRBZGp1c3QsMSkKICAgICAgbmV4dD1ibG9ja3NbbWF0aC5yYW5kb20oMSw3KV0KICAgICAgZHJhd0Jsb2NrQXQobmV4dCwxMS41LDE1K2hlaWdodEFkanVzdCwxKQogICAgICByZXR1cm4gdHJ1ZQogICAgZWxzZQogICAgICBlcmFzZUJsb2NrQXQoY3VyQmxvY2ssY3VyWCxjdXJZLGN1clJvdCkKICAgICAgY3VyWT1jdXJZKzEKICAgICAgZHJhd0Jsb2NrQXQoY3VyQmxvY2ssY3VyWCxjdXJZLGN1clJvdCkKICAgICAgcmV0dXJuIGZhbHNlCiAgICBlbmQKICBlbmQKCgogIHdoaWxlIG5vdCBoYWx0IGRvCiAgICBsb2NhbCBlPXtvcy5wdWxsRXZlbnQoKX0KICAgIGlmIGVbMV09PSJ0aW1lciIgdGhlbgogICAgICBpZiBlWzJdPT1kcm9wVGltZXIgdGhlbgogICAgICAgIGJsb2NrRmFsbCgpCiAgICAgICAgZHJvcFRpbWVyPW9zLnN0YXJ0VGltZXIoZHJvcFNwZWVkKQogICAgICBlbmQKICAgIGVsc2VpZiBlWzFdPT0ia2V5IiB0aGVuCiAgICAgIGxvY2FsIGtleT1lWzJdCiAgICAgIGxvY2FsIGR4LGR5LGRyPTAsMCwwCiAgICAgIGlmIGtleT09a2V5cy5sZWZ0IG9yIGtleT09a2V5cy5hIHRoZW4KICAgICAgICBkeD0tMQogICAgICBlbHNlaWYga2V5PT1rZXlzLnJpZ2h0IG9yIGtleT09a2V5cy5kIHRoZW4KICAgICAgICBkeD0xCiAgICAgIGVsc2VpZiBrZXk9PWtleXMudXAgb3Iga2V5PT1rZXlzLncgdGhlbgogICAgICAgIGRyPTEKICAgICAgZWxzZWlmIGtleT09a2V5cy5kb3duIG9yIGtleT09a2V5cy5zIHRoZW4KICAgICAgICB3aGlsZSBub3QgYmxvY2tGYWxsKCkgZG8gZW5kCiAgICAgICAgZHJvcFRpbWVyPW9zLnN0YXJ0VGltZXIoZHJvcFNwZWVkKQogICAgICBlbHNlaWYga2V5PT1rZXlzLnNwYWNlIHRoZW4KICAgICAgICBoaWRlUGl0KCkKICAgICAgICBtc2dCb3goIlBhdXNlZCIpCiAgICAgICAgd2hpbGUgKHtvcy5wdWxsRXZlbnQoImtleSIpfSlbMl1+PWtleXMuc3BhY2UgZG8gZW5kCiAgICAgICAgcmVkcmF3UGl0KCkKICAgICAgICBkcmF3QmxvY2tBdChjdXJCbG9jayxjdXJYLGN1clksY3VyUm90KQogICAgICAgIGRyb3BUaW1lcj1vcy5zdGFydFRpbWVyKGRyb3BTcGVlZCkKICAgICAgZW5kCiAgICAgIGlmIGR4K2Ryfj0wIHRoZW4KICAgICAgICBpZiBub3QgdGVzdEJsb2NrQXQoY3VyQmxvY2ssY3VyWCtkeCxjdXJZK2R5LChkcj4wIGFuZCBjdXJSb3QlI2N1ckJsb2NrK2RyIG9yIGN1clJvdCkpIHRoZW4KICAgICAgICAgIGVyYXNlQmxvY2tBdChjdXJCbG9jayxjdXJYLGN1clksY3VyUm90KQogICAgICAgICAgY3VyWD1jdXJYK2R4CiAgICAgICAgICBjdXJZPWN1clkrZHkKICAgICAgICAgIGN1clJvdD1kcj09MCBhbmQgY3VyUm90IG9yIChjdXJSb3QlI2N1ckJsb2NrK2RyKQogICAgICAgICAgZHJhd0Jsb2NrQXQoY3VyQmxvY2ssY3VyWCxjdXJZLGN1clJvdCkKICAgICAgICBlbmQKICAgICAgZW5kCiAgICBlbHNlaWYgZVsxXT09InRlcm1fcmVzaXplIiB0aGVuCiAgICAgIGxvY2FsIHcsaD10ZXJtLmdldFNpemUoKQogICAgICBpZiBoPT0yMCB0aGVuCiAgICAgICAgaGVpZ2h0QWRqdXN0PTAKICAgICAgZWxzZQogICAgICAgIGhlaWdodEFkanVzdD0xCiAgICAgIGVuZAogICAgICByZWRyYXdQaXQoKQogICAgICBkcmF3QmxvY2tBdChjdXJCbG9jayxjdXJYLGN1clksY3VyUm90KQogICAgZW5kCiAgZW5kCgogIG1zZ0JveCgiR2FtZSBPdmVyISIpCiAgd2hpbGUgdHJ1ZSBkbwogICAgbG9jYWwgXyxrPW9zLnB1bGxFdmVudCgia2V5IikKICAgIGlmIGs9PWtleXMuc3BhY2Ugb3Igaz09a2V5cy5lbnRlciB0aGVuCiAgICAgIGJyZWFrCiAgICBlbmQKICBlbmQKCiAgbGV2ZWwgPSBtYXRoLm1pbihsZXZlbCw5KQplbmQKCgpsb2NhbCBzZWxlY3RlZD0xCmxvY2FsIHBsYXllcnNEZXRlY3RlZD1mYWxzZQoKbG9jYWwgZnVuY3Rpb24gZHJhd01lbnUoKQogIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcmFzcyhjb2xvcnMucmVkLGNvbG9ycy53aGl0ZSkpCiAgdGVybS5jbGVhcigpCgogIGxvY2FsIGN4LGN5PW1hdGguZmxvb3Iod2lkdGgvMiksbWF0aC5mbG9vcihoZWlnaHQvMikKCiAgdGVybS5zZXRDdXJzb3JQb3MoY3gtNixjeS0yKQogIHRlcm0ud3JpdGUoIkYgQSBMIEwgSSBOIEciKQoKICBpZiBwbGF5ZXJzRGV0ZWN0ZWQgdGhlbgogICAgaWYgc2VsZWN0ZWQ9PTAgdGhlbgogICAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcmFzcyhjb2xvcnMuYmx1ZSxjb2xvcnMuYmxhY2spKQogICAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcmFzcyhjb2xvcnMuZ3JheSxjb2xvcnMud2hpdGUpKQogICAgZWxzZQogICAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcmFzcyhjb2xvcnMubGlnaHRCbHVlLGNvbG9ycy53aGl0ZSkpCiAgICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICAgIGVuZAogICAgdGVybS5zZXRDdXJzb3JQb3MoY3gtMTIsY3kpCiAgICB0ZXJtLndyaXRlKCIgUGxheSBoZWFkLXRvLWhlYWQgZ2FtZSEgIikKICBlbmQKCiAgdGVybS5zZXRDdXJzb3JQb3MoY3gtMTAsY3krMSkKICBpZiBzZWxlY3RlZD09MSB0aGVuCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcmFzcyhjb2xvcnMuYmx1ZSxjb2xvcnMuYmxhY2spKQogICAgdGVybS5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3Jhc3MoY29sb3JzLmxpZ2h0R3JheSxjb2xvcnMud2hpdGUpKQogIGVsc2UKICAgIHRlcm0uc2V0VGV4dENvbG9yKGNvbG9yYXNzKGNvbG9ycy5saWdodEJsdWUsY29sb3JzLndoaXRlKSkKICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9ycy5ibGFjaykKICBlbmQKICB0ZXJtLndyaXRlKCIgUGxheSBmcm9tIGxldmVsOiA8IiAuLiBsZXZlbCAuLiAiPiAiKQoKICB0ZXJtLnNldEN1cnNvclBvcyhjeC0zLGN5KzMpCiAgaWYgc2VsZWN0ZWQ9PTIgdGhlbgogICAgdGVybS5zZXRUZXh0Q29sb3IoY29sb3Jhc3MoY29sb3JzLmJsdWUsY29sb3JzLmJsYWNrKSkKICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yYXNzKGNvbG9ycy5saWdodEdyYXksY29sb3JzLndoaXRlKSkKICBlbHNlCiAgICB0ZXJtLnNldFRleHRDb2xvcihjb2xvcmFzcyhjb2xvcnMubGlnaHRCbHVlLGNvbG9ycy53aGl0ZSkpCiAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcnMuYmxhY2spCiAgZW5kCiAgdGVybS53cml0ZSgiIFF1aXQgIikKZW5kCgoKbG9jYWwgZnVuY3Rpb24gcnVuTWVudSgpCiAgZHJhd01lbnUoKQoKICB3aGlsZSB0cnVlIGRvCiAgICBsb2NhbCBldmVudD17b3MucHVsbEV2ZW50KCl9CiAgICBpZiBldmVudFsxXT09ImtleSIgdGhlbgogICAgICBsb2NhbCBrZXk9ZXZlbnRbMl0KICAgICAgaWYga2V5PT1rZXlzLnJpZ2h0IG9yIGtleT09a2V5cy5kIGFuZCBzZWxlY3RlZD09MSB0aGVuCiAgICAgICAgbGV2ZWw9bWF0aC5taW4obGV2ZWwrMSw5KQogICAgICAgIGRyYXdNZW51KCkKICAgICAgZWxzZWlmIGtleT09a2V5cy5sZWZ0IG9yIGtleT09a2V5cy5hIGFuZCBzZWxlY3RlZD09MSB0aGVuCiAgICAgICAgbGV2ZWw9bWF0aC5tYXgobGV2ZWwtMSwxKQogICAgICAgIGRyYXdNZW51KCkKICAgICAgZWxzZWlmIGtleT49a2V5cy5vbmUgYW5kIGtleTw9a2V5cy5uaW5lIGFuZCBzZWxlY3RlZD09MSB0aGVuCiAgICAgICAgbGV2ZWw9KGtleS1rZXlzLm9uZSkgKyAxCiAgICAgICAgZHJhd01lbnUoKQogICAgICBlbHNlaWYga2V5PT1rZXlzLnVwIG9yIGtleT09a2V5cy53IHRoZW4KICAgICAgICBzZWxlY3RlZD1zZWxlY3RlZC0xCiAgICAgICAgaWYgc2VsZWN0ZWQ9PTAgdGhlbgogICAgICAgICAgc2VsZWN0ZWQ9MgogICAgICAgIGVuZAogICAgICAgIGRyYXdNZW51KCkKICAgICAgZWxzZWlmIGtleT09a2V5cy5kb3duIG9yIGtleT09a2V5cy5zIHRoZW4KICAgICAgICBzZWxlY3RlZD1zZWxlY3RlZCUyKzEKICAgICAgICBkcmF3TWVudSgpCiAgICAgIGVsc2VpZiBrZXk9PWtleXMuZW50ZXIgb3Iga2V5PT1rZXlzLnNwYWNlIHRoZW4KICAgICAgICBicmVhayAtLWJlZ2luIHBsYXkhCiAgICAgIGVuZAogICAgZW5kCiAgZW5kCmVuZAoKd2hpbGUgdHJ1ZSBkbwogIHJ1bk1lbnUoKQogIGlmIHNlbGVjdGVkPT0yIHRoZW4KICAgIGJyZWFrCiAgZW5kCgogIHBsYXlHYW1lKCkKZW5kCgoKdGVybS5zZXRUZXh0Q29sb3IoY29sb3JzLndoaXRlKQp0ZXJtLnNldEJhY2tncm91bmRDb2xvcihjb2xvcnMuYmxhY2spCnRlcm0uY2xlYXIoKQp0ZXJtLnNldEN1cnNvclBvcygxLDEp","isDir":false,"name":"falling","size":0},"root/programs/programs":{"data":"CmxvY2FsIGJBbGwgPSBmYWxzZQpsb2NhbCB0QXJncyA9IHsgLi4uIH0KaWYgI3RBcmdzID4gMCBhbmQgdEFyZ3NbMV0gPT0gImFsbCIgdGhlbgoJYkFsbCA9IHRydWUKZW5kCgpsb2NhbCB0UHJvZ3JhbXMgPSBzaGVsbC5wcm9ncmFtcyggYkFsbCApCnRleHR1dGlscy5wYWdlZFRhYnVsYXRlKCB0UHJvZ3JhbXMgKQ==","isDir":false,"name":"programs","size":0},"root/programs/reboot":{"data":"aWYgdGVybS5pc0NvbG91cigpIHRoZW4KCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy55ZWxsb3cgKQplbmQKcHJpbnQoICJHb29kYnllIiApCnRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSApCgpzbGVlcCggMSApCm9zLnJlYm9vdCgp","isDir":false,"name":"reboot","size":0},"root/programs/rednet":{"children":["chat","repeat"],"isDir":true,"name":"rednet","parents":["/root","/root/programs","/root/programs/rednet"],"size":0},"root/programs/rednet/chat":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQoKbG9jYWwgZnVuY3Rpb24gcHJpbnRVc2FnZSgpCglwcmludCggIlVzYWdlczoiICkKCXByaW50KCAiY2hhdCBob3N0IDxob3N0bmFtZT4iICkKCXByaW50KCAiY2hhdCBqb2luIDxob3N0bmFtZT4gPG5pY2tuYW1lPiIgKQplbmQKCmxvY2FsIHNPcGVuZWRNb2RlbSA9IG5pbApsb2NhbCBmdW5jdGlvbiBvcGVuTW9kZW0oKQogICAgZm9yIG4sc01vZGVtIGluIGlwYWlycyggcGVyaXBoZXJhbC5nZXROYW1lcygpICkgZG8KICAgICAgICBpZiBwZXJpcGhlcmFsLmdldFR5cGUoIHNNb2RlbSApID09ICJtb2RlbSIgdGhlbgogICAgICAgICAgICBpZiBub3QgcmVkbmV0LmlzT3Blbiggc01vZGVtICkgdGhlbgogICAgICAgICAgICAgICAgcmVkbmV0Lm9wZW4oIHNNb2RlbSApCiAgICAgICAgICAgICAgICBzT3BlbmVkTW9kZW0gPSBzTW9kZW0KICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgZW5kCiAgICBlbmQKICAgIHByaW50KCAiTm8gbW9kZW1zIGZvdW5kLiIgKQogICAgcmV0dXJuIGZhbHNlCmVuZAoKbG9jYWwgZnVuY3Rpb24gY2xvc2VNb2RlbSgpCiAgICBpZiBzT3BlbmVkTW9kZW0gfj0gbmlsIHRoZW4KICAgICAgICByZWRuZXQuY2xvc2UoIHNPcGVuZWRNb2RlbSApCiAgICAgICAgc09wZW5lZE1vZGVtID0gbmlsCiAgICBlbmQKZW5kCgotLSBDb2xvdXJzCmxvY2FsIGhpZ2hsaWdodENvbG91ciwgdGV4dENvbG91cgppZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgoJdGV4dENvbG91ciA9IGNvbG91cnMud2hpdGUKCWhpZ2hsaWdodENvbG91ciA9IGNvbG91cnMueWVsbG93CmVsc2UKCXRleHRDb2xvdXIgPSBjb2xvdXJzLndoaXRlCgloaWdobGlnaHRDb2xvdXIgPSBjb2xvdXJzLndoaXRlCmVuZAoKbG9jYWwgc0NvbW1hbmQgPSB0QXJnc1sxXQppZiBzQ29tbWFuZCA9PSAiaG9zdCIgdGhlbgogICAgLS0gImNoYXQgaG9zdCIKICAgIC0tIEdldCBob3N0bmFtZQogICAgbG9jYWwgc0hvc3RuYW1lID0gdEFyZ3NbMl0KICAgIGlmIHNIb3N0bmFtZSA9PSBuaWwgdGhlbgogICAgICAgIHByaW50VXNhZ2UoKQogICAgICAgIHJldHVybgogICAgZW5kCgogICAgLS0gSG9zdCBzZXJ2ZXIKICAgIGlmIG5vdCBvcGVuTW9kZW0oKSB0aGVuCiAgICAgICAgcmV0dXJuCiAgICBlbmQKICAgIHJlZG5ldC5ob3N0KCAiY2hhdCIsIHNIb3N0bmFtZSApCiAgICBwcmludCggIjAgdXNlcnMgY29ubmVjdGVkLiIgKQoKICAgIGxvY2FsIHRVc2VycyA9IHt9CiAgICBsb2NhbCBuVXNlcnMgPSAwCiAgICBmdW5jdGlvbiBzZW5kKCBzVGV4dCwgblVzZXJJRCApCiAgICAgICAgaWYgblVzZXJJRCB0aGVuCiAgICAgICAgICAgIGxvY2FsIHRVc2VyID0gdFVzZXJzWyBuVXNlcklEIF0KICAgICAgICAgICAgaWYgdFVzZXIgdGhlbgogICAgICAgICAgICAgICAgcmVkbmV0LnNlbmQoIHRVc2VyLm5JRCwgewogICAgICAgICAgICAgICAgICAgIHNUeXBlID0gInRleHQiLAogICAgICAgICAgICAgICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgICAgICAgICAgICAgICAgIHNUZXh0ID0gc1RleHQsCiAgICAgICAgICAgICAgICB9LCAiY2hhdCIgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZvciBuVXNlcklELCB0VXNlciBpbiBwYWlycyggdFVzZXJzICkgZG8KICAgICAgICAgICAgICAgIHJlZG5ldC5zZW5kKCB0VXNlci5uSUQsIHsKICAgICAgICAgICAgICAgICAgICBzVHlwZSA9ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICBuVXNlcklEID0gblVzZXJJRCwKICAgICAgICAgICAgICAgICAgICBzVGV4dCA9IHNUZXh0LAogICAgICAgICAgICAgICAgfSwgImNoYXQiICkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICAtLSBTZXR1cCBwaW5nIHBvbmcKICAgIGxvY2FsIHRQaW5nUG9uZ1RpbWVyID0ge30KICAgIGZ1bmN0aW9uIHBpbmcoIG5Vc2VySUQgKQogICAgICAgIGxvY2FsIHRVc2VyID0gdFVzZXJzWyBuVXNlcklEIF0KICAgICAgICByZWRuZXQuc2VuZCggdFVzZXIubklELCB7CiAgICAgICAgICAgIHNUeXBlID0gInBpbmcgdG8gY2xpZW50IiwKICAgICAgICAgICAgblVzZXJJRCA9IG5Vc2VySUQsCiAgICAgICAgfSwgImNoYXQiICkKCiAgICAgICAgbG9jYWwgdGltZXIgPSBvcy5zdGFydFRpbWVyKCAxNSApCiAgICAgICAgdFVzZXIuYlBpbmdQb25nZWQgPSBmYWxzZQogICAgICAgIHRQaW5nUG9uZ1RpbWVyWyB0aW1lciBdID0gblVzZXJJRAogICAgZW5kCgogICAgZnVuY3Rpb24gcHJpbnRVc2VycygpCiAgICAgICAgbG9jYWwgeCx5ID0gdGVybS5nZXRDdXJzb3JQb3MoKQogICAgICAgIHRlcm0uc2V0Q3Vyc29yUG9zKCAxLCB5IC0gMSApCiAgICAgICAgdGVybS5jbGVhckxpbmUoKQogICAgICAgIGlmIG5Vc2VycyA9PSAxIHRoZW4KICAgICAgICAgICAgcHJpbnQoIG5Vc2VycyAuLiAiIHVzZXIgY29ubmVjdGVkLiIgKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnQoIG5Vc2VycyAuLiAiIHVzZXJzIGNvbm5lY3RlZC4iICkKICAgICAgICBlbmQKICAgIGVuZAoKICAgIC0tIEhhbmRsZSBtZXNzYWdlcwogICAgbG9jYWwgb2ssIGVycm9yID0gcGNhbGwoIGZ1bmN0aW9uKCkKICAgICAgICBwYXJhbGxlbC53YWl0Rm9yQW55KCBmdW5jdGlvbigpCiAgICAgICAgICAgIHdoaWxlIHRydWUgZG8KICAgICAgICAgICAgICAgIGxvY2FsIHNFdmVudCwgdGltZXIgPSBvcy5wdWxsRXZlbnQoICJ0aW1lciIgKQogICAgICAgICAgICAgICAgbG9jYWwgblVzZXJJRCA9IHRQaW5nUG9uZ1RpbWVyWyB0aW1lciBdCiAgICAgICAgICAgICAgICBpZiBuVXNlcklEIGFuZCB0VXNlcnNbIG5Vc2VySUQgXSB0aGVuCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgdFVzZXIgPSB0VXNlcnNbIG5Vc2VySUQgXQogICAgICAgICAgICAgICAgICAgIGlmIHRVc2VyIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRVc2VyLmJQaW5nUG9uZ2VkIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqICIuLnRVc2VyLnNVc2VybmFtZS4uIiBoYXMgdGltZWQgb3V0IiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0VXNlcnNbIG5Vc2VySUQgXSA9IG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgblVzZXJzID0gblVzZXJzIC0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2VycygpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbmcoIG5Vc2VySUQgKQogICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQsCiAgICAgICAgZnVuY3Rpb24oKQogICAgICAgICAgICB3aGlsZSB0cnVlIGRvCiAgICAgICAgICAgICAgICBsb2NhbCB0Q29tbWFuZHMKICAgICAgICAgICAgICAgIHRDb21tYW5kcyA9IHsKICAgICAgICAgICAgICAgICAgICBbIm1lIl0gPSBmdW5jdGlvbiggdFVzZXIsIHNDb250ZW50ICkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nLmxlbihzQ29udGVudCkgPiAwIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqICIuLnRVc2VyLnNVc2VybmFtZS4uIiAiLi5zQ29udGVudCApCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqIFVzYWdlOiAvbWUgW3dvcmRzXSIsIHRVc2VyLm5Vc2VySUQgKQogICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICBlbmQsCiAgICAgICAgICAgICAgICAgICAgWyJuaWNrIl0gPSBmdW5jdGlvbiggdFVzZXIsIHNDb250ZW50ICkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nLmxlbihzQ29udGVudCkgPiAwIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHNPbGROYW1lID0gdFVzZXIuc1VzZXJuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0VXNlci5zVXNlcm5hbWUgPSBzQ29udGVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCggIiogIi4uc09sZE5hbWUuLiIgaXMgbm93IGtub3duIGFzICIuLnRVc2VyLnNVc2VybmFtZSApCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqIFVzYWdlOiAvbmljayBbbmlja25hbWVdIiwgdFVzZXIublVzZXJJRCApCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVuZCwKICAgICAgICAgICAgICAgICAgICBbInVzZXJzIl0gPSBmdW5jdGlvbiggdFVzZXIsIHNDb250ZW50ICkKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCggIiogQ29ubmVjdGVkIFVzZXJzOiIsIHRVc2VyLm5Vc2VySUQgKQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBzVXNlcnMgPSAiKiIKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5Vc2VySUQsIHRVc2VyIGluIHBhaXJzKCB0VXNlcnMgKSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc1VzZXJzID0gc1VzZXJzIC4uICIgIiAuLiB0VXNlci5zVXNlcm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoIHNVc2VycywgdFVzZXIublVzZXJJRCApCiAgICAgICAgICAgICAgICAgICAgZW5kLAogICAgICAgICAgICAgICAgICAgIFsiaGVscCJdID0gZnVuY3Rpb24oIHRVc2VyLCBzQ29udGVudCApCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqIEF2YWlsYWJsZSBjb21tYW5kczoiLCB0VXNlci5uVXNlcklEICkKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc0NvbW1hbmRzID0gIioiCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzQ29tbWFuZCwgZm5Db21tYW5kIGluIHBhaXJzKCB0Q29tbWFuZHMgKSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc0NvbW1hbmRzID0gc0NvbW1hbmRzIC4uICIgLyIgLi4gc0NvbW1hbmQKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoIHNDb21tYW5kcy4uIiAvbG9nb3V0IiwgdFVzZXIublVzZXJJRCApCiAgICAgICAgICAgICAgICAgICAgZW5kLAogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxvY2FsIG5TZW5kZXJJRCwgdE1lc3NhZ2UgPSByZWRuZXQucmVjZWl2ZSggImNoYXQiICkKICAgICAgICAgICAgICAgIGlmIHR5cGUoIHRNZXNzYWdlICkgPT0gInRhYmxlIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgdE1lc3NhZ2Uuc1R5cGUgPT0gImxvZ2luIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIC0tIExvZ2luIGZyb20gbmV3IGNsaWVudAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBuVXNlcklEID0gdE1lc3NhZ2UublVzZXJJRAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBzVXNlcm5hbWUgPSB0TWVzc2FnZS5zVXNlcm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgblVzZXJJRCBhbmQgc1VzZXJuYW1lIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRVc2Vyc1sgblVzZXJJRCBdID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JRCA9IG5TZW5kZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXNlcklEID0gblVzZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzVXNlcm5hbWUgPSBzVXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXNlcnMgPSBuVXNlcnMgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludFVzZXJzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqICIuLnNVc2VybmFtZS4uIiBoYXMgam9pbmVkIHRoZSBjaGF0IiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5nKCBuVXNlcklEICkKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgLS0gU29tZXRoaW5nIGVsc2UgZnJvbSBleGlzdGluZyBjbGllbnQKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgblVzZXJJRCA9IHRNZXNzYWdlLm5Vc2VySUQKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgdFVzZXIgPSB0VXNlcnNbIG5Vc2VySUQgXQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0VXNlciBhbmQgdFVzZXIubklEID09IG5TZW5kZXJJRCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0TWVzc2FnZS5zVHlwZSA9PSAibG9nb3V0IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCggIiogIi4udFVzZXIuc1VzZXJuYW1lLi4iIGhhcyBsZWZ0IHRoZSBjaGF0IiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdFVzZXJzWyBuVXNlcklEIF0gPSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXNlcnMgPSBuVXNlcnMgLSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2VycygpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIHRNZXNzYWdlLnNUeXBlID09ICJjaGF0IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc01lc3NhZ2UgPSB0TWVzc2FnZS5zVGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNNZXNzYWdlIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc0NvbW1hbmQgPSBzdHJpbmcubWF0Y2goIHNNZXNzYWdlLCAiXi8oW2Etel0rKSIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzQ29tbWFuZCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmbkNvbW1hbmQgPSB0Q29tbWFuZHNbIHNDb21tYW5kIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZuQ29tbWFuZCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc0NvbnRlbnQgPSBzdHJpbmcuc3ViKCBzTWVzc2FnZSwgc3RyaW5nLmxlbihzQ29tbWFuZCkrMyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5Db21tYW5kKCB0VXNlciwgc0NvbnRlbnQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICIqIFVucmVjb2duaXNlZCBjb21tYW5kOiAvIi4uc0NvbW1hbmQsIHRVc2VyLm5Vc2VySUQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoICI8Ii4udFVzZXIuc1VzZXJuYW1lLi4iPiAiLi50TWVzc2FnZS5zVGV4dCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiB0TWVzc2FnZS5zVHlwZSA9PSAicGluZyB0byBzZXJ2ZXIiIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRuZXQuc2VuZCggdFVzZXIubklELCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNUeXBlID0gInBvbmcgdG8gY2xpZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblVzZXJJRCA9IG5Vc2VySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgImNoYXQiICkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgdE1lc3NhZ2Uuc1R5cGUgPT0gInBvbmcgdG8gc2VydmVyIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdFVzZXIuYlBpbmdQb25nZWQgPSB0cnVlCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQgKQogICAgZW5kICkKICAgIGlmIG5vdCBvayB0aGVuCiAgICAgICAgcHJpbnRFcnJvciggZXJyb3IgKQogICAgZW5kCgogICAgLS0gVW5ob3N0IHNlcnZlcgogICAgZm9yIG5Vc2VySUQsIHRVc2VyIGluIHBhaXJzKCB0VXNlcnMgKSBkbwogICAgICAgIHJlZG5ldC5zZW5kKCB0VXNlci5uSUQsIHsKICAgICAgICAgICAgc1R5cGUgPSAia2ljayIsCiAgICAgICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgICAgIH0sICJjaGF0IiApCiAgICBlbmQKICAgIHJlZG5ldC51bmhvc3QoICJjaGF0IiApCiAgICBjbG9zZU1vZGVtKCkKCmVsc2VpZiBzQ29tbWFuZCA9PSAiam9pbiIgdGhlbgogICAgLS0gImNoYXQgam9pbiIKICAgIC0tIEdldCBob3N0bmFtZSBhbmQgdXNlcm5hbWUKICAgIGxvY2FsIHNIb3N0bmFtZSA9IHRBcmdzWzJdCiAgICBsb2NhbCBzVXNlcm5hbWUgPSB0QXJnc1szXQogICAgaWYgc0hvc3RuYW1lID09IG5pbCBvciBzVXNlcm5hbWUgPT0gbmlsIHRoZW4KICAgICAgICBwcmludFVzYWdlKCkKICAgICAgICByZXR1cm4KICAgIGVuZAoKICAgIC0tIENvbm5lY3QKICAgIGlmIG5vdCBvcGVuTW9kZW0oKSB0aGVuCiAgICAgICAgcmV0dXJuCiAgICBlbmQKICAgIHdyaXRlKCAiTG9va2luZyB1cCAiIC4uIHNIb3N0bmFtZSAuLiAiLi4uICIgKQogICAgbG9jYWwgbkhvc3RJRCA9IHJlZG5ldC5sb29rdXAoICJjaGF0Iiwgc0hvc3RuYW1lICkKICAgIGlmIG5Ib3N0SUQgPT0gbmlsIHRoZW4KICAgICAgICBwcmludCggIkZhaWxlZC4iICkKICAgICAgICByZXR1cm4KICAgIGVsc2UKICAgICAgICBwcmludCggIlN1Y2Nlc3MuIiApCiAgICBlbmQKCiAgICAtLSBMb2dpbgogICAgbG9jYWwgblVzZXJJRCA9IG1hdGgucmFuZG9tKCAxLCAyMTQ3NDgzNjQ3ICkKICAgIHJlZG5ldC5zZW5kKCBuSG9zdElELCB7CiAgICAgICAgc1R5cGUgPSAibG9naW4iLAogICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgICAgIHNVc2VybmFtZSA9IHNVc2VybmFtZSwKICAgIH0sICJjaGF0IiApCgogICAgLS0gU2V0dXAgcGluZyBwb25nCiAgICBsb2NhbCBiUGluZ1BvbmdlZCA9IHRydWUKICAgIGxvY2FsIHBpbmdQb25nVGltZXIgPSBvcy5zdGFydFRpbWVyKCAwICkKCiAgICBmdW5jdGlvbiBwaW5nKCkKICAgICAgICByZWRuZXQuc2VuZCggbkhvc3RJRCwgewogICAgICAgICAgICBzVHlwZSA9ICJwaW5nIHRvIHNlcnZlciIsCiAgICAgICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgICAgIH0sICJjaGF0IiApCiAgICAgICAgYlBpbmdQb25nZWQgPSBmYWxzZQogICAgICAgIHBpbmdQb25nVGltZXIgPSBvcy5zdGFydFRpbWVyKCAxNSApCiAgICBlbmQKCiAgICAtLSBIYW5kbGUgbWVzc2FnZXMKICAgIGxvY2FsIHcsaCA9IHRlcm0uZ2V0U2l6ZSgpCiAgICBsb2NhbCBwYXJlbnRUZXJtID0gdGVybS5jdXJyZW50KCkKICAgIGxvY2FsIHRpdGxlV2luZG93ID0gd2luZG93LmNyZWF0ZSggcGFyZW50VGVybSwgMSwgMSwgdywgMSwgdHJ1ZSApCiAgICBsb2NhbCBoaXN0b3J5V2luZG93ID0gd2luZG93LmNyZWF0ZSggcGFyZW50VGVybSwgMSwgMiwgdywgaC0yLCB0cnVlICkKICAgIGxvY2FsIHByb21wdFdpbmRvdyA9IHdpbmRvdy5jcmVhdGUoIHBhcmVudFRlcm0sIDEsIGgsIHcsIDEsIHRydWUgKQogICAgaGlzdG9yeVdpbmRvdy5zZXRDdXJzb3JQb3MoIDEsIGgtMiApCgogICAgdGVybS5jbGVhcigpCiAgICB0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQogICAgdGVybS5yZWRpcmVjdCggcHJvbXB0V2luZG93ICkKICAgIHByb21wdFdpbmRvdy5yZXN0b3JlQ3Vyc29yKCkKCiAgICBmdW5jdGlvbiBkcmF3VGl0bGUoKQogICAgICAgIGxvY2FsIHgseSA9IHRpdGxlV2luZG93LmdldEN1cnNvclBvcygpCiAgICAgICAgbG9jYWwgdyxoID0gdGl0bGVXaW5kb3cuZ2V0U2l6ZSgpCiAgICAgICAgbG9jYWwgc1RpdGxlID0gc1VzZXJuYW1lLi4iIG9uICIuLnNIb3N0bmFtZQogICAgICAgIHRpdGxlV2luZG93LnNldFRleHRDb2xvdXIoIGhpZ2hsaWdodENvbG91ciApCiAgICAgICAgdGl0bGVXaW5kb3cuc2V0Q3Vyc29yUG9zKCBtYXRoLmZsb29yKCB3LzIgLSBzdHJpbmcubGVuKHNUaXRsZSkvMiApLCAxICkKICAgICAgICB0aXRsZVdpbmRvdy5jbGVhckxpbmUoKQogICAgICAgIHRpdGxlV2luZG93LndyaXRlKCBzVGl0bGUgKQogICAgICAgIHByb21wdFdpbmRvdy5yZXN0b3JlQ3Vyc29yKCkKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHByaW50TWVzc2FnZSggc01lc3NhZ2UgKQogICAgICAgIHRlcm0ucmVkaXJlY3QoIGhpc3RvcnlXaW5kb3cgKQogICAgICAgIHByaW50KCkKICAgICAgICBpZiBzdHJpbmcubWF0Y2goIHNNZXNzYWdlLCAiXlwqIiApIHRoZW4KICAgICAgICAgICAgLS0gSW5mb3JtYXRpb24KICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3VyKCBoaWdobGlnaHRDb2xvdXIgKQogICAgICAgICAgICB3cml0ZSggc01lc3NhZ2UgKQogICAgICAgICAgICB0ZXJtLnNldFRleHRDb2xvdXIoIHRleHRDb2xvdXIgKQogICAgICAgIGVsc2UKICAgICAgICAgICAgLS0gQ2hhdAogICAgICAgICAgICBsb2NhbCBzVXNlcm5hbWVCaXQgPSBzdHJpbmcubWF0Y2goIHNNZXNzYWdlLCAiXlw8W15cPl0qXD4iICkKICAgICAgICAgICAgaWYgc1VzZXJuYW1lQml0IHRoZW4KICAgICAgICAgICAgICAgIHRlcm0uc2V0VGV4dENvbG91ciggaGlnaGxpZ2h0Q29sb3VyICkKICAgICAgICAgICAgICAgIHdyaXRlKCBzVXNlcm5hbWVCaXQgKQogICAgICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3VyKCB0ZXh0Q29sb3VyICkKICAgICAgICAgICAgICAgIHdyaXRlKCBzdHJpbmcuc3ViKCBzTWVzc2FnZSwgc3RyaW5nLmxlbiggc1VzZXJuYW1lQml0ICkgKyAxICkgKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB3cml0ZSggc01lc3NhZ2UgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICB0ZXJtLnJlZGlyZWN0KCBwcm9tcHRXaW5kb3cgKQogICAgICAgIHByb21wdFdpbmRvdy5yZXN0b3JlQ3Vyc29yKCkKICAgIGVuZAoKICAgIGRyYXdUaXRsZSgpCgogICAgbG9jYWwgb2ssIGVycm9yID0gcGNhbGwoIGZ1bmN0aW9uKCkKICAgICAgICBwYXJhbGxlbC53YWl0Rm9yQW55KCBmdW5jdGlvbigpCiAgICAgICAgICAgIHdoaWxlIHRydWUgZG8KICAgICAgICAgICAgICAgIGxvY2FsIHNFdmVudCwgdGltZXIgPSBvcy5wdWxsRXZlbnQoKQogICAgICAgICAgICAgICAgaWYgc0V2ZW50ID09ICJ0aW1lciIgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIHRpbWVyID09IHBpbmdQb25nVGltZXIgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYlBpbmdQb25nZWQgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRNZXNzYWdlKCAiU2VydmVyIHRpbWVvdXQuIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgIGVsc2VpZiBzRXZlbnQgPT0gInRlcm1fcmVzaXplIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgdyxoID0gcGFyZW50VGVybS5nZXRTaXplKCkKICAgICAgICAgICAgICAgICAgICB0aXRsZVdpbmRvdy5yZXBvc2l0aW9uKCAxLCAxLCB3LCAxICkKICAgICAgICAgICAgICAgICAgICBoaXN0b3J5V2luZG93LnJlcG9zaXRpb24oIDEsIDIsIHcsIGgtMiApCiAgICAgICAgICAgICAgICAgICAgcHJvbXB0V2luZG93LnJlcG9zaXRpb24oIDEsIGgsIHcsIDEgKQoKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQsCiAgICAgICAgZnVuY3Rpb24oKQogICAgICAgICAgICB3aGlsZSB0cnVlIGRvCiAgICAgICAgICAgICAgICBsb2NhbCBuU2VuZGVySUQsIHRNZXNzYWdlID0gcmVkbmV0LnJlY2VpdmUoICJjaGF0IiApCiAgICAgICAgICAgICAgICBpZiBuU2VuZGVySUQgPT0gbkhvc3RJRCBhbmQgdHlwZSggdE1lc3NhZ2UgKSA9PSAidGFibGUiIGFuZCB0TWVzc2FnZS5uVXNlcklEID09IG5Vc2VySUQgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIHRNZXNzYWdlLnNUeXBlID09ICJ0ZXh0IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHNUZXh0ID0gdE1lc3NhZ2Uuc1RleHQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc1RleHQgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRNZXNzYWdlKCBzVGV4dCApCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgICAgICBlbHNlaWYgdE1lc3NhZ2Uuc1R5cGUgPT0gInBpbmcgdG8gY2xpZW50IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZG5ldC5zZW5kKCBuU2VuZGVySUQsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNUeXBlID0gInBvbmcgdG8gc2VydmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgICAgICAgICAgICAgICAgICAgICB9LCAiY2hhdCIgKQoKICAgICAgICAgICAgICAgICAgICBlbHNlaWYgdE1lc3NhZ2Uuc1R5cGUgPT0gInBvbmcgdG8gY2xpZW50IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGJQaW5nUG9uZ2VkID0gdHJ1ZQoKICAgICAgICAgICAgICAgICAgICBlbHNlaWYgdE1lc3NhZ2Uuc1R5cGUgPT0gImtpY2siIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZCwKICAgICAgICBmdW5jdGlvbigpCiAgICAgICAgICAgIGxvY2FsIHRTZW5kSGlzdG9yeSA9IHt9CiAgICAgICAgICAgIHdoaWxlIHRydWUgZG8KICAgICAgICAgICAgICAgIHByb21wdFdpbmRvdy5zZXRDdXJzb3JQb3MoIDEsMSApCiAgICAgICAgICAgICAgICBwcm9tcHRXaW5kb3cuY2xlYXJMaW5lKCkKICAgICAgICAgICAgICAgIHByb21wdFdpbmRvdy5zZXRUZXh0Q29sb3IoIGhpZ2hsaWdodENvbG91ciApCiAgICAgICAgICAgICAgICBwcm9tcHRXaW5kb3cud3JpdGUoICI6ICIpCiAgICAgICAgICAgICAgICBwcm9tcHRXaW5kb3cuc2V0VGV4dENvbG9yKCB0ZXh0Q29sb3VyICkKCiAgICAgICAgICAgICAgICBsb2NhbCBzQ2hhdCA9IHJlYWQoIG5pbCwgdFNlbmRIaXN0b3J5ICkKICAgICAgICAgICAgICAgIGlmIHN0cmluZy5tYXRjaCggc0NoYXQsICJeL2xvZ291dCIgKSB0aGVuCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICByZWRuZXQuc2VuZCggbkhvc3RJRCwgewogICAgICAgICAgICAgICAgICAgICAgICBzVHlwZSA9ICJjaGF0IiwKICAgICAgICAgICAgICAgICAgICAgICAgblVzZXJJRCA9IG5Vc2VySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNUZXh0ID0gc0NoYXQsCiAgICAgICAgICAgICAgICAgICAgfSwgImNoYXQiICkKICAgICAgICAgICAgICAgICAgICB0YWJsZS5pbnNlcnQoIHRTZW5kSGlzdG9yeSwgc0NoYXQgKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZCApCiAgICBlbmQgKQoKICAgIC0tIENsb3NlIHRoZSB3aW5kb3dzCiAgICB0ZXJtLnJlZGlyZWN0KCBwYXJlbnRUZXJtICkKCiAgICAtLSBQcmludCBlcnJvciBub3RpY2UKICAgIGxvY2FsIHcsaCA9IHRlcm0uZ2V0U2l6ZSgpCiAgICB0ZXJtLnNldEN1cnNvclBvcyggMSwgaCApCiAgICB0ZXJtLmNsZWFyTGluZSgpCiAgICB0ZXJtLnNldEN1cnNvckJsaW5rKCBmYWxzZSApCiAgICBpZiBub3Qgb2sgdGhlbgogICAgICAgIHByaW50RXJyb3IoIGVycm9yICkKICAgIGVuZAoKICAgIC0tIExvZ291dAogICAgcmVkbmV0LnNlbmQoIG5Ib3N0SUQsIHsKICAgICAgICBzVHlwZSA9ICJsb2dvdXQiLAogICAgICAgIG5Vc2VySUQgPSBuVXNlcklELAogICAgfSwgImNoYXQiICkKICAgIGNsb3NlTW9kZW0oKQoKICAgIC0tIFByaW50IGRpc2Nvbm5lY3Rpb24gbm90aWNlCiAgICBwcmludCggIkRpc2Nvbm5lY3RlZC4iICkKCmVsc2UKICAgIC0tICJjaGF0IHNvbWV0aGluZ2Vsc2UiCiAgICBwcmludFVzYWdlKCkKCmVuZA==","isDir":false,"name":"chat","size":0},"root/programs/rednet/repeat":{"data":"Ci0tIEZpbmQgbW9kZW1zCmxvY2FsIHRNb2RlbXMgPSB7fQpmb3IgbixzTW9kZW0gaW4gaXBhaXJzKCBwZXJpcGhlcmFsLmdldE5hbWVzKCkgKSBkbwogICAgaWYgcGVyaXBoZXJhbC5nZXRUeXBlKCBzTW9kZW0gKSA9PSAibW9kZW0iIHRoZW4KICAgICAgICB0YWJsZS5pbnNlcnQoIHRNb2RlbXMsIHNNb2RlbSApCiAgICBlbmQKZW5kCmlmICN0TW9kZW1zID09IDAgdGhlbgogICAgcHJpbnQoICJObyBtb2RlbXMgZm91bmQuIiApCiAgICByZXR1cm4KZWxzZWlmICN0TW9kZW1zID09IDEgdGhlbgogICAgcHJpbnQoICIxIG1vZGVtIGZvdW5kLiIgKQplbHNlCiAgICBwcmludCggI3RNb2RlbXMgLi4gIiBtb2RlbXMgZm91bmQuIiApCmVuZAoKZnVuY3Rpb24gb3BlbiggbkNoYW5uZWwgKQogICAgZm9yIG49MSwjdE1vZGVtcyBkbwogICAgICAgIGxvY2FsIHNNb2RlbSA9IHRNb2RlbXNbbl0KICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgIm9wZW4iLCBuQ2hhbm5lbCApCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBjbG9zZSggbkNoYW5uZWwgKQogICAgZm9yIG49MSwjdE1vZGVtcyBkbwogICAgICAgIGxvY2FsIHNNb2RlbSA9IHRNb2RlbXNbbl0KICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNNb2RlbSwgImNsb3NlIiwgbkNoYW5uZWwgKQogICAgZW5kCmVuZAoKLS0gT3BlbiBjaGFubmVscwpwcmludCggIjAgbWVzc2FnZXMgcmVwZWF0ZWQuIiApCm9wZW4oIHJlZG5ldC5DSEFOTkVMX1JFUEVBVCApCgotLSBNYWluIGxvb3AgKHRlcm1pbmF0ZSB0byBicmVhaykKbG9jYWwgb2ssIGVycm9yID0gcGNhbGwoIGZ1bmN0aW9uKCkKICAgIGxvY2FsIHRSZWNlaXZlZE1lc3NhZ2VzID0ge30KICAgIGxvY2FsIHRSZWNlaXZlZE1lc3NhZ2VUaW1lb3V0cyA9IHt9CiAgICBsb2NhbCBuVHJhbnNtaXR0ZWRNZXNzYWdlcyA9IDAKCiAgICB3aGlsZSB0cnVlIGRvCiAgICAgICAgbG9jYWwgc0V2ZW50LCBzTW9kZW0sIG5DaGFubmVsLCBuUmVwbHlDaGFubmVsLCB0TWVzc2FnZSA9IG9zLnB1bGxFdmVudCgpCiAgICAgICAgaWYgc0V2ZW50ID09ICJtb2RlbV9tZXNzYWdlIiB0aGVuCiAgICAgICAgICAgIC0tIEdvdCBhIG1vZGVtIG1lc3NhZ2UsIHJlYnJvYWRjYXN0IGl0IGlmIGl0J3MgYSByZWRuZXQgdGhpbmcKICAgICAgICAgICAgaWYgbkNoYW5uZWwgPT0gcmVkbmV0LkNIQU5ORUxfUkVQRUFUIHRoZW4KICAgICAgICAgICAgICAgIGlmIHR5cGUoIHRNZXNzYWdlICkgPT0gInRhYmxlIiBhbmQgdE1lc3NhZ2Uubk1lc3NhZ2VJRCBhbmQgdE1lc3NhZ2UublJlY2lwaWVudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRSZWNlaXZlZE1lc3NhZ2VzWyB0TWVzc2FnZS5uTWVzc2FnZUlEIF0gdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAtLSBFbnN1cmUgd2Ugb25seSByZXBlYXQgYSBtZXNzYWdlIG9uY2UKICAgICAgICAgICAgICAgICAgICAgICAgdFJlY2VpdmVkTWVzc2FnZXNbIHRNZXNzYWdlLm5NZXNzYWdlSUQgXSA9IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgdFJlY2VpdmVkTWVzc2FnZVRpbWVvdXRzWyBvcy5zdGFydFRpbWVyKCAzMCApIF0gPSB0TWVzc2FnZS5uTWVzc2FnZUlECgogICAgICAgICAgICAgICAgICAgICAgICAtLSBTZW5kIG9uIGFsbCBvdGhlciBvcGVuIG1vZGVtcywgdG8gdGhlIHRhcmdldCBhbmQgdG8gb3RoZXIgcmVwZWF0ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuPTEsI3RNb2RlbXMgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHNPdGhlck1vZGVtID0gdE1vZGVtc1tuXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaXBoZXJhbC5jYWxsKCBzT3RoZXJNb2RlbSwgInRyYW5zbWl0IiwgcmVkbmV0LkNIQU5ORUxfUkVQRUFULCBuUmVwbHlDaGFubmVsLCB0TWVzc2FnZSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpcGhlcmFsLmNhbGwoIHNPdGhlck1vZGVtLCAidHJhbnNtaXQiLCB0TWVzc2FnZS5uUmVjaXBpZW50LCBuUmVwbHlDaGFubmVsLCB0TWVzc2FnZSApCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgICAgICAgICAgLS0gTG9nIHRoZSBldmVudAogICAgICAgICAgICAgICAgICAgICAgICBuVHJhbnNtaXR0ZWRNZXNzYWdlcyA9IG5UcmFuc21pdHRlZE1lc3NhZ2VzICsgMQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCB4LHkgPSB0ZXJtLmdldEN1cnNvclBvcygpCiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0uc2V0Q3Vyc29yUG9zKCAxLCB5IC0gMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0uY2xlYXJMaW5lKCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgblRyYW5zbWl0dGVkTWVzc2FnZXMgPT0gMSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCggblRyYW5zbWl0dGVkTWVzc2FnZXMgLi4gIiBtZXNzYWdlIHJlcGVhdGVkLiIgKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCggblRyYW5zbWl0dGVkTWVzc2FnZXMgLi4gIiBtZXNzYWdlcyByZXBlYXRlZC4iICkKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCgogICAgICAgIGVsc2VpZiBzRXZlbnQgPT0gInRpbWVyIiB0aGVuCiAgICAgICAgICAgIC0tIEdvdCBhIHRpbWVyIGV2ZW50LCB1c2UgaXQgdG8gY2xlYXIgdGhlIG1lc3NhZ2UgaGlzdG9yeQogICAgICAgICAgICBsb2NhbCBuVGltZXIgPSBzTW9kZW0KICAgICAgICAgICAgbG9jYWwgbk1lc3NhZ2VJRCA9IHRSZWNlaXZlZE1lc3NhZ2VUaW1lb3V0c1sgblRpbWVyIF0KICAgICAgICAgICAgaWYgbk1lc3NhZ2VJRCB0aGVuCiAgICAgICAgICAgICAgICB0UmVjZWl2ZWRNZXNzYWdlVGltZW91dHNbIG5UaW1lciBdID0gbmlsCiAgICAgICAgICAgICAgICB0UmVjZWl2ZWRNZXNzYWdlc1sgbk1lc3NhZ2VJRCBdID0gbmlsCiAgICAgICAgICAgIGVuZAoKICAgICAgICBlbmQKICAgIGVuZAplbmQgKQppZiBub3Qgb2sgdGhlbgogICAgcHJpbnRFcnJvciggZXJyb3IgKQplbmQKCi0tIENsb3NlIGNoYW5uZWxzCmNsb3NlKCByZWRuZXQuQ0hBTk5FTF9SRVBFQVQgKQ==","isDir":false,"name":"repeat","size":0},"root/programs/redstone":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQoKbG9jYWwgZnVuY3Rpb24gcHJpbnRVc2FnZSgpCiAgICBwcmludCggIlVzYWdlczoiICkKICAgIHByaW50KCAicmVkc3RvbmUgcHJvYmUiICkKICAgIHByaW50KCAicmVkc3RvbmUgc2V0IDxzaWRlPiA8dmFsdWU+IiApCiAgICBwcmludCggInJlZHN0b25lIHNldCA8c2lkZT4gPGNvbG9yPiA8dmFsdWU+IiApCiAgICBwcmludCggInJlZHN0b25lIHB1bHNlIDxzaWRlPiA8Y291bnQ+IDxwZXJpb2Q+IiApCmVuZAoKbG9jYWwgc0NvbW1hbmQgPSB0QXJnc1sxXQppZiBzQ29tbWFuZCA9PSAicHJvYmUiIHRoZW4KICAgIC0tICJyZWRzdG9uZSBwcm9iZSIKICAgIC0tIFJlZ3VsYXIgaW5wdXQKICAgIHByaW50KCAiUmVkc3RvbmUgaW5wdXRzOiAiICkKCiAgICBsb2NhbCBjb3VudCA9IDAKICAgIGxvY2FsIGJ1bmRsZWRDb3VudCA9IDAKICAgIGZvciBuLHNTaWRlIGluIGlwYWlycyggcmVkc3RvbmUuZ2V0U2lkZXMoKSApIGRvCiAgICAgICAgaWYgcmVkc3RvbmUuZ2V0QnVuZGxlZElucHV0KCBzU2lkZSApID4gMCB0aGVuCiAgICAgICAgICAgIGJ1bmRsZWRDb3VudCA9IGJ1bmRsZWRDb3VudCArIDEKICAgICAgICBlbmQKICAgICAgICBpZiByZWRzdG9uZS5nZXRJbnB1dCggc1NpZGUgKSB0aGVuCiAgICAgICAgICAgIGlmIGNvdW50ID4gMCB0aGVuCiAgICAgICAgICAgICAgICBpby53cml0ZSggIiwgIiApCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBpby53cml0ZSggc1NpZGUgKQogICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgIGVuZAogICAgZW5kCiAgICBpZiBjb3VudCA+IDAgdGhlbgogICAgICAgIHByaW50KCAiLiIgKQogICAgZWxzZQogICAgICAgIHByaW50KCAiTm9uZS4iICkKICAgIGVuZAoKICAgIC0tIEJ1bmRsZWQgaW5wdXQKICAgIGlmIGJ1bmRsZWRDb3VudCA+IDAgdGhlbgogICAgICAgIHByaW50KCkKICAgICAgICBwcmludCggIkJ1bmRsZWQgaW5wdXRzOiIgKQogICAgICAgIGZvciBpLHNTaWRlIGluIGlwYWlycyggcmVkc3RvbmUuZ2V0U2lkZXMoKSApIGRvCiAgICAgICAgICAgIGxvY2FsIG5JbnB1dCA9IHJlZHN0b25lLmdldEJ1bmRsZWRJbnB1dCggc1NpZGUgKQogICAgICAgICAgICBpZiBuSW5wdXQgfj0gMCB0aGVuCiAgICAgICAgICAgICAgICB3cml0ZSggc1NpZGUuLiI6ICIgKQogICAgICAgICAgICAgICAgbG9jYWwgY291bnQgPSAwCiAgICAgICAgICAgICAgICBmb3Igc0NvbG91cixuQ29sb3VyIGluIHBhaXJzKCBjb2xvcnMgKSBkbwogICAgICAgICAgICAgICAgICAgIGlmIHR5cGUoIG5Db2xvdXIgKSA9PSAibnVtYmVyIiBhbmQgY29sb3JzLnRlc3QoIG5JbnB1dCwgbkNvbG91ciApIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgY291bnQgPiAwIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCAiLCAiICkKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLnNldFRleHRDb2xvdXIoIG5Db2xvdXIgKQogICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoIHNDb2xvdXIgKQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXJtLmlzQ29sb3VyKCkgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5zZXRUZXh0Q29sb3VyKCBjb2xvdXJzLndoaXRlICkKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIHByaW50KCAiLiIgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAoKZWxzZWlmIHNDb21tYW5kID09ICJwdWxzZSIgdGhlbgogICAgLS0gInJlZHN0b25lIHB1bHNlIgogICAgbG9jYWwgc1NpZGUgPSB0QXJnc1syXQogICAgbG9jYWwgbkNvdW50ID0gdG9udW1iZXIoIHRBcmdzWzNdICkgb3IgMQogICAgbG9jYWwgblBlcmlvZCA9IHRvbnVtYmVyKCB0QXJnc1s0XSApIG9yIDAuNQogICAgZm9yIG49MSxuQ291bnQgZG8KICAgICAgICByZWRzdG9uZS5zZXRPdXRwdXQoIHNTaWRlLCB0cnVlICkKICAgICAgICBzbGVlcCggblBlcmlvZCAvIDIgKQogICAgICAgIHJlZHN0b25lLnNldE91dHB1dCggc1NpZGUsIGZhbHNlICkKICAgICAgICBzbGVlcCggblBlcmlvZCAvIDIgKQogICAgZW5kCgplbHNlaWYgc0NvbW1hbmQgPT0gInNldCIgdGhlbgogICAgLS0gInJlZHN0b25lIHNldCIKICAgIGxvY2FsIHNTaWRlID0gdEFyZ3NbMl0KICAgIGlmICN0QXJncyA+IDMgdGhlbgogICAgICAgIC0tIEJ1bmRsZWQgY2FibGUgb3V0cHV0CiAgICAgICAgbG9jYWwgc0NvbG91ciA9IHRBcmdzWzNdCiAgICAgICAgbG9jYWwgbkNvbG91ciA9IGNvbG9yc1tzQ29sb3VyXSBvciBjb2xvdXJzW3NDb2xvdXJdCiAgICAgICAgaWYgdHlwZShuQ29sb3VyKSB+PSAibnVtYmVyIiB0aGVuCiAgICAgICAgICAgIHByaW50RXJyb3IoICJObyBzdWNoIGNvbG9yIiApCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGVuZAoKICAgICAgICBsb2NhbCBzVmFsdWUgPSB0QXJnc1s0XQogICAgICAgIGlmIHNWYWx1ZSA9PSAidHJ1ZSIgdGhlbgogICAgICAgICAgICBycy5zZXRCdW5kbGVkT3V0cHV0KCBzU2lkZSwgY29sb3JzLmNvbWJpbmUoIHJzLmdldEJ1bmRsZWRPdXRwdXQoIHNTaWRlICksIG5Db2xvdXIgKSApCiAgICAgICAgZWxzZWlmIHNWYWx1ZSA9PSAiZmFsc2UiIHRoZW4KICAgICAgICAgICAgcnMuc2V0QnVuZGxlZE91dHB1dCggc1NpZGUsIGNvbG9ycy5zdWJ0cmFjdCggcnMuZ2V0QnVuZGxlZE91dHB1dCggc1NpZGUgKSwgbkNvbG91ciApICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50KCAiVmFsdWUgbXVzdCBiZSBib29sZWFuIiApCiAgICAgICAgZW5kCiAgICBlbHNlCiAgICAgICAgLS0gUmVndWxhciBvdXRwdXQKICAgICAgICBsb2NhbCBzVmFsdWUgPSB0QXJnc1szXQogICAgICAgIGxvY2FsIG5WYWx1ZSA9IHRvbnVtYmVyKHNWYWx1ZSkKICAgICAgICBpZiBzVmFsdWUgPT0gInRydWUiIHRoZW4KICAgICAgICAgICAgcnMuc2V0T3V0cHV0KCBzU2lkZSwgdHJ1ZSApCiAgICAgICAgZWxzZWlmIHNWYWx1ZSA9PSAiZmFsc2UiIHRoZW4KICAgICAgICAgICAgcnMuc2V0T3V0cHV0KCBzU2lkZSwgZmFsc2UgKQogICAgICAgIGVsc2VpZiBuVmFsdWUgYW5kIG5WYWx1ZSA+PSAwIGFuZCBuVmFsdWUgPD0gMTUgdGhlbgogICAgICAgICAgICBycy5zZXRBbmFsb2dPdXRwdXQoIHNTaWRlLCBuVmFsdWUgKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnQoICJWYWx1ZSBtdXN0IGJlIGJvb2xlYW4gb3IgMC0xNSIgKQogICAgICAgIGVuZAogICAgZW5kCgplbHNlCiAgICAtLSBTb21ldGhpbmcgZWxzZQogICAgcHJpbnRVc2FnZSgpCgplbmQ=","isDir":false,"name":"redstone","size":0},"root/programs/rename":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA8IDIgdGhlbgoJcHJpbnQoICJVc2FnZTogcmVuYW1lIDxzb3VyY2U+IDxkZXN0aW5hdGlvbj4iICkKCXJldHVybgplbmQKCmxvY2FsIHNTb3VyY2UgPSBzaGVsbC5yZXNvbHZlKCB0QXJnc1sxXSApCmxvY2FsIHNEZXN0ID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMl0gKQpmcy5tb3ZlKCBzU291cmNlLCBzRGVzdCAp","isDir":false,"name":"rename","size":0},"root/programs/shell":{"data":"CmxvY2FsIG11bHRpc2hlbGwgPSBtdWx0aXNoZWxsCmxvY2FsIHBhcmVudFNoZWxsID0gc2hlbGwKbG9jYWwgcGFyZW50VGVybSA9IHRlcm0uY3VycmVudCgpCgppZiBtdWx0aXNoZWxsIHRoZW4KICAgIG11bHRpc2hlbGwuc2V0VGl0bGUoIG11bHRpc2hlbGwuZ2V0Q3VycmVudCgpLCAic2hlbGwiICkKZW5kCgpsb2NhbCBiRXhpdCA9IGZhbHNlCmxvY2FsIHNEaXIgPSAocGFyZW50U2hlbGwgYW5kIHBhcmVudFNoZWxsLmRpcigpKSBvciAiIgpsb2NhbCBzUGF0aCA9IChwYXJlbnRTaGVsbCBhbmQgcGFyZW50U2hlbGwucGF0aCgpKSBvciAiLjovcm9tL3Byb2dyYW1zIgpsb2NhbCB0QWxpYXNlcyA9IChwYXJlbnRTaGVsbCBhbmQgcGFyZW50U2hlbGwuYWxpYXNlcygpKSBvciB7fQpsb2NhbCB0UHJvZ3JhbVN0YWNrID0ge30KCmxvY2FsIHNoZWxsID0ge30KbG9jYWwgdEVudiA9IHsKCVsgInNoZWxsIiBdID0gc2hlbGwsCglbICJtdWx0aXNoZWxsIiBdID0gbXVsdGlzaGVsbCwKfQoKLS0gQ29sb3Vycwpsb2NhbCBwcm9tcHRDb2xvdXIsIHRleHRDb2xvdXIsIGJnQ29sb3VyCmlmIHRlcm0uaXNDb2xvdXIoKSB0aGVuCglwcm9tcHRDb2xvdXIgPSBjb2xvdXJzLnllbGxvdwoJdGV4dENvbG91ciA9IGNvbG91cnMud2hpdGUKCWJnQ29sb3VyID0gY29sb3Vycy5ibGFjawplbHNlCglwcm9tcHRDb2xvdXIgPSBjb2xvdXJzLndoaXRlCgl0ZXh0Q29sb3VyID0gY29sb3Vycy53aGl0ZQoJYmdDb2xvdXIgPSBjb2xvdXJzLmJsYWNrCmVuZAoKbG9jYWwgZnVuY3Rpb24gcnVuKCBfc0NvbW1hbmQsIC4uLiApCglsb2NhbCBzUGF0aCA9IHNoZWxsLnJlc29sdmVQcm9ncmFtKCBfc0NvbW1hbmQgKQoJaWYgc1BhdGggfj0gbmlsIHRoZW4KCQl0UHJvZ3JhbVN0YWNrWyN0UHJvZ3JhbVN0YWNrICsgMV0gPSBzUGF0aAoJCWlmIG11bHRpc2hlbGwgdGhlbgoJCSAgICBtdWx0aXNoZWxsLnNldFRpdGxlKCBtdWx0aXNoZWxsLmdldEN1cnJlbnQoKSwgZnMuZ2V0TmFtZSggc1BhdGggKSApCgkJZW5kCiAgIAkJbG9jYWwgcmVzdWx0ID0gb3MucnVuKCB0RW52LCBzUGF0aCwgLi4uICkKCQl0UHJvZ3JhbVN0YWNrWyN0UHJvZ3JhbVN0YWNrXSA9IG5pbAoJCWlmIG11bHRpc2hlbGwgdGhlbgoJCSAgICBpZiAjdFByb2dyYW1TdGFjayA+IDAgdGhlbgogICAgCQkgICAgbXVsdGlzaGVsbC5zZXRUaXRsZSggbXVsdGlzaGVsbC5nZXRDdXJyZW50KCksIGZzLmdldE5hbWUoIHRQcm9ncmFtU3RhY2tbI3RQcm9ncmFtU3RhY2tdICkgKQogICAgCQllbHNlCiAgICAJCSAgICBtdWx0aXNoZWxsLnNldFRpdGxlKCBtdWx0aXNoZWxsLmdldEN1cnJlbnQoKSwgInNoZWxsIiApCiAgICAJCWVuZAoJCWVuZAoJCXJldHVybiByZXN1bHQKICAgCWVsc2UKICAgIAlwcmludEVycm9yKCAiTm8gc3VjaCBwcm9ncmFtIiApCiAgICAJcmV0dXJuIGZhbHNlCiAgICBlbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiB0b2tlbmlzZSggLi4uICkKICAgIGxvY2FsIHNMaW5lID0gdGFibGUuY29uY2F0KCB7IC4uLiB9LCAiICIgKQoJbG9jYWwgdFdvcmRzID0ge30KICAgIGxvY2FsIGJRdW90ZWQgPSBmYWxzZQogICAgZm9yIG1hdGNoIGluIHN0cmluZy5nbWF0Y2goIHNMaW5lIC4uICJcIiIsICIoLi0pXCIiICkgZG8KICAgICAgICBpZiBiUXVvdGVkIHRoZW4KICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0V29yZHMsIG1hdGNoICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZvciBtIGluIHN0cmluZy5nbWF0Y2goIG1hdGNoLCAiW14gXHRdKyIgKSBkbwogICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCB0V29yZHMsIG0gKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBiUXVvdGVkID0gbm90IGJRdW90ZWQKICAgIGVuZAogICAgcmV0dXJuIHRXb3JkcwplbmQKCi0tIEluc3RhbGwgc2hlbGwgQVBJCmZ1bmN0aW9uIHNoZWxsLnJ1biggLi4uICkKCWxvY2FsIHRXb3JkcyA9IHRva2VuaXNlKCAuLi4gKQoJbG9jYWwgc0NvbW1hbmQgPSB0V29yZHNbMV0KCWlmIHNDb21tYW5kIHRoZW4KCQlyZXR1cm4gcnVuKCBzQ29tbWFuZCwgdW5wYWNrKCB0V29yZHMsIDIgKSApCgllbmQKCXJldHVybiBmYWxzZQplbmQKCmZ1bmN0aW9uIHNoZWxsLmV4aXQoKQogICAgYkV4aXQgPSB0cnVlCmVuZAoKZnVuY3Rpb24gc2hlbGwuZGlyKCkKCXJldHVybiBzRGlyCmVuZAoKZnVuY3Rpb24gc2hlbGwuc2V0RGlyKCBfc0RpciApCglzRGlyID0gX3NEaXIKZW5kCgpmdW5jdGlvbiBzaGVsbC5wYXRoKCkKCXJldHVybiBzUGF0aAplbmQKCmZ1bmN0aW9uIHNoZWxsLnNldFBhdGgoIF9zUGF0aCApCglzUGF0aCA9IF9zUGF0aAplbmQKCmZ1bmN0aW9uIHNoZWxsLnJlc29sdmUoIF9zUGF0aCApCglsb2NhbCBzU3RhcnRDaGFyID0gc3RyaW5nLnN1YiggX3NQYXRoLCAxLCAxICkKCWlmIHNTdGFydENoYXIgPT0gIi8iIG9yIHNTdGFydENoYXIgPT0gIlxcIiB0aGVuCgkJcmV0dXJuIGZzLmNvbWJpbmUoICIiLCBfc1BhdGggKQoJZWxzZQoJCXJldHVybiBmcy5jb21iaW5lKCBzRGlyLCBfc1BhdGggKQoJZW5kCmVuZAoKZnVuY3Rpb24gc2hlbGwucmVzb2x2ZVByb2dyYW0oIF9zQ29tbWFuZCApCgktLSBTdWJzdGl0dXRlIGFsaWFzZXMgZmlyc3RzCglpZiB0QWxpYXNlc1sgX3NDb21tYW5kIF0gfj0gbmlsIHRoZW4KCQlfc0NvbW1hbmQgPSB0QWxpYXNlc1sgX3NDb21tYW5kIF0KCWVuZAoKICAgIC0tIElmIHRoZSBwYXRoIGlzIGEgZ2xvYmFsIHBhdGgsIHVzZSBpdCBkaXJlY3RseQogICAgbG9jYWwgc1N0YXJ0Q2hhciA9IHN0cmluZy5zdWIoIF9zQ29tbWFuZCwgMSwgMSApCiAgICBpZiBzU3RhcnRDaGFyID09ICIvIiBvciBzU3RhcnRDaGFyID09ICJcXCIgdGhlbgogICAgCWxvY2FsIHNQYXRoID0gZnMuY29tYmluZSggIiIsIF9zQ29tbWFuZCApCiAgICAJaWYgZnMuZXhpc3RzKCBzUGF0aCApIGFuZCBub3QgZnMuaXNEaXIoIHNQYXRoICkgdGhlbgoJCQlyZXR1cm4gc1BhdGgKICAgIAllbmQKCQlyZXR1cm4gbmlsCiAgICBlbmQKICAgIAogCS0tIE90aGVyd2lzZSwgbG9vayBvbiB0aGUgcGF0aCB2YXJpYWJsZQogICAgZm9yIHNQYXRoIGluIHN0cmluZy5nbWF0Y2goc1BhdGgsICJbXjpdKyIpIGRvCiAgICAJc1BhdGggPSBmcy5jb21iaW5lKCBzaGVsbC5yZXNvbHZlKCBzUGF0aCApLCBfc0NvbW1hbmQgKQogICAgCWlmIGZzLmV4aXN0cyggc1BhdGggKSBhbmQgbm90IGZzLmlzRGlyKCBzUGF0aCApIHRoZW4KCQkJcmV0dXJuIHNQYXRoCiAgICAJZW5kCiAgICBlbmQKCQoJLS0gTm90IGZvdW5kCglyZXR1cm4gbmlsCmVuZAoKZnVuY3Rpb24gc2hlbGwucHJvZ3JhbXMoIF9iSW5jbHVkZUhpZGRlbiApCglsb2NhbCB0SXRlbXMgPSB7fQoJCgktLSBBZGQgcHJvZ3JhbXMgZnJvbSB0aGUgcGF0aAogICAgZm9yIHNQYXRoIGluIHN0cmluZy5nbWF0Y2goc1BhdGgsICJbXjpdKyIpIGRvCiAgICAJc1BhdGggPSBzaGVsbC5yZXNvbHZlKCBzUGF0aCApCgkJaWYgZnMuaXNEaXIoIHNQYXRoICkgdGhlbgoJCQlsb2NhbCB0TGlzdCA9IGZzLmxpc3QoIHNQYXRoICkKCQkJZm9yIG4sc0ZpbGUgaW4gcGFpcnMoIHRMaXN0ICkgZG8KCQkJCWlmIG5vdCBmcy5pc0RpciggZnMuY29tYmluZSggc1BhdGgsIHNGaWxlICkgKSBhbmQKCQkJCSAgIChfYkluY2x1ZGVIaWRkZW4gb3Igc3RyaW5nLnN1Yiggc0ZpbGUsIDEsIDEgKSB+PSAiLiIpIHRoZW4KCQkJCQl0SXRlbXNbIHNGaWxlIF0gPSB0cnVlCgkJCQllbmQKCQkJZW5kCgkJZW5kCiAgICBlbmQJCgoJLS0gU29ydCBhbmQgcmV0dXJuCglsb2NhbCB0SXRlbUxpc3QgPSB7fQoJZm9yIHNJdGVtLCBiIGluIHBhaXJzKCB0SXRlbXMgKSBkbwoJCXRhYmxlLmluc2VydCggdEl0ZW1MaXN0LCBzSXRlbSApCgllbmQKCXRhYmxlLnNvcnQoIHRJdGVtTGlzdCApCglyZXR1cm4gdEl0ZW1MaXN0CmVuZAoKZnVuY3Rpb24gc2hlbGwuZ2V0UnVubmluZ1Byb2dyYW0oKQoJaWYgI3RQcm9ncmFtU3RhY2sgPiAwIHRoZW4KCQlyZXR1cm4gdFByb2dyYW1TdGFja1sjdFByb2dyYW1TdGFja10KCWVuZAoJcmV0dXJuIG5pbAplbmQKCmZ1bmN0aW9uIHNoZWxsLnNldEFsaWFzKCBfc0NvbW1hbmQsIF9zUHJvZ3JhbSApCgl0QWxpYXNlc1sgX3NDb21tYW5kIF0gPSBfc1Byb2dyYW0KZW5kCgpmdW5jdGlvbiBzaGVsbC5jbGVhckFsaWFzKCBfc0NvbW1hbmQgKQoJdEFsaWFzZXNbIF9zQ29tbWFuZCBdID0gbmlsCmVuZAoKZnVuY3Rpb24gc2hlbGwuYWxpYXNlcygpCgktLSBBZGQgYWxpYXNlcwoJbG9jYWwgdENvcHkgPSB7fQoJZm9yIHNBbGlhcywgc0NvbW1hbmQgaW4gcGFpcnMoIHRBbGlhc2VzICkgZG8KCQl0Q29weVtzQWxpYXNdID0gc0NvbW1hbmQKCWVuZAoJcmV0dXJuIHRDb3B5CmVuZAoKaWYgbXVsdGlzaGVsbCB0aGVuCiAgICBmdW5jdGlvbiBzaGVsbC5vcGVuVGFiKCAuLi4gKQogICAgICAgIGxvY2FsIHRXb3JkcyA9IHRva2VuaXNlKCAuLi4gKQogICAgICAgIGxvY2FsIHNDb21tYW5kID0gdFdvcmRzWzFdCiAgICAgICAgaWYgc0NvbW1hbmQgdGhlbgogICAgICAgIAlsb2NhbCBzUGF0aCA9IHNoZWxsLnJlc29sdmVQcm9ncmFtKCBzQ29tbWFuZCApCiAgICAgICAgCWlmIHNQYXRoID09ICJyb20vcHJvZ3JhbXMvc2hlbGwiIHRoZW4KICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXNoZWxsLmxhdW5jaCggdEVudiwgc1BhdGgsIHVucGFjayggdFdvcmRzLCAyICkgKQogICAgICAgICAgICBlbHNlaWYgc1BhdGggfj0gbmlsIHRoZW4KICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXNoZWxsLmxhdW5jaCggdEVudiwgInJvbS9wcm9ncmFtcy9zaGVsbCIsIHNQYXRoLCB1bnBhY2soIHRXb3JkcywgMiApICkKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRFcnJvciggIk5vIHN1Y2ggcHJvZ3JhbSIgKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAoKICAgIGZ1bmN0aW9uIHNoZWxsLnN3aXRjaFRhYiggbklEICkKICAgICAgICBtdWx0aXNoZWxsLnNldEZvY3VzKCBuSUQgKQogICAgZW5kCmVuZAoKbG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA+IDAgdGhlbgogICAgLS0gInNoZWxsIHggeSB6IgogICAgLS0gUnVuIHRoZSBwcm9ncmFtIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUKICAgIHNoZWxsLnJ1biggLi4uICkKCmVsc2UKICAgIC0tICJzaGVsbCIKICAgIC0tIFByaW50IHRoZSBoZWFkZXIKICAgIHRlcm0uc2V0QmFja2dyb3VuZENvbG9yKCBiZ0NvbG91ciApCiAgICB0ZXJtLnNldFRleHRDb2xvdXIoIHByb21wdENvbG91ciApCiAgICBwcmludCggb3MudmVyc2lvbigpICkKICAgIHRlcm0uc2V0VGV4dENvbG91ciggdGV4dENvbG91ciApCgogICAgLS0gUnVuIHRoZSBzdGFydHVwIHByb2dyYW0KICAgIGlmIHBhcmVudFNoZWxsID09IG5pbCB0aGVuCiAgICAgICAgc2hlbGwucnVuKCAiL3JvbS9zdGFydHVwIiApCiAgICBlbmQKCiAgICAtLSBSZWFkIGNvbW1hbmRzIGFuZCBleGVjdXRlIHRoZW0KICAgIGxvY2FsIHRDb21tYW5kSGlzdG9yeSA9IHt9CiAgICB3aGlsZSBub3QgYkV4aXQgZG8KICAgICAgICB0ZXJtLnJlZGlyZWN0KCBwYXJlbnRUZXJtICkKICAgICAgICB0ZXJtLnNldEJhY2tncm91bmRDb2xvciggYmdDb2xvdXIgKQogICAgICAgIHRlcm0uc2V0VGV4dENvbG91ciggcHJvbXB0Q29sb3VyICkKICAgICAgICB3cml0ZSggc2hlbGwuZGlyKCkgLi4gIj4gIiApCiAgICAgICAgdGVybS5zZXRUZXh0Q29sb3VyKCB0ZXh0Q29sb3VyICkKCiAgICAgICAgbG9jYWwgc0xpbmUgPSByZWFkKCBuaWwsIHRDb21tYW5kSGlzdG9yeSApCiAgICAgICAgdGFibGUuaW5zZXJ0KCB0Q29tbWFuZEhpc3RvcnksIHNMaW5lICkKICAgICAgICBzaGVsbC5ydW4oIHNMaW5lICkKICAgIGVuZAplbmQ=","isDir":false,"name":"shell","size":0},"root/programs/shutdown":{"data":"aWYgdGVybS5pc0NvbG91cigpIHRoZW4KCXRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy55ZWxsb3cgKQplbmQKcHJpbnQoICJHb29kYnllIiApCnRlcm0uc2V0VGV4dENvbG91ciggY29sb3Vycy53aGl0ZSApCgpzbGVlcCggMSApCm9zLnNodXRkb3duKCk=","isDir":false,"name":"shutdown","size":0},"root/programs/time":{"data":"bG9jYWwgblRpbWUgPSBvcy50aW1lKCkKbG9jYWwgbkRheSA9IG9zLmRheSgpCnByaW50KCAiVGhlIHRpbWUgaXMgIi4udGV4dHV0aWxzLmZvcm1hdFRpbWUoIG5UaW1lLCBmYWxzZSApLi4iIG9uIERheSAiLi5uRGF5ICk=","isDir":false,"name":"time","size":0},"root/programs/turtle":{"children":["craft","dance","equip","excavate","go","refuel","tunnel","turn","unequip"],"isDir":true,"name":"turtle","parents":["/root","/root/programs","/root/programs/turtle"],"size":0},"root/programs/turtle/craft":{"data":"CmlmIG5vdCB0dXJ0bGUuY3JhZnQgdGhlbgogICAgcHJpbnQoICJSZXF1aXJlcyBhIENyYWZ0eSBUdXJ0bGUiICkKICAgIHJldHVybgplbmQKCmxvY2FsIHRBcmdzID0geyAuLi4gfQpsb2NhbCBuTGltaXQgPSBuaWwKaWYgI3RBcmdzIDwgMSB0aGVuCglwcmludCggIlVzYWdlOiBjcmFmdCBbbnVtYmVyXSIgKQoJcmV0dXJuCmVsc2UKCW5MaW1pdCA9IHRvbnVtYmVyKCB0QXJnc1sxXSApCmVuZAoKbG9jYWwgbkNyYWZ0ZWQgPSAwCmxvY2FsIG5PbGRDb3VudCA9IHR1cnRsZS5nZXRJdGVtQ291bnQoIHR1cnRsZS5nZXRTZWxlY3RlZFNsb3QoKSApCmlmIHR1cnRsZS5jcmFmdCggbkxpbWl0ICkgdGhlbgogICAgbG9jYWwgbk5ld0NvdW50ID0gdHVydGxlLmdldEl0ZW1Db3VudCggdHVydGxlLmdldFNlbGVjdGVkU2xvdCgpICkKICAgIGlmIG5PbGRDb3VudCA8PSBuTGltaXQgdGhlbgogICAgICAgIG5DcmFmdGVkID0gbk5ld0NvdW50CiAgICBlbHNlCiAgICAgICAgbkNyYWZ0ZWQgPSBuT2xkQ291bnQgLSBuTmV3Q291bnQKICAgIGVuZAplbmQKCmlmIG5DcmFmdGVkID4gMSB0aGVuCiAgICBwcmludCggbkNyYWZ0ZWQuLiIgaXRlbXMgY3JhZnRlZCIgKQplbHNlaWYgbkNyYWZ0ZWQgPT0gMSB0aGVuCiAgICBwcmludCggIjEgaXRlbSBjcmFmdGVkIiApCmVsc2UKICAgIHByaW50KCAiTm8gaXRlbXMgY3JhZnRlZCIgKQplbmQ=","isDir":false,"name":"craft","size":0},"root/programs/turtle/dance":{"data":"CmxvY2FsIHRNb3ZlcyA9IHsKCWZ1bmN0aW9uKCkKCQl0dXJ0bGUudXAoKQoJCXR1cnRsZS5kb3duKCkKCWVuZCwKCWZ1bmN0aW9uKCkKCQl0dXJ0bGUudXAoKQoJCXR1cnRsZS50dXJuTGVmdCgpCgkJdHVydGxlLnR1cm5MZWZ0KCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJCXR1cnRsZS50dXJuTGVmdCgpCgkJdHVydGxlLmRvd24oKQoJZW5kLAoJZnVuY3Rpb24oKQoJCXR1cnRsZS51cCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLmRvd24oKQoJZW5kLAoJZnVuY3Rpb24oKQoJCXR1cnRsZS50dXJuTGVmdCgpCgkJdHVydGxlLnR1cm5MZWZ0KCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJCXR1cnRsZS50dXJuTGVmdCgpCgllbmQsCglmdW5jdGlvbigpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLnR1cm5SaWdodCgpCgllbmQsCglmdW5jdGlvbigpCgkJdHVydGxlLnR1cm5MZWZ0KCkKCQl0dXJ0bGUuYmFjaygpCgkJdHVydGxlLmJhY2soKQoJCXR1cnRsZS50dXJuUmlnaHQoKQoJCXR1cnRsZS50dXJuUmlnaHQoKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUuYmFjaygpCgkJdHVydGxlLnR1cm5MZWZ0KCkKCWVuZCwKCWZ1bmN0aW9uKCkKCQl0dXJ0bGUudHVyblJpZ2h0KCkKCQl0dXJ0bGUuYmFjaygpCgkJdHVydGxlLmJhY2soKQoJCXR1cnRsZS50dXJuTGVmdCgpCgkJdHVydGxlLnR1cm5MZWZ0KCkKCQl0dXJ0bGUuYmFjaygpCgkJdHVydGxlLmJhY2soKQoJCXR1cnRsZS50dXJuUmlnaHQoKQoJZW5kLAoJZnVuY3Rpb24oKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVybkxlZnQoKQoJZW5kLAoJZnVuY3Rpb24oKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVyblJpZ2h0KCkKCQl0dXJ0bGUuYmFjaygpCgkJdHVydGxlLnR1cm5SaWdodCgpCgkJdHVydGxlLmJhY2soKQoJCXR1cnRsZS50dXJuUmlnaHQoKQoJCXR1cnRsZS5iYWNrKCkKCQl0dXJ0bGUudHVyblJpZ2h0KCkKCWVuZCwKfQoKdGV4dHV0aWxzLnNsb3dXcml0ZSggIlByZXBhcmluZyB0byBnZXQgZG93bi4iICkKdGV4dHV0aWxzLnNsb3dQcmludCggIi4uIiwgMC43NSApCgpsb2NhbCBzQXVkaW8gPSBuaWwKZm9yIG4sc05hbWUgaW4gcGFpcnMoIHBlcmlwaGVyYWwuZ2V0TmFtZXMoKSApIGRvCglpZiBkaXNrLmhhc0F1ZGlvKCBzTmFtZSApIHRoZW4KCQlkaXNrLnBsYXlBdWRpbyggc05hbWUgKQoJCXByaW50KCAiSmFtbWluZyB0byAiLi5kaXNrLmdldEF1ZGlvVGl0bGUoIHNOYW1lICkgKQoJCXNBdWRpbyA9IHNOYW1lCgkJYnJlYWsKCWVuZAplbmQKCnByaW50KCAiUHJlc3MgYW55IGtleSB0byBzdG9wIHRoZSBncm9vdmUiICkKCmxvY2FsIGJFbmQgPSBmYWxzZQpwYXJhbGxlbC53YWl0Rm9yQWxsKAoJZnVuY3Rpb24oKQoJCXdoaWxlIG5vdCBiRW5kIGRvCgkJCWxvY2FsIGV2ZW50LCBrZXkgPSBvcy5wdWxsRXZlbnQoImtleSIpCgkJCWlmIGtleSB+PSBrZXlzLmVzY2FwZSB0aGVuCgkJCQliRW5kID0gdHJ1ZQoJCQllbmQKCQllbmQJCQoJZW5kLAoJZnVuY3Rpb24oKQoJCXdoaWxlIG5vdCBiRW5kIGRvCgkJCWxvY2FsIGZuTW92ZSA9IHRNb3Zlc1ttYXRoLnJhbmRvbSgxLCN0TW92ZXMpXQoJCQlmbk1vdmUoKQoJCWVuZAoJZW5kCikKCmlmIHNBdWRpbyB0aGVuCglkaXNrLnN0b3BBdWRpbyggc0F1ZGlvICkKZW5k","isDir":false,"name":"dance","size":0},"root/programs/turtle/equip":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQpsb2NhbCBmdW5jdGlvbiBwcmludFVzYWdlKCkKCXByaW50KCAiVXNhZ2U6IGVxdWlwIDxzbG90PiA8c2lkZT4iICkKZW5kCgppZiAjdEFyZ3Mgfj0gMiB0aGVuCiAgICBwcmludFVzYWdlKCkKCXJldHVybgplbmQKCmxvY2FsIGZ1bmN0aW9uIGVxdWlwKCBuU2xvdCwgZm5FcXVpcEZ1bmN0aW9uICkKICAgIHR1cnRsZS5zZWxlY3QoIG5TbG90ICkKICAgIGxvY2FsIG5PbGRDb3VudCA9IHR1cnRsZS5nZXRJdGVtQ291bnQoIG5TbG90ICkKICAgIGlmIG5PbGRDb3VudCA9PSAwIHRoZW4KICAgICAgICBwcmludCggIk5vdGhpbmcgdG8gZXF1aXAiICkKICAgIGVsc2VpZiBmbkVxdWlwRnVuY3Rpb24oKSB0aGVuCiAgICAgICAgbG9jYWwgbk5ld0NvdW50ID0gdHVydGxlLmdldEl0ZW1Db3VudCggblNsb3QgKQogICAgICAgIGlmIG5OZXdDb3VudCA+IDAgdGhlbgogICAgICAgICAgICBwcmludCggIkl0ZW1zIHN3YXBwZWQiICkKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50KCAiSXRlbSBlcXVpcHBlZCIgKQogICAgICAgIGVuZAogICAgZWxzZQogICAgICAgIHByaW50KCAiSXRlbSBub3QgZXF1aXBwYWJsZSIgKQogICAgZW5kCmVuZAoKbG9jYWwgblNsb3QgPSB0b251bWJlciggdEFyZ3NbMV0gKQpsb2NhbCBzU2lkZSA9IHRBcmdzWzJdCmlmIHNTaWRlID09ICJsZWZ0IiB0aGVuCiAgICBlcXVpcCggblNsb3QsIHR1cnRsZS5lcXVpcExlZnQgKQplbHNlaWYgc1NpZGUgPT0gInJpZ2h0IiB0aGVuCiAgICBlcXVpcCggblNsb3QsIHR1cnRsZS5lcXVpcFJpZ2h0ICkKZWxzZQogICAgcHJpbnRVc2FnZSgpCiAgICByZXR1cm4KZW5k","isDir":false,"name":"equip","size":0},"root/programs/turtle/excavate":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3Mgfj0gMSB0aGVuCglwcmludCggIlVzYWdlOiBleGNhdmF0ZSA8ZGlhbWV0ZXI+IiApCglyZXR1cm4KZW5kCgotLSBNaW5lIGluIGEgcXVhcnJ5IHBhdHRlcm4gdW50aWwgd2UgaGl0IHNvbWV0aGluZyB3ZSBjYW4ndCBkaWcKbG9jYWwgc2l6ZSA9IHRvbnVtYmVyKCB0QXJnc1sxXSApCmlmIHNpemUgPCAxIHRoZW4KCXByaW50KCAiRXhjYXZhdGUgZGlhbWV0ZXIgbXVzdCBiZSBwb3NpdGl2ZSIgKQoJcmV0dXJuCmVuZAoJCmxvY2FsIGRlcHRoID0gMApsb2NhbCB1bmxvYWRlZCA9IDAKbG9jYWwgY29sbGVjdGVkID0gMAoKbG9jYWwgeFBvcyx6UG9zID0gMCwwCmxvY2FsIHhEaXIsekRpciA9IDAsMQoKbG9jYWwgZ29UbyAtLSBGaWxsZWQgaW4gZnVydGhlciBkb3duCmxvY2FsIHJlZnVlbCAtLSBGaWxsZWQgaW4gZnVydGhlciBkb3duCiAKbG9jYWwgZnVuY3Rpb24gdW5sb2FkKCBfYktlZXBPbmVGdWVsU3RhY2sgKQoJcHJpbnQoICJVbmxvYWRpbmcgaXRlbXMuLi4iICkKCWZvciBuPTEsMTYgZG8KCQlsb2NhbCBuQ291bnQgPSB0dXJ0bGUuZ2V0SXRlbUNvdW50KG4pCgkJaWYgbkNvdW50ID4gMCB0aGVuCgkJCXR1cnRsZS5zZWxlY3QobikJCQkKCQkJbG9jYWwgYkRyb3AgPSB0cnVlCgkJCWlmIF9iS2VlcE9uZUZ1ZWxTdGFjayBhbmQgdHVydGxlLnJlZnVlbCgwKSB0aGVuCgkJCQliRHJvcCA9IGZhbHNlCgkJCQlfYktlZXBPbmVGdWVsU3RhY2sgPSBmYWxzZQoJCQllbmQJCQkKCQkJaWYgYkRyb3AgdGhlbgoJCQkJdHVydGxlLmRyb3AoKQoJCQkJdW5sb2FkZWQgPSB1bmxvYWRlZCArIG5Db3VudAoJCQllbmQKCQllbmQKCWVuZAoJY29sbGVjdGVkID0gMAoJdHVydGxlLnNlbGVjdCgxKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHJldHVyblN1cHBsaWVzKCkKCWxvY2FsIHgseSx6LHhkLHpkID0geFBvcyxkZXB0aCx6UG9zLHhEaXIsekRpcgoJcHJpbnQoICJSZXR1cm5pbmcgdG8gc3VyZmFjZS4uLiIgKQoJZ29UbyggMCwwLDAsMCwtMSApCgkKCWxvY2FsIGZ1ZWxOZWVkZWQgPSAyKih4K3kreikgKyAxCglpZiBub3QgcmVmdWVsKCBmdWVsTmVlZGVkICkgdGhlbgoJCXVubG9hZCggdHJ1ZSApCgkJcHJpbnQoICJXYWl0aW5nIGZvciBmdWVsIiApCgkJd2hpbGUgbm90IHJlZnVlbCggZnVlbE5lZWRlZCApIGRvCgkJCW9zLnB1bGxFdmVudCggInR1cnRsZV9pbnZlbnRvcnkiICkKCQllbmQKCWVsc2UKCQl1bmxvYWQoIHRydWUgKQkKCWVuZAoJCglwcmludCggIlJlc3VtaW5nIG1pbmluZy4uLiIgKQoJZ29UbyggeCx5LHoseGQsemQgKQplbmQKCmxvY2FsIGZ1bmN0aW9uIGNvbGxlY3QoKQkKCWxvY2FsIGJGdWxsID0gdHJ1ZQoJbG9jYWwgblRvdGFsSXRlbXMgPSAwCglmb3Igbj0xLDE2IGRvCgkJbG9jYWwgbkNvdW50ID0gdHVydGxlLmdldEl0ZW1Db3VudChuKQoJCWlmIG5Db3VudCA9PSAwIHRoZW4KCQkJYkZ1bGwgPSBmYWxzZQoJCWVuZAoJCW5Ub3RhbEl0ZW1zID0gblRvdGFsSXRlbXMgKyBuQ291bnQKCWVuZAoJCglpZiBuVG90YWxJdGVtcyA+IGNvbGxlY3RlZCB0aGVuCgkJY29sbGVjdGVkID0gblRvdGFsSXRlbXMKCQlpZiBtYXRoLmZtb2QoY29sbGVjdGVkICsgdW5sb2FkZWQsIDUwKSA9PSAwIHRoZW4KCQkJcHJpbnQoICJNaW5lZCAiLi4oY29sbGVjdGVkICsgdW5sb2FkZWQpLi4iIGl0ZW1zLiIgKQoJCWVuZAoJZW5kCgkKCWlmIGJGdWxsIHRoZW4KCQlwcmludCggIk5vIGVtcHR5IHNsb3RzIGxlZnQuIiApCgkJcmV0dXJuIGZhbHNlCgllbmQKCXJldHVybiB0cnVlCmVuZAoKZnVuY3Rpb24gcmVmdWVsKCBhbW1vdW50ICkKCWxvY2FsIGZ1ZWxMZXZlbCA9IHR1cnRsZS5nZXRGdWVsTGV2ZWwoKQoJaWYgZnVlbExldmVsID09ICJ1bmxpbWl0ZWQiIHRoZW4KCQlyZXR1cm4gdHJ1ZQoJZW5kCgkKCWxvY2FsIG5lZWRlZCA9IGFtbW91bnQgb3IgKHhQb3MgKyB6UG9zICsgZGVwdGggKyAyKQoJaWYgdHVydGxlLmdldEZ1ZWxMZXZlbCgpIDwgbmVlZGVkIHRoZW4KCQlsb2NhbCBmdWVsZWQgPSBmYWxzZQoJCWZvciBuPTEsMTYgZG8KCQkJaWYgdHVydGxlLmdldEl0ZW1Db3VudChuKSA+IDAgdGhlbgoJCQkJdHVydGxlLnNlbGVjdChuKQoJCQkJaWYgdHVydGxlLnJlZnVlbCgxKSB0aGVuCgkJCQkJd2hpbGUgdHVydGxlLmdldEl0ZW1Db3VudChuKSA+IDAgYW5kIHR1cnRsZS5nZXRGdWVsTGV2ZWwoKSA8IG5lZWRlZCBkbwoJCQkJCQl0dXJ0bGUucmVmdWVsKDEpCgkJCQkJZW5kCgkJCQkJaWYgdHVydGxlLmdldEZ1ZWxMZXZlbCgpID49IG5lZWRlZCB0aGVuCgkJCQkJCXR1cnRsZS5zZWxlY3QoMSkKCQkJCQkJcmV0dXJuIHRydWUKCQkJCQllbmQKCQkJCWVuZAoJCQllbmQKCQllbmQKCQl0dXJ0bGUuc2VsZWN0KDEpCgkJcmV0dXJuIGZhbHNlCgllbmQKCQoJcmV0dXJuIHRydWUKZW5kCgpsb2NhbCBmdW5jdGlvbiB0cnlGb3J3YXJkcygpCglpZiBub3QgcmVmdWVsKCkgdGhlbgoJCXByaW50KCAiTm90IGVub3VnaCBGdWVsIiApCgkJcmV0dXJuU3VwcGxpZXMoKQoJZW5kCgkKCXdoaWxlIG5vdCB0dXJ0bGUuZm9yd2FyZCgpIGRvCgkJaWYgdHVydGxlLmRldGVjdCgpIHRoZW4KCQkJaWYgdHVydGxlLmRpZygpIHRoZW4KCQkJCWlmIG5vdCBjb2xsZWN0KCkgdGhlbgoJCQkJCXJldHVyblN1cHBsaWVzKCkKCQkJCWVuZAoJCQllbHNlCgkJCQlyZXR1cm4gZmFsc2UKCQkJZW5kCgkJZWxzZWlmIHR1cnRsZS5hdHRhY2soKSB0aGVuCgkJCWlmIG5vdCBjb2xsZWN0KCkgdGhlbgoJCQkJcmV0dXJuU3VwcGxpZXMoKQoJCQllbmQKCQllbHNlCgkJCXNsZWVwKCAwLjUgKQoJCWVuZAoJZW5kCgkKCXhQb3MgPSB4UG9zICsgeERpcgoJelBvcyA9IHpQb3MgKyB6RGlyCglyZXR1cm4gdHJ1ZQplbmQKCmxvY2FsIGZ1bmN0aW9uIHRyeURvd24oKQoJaWYgbm90IHJlZnVlbCgpIHRoZW4KCQlwcmludCggIk5vdCBlbm91Z2ggRnVlbCIgKQoJCXJldHVyblN1cHBsaWVzKCkKCWVuZAoJCgl3aGlsZSBub3QgdHVydGxlLmRvd24oKSBkbwoJCWlmIHR1cnRsZS5kZXRlY3REb3duKCkgdGhlbgoJCQlpZiB0dXJ0bGUuZGlnRG93bigpIHRoZW4KCQkJCWlmIG5vdCBjb2xsZWN0KCkgdGhlbgoJCQkJCXJldHVyblN1cHBsaWVzKCkKCQkJCWVuZAoJCQllbHNlCgkJCQlyZXR1cm4gZmFsc2UKCQkJZW5kCgkJZWxzZWlmIHR1cnRsZS5hdHRhY2tEb3duKCkgdGhlbgoJCQlpZiBub3QgY29sbGVjdCgpIHRoZW4KCQkJCXJldHVyblN1cHBsaWVzKCkKCQkJZW5kCgkJZWxzZQoJCQlzbGVlcCggMC41ICkKCQllbmQKCWVuZAoKCWRlcHRoID0gZGVwdGggKyAxCglpZiBtYXRoLmZtb2QoIGRlcHRoLCAxMCApID09IDAgdGhlbgoJCXByaW50KCAiRGVzY2VuZGVkICIuLmRlcHRoLi4iIG1ldHJlcy4iICkKCWVuZAoKCXJldHVybiB0cnVlCmVuZAoKbG9jYWwgZnVuY3Rpb24gdHVybkxlZnQoKQoJdHVydGxlLnR1cm5MZWZ0KCkKCXhEaXIsIHpEaXIgPSAtekRpciwgeERpcgplbmQKCmxvY2FsIGZ1bmN0aW9uIHR1cm5SaWdodCgpCgl0dXJ0bGUudHVyblJpZ2h0KCkKCXhEaXIsIHpEaXIgPSB6RGlyLCAteERpcgplbmQKCmZ1bmN0aW9uIGdvVG8oIHgsIHksIHosIHhkLCB6ZCApCgl3aGlsZSBkZXB0aCA+IHkgZG8KCQlpZiB0dXJ0bGUudXAoKSB0aGVuCgkJCWRlcHRoID0gZGVwdGggLSAxCgkJZWxzZWlmIHR1cnRsZS5kaWdVcCgpIG9yIHR1cnRsZS5hdHRhY2tVcCgpIHRoZW4KCQkJY29sbGVjdCgpCgkJZWxzZQoJCQlzbGVlcCggMC41ICkKCQllbmQKCWVuZAoKCWlmIHhQb3MgPiB4IHRoZW4KCQl3aGlsZSB4RGlyIH49IC0xIGRvCgkJCXR1cm5MZWZ0KCkKCQllbmQKCQl3aGlsZSB4UG9zID4geCBkbwoJCQlpZiB0dXJ0bGUuZm9yd2FyZCgpIHRoZW4KCQkJCXhQb3MgPSB4UG9zIC0gMQoJCQllbHNlaWYgdHVydGxlLmRpZygpIG9yIHR1cnRsZS5hdHRhY2soKSB0aGVuCgkJCQljb2xsZWN0KCkKCQkJZWxzZQoJCQkJc2xlZXAoIDAuNSApCgkJCWVuZAoJCWVuZAoJZWxzZWlmIHhQb3MgPCB4IHRoZW4KCQl3aGlsZSB4RGlyIH49IDEgZG8KCQkJdHVybkxlZnQoKQoJCWVuZAoJCXdoaWxlIHhQb3MgPCB4IGRvCgkJCWlmIHR1cnRsZS5mb3J3YXJkKCkgdGhlbgoJCQkJeFBvcyA9IHhQb3MgKyAxCgkJCWVsc2VpZiB0dXJ0bGUuZGlnKCkgb3IgdHVydGxlLmF0dGFjaygpIHRoZW4KCQkJCWNvbGxlY3QoKQoJCQllbHNlCgkJCQlzbGVlcCggMC41ICkKCQkJZW5kCgkJZW5kCgllbmQKCQoJaWYgelBvcyA+IHogdGhlbgoJCXdoaWxlIHpEaXIgfj0gLTEgZG8KCQkJdHVybkxlZnQoKQoJCWVuZAoJCXdoaWxlIHpQb3MgPiB6IGRvCgkJCWlmIHR1cnRsZS5mb3J3YXJkKCkgdGhlbgoJCQkJelBvcyA9IHpQb3MgLSAxCgkJCWVsc2VpZiB0dXJ0bGUuZGlnKCkgb3IgdHVydGxlLmF0dGFjaygpIHRoZW4KCQkJCWNvbGxlY3QoKQoJCQllbHNlCgkJCQlzbGVlcCggMC41ICkKCQkJZW5kCgkJZW5kCgllbHNlaWYgelBvcyA8IHogdGhlbgoJCXdoaWxlIHpEaXIgfj0gMSBkbwoJCQl0dXJuTGVmdCgpCgkJZW5kCgkJd2hpbGUgelBvcyA8IHogZG8KCQkJaWYgdHVydGxlLmZvcndhcmQoKSB0aGVuCgkJCQl6UG9zID0gelBvcyArIDEKCQkJZWxzZWlmIHR1cnRsZS5kaWcoKSBvciB0dXJ0bGUuYXR0YWNrKCkgdGhlbgoJCQkJY29sbGVjdCgpCgkJCWVsc2UKCQkJCXNsZWVwKCAwLjUgKQoJCQllbmQKCQllbmQJCgllbmQKCQoJd2hpbGUgZGVwdGggPCB5IGRvCgkJaWYgdHVydGxlLmRvd24oKSB0aGVuCgkJCWRlcHRoID0gZGVwdGggKyAxCgkJZWxzZWlmIHR1cnRsZS5kaWdEb3duKCkgb3IgdHVydGxlLmF0dGFja0Rvd24oKSB0aGVuCgkJCWNvbGxlY3QoKQoJCWVsc2UKCQkJc2xlZXAoIDAuNSApCgkJZW5kCgllbmQKCQoJd2hpbGUgekRpciB+PSB6ZCBvciB4RGlyIH49IHhkIGRvCgkJdHVybkxlZnQoKQoJZW5kCmVuZAoKaWYgbm90IHJlZnVlbCgpIHRoZW4KCXByaW50KCAiT3V0IG9mIEZ1ZWwiICkKCXJldHVybgplbmQKCnByaW50KCAiRXhjYXZhdGluZy4uLiIgKQoKbG9jYWwgcmVzZWFsID0gZmFsc2UKdHVydGxlLnNlbGVjdCgxKQppZiB0dXJ0bGUuZGlnRG93bigpIHRoZW4KCXJlc2VhbCA9IHRydWUKZW5kCgpsb2NhbCBhbHRlcm5hdGUgPSAwCmxvY2FsIGRvbmUgPSBmYWxzZQp3aGlsZSBub3QgZG9uZSBkbwoJZm9yIG49MSxzaXplIGRvCgkJZm9yIG09MSxzaXplLTEgZG8KCQkJaWYgbm90IHRyeUZvcndhcmRzKCkgdGhlbgoJCQkJZG9uZSA9IHRydWUKCQkJCWJyZWFrCgkJCWVuZAoJCWVuZAoJCWlmIGRvbmUgdGhlbgoJCQlicmVhawoJCWVuZAoJCWlmIG48c2l6ZSB0aGVuCgkJCWlmIG1hdGguZm1vZChuICsgYWx0ZXJuYXRlLDIpID09IDAgdGhlbgoJCQkJdHVybkxlZnQoKQoJCQkJaWYgbm90IHRyeUZvcndhcmRzKCkgdGhlbgoJCQkJCWRvbmUgPSB0cnVlCgkJCQkJYnJlYWsKCQkJCWVuZAoJCQkJdHVybkxlZnQoKQoJCQllbHNlCgkJCQl0dXJuUmlnaHQoKQoJCQkJaWYgbm90IHRyeUZvcndhcmRzKCkgdGhlbgoJCQkJCWRvbmUgPSB0cnVlCgkJCQkJYnJlYWsKCQkJCWVuZAoJCQkJdHVyblJpZ2h0KCkKCQkJZW5kCgkJZW5kCgllbmQKCWlmIGRvbmUgdGhlbgoJCWJyZWFrCgllbmQKCQoJaWYgc2l6ZSA+IDEgdGhlbgoJCWlmIG1hdGguZm1vZChzaXplLDIpID09IDAgdGhlbgoJCQl0dXJuUmlnaHQoKQoJCWVsc2UKCQkJaWYgYWx0ZXJuYXRlID09IDAgdGhlbgoJCQkJdHVybkxlZnQoKQoJCQllbHNlCgkJCQl0dXJuUmlnaHQoKQoJCQllbmQKCQkJYWx0ZXJuYXRlID0gMSAtIGFsdGVybmF0ZQoJCWVuZAoJZW5kCgkKCWlmIG5vdCB0cnlEb3duKCkgdGhlbgoJCWRvbmUgPSB0cnVlCgkJYnJlYWsKCWVuZAplbmQKCnByaW50KCAiUmV0dXJuaW5nIHRvIHN1cmZhY2UuLi4iICkKCi0tIFJldHVybiB0byB3aGVyZSB3ZSBzdGFydGVkCmdvVG8oIDAsMCwwLDAsLTEgKQp1bmxvYWQoIGZhbHNlICkKZ29UbyggMCwwLDAsMCwxICkKCi0tIFNlYWwgdGhlIGhvbGUKaWYgcmVzZWFsIHRoZW4KCXR1cnRsZS5wbGFjZURvd24oKQplbmQKCnByaW50KCAiTWluZWQgIi4uKGNvbGxlY3RlZCArIHVubG9hZGVkKS4uIiBpdGVtcyB0b3RhbC4iICk=","isDir":false,"name":"excavate","size":0},"root/programs/turtle/go":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA8IDEgdGhlbgoJcHJpbnQoICJVc2FnZTogZ28gPGRpcmVjdGlvbj4gPGRpc3RhbmNlPiIgKQoJcmV0dXJuCmVuZAoKbG9jYWwgdEhhbmRsZXJzID0gewoJWyJmZCJdID0gdHVydGxlLmZvcndhcmQsCglbImZvcndhcmQiXSA9IHR1cnRsZS5mb3J3YXJkLAoJWyJmb3J3YXJkcyJdID0gdHVydGxlLmZvcndhcmQsCglbImJrIl0gPSB0dXJ0bGUuYmFjaywKCVsiYmFjayJdID0gdHVydGxlLmJhY2ssCglbInVwIl0gPSB0dXJ0bGUudXAsCglbImRuIl0gPSB0dXJ0bGUuZG93biwKCVsiZG93biJdID0gdHVydGxlLmRvd24sCglbImx0Il0gPSB0dXJ0bGUudHVybkxlZnQsCglbImxlZnQiXSA9IHR1cnRsZS50dXJuTGVmdCwKCVsicnQiXSA9IHR1cnRsZS50dXJuUmlnaHQsCglbInJpZ2h0Il0gPSB0dXJ0bGUudHVyblJpZ2h0LAp9Cgpsb2NhbCBuQXJnID0gMQp3aGlsZSBuQXJnIDw9ICN0QXJncyBkbwoJbG9jYWwgc0RpcmVjdGlvbiA9IHRBcmdzW25BcmddCglsb2NhbCBuRGlzdGFuY2UgPSAxCglpZiBuQXJnIDwgI3RBcmdzIHRoZW4KCQlsb2NhbCBudW0gPSB0b251bWJlciggdEFyZ3NbbkFyZyArIDFdICkKCQlpZiBudW0gdGhlbgoJCQluRGlzdGFuY2UgPSBudW0KCQkJbkFyZyA9IG5BcmcgKyAxCgkJZW5kCgllbmQKCW5BcmcgPSBuQXJnICsgMQoKCWxvY2FsIGZuSGFuZGxlciA9IHRIYW5kbGVyc1tzdHJpbmcubG93ZXIoc0RpcmVjdGlvbildCglpZiBmbkhhbmRsZXIgdGhlbgoJCXdoaWxlIG5EaXN0YW5jZSA+IDAgZG8KCQkJaWYgZm5IYW5kbGVyKCkgdGhlbgoJCQkJbkRpc3RhbmNlID0gbkRpc3RhbmNlIC0gMQoJCQllbHNlaWYgdHVydGxlLmdldEZ1ZWxMZXZlbCgpID09IDAgdGhlbgoJCQkJcHJpbnQoICJPdXQgb2YgZnVlbCIgKQoJCQkJcmV0dXJuCgkJCWVsc2UKCQkJCXNsZWVwKDAuNSkKCQkJZW5kCgkJZW5kCgllbHNlCgkJcHJpbnQoICJObyBzdWNoIGRpcmVjdGlvbjogIi4uc0RpcmVjdGlvbiApCgkJcHJpbnQoICJUcnk6IGZvcndhcmQsIGJhY2ssIHVwLCBkb3duIiApCgkJcmV0dXJuCgllbmQKCmVuZA==","isDir":false,"name":"go","size":0},"root/programs/turtle/refuel":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQpsb2NhbCBuTGltaXQgPSAxCmlmICN0QXJncyA+IDEgdGhlbgoJcHJpbnQoICJVc2FnZTogcmVmdWVsIFtudW1iZXJdIiApCglyZXR1cm4KZWxzZWlmICN0QXJncyA+IDAgdGhlbgoJaWYgdEFyZ3NbMV0gPT0gImFsbCIgdGhlbgoJCW5MaW1pdCA9IDY0ICogMTYKCWVsc2UKCQluTGltaXQgPSB0b251bWJlciggdEFyZ3NbMV0gKQoJZW5kCmVuZAoKaWYgdHVydGxlLmdldEZ1ZWxMZXZlbCgpIH49ICJ1bmxpbWl0ZWQiIHRoZW4KCWZvciBuPTEsMTYgZG8KCQlsb2NhbCBuQ291bnQgPSB0dXJ0bGUuZ2V0SXRlbUNvdW50KG4pCgkJaWYgbkxpbWl0ID4gMCBhbmQgbkNvdW50ID4gMCBhbmQgdHVydGxlLmdldEZ1ZWxMZXZlbCgpIDwgdHVydGxlLmdldEZ1ZWxMaW1pdCgpIHRoZW4KCQkgICAgbG9jYWwgbkJ1cm4gPSBtYXRoLm1pbiggbkxpbWl0LCBuQ291bnQgKQoJCQl0dXJ0bGUuc2VsZWN0KCBuICkKCQkJaWYgdHVydGxlLnJlZnVlbCggbkJ1cm4gKSB0aGVuCgkJCSAgICBsb2NhbCBuTmV3Q291bnQgPSB0dXJ0bGUuZ2V0SXRlbUNvdW50KG4pCiAgICAJCQluTGltaXQgPSBuTGltaXQgLSAobkNvdW50IC0gbk5ld0NvdW50KQogICAgCQllbmQKCQllbmQKCWVuZAogICAgcHJpbnQoICJGdWVsIGxldmVsIGlzICIuLnR1cnRsZS5nZXRGdWVsTGV2ZWwoKSApCiAgICBpZiB0dXJ0bGUuZ2V0RnVlbExldmVsKCkgPT0gdHVydGxlLmdldEZ1ZWxMaW1pdCgpIHRoZW4KICAgICAgICBwcmludCggIkZ1ZWwgbGltaXQgcmVhY2hlZCIgKQogICAgZW5kCmVsc2UKICAgIHByaW50KCAiRnVlbCBsZXZlbCBpcyB1bmxpbWl0ZWQiICkKZW5k","isDir":false,"name":"refuel","size":0},"root/programs/turtle/tunnel":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3Mgfj0gMSB0aGVuCglwcmludCggIlVzYWdlOiB0dW5uZWwgPGxlbmd0aD4iICkKCXJldHVybgplbmQKCi0tIE1pbmUgaW4gYSBxdWFycnkgcGF0dGVybiB1bnRpbCB3ZSBoaXQgc29tZXRoaW5nIHdlIGNhbid0IGRpZwpsb2NhbCBsZW5ndGggPSB0b251bWJlciggdEFyZ3NbMV0gKQppZiBsZW5ndGggPCAxIHRoZW4KCXByaW50KCAiVHVubmVsIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIiApCglyZXR1cm4KZW5kCgkKbG9jYWwgZGVwdGggPSAwCmxvY2FsIGNvbGxlY3RlZCA9IDAKCmxvY2FsIGZ1bmN0aW9uIGNvbGxlY3QoKQoJY29sbGVjdGVkID0gY29sbGVjdGVkICsgMQoJaWYgbWF0aC5mbW9kKGNvbGxlY3RlZCwgMjUpID09IDAgdGhlbgoJCXByaW50KCAiTWluZWQgIi4uY29sbGVjdGVkLi4iIGl0ZW1zLiIgKQoJZW5kCmVuZAoKbG9jYWwgZnVuY3Rpb24gdHJ5RGlnKCkKCXdoaWxlIHR1cnRsZS5kZXRlY3QoKSBkbwoJCWlmIHR1cnRsZS5kaWcoKSB0aGVuCgkJCWNvbGxlY3QoKQoJCQlzbGVlcCgwLjUpCgkJZWxzZQoJCQlyZXR1cm4gZmFsc2UKCQllbmQKCWVuZAoJcmV0dXJuIHRydWUKZW5kCgpsb2NhbCBmdW5jdGlvbiB0cnlEaWdVcCgpCgl3aGlsZSB0dXJ0bGUuZGV0ZWN0VXAoKSBkbwoJCWlmIHR1cnRsZS5kaWdVcCgpIHRoZW4KCQkJY29sbGVjdCgpCgkJCXNsZWVwKDAuNSkKCQllbHNlCgkJCXJldHVybiBmYWxzZQoJCWVuZAoJZW5kCglyZXR1cm4gdHJ1ZQplbmQKCmxvY2FsIGZ1bmN0aW9uIHRyeURpZ0Rvd24oKQoJd2hpbGUgdHVydGxlLmRldGVjdERvd24oKSBkbwoJCWlmIHR1cnRsZS5kaWdEb3duKCkgdGhlbgoJCQljb2xsZWN0KCkKCQkJc2xlZXAoMC41KQoJCWVsc2UKCQkJcmV0dXJuIGZhbHNlCgkJZW5kCgllbmQKCXJldHVybiB0cnVlCmVuZAoKbG9jYWwgZnVuY3Rpb24gcmVmdWVsKCkKCWxvY2FsIGZ1ZWxMZXZlbCA9IHR1cnRsZS5nZXRGdWVsTGV2ZWwoKQoJaWYgZnVlbExldmVsID09ICJ1bmxpbWl0ZWQiIG9yIGZ1ZWxMZXZlbCA+IDAgdGhlbgoJCXJldHVybgoJZW5kCgkKCWxvY2FsIGZ1bmN0aW9uIHRyeVJlZnVlbCgpCgkJZm9yIG49MSwxNiBkbwoJCQlpZiB0dXJ0bGUuZ2V0SXRlbUNvdW50KG4pID4gMCB0aGVuCgkJCQl0dXJ0bGUuc2VsZWN0KG4pCgkJCQlpZiB0dXJ0bGUucmVmdWVsKDEpIHRoZW4KCQkJCQl0dXJ0bGUuc2VsZWN0KDEpCgkJCQkJcmV0dXJuIHRydWUKCQkJCWVuZAoJCQllbmQKCQllbmQKCQl0dXJ0bGUuc2VsZWN0KDEpCgkJcmV0dXJuIGZhbHNlCgllbmQKCQoJaWYgbm90IHRyeVJlZnVlbCgpIHRoZW4KCQlwcmludCggIkFkZCBtb3JlIGZ1ZWwgdG8gY29udGludWUuIiApCgkJd2hpbGUgbm90IHRyeVJlZnVlbCgpIGRvCgkJCW9zLnB1bGxFdmVudCggInR1cnRsZV9pbnZlbnRvcnkiICkKCQllbmQKCQlwcmludCggIlJlc3VtaW5nIFR1bm5lbC4iICkKCWVuZAplbmQKCmxvY2FsIGZ1bmN0aW9uIHRyeVVwKCkKCXJlZnVlbCgpCgl3aGlsZSBub3QgdHVydGxlLnVwKCkgZG8KCQlpZiB0dXJ0bGUuZGV0ZWN0VXAoKSB0aGVuCgkJCWlmIG5vdCB0cnlEaWdVcCgpIHRoZW4KCQkJCXJldHVybiBmYWxzZQoJCQllbmQKCQllbHNlaWYgdHVydGxlLmF0dGFja1VwKCkgdGhlbgoJCQljb2xsZWN0KCkKCQllbHNlCgkJCXNsZWVwKCAwLjUgKQoJCWVuZAoJZW5kCglyZXR1cm4gdHJ1ZQplbmQKCmxvY2FsIGZ1bmN0aW9uIHRyeURvd24oKQoJcmVmdWVsKCkKCXdoaWxlIG5vdCB0dXJ0bGUuZG93bigpIGRvCgkJaWYgdHVydGxlLmRldGVjdERvd24oKSB0aGVuCgkJCWlmIG5vdCB0cnlEaWdEb3duKCkgdGhlbgoJCQkJcmV0dXJuIGZhbHNlCgkJCWVuZAoJCWVsc2VpZiB0dXJ0bGUuYXR0YWNrRG93bigpIHRoZW4KCQkJY29sbGVjdCgpCgkJZWxzZQoJCQlzbGVlcCggMC41ICkKCQllbmQKCWVuZAoJcmV0dXJuIHRydWUKZW5kCgpsb2NhbCBmdW5jdGlvbiB0cnlGb3J3YXJkKCkKCXJlZnVlbCgpCgl3aGlsZSBub3QgdHVydGxlLmZvcndhcmQoKSBkbwoJCWlmIHR1cnRsZS5kZXRlY3QoKSB0aGVuCgkJCWlmIG5vdCB0cnlEaWcoKSB0aGVuCgkJCQlyZXR1cm4gZmFsc2UKCQkJZW5kCgkJZWxzZWlmIHR1cnRsZS5hdHRhY2soKSB0aGVuCgkJCWNvbGxlY3QoKQoJCWVsc2UKCQkJc2xlZXAoIDAuNSApCgkJZW5kCgllbmQKCXJldHVybiB0cnVlCmVuZAoKcHJpbnQoICJUdW5uZWxsaW5nLi4uIiApCgpmb3Igbj0xLGxlbmd0aCBkbwoJdHVydGxlLnBsYWNlRG93bigpCgl0cnlEaWdVcCgpCgl0dXJ0bGUudHVybkxlZnQoKQoJdHJ5RGlnKCkKCXRyeVVwKCkKCXRyeURpZygpCgl0dXJ0bGUudHVyblJpZ2h0KCkKCXR1cnRsZS50dXJuUmlnaHQoKQoJdHJ5RGlnKCkKCXRyeURvd24oKQoJdHJ5RGlnKCkKCXR1cnRsZS50dXJuTGVmdCgpCgkKCWlmIG48bGVuZ3RoIHRoZW4KCQl0cnlEaWcoKQoJCWlmIG5vdCB0cnlGb3J3YXJkKCkgdGhlbgoJCQlwcmludCggIkFib3J0aW5nIFR1bm5lbC4iICkKCQkJYnJlYWsKCQllbmQKCWVsc2UKCQlwcmludCggIlR1bm5lbCBjb21wbGV0ZS4iICkKCWVuZAoKZW5kCgotLVtbCnByaW50KCAiUmV0dXJuaW5nIHRvIHN0YXJ0Li4uIiApCgotLSBSZXR1cm4gdG8gd2hlcmUgd2Ugc3RhcnRlZAp0dXJ0bGUudHVybkxlZnQoKQp0dXJ0bGUudHVybkxlZnQoKQp3aGlsZSBkZXB0aCA+IDAgZG8KCWlmIHR1cnRsZS5mb3J3YXJkKCkgdGhlbgoJCWRlcHRoID0gZGVwdGggLSAxCgllbHNlCgkJdHVydGxlLmRpZygpCgllbmQKZW5kCnR1cnRsZS50dXJuUmlnaHQoKQp0dXJ0bGUudHVyblJpZ2h0KCkKXV0KCnByaW50KCAiVHVubmVsIGNvbXBsZXRlLiIgKQpwcmludCggIk1pbmVkICIuLmNvbGxlY3RlZC4uIiBpdGVtcyB0b3RhbC4iICk=","isDir":false,"name":"tunnel","size":0},"root/programs/turtle/turn":{"data":"bG9jYWwgdEFyZ3MgPSB7IC4uLiB9CmlmICN0QXJncyA8IDEgdGhlbgoJcHJpbnQoICJVc2FnZTogdHVybiA8ZGlyZWN0aW9uPiA8dHVybnM+IiApCglyZXR1cm4KZW5kCgpsb2NhbCB0SGFuZGxlcnMgPSB7CglbImx0Il0gPSB0dXJ0bGUudHVybkxlZnQsCglbImxlZnQiXSA9IHR1cnRsZS50dXJuTGVmdCwKCVsicnQiXSA9IHR1cnRsZS50dXJuUmlnaHQsCglbInJpZ2h0Il0gPSB0dXJ0bGUudHVyblJpZ2h0LAp9Cgpsb2NhbCBuQXJnID0gMQp3aGlsZSBuQXJnIDw9ICN0QXJncyBkbwoJbG9jYWwgc0RpcmVjdGlvbiA9IHRBcmdzW25BcmddCglsb2NhbCBuRGlzdGFuY2UgPSAxCglpZiBuQXJnIDwgI3RBcmdzIHRoZW4KCQlsb2NhbCBudW0gPSB0b251bWJlciggdEFyZ3NbbkFyZyArIDFdICkKCQlpZiBudW0gdGhlbgoJCQluRGlzdGFuY2UgPSBudW0KCQkJbkFyZyA9IG5BcmcgKyAxCgkJZW5kCgllbmQKCW5BcmcgPSBuQXJnICsgMQoKCWxvY2FsIGZuSGFuZGxlciA9IHRIYW5kbGVyc1tzdHJpbmcubG93ZXIoc0RpcmVjdGlvbildCglpZiBmbkhhbmRsZXIgdGhlbgoJCWZvciBuPTEsbkRpc3RhbmNlIGRvCgkJCWZuSGFuZGxlciggbkFyZyApCgkJZW5kCgllbHNlCgkJcHJpbnQoICJObyBzdWNoIGRpcmVjdGlvbjogIi4uc0RpcmVjdGlvbiApCgkJcHJpbnQoICJUcnk6IGxlZnQsIHJpZ2h0IiApCgkJcmV0dXJuCgllbmQKCQplbmQ=","isDir":false,"name":"turn","size":0},"root/programs/turtle/unequip":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQpsb2NhbCBmdW5jdGlvbiBwcmludFVzYWdlKCkKCXByaW50KCAiVXNhZ2U6IHVuZXF1aXAgPHNpZGU+IiApCmVuZAoKaWYgI3RBcmdzIH49IDEgdGhlbgogICAgcHJpbnRVc2FnZSgpCglyZXR1cm4KZW5kCgpsb2NhbCBmdW5jdGlvbiB1bmVxdWlwKCBmbkVxdWlwRnVuY3Rpb24gKQogICAgZm9yIG5TbG90PTEsMTYgZG8KICAgICAgICBsb2NhbCBuT2xkQ291bnQgPSB0dXJ0bGUuZ2V0SXRlbUNvdW50KCBuU2xvdCApCiAgICAgICAgaWYgbk9sZENvdW50ID09IDAgdGhlbgogICAgICAgICAgICB0dXJ0bGUuc2VsZWN0KCBuU2xvdCApCiAgICAgICAgICAgIGlmIGZuRXF1aXBGdW5jdGlvbigpIHRoZW4KICAgICAgICAgICAgICAgIGxvY2FsIG5OZXdDb3VudCA9IHR1cnRsZS5nZXRJdGVtQ291bnQoIG5TbG90ICkKICAgICAgICAgICAgICAgIGlmIG5OZXdDb3VudCA+IDAgdGhlbgogICAgICAgICAgICAgICAgICAgIHByaW50KCAiSXRlbSB1bmVxdWlwcGVkIiApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoICJOb3RoaW5nIHRvIHVuZXF1aXAiICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAogICAgcHJpbnQoICJObyBzcGFjZSB0byB1bmVxdWlwIGl0ZW0iICkKZW5kCgpsb2NhbCBzU2lkZSA9IHRBcmdzWzFdCmlmIHNTaWRlID09ICJsZWZ0IiB0aGVuCiAgICB1bmVxdWlwKCB0dXJ0bGUuZXF1aXBMZWZ0ICkKZWxzZWlmIHNTaWRlID09ICJyaWdodCIgdGhlbgogICAgdW5lcXVpcCggdHVydGxlLmVxdWlwUmlnaHQgKQplbHNlCiAgICBwcmludFVzYWdlKCkKICAgIHJldHVybgplbmQ=","isDir":false,"name":"unequip","size":0},"root/programs/type":{"data":"CmxvY2FsIHRBcmdzID0geyAuLi4gfQppZiAjdEFyZ3MgPCAxIHRoZW4KCXByaW50KCAiVXNhZ2U6IHR5cGUgPHBhdGg+IiApCiAgCXJldHVybgplbmQKCmxvY2FsIHNQYXRoID0gc2hlbGwucmVzb2x2ZSggdEFyZ3NbMV0gKQppZiBmcy5leGlzdHMoIHNQYXRoICkgdGhlbgoJaWYgZnMuaXNEaXIoIHNQYXRoICkgdGhlbgoJCXByaW50KCAiZGlyZWN0b3J5IiApCgllbHNlCgkJcHJpbnQoICJmaWxlIiApCgllbmQKZWxzZQoJcHJpbnQoICJObyBzdWNoIHBhdGgiICkKZW5kCg==","isDir":false,"name":"type","size":0},"root/startup":{"data":"Ci0tIFNldHVwIHBhdGhzCmxvY2FsIHNQYXRoID0gIi46L3JvbS9wcm9ncmFtcyIKaWYgdGVybS5pc0NvbG9yKCkgdGhlbgoJc1BhdGggPSBzUGF0aC4uIjovcm9tL3Byb2dyYW1zL2FkdmFuY2VkIgplbmQKaWYgdHVydGxlIHRoZW4KCXNQYXRoID0gc1BhdGguLiI6L3JvbS9wcm9ncmFtcy90dXJ0bGUiCmVsc2UKICAgIHNQYXRoID0gc1BhdGguLiI6L3JvbS9wcm9ncmFtcy9yZWRuZXQ6L3JvbS9wcm9ncmFtcy9mdW4iCiAgICBpZiB0ZXJtLmlzQ29sb3IoKSB0aGVuCiAgICAJc1BhdGggPSBzUGF0aC4uIjovcm9tL3Byb2dyYW1zL2Z1bi9hZHZhbmNlZCIKICAgIGVuZAplbmQKaWYgcG9ja2V0IHRoZW4KICAgIHNQYXRoID0gc1BhdGguLiI6L3JvbS9wcm9ncmFtcy9wb2NrZXQiCmVuZAppZiBodHRwIHRoZW4KCXNQYXRoID0gc1BhdGguLiI6L3JvbS9wcm9ncmFtcy9odHRwIgplbmQKc2hlbGwuc2V0UGF0aCggc1BhdGggKQpoZWxwLnNldFBhdGgoICIvcm9tL2hlbHAiICkKCi0tIFNldHVwIGFsaWFzZXMKc2hlbGwuc2V0QWxpYXMoICJscyIsICJsaXN0IiApCnNoZWxsLnNldEFsaWFzKCAiZGlyIiwgImxpc3QiICkKc2hlbGwuc2V0QWxpYXMoICJjcCIsICJjb3B5IiApCnNoZWxsLnNldEFsaWFzKCAibXYiLCAibW92ZSIgKQpzaGVsbC5zZXRBbGlhcyggInJtIiwgImRlbGV0ZSIgKQpzaGVsbC5zZXRBbGlhcyggImNsciIsICJjbGVhciIgKQpzaGVsbC5zZXRBbGlhcyggInJzIiwgInJlZHN0b25lIiApCnNoZWxsLnNldEFsaWFzKCAic2giLCAic2hlbGwiICkKaWYgdGVybS5pc0NvbG9yKCkgdGhlbgogICAgc2hlbGwuc2V0QWxpYXMoICJiYWNrZ3JvdW5kIiwgImJnIiApCiAgICBzaGVsbC5zZXRBbGlhcyggImZvcmVncm91bmQiLCAiZmciICkKZW5kCgotLSBSdW4gYXV0b3J1biBmaWxlcwppZiBmcy5leGlzdHMoICIvcm9tL2F1dG9ydW4iICkgYW5kIGZzLmlzRGlyKCAiL3JvbS9hdXRvcnVuIiApIHRoZW4KCWxvY2FsIHRGaWxlcyA9IGZzLmxpc3QoICIvcm9tL2F1dG9ydW4iICkKCXRhYmxlLnNvcnQoIHRGaWxlcyApCglmb3Igbiwgc0ZpbGUgaW4gaXBhaXJzKCB0RmlsZXMgKSBkbwoJCWlmIHN0cmluZy5zdWIoIHNGaWxlLCAxLCAxICkgfj0gIi4iIHRoZW4KCQkJbG9jYWwgc1BhdGggPSAiL3JvbS9hdXRvcnVuLyIuLnNGaWxlCgkJCWlmIG5vdCBmcy5pc0Rpciggc1BhdGggKSB0aGVuCgkJCQlzaGVsbC5ydW4oIHNQYXRoICkKCQkJZW5kCgkJZW5kCgllbmQKZW5kCgotLSBSdW4gdGhlIHVzZXIgY3JlYXRlZCBzdGFydHVwLCBlaXRoZXIgZnJvbSBkaXNrIGRyaXZlcyBvciB0aGUgcm9vdApsb2NhbCBzVXNlclN0YXJ0dXAgPSBzaGVsbC5yZXNvbHZlUHJvZ3JhbSggIi9zdGFydHVwIiApCmZvciBuLHNOYW1lIGluIHBhaXJzKCBwZXJpcGhlcmFsLmdldE5hbWVzKCkgKSBkbwogICAgaWYgZGlzay5pc1ByZXNlbnQoIHNOYW1lICkgYW5kIGRpc2suaGFzRGF0YSggc05hbWUgKSB0aGVuCiAgICAgICAgbG9jYWwgc0Rpc2tTdGFydHVwID0gc2hlbGwucmVzb2x2ZVByb2dyYW0oICIvIiAuLiBkaXNrLmdldE1vdW50UGF0aCggc05hbWUgKSAuLiAiL3N0YXJ0dXAiICkKICAgICAgICBpZiBzRGlza1N0YXJ0dXAgdGhlbgogICAgICAgICAgICBzVXNlclN0YXJ0dXAgPSBzRGlza1N0YXJ0dXAKICAgICAgICAgICAgYnJlYWsKICAgICAgICBlbmQKICAgIGVuZAplbmQKaWYgc1VzZXJTdGFydHVwIHRoZW4KICAgIHNoZWxsLnJ1biggc1VzZXJTdGFydHVwICkKZW5k","isDir":false,"name":"startup","size":0}},"manifest":{"dirs":0,"files":172,"size":10000,"version":1}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment