Files
project4-tracking/submission_autograder.py
2019-04-11 14:26:37 -07:00

31 lines
8.8 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from codecs import open
import os, ssl
if (not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None)):
ssl._create_default_https_context = ssl._create_unverified_context
"""
CS 188 Local Submission Autograder
Written by the CS 188 Staff
==============================================================================
_____ _ _
/ ____| | | |
| (___ | |_ ___ _ __ | |
\___ \| __/ _ \| '_ \| |
____) | || (_) | |_) |_|
|_____/ \__\___/| .__/(_)
| |
|_|
Modifying or tampering with this file is a violation of course policy.
If you're having trouble running the autograder, please contact the staff.
==============================================================================
"""
import bz2, base64
exec(bz2.decompress(base64.b64decode('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')))