-
Notifications
You must be signed in to change notification settings - Fork 3
/
revised-tank-drive.vex
1 lines (1 loc) · 20 KB
/
revised-tank-drive.vex
1
___ThIsisATemPoRaRyFiLE___.json 0000666 0000000 0000000 00000044517 13422415465 014765 0 ustar 0000000 0000000 {"competition": true, "components": [{"class": "vex::controller", "left": 769, "name": "Controller1", "top": 49, "type": "controller"}, {"class": "vex::motor", "data": {"gears": 600, "reversed": false}, "left": 389, "name": "Motor05sp", "port": "11", "top": 0, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": false}, "left": 36, "name": "Motor03dl", "port": "20", "top": 204, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": false}, "left": 171, "name": "Motor01dl", "port": "9", "top": 288, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": true}, "left": 405, "name": "Motor02dr", "port": "12", "top": 152, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": true}, "left": 707, "name": "Motor04dr", "port": "1", "top": 362, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": true}, "left": 537, "name": "Motor16dr", "port": "2", "top": 279, "type": "motor"}, {"class": "vex::motor", "data": {"gears": 200, "reversed": false}, "left": 330, "name": "Motor11dl", "port": "10", "top": 379, "type": "motor"}], "description": "C++ Test program to drive the tank", "device": {"slot": 1, "type": "vexV5"}, "files": {"main.cpp": "I2luY2x1ZGUgInJvYm90LWNvbmZpZy5oIgoKLyogRGVmaW5lIGFkZGl0aW9uYWwgZGlnaXRhbCBvdXRwdXRzLgogKiBGb2xsb3cgdGhpcyBmb3JtYXQ6CiAqIAogKiB2ZXg6OmRpZ2l0YWxfb3V0IDx2YXIgbmFtZT4gPSB2ZXg6OmRpZ2l0YWxfb3V0KCBQT1JUICk7CiAqIAogKiBXaGVyZSBQT1JUIGlzIGEgQnJhaW4uVGhyZWVXaXJlUG9ydC5bbGV0dGVyXSA9IGh0dHBzOi8vd3d3LnJvYm90bWVzaC5jb20vZG9jcy92ZXh2NS1jcHAvaHRtbC9jbGFzc3ZleF8xXzF0cmlwb3J0Lmh0bWwKICogSWUgQnJhaW4uVGhyZWVXaXJlUG9ydC5BCiAqLwovL0NyZWF0ZXMgYSBjb21wZXRpdGlvbiBvYmplY3QgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIENvbXBldGl0aW9uIG1ldGhvZHMuCi8vdmV4Ojpjb21wZXRpdGlvbiAgICBDb21wZXRpdGlvbjsKLyogQ29udHJvbGxlciBzY3JlZW4gbGluZXMsIGlmIDAsIGRvIG5vdCBwcmludCAqLwpjb25zdCBpbnQgSk9ZU1RJQ0tfTElORSA9IDE7CmNvbnN0IGludCBNT1RPUl9MSU5FID0gMjsKY29uc3QgaW50IFNQSU5ORVJfTElORSA9IDM7CgovKiBKb3lzdGljayByZXNjYWxpbmcgLSBpbnB1dF4oMStzbW9vdGhfcG93ZXIpIG91dHNpZGUgdGhlIGRlYWQgem9uZSAqLwpjb25zdCBkb3VibGUgREVBRFpPTkUgPSAwLjAyOwpjb25zdCBkb3VibGUgSk9ZX1NDQUxFID0gMTI3LjA7CnN0YXRpYyBkb3VibGUgc21vb3RoX3Bvd2VyID0gMC41NTsKY29uc3QgZG91YmxlIHNtb290aF9wb3dlcl9zdGVwID0gMC4wNTsKY29uc3QgZG91YmxlIE1BWF9TTU9PVEhfUE9XRVIgPSAxLjA7CmNvbnN0IGRvdWJsZSBNSU5fU01PT1RIX1BPV0VSID0gLTAuNzU7Cgpkb3VibGUgc2NhbGVfam95c3RpY2soZG91YmxlIGlucHV0KSAgLy8gaW5wdXQgcG9zaXRpdmUgYmV0d2VlbiAwIGFuZCB+IDEKewogICAgLy8gcmVzdWx0IH49IGlucHV0XigxK3Ntb290aF9wb3dlciksIG1vZHVsbyBkZWFkIHpvbmUKCWRvdWJsZSByZXN1bHQ7CglpZiAoaW5wdXQgPiBERUFEWk9ORSkgewoJCXJlc3VsdCA9IGZtaW4oKGlucHV0IC0gREVBRFpPTkUpIC8gKDEuMCAtIERFQURaT05FKSwgMS4wKTsKCQlyZXN1bHQgKj0gcG93KHJlc3VsdCwgc21vb3RoX3Bvd2VyKTsgIC8vIGZpbmUgY29udHJvbCwgb3B0aW9uYWwKCX0KICAgIGVsc2UgewogICAgICAgIHJldHVybiAwLjsKICAgIH0KCXJldHVybiByZXN1bHQ7Cn0KCnZvaWQgc21vb3RoX3Bvd2VyX3VwKCkgewogICAgc21vb3RoX3Bvd2VyICs9IHNtb290aF9wb3dlcl9zdGVwOwogICAgc21vb3RoX3Bvd2VyID0gZm1pbihzbW9vdGhfcG93ZXIsIE1BWF9TTU9PVEhfUE9XRVIpOwp9Cgp2b2lkIHNtb290aF9wb3dlcl9kb3duKCkgewogICAgc21vb3RoX3Bvd2VyIC09IHNtb290aF9wb3dlcl9zdGVwOwogICAgc21vb3RoX3Bvd2VyID0gZm1heChzbW9vdGhfcG93ZXIsIE1JTl9TTU9PVEhfUE9XRVIpOwp9CgovLyBXaGV0aGVyIHRvIHByaW50IGRyaXZlIGluZm8gb24gY29udHJvbGxlciBzY3JlZW4KLy8gKEEgbG90IG9mIHByaW50aW5nIG1heSBzdHJhaW4gdGhlIGNvbW11bmljYXRpb24gbGluaywgc28gdHVybiBpdCBvZmYgaW4gY29tcGV0aXRpb24uKQpzdGF0aWMgYm9vbCBwcmludF9pbmZvID0gdHJ1ZTsKCnZvaWQgdG9nZ2xlX3ByaW50X2luZm8oKXsKICAgIHByaW50X2luZm8gPSAhcHJpbnRfaW5mbzsKICAgIGlmICghcHJpbnRfaW5mbykgewogICAgICAgIC8vIHR1cm5lZCBvZmY7IGNsZWFyIHN0YWxlIGluZm8KICAgICAgICBpZiAoSk9ZU1RJQ0tfTElORSA+IDApIENvbnRyb2xsZXIxLlNjcmVlbi5jbGVhckxpbmUoSk9ZU1RJQ0tfTElORSk7CiAgICAgICAgaWYgKE1PVE9SX0xJTkUgPiAwKSBDb250cm9sbGVyMS5TY3JlZW4uY2xlYXJMaW5lKE1PVE9SX0xJTkUpOwogICAgfQp9CgoKLy8gRHJpdmUgY29kZQptb3RvciBsbW90b3JzW10ge01vdG9yMTFkbCwgTW90b3IwMWRsLCBNb3RvcjAzZGx9Owptb3RvciBybW90b3JzW10ge01vdG9yMDRkciwgTW90b3IxNmRyLCBNb3RvcjAyZHJ9Owpjb25zdCBpbnQgTlVNX01PVE9SUyA9IDM7IC8vIHBlciBzaWRlCgovKioKICogUmV2ZXJzaW5nIG9mIG1vdG9ycy4gSWYgcmV2ZXJzZWQgaXMgdHJ1ZSB0aGVuIGZyb250IGFuZCBiYWNrIG9mIHRoZSByb2JvdCBhcmUgcmV2ZXJzZWQuCiAqLwpzdGF0aWMgYm9vbCByZXZlcnNlZCA9IGZhbHNlOyAvLyBBcmUgYWxsIG1vdG9ycyByZXZlcnNlZD8KCi8vIFN0b3BwaW5nIG1vZGUgZm9yIHRoZSBtb3RvcnMKLy8gMCAtIGNvYXN0LCAxIC1icmFrZSwgMiAtIGhvbGQKc3RhdGljIGludCBzdG9wcGluZ19tb2RlX251bSA9IDA7CmNvbnN0IGNoYXIgc3RvcHBpbmdfbW9kZV9jaGFyW10gPSB7J0MnLCAnQicsICdIJ307CmNvbnN0IGJyYWtlVHlwZSBzdG9wcGluZ19tb2RlW10gPSB7YnJha2VUeXBlOjpjb2FzdCwgYnJha2VUeXBlOjpicmFrZSwgYnJha2VUeXBlOjpob2xkfTsKCi8vIEN1cnJlbnQgbGVmdC9yaWdodCBtb3RvciBwb3dlcgpzdGF0aWMgZG91YmxlIGN1cl9scCA9IDAuOwpzdGF0aWMgZG91YmxlIGN1cl9ycCA9IDAuOwoKdm9pZCBwcmludF9tb3Rvcl9saW5lKCkgewogICAgaWYgKHByaW50X2luZm8gJiYgTU9UT1JfTElORSA+IDApIHsKICAgICAgICAgICAgLy8gUHJpbnQgbW90b3IgdmFsdWVzIGZvciBpbmZvcm1hdGlvbgogICAgICAgICAgICBDb250cm9sbGVyMS5TY3JlZW4uc2V0Q3Vyc29yKE1PVE9SX0xJTkUsIDEpOwogICAgICAgICAgICBDb250cm9sbGVyMS5TY3JlZW4ucHJpbnQoIk06ICVjICVjICUzLjBmJSUgJTMuMGYlJSAgICAgIiwgKHJldmVyc2VkID8gJ1InIDogJ0YnKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ19tb2RlX2NoYXJbc3RvcHBpbmdfbW9kZV9udW1dLCBjdXJfbHAsIGN1cl9ycCk7CiAgICAgICAgfQp9Cgp2b2lkIHNwaW5fbW90b3JzKGRvdWJsZSBscCwgZG91YmxlIHJwKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NT1RPUlM7IGkrKykgewogICAgICAgIGxtb3RvcnNbaV0uc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OmZ3ZCwgbHAsIHBlcmNlbnRVbml0czo6cGN0KTsKICAgICAgICBybW90b3JzW2ldLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsIHJwLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICB9Cn0KCnZvaWQgc2V0X3N0b3BwaW5nX21vZGVfZm9yX21vdG9ycyhicmFrZVR5cGUgbW9kZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnNldFN0b3BwaW5nKG1vZGUpOwogICAgICAgIHJtb3RvcnNbaV0uc2V0U3RvcHBpbmcobW9kZSk7CiAgICB9Cn0KCnZvaWQgcmV2ZXJzZV90b2dnbGUoKSB7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICAgIHNwaW5fbW90b3JzKDAuLCAwLik7ICAvLyBtb21lbnRhcmlseSBzbG93IGRvd24gdG8gMCwgc28gYXMgbm90IGJlIHRvbyBhYnJ1cHQgCiAgICBwcmludF9tb3Rvcl9saW5lKCk7CiAgICBDb250cm9sbGVyMS5ydW1ibGUoIi49Iik7Cn0KCnZvaWQgc3RvcHBpbmdfbW9kZV90b2dnbGUoKSB7CiAgICArK3N0b3BwaW5nX21vZGVfbnVtICU9IDM7ICAvLyBzYW1lIGFzIHN0b3BwaW5nX21vZGVfbnVtID0gKHN0b3BwaW5nX21vZGVfbnVtICsgMSkgJSAzOwogICAgc2V0X3N0b3BwaW5nX21vZGVfZm9yX21vdG9ycyhzdG9wcGluZ19tb2RlW3N0b3BwaW5nX21vZGVfbnVtXSk7CiAgICBwcmludF9tb3Rvcl9saW5lKCk7CiAgICBDb250cm9sbGVyMS5ydW1ibGUoIi4uIik7Cn0KCi8qKgogKiBTdG9wIGFsbCB3aGVlbCBtb3RvcnMgCiAqLwp2b2lkIHN0b3BBbGxNb3RvcnMoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NT1RPUlM7IGkrKykgewogICAgICAgIGxtb3RvcnNbaV0uc3RvcCgpOwogICAgICAgIHJtb3RvcnNbaV0uc3RvcCgpOwogICAgfQp9Cgp2b2lkIGFyY2FkZWRyaXZlKCkgewogICAgCiAgICBkb3VibGUgcHggPSBDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpOyAgLy9HZXRzIHRoZSB2YWx1ZSBvZiB0aGUgam95c3RpY2sgYXhpcyBvbiBhIHNjYWxlIGZyb20gLTEyNyB0byAxMjcuCiAgICBkb3VibGUgcHkgPSBDb250cm9sbGVyMS5BeGlzMi52YWx1ZSgpOwogICAgICAgIAogICAgZG91YmxlIGQgPSBzcXJ0KHB4KnB4ICsgcHkqcHkpIC8gSk9ZX1NDQUxFOyAvLyBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4sIDAgdG8gfiAxCiAgICBkb3VibGUgc2NhbGUgPSBzY2FsZV9qb3lzdGljayhkKTsgIC8vIHJlc2NhbGUgdGhhdCBkaXN0YW5jZQogICAgCiAgICBpZiAocHJpbnRfaW5mbyAmJiBKT1lTVElDS19MSU5FID4gMCkgewogICAgICAgIC8vIFByaW50IGpveXN0aWNrIGFuZCBzY2FsaW5nIHZhbHVlcyBmb3IgaW5mb3JtYXRpb24KICAgICAgICBDb250cm9sbGVyMS5TY3JlZW4uc2V0Q3Vyc29yKEpPWVNUSUNLX0xJTkUsIDEpOwogICAgICAgIENvbnRyb2xsZXIxLlNjcmVlbi5wcmludCgiSiAlNC4wZiAlNC4wZiAlMy4yZiAgICIsIHB5LCBweCwgc21vb3RoX3Bvd2VyKTsKICAgIH0KICAgIAogICAgaWYgKHJldmVyc2VkKSB7CiAgICAgICAgcHkgKj0gLTE7CiAgICB9CiAgICAKICAgIHB4ICo9IHNjYWxlIC8gSk9ZX1NDQUxFOyAgLy8gcmVzY2FsZSB0byBmcmFjdGlvbiAwIHRvIH4xCiAgICBweSAqPSBzY2FsZSAvIEpPWV9TQ0FMRTsKCiAgICAvLyB0ZW50YXRpdmUgbGVmdC9yaWdodCBtb3RvciBwb3dlcgogICAgZG91YmxlIGxwID0gcHkgKyBweDsgIC8vIGZyb20gMCB0byB+MgogICAgZG91YmxlIHJwID0gcHkgLSBweDsKCiAgICAvLyBpZiB8bW90b3IgcG93ZXJ8ID4gMSwgcmVzY2FsZSB0aGVtIGJvdGggCiAgICBkb3VibGUgbWFwb3cgPSBmbWF4KGZhYnMobHApLCBmYWJzKHJwKSk7CiAgICBpZiAobWFwb3cgPiAxLjApIHsKICAgICAgICBscCAvPSBtYXBvdzsKICAgICAgICBycCAvPSBtYXBvdzsKICAgIH0KICAgIAogICAgbHAgKj0gMTAwOyAvLyB0dXJuIGludG8gcGVyY2VudCwgZm9yIG1vdG9yIGlucHV0CiAgICBycCAqPSAxMDA7CiAgICAKICAgIGlmIChscCAhPSBjdXJfbHAgfHwgcnAgIT0gY3VyX3JwKSB7ICAvLyAgIAogICAgICAgIHNwaW5fbW90b3JzKGxwLCBycCk7CiAgICAgICAgY3VyX2xwID0gbHA7CiAgICAgICAgY3VyX3JwID0gcnA7CiAgICAgICAgcHJpbnRfbW90b3JfbGluZSgpOwogICAgfQogICAgCn0KCi8qKgogKiBEZWFsIHdpdGggdGhlIHNwaW5uZXIgYXQgdGhlIGZyb250IG9mIHRoZSByb2JvdC4KICovCi8vIFNwaW5uZXIgc3RhdGVzIDAgLSBzdG9wcGVkOyAxIC0gZm9yd2FyZDsgMiAtIHN0b3BwZWQ7IDMgLSByZXZlcnNlZDsKLy8gU3RhdGVzIHN5Y2xlIDAtMS0yLTMtNC0wLS4uLiB3aXRoIGJ1dHRvbiBwcmVzcy4Kc3RhdGljIGludCBzcGlubmVyX3N0YXRlID0gMDsKc3RhdGljIGRvdWJsZSBzcGlubmVyX3JwbSA9IDUwMC47CmNvbnN0IGRvdWJsZSBzcGlubmVyX3JwbV9tdWx0ID0gMS4wNTsgCgp2b2lkIHByaW50X3NwaW4oKSB7CiAgICBpZiAoU1BJTk5FUl9MSU5FIDw9IDApIHJldHVybjsgIC8vIGRvIG5vdGhpbmcKICAgIENvbnRyb2xsZXIxLlNjcmVlbi5zZXRDdXJzb3IoU1BJTk5FUl9MSU5FLCAxKTsKICAgIENvbnRyb2xsZXIxLlNjcmVlbi5wcmludCgiUzogJXMgcnBtICU1LjBmICAgIiwgKHNwaW5uZXJfc3RhdGUgJSAyID09IDAgPyAiT0ZGIjogKHNwaW5uZXJfc3RhdGUgPT0gMSA/ICJGV0QiIDogIlJFViIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXJfcnBtKTsgCn0KCnZvaWQgc2V0X3NwaW4oKSB7CiAgICBpZiAoc3Bpbm5lcl9zdGF0ZSAlIDIgPT0gMCkgeyAvLyBzdGF0ZXMgMCBhbmQgMgogICAgICAgIE1vdG9yMDVzcC5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOyAgICAgICAgCiAgICB9IGVsc2UgewogICAgICAgIE1vdG9yMDVzcC5zcGluKChzcGlubmVyX3N0YXRlID09IDEgPyBkaXJlY3Rpb25UeXBlOjpmd2QgOiBkaXJlY3Rpb25UeXBlOjpyZXYpLCBzcGlubmVyX3JwbSwgdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KfQoKdm9pZCBzcGlubmVyX3RvZ2dsZSgpIHsKICAgICsrc3Bpbm5lcl9zdGF0ZSAlPSA0OyAgLy8gc2FtZSBhcyBzcGlubmVyX3N0YXRlID0gKHNwaW5uZXJfc3RhdGUgKyAxKSAlIDQ7CiAgICBzZXRfc3BpbigpOwogICAgcHJpbnRfc3BpbigpOwp9Cgp2b2lkIHNwaW5uZXJfcnBtX3VwKCkgewogICAgc3Bpbm5lcl9ycG0gKj0gc3Bpbm5lcl9ycG1fbXVsdDsKICAgIHNldF9zcGluKCk7CiAgICBwcmludF9zcGluKCk7Cn0KCnZvaWQgc3Bpbm5lcl9ycG1fZG93bigpIHsKICAgIHNwaW5uZXJfcnBtIC89IHNwaW5uZXJfcnBtX211bHQ7CiAgICBzZXRfc3BpbigpOwogICAgcHJpbnRfc3BpbigpOwp9CgovKioKICogQXV0b25vbW91cyBtZXRob2RzCiAqLwppbnQgYXV0b25TdGF0ZSA9IDE7Ci8qKgogKiBtb3ZlU3RyYWlnaHQgd2l0aCBwb3dlciwgZm9yd2FyZCBkaXJlY3Rpb24gYW5kIHRpbWUKICoKICogQHBhcmFtIHBvd2VyPTEwMCAgUG93ZXIKICogQHBhcmFtIGZ3ZD10cnVlICAgR28gZm9yd2FyZD8KICogQHBhcmFtIHRpbWU9MTAwMCAgRGVsYXkgaW4gbXMgYmVmb3JlIHN0b3BwaW5nCiAqLwp2b2lkIG1vdmVTdHJhaWdodCAoaW50IHBvd2VyPTEwMCwgYm9vbCBmd2Q9dHJ1ZSwgaW50IHRpbWU9MTAwMCkgewogICAgdmV4OjpkaXJlY3Rpb25UeXBlIGRpciA9IGZ3ZCA/IHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkIDogdmV4OjpkaXJlY3Rpb25UeXBlOjpyZXY7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NT1RPUlM7IGkrKykgewogICAgICAgIGxtb3RvcnNbaV0uc3BpbihkaXIsIHBvd2VyLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICAgICAgcm1vdG9yc1tpXS5zcGluKGRpciwgcG93ZXIsIHBlcmNlbnRVbml0czo6cGN0KTsKICAgIH0KICAgIAogICAgdGFzazo6c2xlZXAodGltZSk7CiAgICBzZXRfc3RvcHBpbmdfbW9kZV9mb3JfbW90b3JzKGhvbGQpOwogICAgc3RvcEFsbE1vdG9ycygpOwp9CgovKioKICogTW92ZSBmb3J3YXJkIGEgY2VydGFpbiBkaXN0YW5jZQogKiBAcGFyYW0gZGlzdGFuY2UgIERpc3RhbmNlIHRvIG1vdmUgaW4gbWV0ZXJzCiAqIEBwYXJhbSBmd2Q9dHJ1ZSAgTW92ZSBmb3J3YXJkIG9yIGJhY2t3YXJkcz8KICovCnZvaWQgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoZG91YmxlIGRpc3RhbmNlLCBib29sIGZ3ZD10cnVlKSB7CiAgICAvLyBSb2JvdCBtb3ZlcyBhdCBhcHByb3hpbWF0ZWx5IDEuMyBtL3MKICAgIG1vdmVTdHJhaWdodCgxMDAsIGZ3ZCwgZGlzdGFuY2UgLyAxLjMgKiAxMDAwKTsKfQoKLyoKICogQXR0ZW1wdCB0byByb3RhdGUgYW4gYW5nbGUuIE5lZ2F0aXZlIGlzIGxlZnQsIAogKiBwb3NpdGl2ZSBpcyByaWdodC4gQW5nbGUgaXMgaW4gZGVncmVlcy4gTm90IDEwMCUgYWNjdXJhdGUuCiAqCiAqIEBwYXJhbSBhbmdsZSBBbmdsZSB0byByb3RhdGUgaW4gZGVncmVlcwogKi8Kdm9pZCByb3RhdGUoaW50IGFuZ2xlKSB7CiAgICAvKiBJZiB0dXJuaW5nIGxlZnQsIHJpZ2h0IGlzIGZvcndhcmQsIGxlZnQgYmFja3dhcmRzCiAgICAgKiBJZiB0dXJuaW5nIHJpZ2h0LCByaWdodCBpcyBiYWNrd2FyZHMsIGxlZnQgZm9yd2FyZHMgKi8KICAgIHZleDo6ZGlyZWN0aW9uVHlwZSBkaXJMID0gYW5nbGUgPCAwID8gdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QgOiB2ZXg6OmRpcmVjdGlvblR5cGU6OnJldjsKICAgIHZleDo6ZGlyZWN0aW9uVHlwZSBkaXJSID0gYW5nbGUgPiAwID8gdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QgOiB2ZXg6OmRpcmVjdGlvblR5cGU6OnJldjsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnNwaW4oZGlyTCwgMTAwLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICAgICAgcm1vdG9yc1tpXS5zcGluKGRpclIsIDEwMCwgcGVyY2VudFVuaXRzOjpwY3QpOwogICAgfQogICAgLyogQ2FsY3VsYXRlIHRpbWUgdG8gcm90YXRlIChSb3RhdGVzIGF0IGFyb3VuZCAwLjM2IGRlZy9tcykgKi8KICAgIGludCBhYnNBbmcgPSBhbmdsZSA8IDAgPyAtYW5nbGUgOiBhbmdsZTsKICAgIGludCB0aW1lID0gYWJzQW5nIC8gOSAqIDI1OwogICAgCiAgICAvKiBTbGlnaHQgYWRqdXN0bWVudHMgZm9yIGxvd2VyIGFuZ2xlcyAqLwogICAgaWYgKGFic0FuZyA8IDgwKSB0aW1lICs9IDE1MDAgLyBhYnNBbmc7CiAgICBlbHNlIGlmIChhYnNBbmcgPCAxOTApIHRpbWUgKz0gMjMwMCAvIGFic0FuZzsKICAgIGVsc2UgdGltZSAtPSA3MDAgLyBhYnNBbmc7CiAgICAKICAgIHRhc2s6OnNsZWVwKHRpbWUpOwogICAgc3RvcEFsbE1vdG9ycygpOwp9CgovKioKICogQXV0b246IGdvIGJhY2t3YXJkcyB0byBoaXQgdGhlIGZsYWcsIHRoZW4gZm9yd2FyZAogKiBhbmQgZ28gdG8gcGxhdGZvcm0gCiAqLwp2b2lkIGF1dG9uMTIoYm9vbCBpc1JlZCkgewogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMS42NSk7CiAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMi4zLCBmYWxzZSk7CiAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgcm90YXRlKGlzUmVkID8gLTkwIDogOTApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMS44KTsKfQoKLyoqCiAqIEF1dG9uOiBSb3RhdGUgMzUgZGVncmVlcyB0aGVuIGdvIGZvcndhcmQgb250bwogKiB0aGUgcGxhdGZvcm0gCiAqLwp2b2lkIGF1dG9uMzQoYm9vbCBpc1JlZCkgewogICAgcm90YXRlKGlzUmVkID8gLTkwIDogOTApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMC42KTsKICAgIHJvdGF0ZShpc1JlZCA/IDkwIDogLTkwKTsKICAgIG1vdmVTdHJhaWdodERpc3RhbmNlKDEuMyk7Cn0KCi8qKgogKiBEaXNwbGF5IHRoZSBjdXJyZW50IGF1dG9uIHN0YXRlCiAqLwp2b2lkIGRpc3BsYXlDdXJyZW50QXV0b25TdGF0ZSgpIHsKICAgIHN3aXRjaCAoYXV0b25TdGF0ZSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigxLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiQTEgLSBSZWQgZmxhZyIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgZmxhZyIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkEyIC0gQmx1ZSBmbGFnIik7CiAgICAgICAgICAgIAogICAgICAgICAgICBCcmFpbi5TY3JlZW4uc2V0Q3Vyc29yKDIsMCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5jbGVhckxpbmUoKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnByaW50KCJGYWNlIHJvYm90IHNwaW5uZXIgdG93YXJkcyBmcm9tIGZsYWciKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBCcmFpbi5TY3JlZW4uc2V0Q3Vyc29yKDEsMCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5jbGVhckxpbmUoKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnByaW50KCJBMyAtIFJlZCBwbGF0Zm9ybSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgb3Bwb3NpdGUgc2lkZSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkE0IC0gQmx1ZSBwbGF0Zm9ybSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgb3Bwb3NpdGUgc2lkZSIpOwogICAgICAgICAgICBicmVhazsKCQljYXNlIDU6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkE1IC0gQVVUT04gZGlzYWJsZWQiKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMiwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIlJvYm90IHdpbGwgbm93IGRvIG5vdGhpbmciKTsKICAgIH0KICAgIEJyYWluLlNjcmVlbi5yZW5kZXIoKTsKfQoKLyoqCiAqIFJ1bnMgd2hlbiBzY3JlZW4gaXMgcHJlc3NlZC4gVG9nZ2xlcyB0aGUKICogYXV0b24gc3RhdGUgKi8Kdm9pZCBzY3JlZW5wcmVzc2VkKHZvaWQpIHsKICAgIGF1dG9uU3RhdGUgPSBhdXRvblN0YXRlICUgNSArIDE7CiAgICBkaXNwbGF5Q3VycmVudEF1dG9uU3RhdGUoKTsKICAgIAogICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigzLDApOwogICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgQnJhaW4uU2NyZWVuLnByaW50KCJQcmVzcyBzY3JlZW4gdG8gdG9nZ2xlIGF1dG9uIHN0YXRlIik7Cn0KCnZvaWQgcHJlX2F1dG9uKCkgewogICAgLy8gU2V0IHVwIGFjdGlvbiBidXR0b24gYmluZGluZ3MgdG8gZnVuY3Rpb25zCiAgICBDb250cm9sbGVyMS5CdXR0b25YLnByZXNzZWQoc3Bpbm5lcl90b2dnbGUpOwogICAgQ29udHJvbGxlcjEuQnV0dG9uVXAucHJlc3NlZChzcGlubmVyX3JwbV91cCk7CiAgICBDb250cm9sbGVyMS5CdXR0b25Eb3duLnByZXNzZWQoc3Bpbm5lcl9ycG1fZG93bik7ICAgICAgICAKICAgIENvbnRyb2xsZXIxLkJ1dHRvbkIucHJlc3NlZChyZXZlcnNlX3RvZ2dsZSk7CiAgICBDb250cm9sbGVyMS5CdXR0b25SaWdodC5wcmVzc2VkKHNtb290aF9wb3dlcl91cCk7CiAgICBDb250cm9sbGVyMS5CdXR0b25MZWZ0LnByZXNzZWQoc21vb3RoX3Bvd2VyX2Rvd24pOwogICAgQ29udHJvbGxlcjEuQnV0dG9uWS5wcmVzc2VkKHRvZ2dsZV9wcmludF9pbmZvKTsKICAgIENvbnRyb2xsZXIxLkJ1dHRvbkEucHJlc3NlZChzdG9wcGluZ19tb2RlX3RvZ2dsZSk7CiAgICAvLyBTZXQgdXAgaW5pdGlhbCBzY3JlZW4KICAgIENvbnRyb2xsZXIxLlNjcmVlbi5jbGVhclNjcmVlbigpOwogICAgcHJpbnRfbW90b3JfbGluZSgpOwogICAgcHJpbnRfc3BpbigpOwogICAgQnJhaW4uU2NyZWVuLnJlbmRlcih0cnVlLCBmYWxzZSk7IC8vIEVuYWJsZSBkb3VibGUgYnVmZmVyaW5nIGZvciBzbW9vdGhlciBkcmF3aW5nCiAgICBCcmFpbi5TY3JlZW4ucHJlc3NlZChzY3JlZW5wcmVzc2VkKTsKICAgIAogICAgLyogRGlzcGxheSBpbml0aWFsIHRleHQgKi8KICAgIGRpc3BsYXlDdXJyZW50QXV0b25TdGF0ZSgpOwogICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigzLDApOwogICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgQnJhaW4uU2NyZWVuLnByaW50KCJQcmVzcyBzY3JlZW4gdG8gdG9nZ2xlIGF1dG9uIHN0YXRlIik7Cn0KCnZvaWQgYXV0b25vbW91cyh2b2lkKXsKICAgIHN3aXRjaCAoYXV0b25TdGF0ZSkgewogICAgICAgIGNhc2UgMTogYXV0b24xMih0cnVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjogYXV0b24xMihmYWxzZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6IGF1dG9uMzQodHJ1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6IGF1dG9uMzQoZmFsc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CgkJY2FzZSA1OiBicmVhazsKICAgIH0KfQoKdm9pZCB1c2VyX2NvbnRyb2wodm9pZCl7CiAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgLy8gRHJpdmUgY29kZQogICAgICAgIGFyY2FkZWRyaXZlKCk7CiAgICAgICAgdmV4Ojp0YXNrOjpzbGVlcCg1KTsgLy9TbGVlcCB0aGUgdGFzayBmb3IgYSBzaG9ydCBhbW91bnQgb2YgdGltZSB0byBwcmV2ZW50IHdhc3RlZCByZXNvdXJjZXMuIAogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHByZV9hdXRvbigpOy8vc2V0dXAKICAgIENvbXBldGl0aW9uLmF1dG9ub21vdXMoYXV0b25vbW91cyk7CiAgICBDb21wZXRpdGlvbi5kcml2ZXJjb250cm9sKHVzZXJfY29udHJvbCk7Cn0KCg==", "robot-config.h": "dXNpbmcgbmFtZXNwYWNlIHZleDsKdmV4OjpicmFpbiBCcmFpbjsKdmV4Ojptb3RvciBNb3RvcjA0ZHIgKHZleDo6UE9SVDEsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSx0cnVlKTsKdmV4Ojptb3RvciBNb3RvcjE2ZHIgKHZleDo6UE9SVDIsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSx0cnVlKTsKdmV4Ojptb3RvciBNb3RvcjAxZGwgKHZleDo6UE9SVDksIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6bW90b3IgTW90b3IxMWRsICh2ZXg6OlBPUlQxMCwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLGZhbHNlKTsKdmV4Ojptb3RvciBNb3RvcjA1c3AgKHZleDo6UE9SVDExLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzZfMSxmYWxzZSk7CnZleDo6bW90b3IgTW90b3IwMmRyICh2ZXg6OlBPUlQxMiwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLHRydWUpOwp2ZXg6Om1vdG9yIE1vdG9yMDNkbCAodmV4OjpQT1JUMjAsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6Y29udHJvbGxlciBDb250cm9sbGVyMTsKdmV4Ojpjb21wZXRpdGlvbiBDb21wZXRpdGlvbjs="}, "icon": "USER000x.bmp", "language": {"name": "vc++"}, "title": "Arcade Drive (auton)", "version": "0.0.1"}