-
Notifications
You must be signed in to change notification settings - Fork 0
/
BlueFP.vex
1 lines (1 loc) · 21 KB
/
BlueFP.vex
1
./___ThIsisATemPoRaRyFiLE___.json 000644 000765 000024 0000046012 13451727012 020171 0 ustar 00Kevin 000000 000000 13451727012 13451727012 {"title":"BlueFP","description":"Use this template for all competition code.","version":"0.0.1","icon":"USER000x.bmp","competition":true,"files":{"robot-config.h":"dXNpbmcgbmFtZXNwYWNlIHZleDsKdmV4OjpicmFpbiBCcmFpbjsKdmV4Ojptb3RvciBMZWZ0QmFja0RyaXZlICh2ZXg6OlBPUlQxLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIExlZnRGcm9udERyaXZlICh2ZXg6OlBPUlQyLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgRmx5ICh2ZXg6OlBPUlQzLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIEludGFrZSAodmV4OjpQT1JUNSwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLGZhbHNlKTsKdmV4Ojptb3RvciBGZWVkZXIgKHZleDo6UE9SVDYsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6bW90b3IgUmlnaHRGcm9udERyaXZlICh2ZXg6OlBPUlQ3LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIFJpZ2h0QmFja0RyaXZlICh2ZXg6OlBPUlQ4LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgU2VjcmV0V2VhcG9uICh2ZXg6OlBPUlQ5LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6Y29udHJvbGxlciBDb250cm9sbGVyMTsKdmV4Ojpjb21wZXRpdGlvbiBDb21wZXRpdGlvbjs=","main.cpp":"LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGV4ICBLbGF0c2t5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICBSYW5uZXkgU2Nob29sICAtICAzODE1TSAgLSAgU3BpdGZpcmUgKEJsaXR6IEFsbGlhbmNlKSAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgojaW5jbHVkZSA8cm9ib3QtY29uZmlnLmg+CnVzaW5nIG5hbWVzcGFjZSB2ZXg7CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmV4OjpsaW5lIGxpbmUxKEJyYWluLlRocmVlV2lyZVBvcnQuQSk7CnZleDo6bGluZSBsaW5lMihCcmFpbi5UaHJlZVdpcmVQb3J0LkIpOwoKCgp2b2lkIHByZV9hdXRvbiggdm9pZCApIHsgIAogICAgCn0KCgp2b2lkIGZvcndhcmQoaW50IHgsaW50IHYpewogICAgUmlnaHRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwp9CnZvaWQgYmFja3dhcmQoaW50IHgsaW50IHYpewogICAgUmlnaHRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKfQp2b2lkIHR1cm5SaWdodChpbnQgeCxpbnQgdil7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKfQp2b2lkIHR1cm5MZWZ0KGludCB4LGludCB2KXsKICAgIFJpZ2h0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsNjUsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsNjUsdmVsb2NpdHlVbml0czo6cGN0KTsKfQoKdm9pZCBhdXRvbm9tb3VzKCB2b2lkICkgewogICAgUmlnaHRGcm9udERyaXZlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgTGVmdEZyb250RHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgTGVmdEJhY2tEcml2ZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsKICAgIEludGFrZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICBGbHkuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBmb3J3YXJkKDEwMDAsNjUpOwogICAgdGFzazo6c2xlZXAoMjIwMCk7CiAgICBiYWNrd2FyZCgxMDMwLDY1KTsKICAgIHRhc2s6OnNsZWVwKDE3MDApOwogICAgdHVyblJpZ2h0KDMwNSw1NSk7CiAgICB0YXNrOjpzbGVlcCgxMTAwKTsKICAgIEZlZWRlci5yb3RhdGVGb3IoMjAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIGZvcndhcmQoOTUwLDkwKTsKICAgIHRhc2s6OnNsZWVwKDYwMCk7CiAgICBGZWVkZXIucm90YXRlRm9yKDUwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigxMTAscm90YXRpb25Vbml0czo6ZGVnLDkwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKDExMCxyb3RhdGlvblVuaXRzOjpkZWcsOTAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIHRhc2s6OnNsZWVwKDUwMCk7CiAgICBmb3J3YXJkKDEwMCw5MCk7CiAgICBTZWNyZXRXZWFwb24ucm90YXRlRm9yKDg1MCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigtMTIwLHJvdGF0aW9uVW5pdHM6OmRlZyw5MCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigtMTIwLHJvdGF0aW9uVW5pdHM6OmRlZyw5MCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgdGFzazo6c2xlZXAoNjAwKTsKICAgIFNlY3JldFdlYXBvbi5zdGFydFJvdGF0ZUZvcigtODUwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIGJhY2t3YXJkKDE2ODAsNjApOwogICAgdGFzazo6c2xlZXAoMjUwMCk7CiAgICB0dXJuUmlnaHQoMzEwLDU1KTsKICAgIHRhc2s6OnNsZWVwKDYwMCk7CiAgICBiYWNrd2FyZCgyMDAsNDApOwogICAgdGFzazo6c2xlZXAoNTAwKTsKICAgIGJhY2t3YXJkKDkwMCw2MCk7CiAgICB0YXNrOjpzbGVlcCgxNTAwKTsKICAgCn0KCgovL1VTRVJDT05UUk9MCnZvaWQgdXNlcmNvbnRyb2woIHZvaWQgKSB7CiAgLy8gVXNlciBjb250cm9sIGNvZGUgaGVyZSwgaW5zaWRlIHRoZSBsb29wCiAgd2hpbGUgKDEpewogICAgUmlnaHRGcm9udERyaXZlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgTGVmdEZyb250RHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgTGVmdEJhY2tEcml2ZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsKICAgIEZseS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICAgIFNlY3JldFdlYXBvbi5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICAgCiAgICAvL0NoYW5nZSBTZW5zaXRpdml0eSBvZiBDb250cm9sbGVyLCBBeGlzMQogICAgaW50IHZhbHVlMT0wOwogICAgaW50IHZhbHVlMz0wOwogICAgICAKICAgIGlmKENvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk+MCYmQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKTw9MTAwKXsKICAgICAgICB2YWx1ZTE9Q29udHJvbGxlcjEuQXhpczEudmFsdWUoKS8yOwogICAgfQogICAgZWxzZSBpZihDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpPjEwMCl7CiAgICAgICAgdmFsdWUxPXBvdyhDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpLDIpLzIwMDsKICAgIH0KICAgIGlmKENvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk8MCYmQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKT49LTEwMCl7CiAgICAgICAgdmFsdWUxPUNvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCkvMjsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKTwtMTAwKXsKICAgICAgICB2YWx1ZTE9LXBvdyhDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpLDIpLzIwMDsKICAgIH0gCiAgICAgIAogICAgLy9WYWx1ZSAzIFVuY2hhbmdlZAogICAgdmFsdWUzPShDb250cm9sbGVyMS5BeGlzMy52YWx1ZSgpKTsgCiAgICBMZWZ0RnJvbnREcml2ZS5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkLCh2YWx1ZTErdmFsdWUzKSx2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsKHZhbHVlMSt2YWx1ZTMpLHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsgCiAgICBSaWdodEZyb250RHJpdmUuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OnJldiwodmFsdWUxLXZhbHVlMyksdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOyAKICAgIFJpZ2h0QmFja0RyaXZlLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsKHZhbHVlMS12YWx1ZTMpLHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgIAogICAgCiAgICBpZihDb250cm9sbGVyMS5CdXR0b25SMi5wcmVzc2luZygpKQogICAgewogICAgICAgIEludGFrZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uUjEucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIEludGFrZS5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgICAgCiAgICB9CiAgICAgIAogICAgLyoKICAgIAogICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uTDEucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgRmVlZGVyLnJvdGF0ZUZvcigyMDAscm90YXRpb25Vbml0czo6ZGVnLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgICAgIEZlZWRlci5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICB0YXNrOjpzbGVlcCgzMDApOwogICAgICAgIFNlY3JldFdlYXBvbi5zdG9wKGJyYWtlVHlwZTo6aG9sZCk7CiAgICAgICAgSW50YWtlLnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7CiAgICAgICAgRmVlZGVyLnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7CiAgICAgICAgdGFzazo6c2xlZXAoMzAwKTsKICAgICAgICBTZWNyZXRXZWFwb24ucm90YXRlRm9yKC0xNSxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICB9IAogICAgICAqLwogICAgICAKICAgICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uTDEucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBGZWVkZXIuc3RhcnRSb3RhdGVGb3IoMjAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBJbnRha2Uuc3RhcnRSb3RhdGVGb3IoMTAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICAgIHRhc2s6OnNsZWVwKDIwMCk7CiAgICAgICAgICBSaWdodEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgICBSaWdodEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICAgIExlZnRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgICAgTGVmdEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgICAgIEZlZWRlci5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgU2VjcmV0V2VhcG9uLnNwaW4oZGlyZWN0aW9uVHlwZTo6cmV2LDEwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgIHRhc2s6OnNsZWVwKDMwMCk7IAogICAgfSAKICAgICAgCiAgIC8vRmVlZGVyICAKICAgIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkwyLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgSW50YWtlLnN0YXJ0Um90YXRlRm9yKDIwMDAscm90YXRpb25Vbml0czo6ZGVnLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIEZlZWRlci5yb3RhdGVGb3IoMjAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKCiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgRmVlZGVyLnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7CiAgICB9CiAgICAgIAogICAgLy9TVyAgCiAgICBpZihDb250cm9sbGVyMS5CdXR0b25BLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgU2VjcmV0V2VhcG9uLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDE3MCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgfQogICAgZWxzZSBpZihDb250cm9sbGVyMS5CdXR0b25ZLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgU2VjcmV0V2VhcG9uLnNwaW4oZGlyZWN0aW9uVHlwZTo6cmV2LDE3MCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgU2VjcmV0V2VhcG9uLnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7CiAgICB9ICAKICAgICAgCiAgICAKICAgIC8vRmx5CiAgICBpZihDb250cm9sbGVyMS5CdXR0b25VcC5wcmVzc2luZygpKQogICAgewogICAgICAgIEZseS5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uRG93bi5wcmVzc2luZygpKQogICAgeyAKICAgICAgICBGbHkuc3RvcChicmFrZVR5cGU6OmNvYXN0KTsgICAKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAKICAgIH0KICAgIAogICAKICAgICAgCiAgICAgIAogICAgdmV4Ojp0YXNrOjpzbGVlcCgyMCk7CiAgfQp9CiAgIAoKLy9TVEFSVCBQSUQKaW50IHNnbihkb3VibGUgdmFsKQp7CiAgICByZXR1cm4gdmFsID4gMCA/IDEgOiAtMTsKfQp2b2lkIHR1cm5Ubyhkb3VibGUgZGVncmVlcywgZG91YmxlIHNwZWVkID0gNjApCnsKICAgIGRlZ3JlZXMgKj0gOTYuMC85MC4wOwogICAgZG91YmxlIFAgPSAwLCBrcCA9Ljc7CiAgICBkb3VibGUgSSA9IDAsIGtpID0gMC4wMDQ7CiAgICBkb3VibGUgRCA9IDAsIGtkID0gMC4wMzsKICAgIGRvdWJsZSBlcnJvciA9IDEwMDsgCiAgICBkb3VibGUgbGFzdEVycm9yID0gMTAwOwogICAgZG91YmxlIG1vdG9yUG93ZXIgPSAwOwogICAgaW50IGlUaHJlc2ggPSAyNTsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAgbGFzdEVycm9yID0gZXJyb3I7CiAgICAgICAgLy9lcnJvciA9IGRlZ3JlZXMgLSBHeXJvMS52YWx1ZShyb3RhdGlvblVuaXRzOjpkZWcpOwoKICAgICAgICBpZiAoYWJzKGVycm9yKSA+IDE4MCkKICAgICAgICAgICAgZXJyb3IgPSAgc2duKGVycm9yKSAqICgzNjAgLSBhYnMoZXJyb3IpKTsKCiAgICAgICAgUCA9IGVycm9yICoga3A7CiAgICAgICAgRCA9IGtkICogKGVycm9yIC0gbGFzdEVycm9yKTsKCiAgICAgICAgaWYgKGFicyhlcnJvcikgPCBpVGhyZXNoKQogICAgICAgICAgICBJICs9IGVycm9yICoga2k7CgogICAgICAgIGlmIChhYnMoSSkgPiAxNSkKICAgICAgICAgIEkgPSAxNSAqIHNnbihlcnJvcik7CgogICAgICAgIG1vdG9yUG93ZXIgPSBQICsgSSArIEQ7CgogICAgICAgIGlmKGFicyhlcnJvcikgPD0gMC4xICYmIGFicyhsYXN0RXJyb3IpIDw9IC4xKSBicmVhazsgLy8gQnJlYWsgc3RhdGVtZW50CgogICAgICAgIGlmKGFicyhtb3RvclBvd2VyKSA+IGFicyhzcGVlZCkpCiAgICAgICAgICAgIG1vdG9yUG93ZXIgPSBzcGVlZCAqIHNnbihtb3RvclBvd2VyKTsKCiAgICAgICAgTGVmdEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgLW1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCAtbW90b3JQb3dlciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciwgdmVsb2NpdHlVbml0czo6cGN0KTsKCiAgICAgICAgdGFzazo6c2xlZXAoMTApOwogICAgfQogICAgTGVmdEJhY2tEcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIFJpZ2h0RnJvbnREcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgTGVmdEZyb250RHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIHRhc2s6OnNsZWVwKDUwKTsgLy8gU2xlZXAgaGVyZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBpbiB0aGUgYXV0b25vbW91cyBmdW5jdGlvbgp9Cgpkb3VibGUgc3RibENvbnN0ID0gLjc7Cgpkb3VibGUgcmFtcFVwKGRvdWJsZSBkZWx0YVYsIGludCBjeWNsZXMsIGludCB0aW1lU2xpY2UsIGRvdWJsZSBhbmdsZSA9IDApCnsKICAgIGRvdWJsZSBjdXJyVmVsID0gUmlnaHRGcm9udERyaXZlLnZlbG9jaXR5KHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodEZyb250RHJpdmUucmVzZXRSb3RhdGlvbigpOwogICAgCiAgICAvLyBHeXJvIFN0YWJpbGl6YXRpb24gdmFyaWFibGVzCiAgICBkb3VibGUgbGVmdEFkanVzdFB3ciA9IDA7CiAgICBkb3VibGUgaW5pdCA9IGFuZ2xlOwogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGN5Y2xlczsgaSsrKQogICAgewogICAgICAgIGN1cnJWZWwgKz0gZGVsdGFWL2N5Y2xlczsKICAgIAogICAgICAgIC8vbGVmdEFkanVzdFB3ciA9IHN0YmxDb25zdCAqIChHeXJvMS52YWx1ZShyb3RhdGlvblVuaXRzOjpkZWcpIC0gaW5pdCk7IC8vIFRyYWNraW5nIGRpZmZlcmVuY2UgaW4gZ3lybyB2YWx1ZQoKICAgICAgICAvLyBTZXR0aW5nIG1vdG9yIHBvd2VycwogICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIGN1cnJWZWwgLSBsZWZ0QWRqdXN0UHdyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0QmFja0RyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBjdXJyVmVsLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgY3VyclZlbCwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgY3VyclZlbCAtIGxlZnRBZGp1c3RQd3IsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgICAgIHRhc2s6OnNsZWVwKHRpbWVTbGljZSk7CiAgICB9CgogICAgcmV0dXJuIFJpZ2h0RnJvbnREcml2ZS5yb3RhdGlvbihyb3RhdGlvblVuaXRzOjpyZXYpOwp9Cgp2b2lkIGRyaXZlKGRvdWJsZSBpbmNoZXMsIGRvdWJsZSBzcGVlZCwgaW50IGN5Y2xlcyA9IDE1LCBpbnQgdGltZVNsaWNlID0gNTAsIGRvdWJsZSBoZWFkaW5nID0gLTEyMSwgYm9vbCB0dXJuID0gdHJ1ZSkKewogICAgLy8gQ29udmVydGluZyBpbmNoZXMgdG8gbW90b3Igcm90YXRpb25zCiAgICBkb3VibGUgaW5pdCA9IDA7CiAgICAvL2lmKGhlYWRpbmcgIT0gLTEyMSkgaW5pdCA9IGhlYWRpbmc7CiAgICBkb3VibGUgcm90cyA9IGluY2hlcyAvICg0ICogMy4xNDE1KTsKICAgIHJvdHMgLT0gcmFtcFVwKHNwZWVkLCBjeWNsZXMsIHRpbWVTbGljZSwgaW5pdCk7IC8vIFN1YnRyYWN0aW5nIHJhbXBpbmcgZGlzdGFuY2UgZnJvbSB0b3RhbAoKICAgIC8vIFBJRCBWYXJpYWJsZXMKICAgIGRvdWJsZSBQID0gMCwga3AgPSAxNTA7IC8vNzUKICAgIGRvdWJsZSBJID0gMCwga2kgPSAuOTU7CiAgICBkb3VibGUgRCA9IDAsIGtkID0gMjUwOyAvLzIzMAogICAgZG91YmxlIGVycm9yID0gMCwgbEVycm9yID0gMDsKICAgIGRvdWJsZSBpVGhyZXNoID0gLjU7CiAgICBkb3VibGUgbW90b3JQb3dlciA9IDA7CgogICAgLy8gR3lybyBTdGFiaWxpemF0aW9uIHZhcmlhYmxlcwogICAgZG91YmxlIGxlZnRBZGp1c3RQd3IgPSAwOwoKICAgIC8vIFJlc2V0IHJvdGF0aW9ucyBiZWZvcmUgUElEIGxvb3AKICAgIFJpZ2h0RnJvbnREcml2ZS5yZXNldFJvdGF0aW9uKCk7CgogICAgLy8gUmVzZXQgQnJhaW4gVGltZXIgQmVmb3JlIFBJRCBMb29wCiAgICBCcmFpbi5yZXNldFRpbWVyKCk7CiAgICAvL2ludCB0aGVvcmV0aWNhbFRpbWUgPSBhYnMocm90cyAvIChzcGVlZCAqIDIpIC8gNjApOwoKICAgIC8vIFBJRCBMb29wCiAgICB3aGlsZSAoYWJzKFJpZ2h0RnJvbnREcml2ZS5yb3RhdGlvbihyb3RhdGlvblVuaXRzOjpyZXYpKSA8IGFicyhyb3RzKS8qICYmIEJyYWluLnRpbWVyKHRpbWVVbml0czo6bXNlYykgPCB0aGVvcmV0aWNhbFRpbWUgKyAxMDAwKi8pCiAgICB7CiAgICAgICAgLy8gU2V0dGluZyBQSUQgVmFyaWFibGVzCiAgICAgICAgZXJyb3IgPSByb3RzIC0gKFJpZ2h0RnJvbnREcml2ZS5yb3RhdGlvbihyb3RhdGlvblVuaXRzOjpyZXYpKTsKICAgICAgICBQID0gZXJyb3IgKiBrcDsKICAgICAgICBEID0gKGVycm9yIC0gbEVycm9yKSAqIGtkOwoKICAgICAgICBpZiAoYWJzKGVycm9yKSA8IGlUaHJlc2gpCiAgICAgICAgICAgIEkgKz0gZXJyb3IgKiBraTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIEkgPSAwOwoKICAgICAgICBtb3RvclBvd2VyID0gYWJzKFApICsgYWJzKEkpIC0gYWJzKEQpOyAvLyBNYW51YWxseSBzZXR0aW5nIG1vdG9yIHBvd2VyCgogICAgICAgIGlmIChhYnMobW90b3JQb3dlcikgPiBhYnMoc3BlZWQpKSAvLyBMaW1pdGluZyBtb3RvciBwb3dlciB0byB0b3Agc3BlZWQKICAgICAgICAgICAgbW90b3JQb3dlciA9IGFicyhzcGVlZCk7CgogICAgICAgIGlmKHNwZWVkIDwgMCkgLy8gSW4gY2FzZSBvZiBnb2luZyBiYWNrd2FyZHMKICAgICAgICAgICAgbW90b3JQb3dlciAqPSAtMTsKCiAgICAgICAgLy9sZWZ0QWRqdXN0UHdyID0gc3RibENvbnN0ICogKEd5cm8xLnZhbHVlKHJvdGF0aW9uVW5pdHM6OmRlZykgLSBpbml0KTsgLy8gVHJhY2tpbmcgZGlmZmVyZW5jZSBpbiBneXJvIHZhbHVlCgogICAgICAgIC8vIFNldHRpbmcgbW90b3IgcG93ZXJzCiAgICAgICAgTGVmdEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciAtIGxlZnRBZGp1c3RQd3IsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBtb3RvclBvd2VyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIExlZnRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBtb3RvclBvd2VyIC0gbGVmdEFkanVzdFB3ciwgdmVsb2NpdHlVbml0czo6cGN0KTsKCiAgICAgICAgdGFzazo6c2xlZXAoNTApOwogICAgICAgIGxFcnJvciA9IGVycm9yOwogICAgfQoKICAgIC8vIFN0b3BwaW5nIG1vdG9ycyBhZnRlciBsb29wIGVuZHMKICAgIExlZnRCYWNrRHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodEZyb250RHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIExlZnRGcm9udERyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICAvKmlmKHR1cm4pCiAgICAgICAgdHVyblRvKGluaXQpOwogICAgICAgICovCiAgICAvLyBTbGVlcCBoZXJlIHNvIHdlIGRvIG5vdCBoYXZlIHRvIGluIHRoZSBhdXRvbm9tb3VzIGZ1bmN0aW9uCiAgICBpZiAoYWJzKGluY2hlcykgPj0gMTYpCiAgICAgICAgdGFzazo6c2xlZXAoMTAwKTsKICAgIGVsc2UKICAgICAgICB0YXNrOjpzbGVlcCg1MCk7Cn0KLy9FTkQgUElECgoKaW50IG1haW4oKSB7CiAgICBwcmVfYXV0b24oKTsKICAgIENvbXBldGl0aW9uLmF1dG9ub21vdXMoIGF1dG9ub21vdXMgKTsKICAgIENvbXBldGl0aW9uLmRyaXZlcmNvbnRyb2woIHVzZXJjb250cm9sICk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgd2hpbGUoMSkgewogICAgICB2ZXg6OnRhc2s6OnNsZWVwKDEwMCk7Ly9TbGVlcCB0aGUgdGFzayBmb3IgYSBzaG9ydCBhbW91bnQgb2YgdGltZSB0byBwcmV2ZW50IHdhc3RlZCByZXNvdXJjZXMuCiAgICB9ICAgIAogICAgICAgCn0="},"device":{"slot":4,"type":"vexV5"},"language":{"name":"vc++"},"components":[{"name":"RightFrontDrive","class":"vex::motor","port":"7","left":251,"top":318,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"RightBackDrive","class":"vex::motor","port":"8","left":251,"top":486,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"LeftFrontDrive","class":"vex::motor","port":"2","left":64,"top":476,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Controller1","class":"vex::controller","left":463,"top":192,"type":"controller"},{"name":"Fly","class":"vex::motor","port":"3","left":368,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Feeder","class":"vex::motor","port":"6","left":553,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Intake","class":"vex::motor","port":"5","left":642,"top":467,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"LeftBackDrive","class":"vex::motor","port":"1","left":62,"top":311,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"SecretWeapon","class":"vex::motor","port":"9","left":663,"top":124,"type":"motor","data":{"gears":200,"reversed":true}}]}