Merge remote-tracking branch 'origin/development' into Flask

# Conflicts:
#	bazarr/main.py
#	views/settings_subtitles.tpl
pull/884/head
Halali 5 years ago
commit ae6bd5269c

@ -45,9 +45,13 @@ def start_bazarr():
ep = sp.Popen(script, stdout=sp.PIPE, stderr=sp.STDOUT, stdin=sp.PIPE)
print("Bazarr starting...")
try:
for line in iter(ep.stdout.readline, ''):
while True:
line = ep.stdout.readline()
if line == '' or not line:
break
if PY3:
sys.stdout.buffer.write(line)
sys.stdout.flush()
else:
sys.stdout.write(line)
except KeyboardInterrupt:

@ -6,6 +6,8 @@ import base64
import random
import platform
import os
import logging
import codecs
from pyga.requests import Event, Page, Tracker, Session, Visitor, Config
from pyga.entities import CustomVariable
@ -29,34 +31,36 @@ def track_event(category=None, action=None, label=None):
try:
if settings.analytics.visitor:
visitor = pickle.loads(base64.b64decode(settings.analytics.visitor), encoding='utf-8')
if visitor.user_agent is None:
visitor.user_agent = os.environ.get("SZ_USER_AGENT")
if visitor.unique_id > int(0x7fffffff):
visitor.unique_id = random.randint(0, 0x7fffffff)
visitor = pickle.loads(codecs.decode(settings.analytics.visitor.encode(), "base64"))
if visitor.user_agent is None:
visitor.user_agent = os.environ.get("SZ_USER_AGENT")
if visitor.unique_id > int(0x7fffffff):
visitor.unique_id = random.randint(0, 0x7fffffff)
except:
visitor = Visitor()
visitor.unique_id = random.randint(0, 0x7fffffff)
session = Session()
event = Event(category=category, action=action, label=label, value=1)
path = u"/" + u"/".join([category, action, label])
page = Page(path.lower())
tracker.add_custom_variable(CustomVariable(index=1, name='BazarrVersion', value=os.environ["BAZARR_VERSION"], scope=1))
tracker.add_custom_variable(CustomVariable(index=2, name='PythonVersion', value=platform.python_version(), scope=1))
if settings.general.getboolean('use_sonarr'):
tracker.add_custom_variable(CustomVariable(index=3, name='SonarrVersion', value=sonarr_version, scope=1))
else:
tracker.add_custom_variable(CustomVariable(index=3, name='SonarrVersion', value='unused', scope=1))
if settings.general.getboolean('use_radarr'):
tracker.add_custom_variable(CustomVariable(index=4, name='RadarrVersion', value=radarr_version, scope=1))
else:
tracker.add_custom_variable(CustomVariable(index=4, name='RadarrVersion', value='unused', scope=1))
tracker.add_custom_variable(CustomVariable(index=5, name='OSVersion', value=platform.platform(), scope=1))
try:
tracker.track_event(event, session, visitor)
# tracker.track_pageview(page, session, visitor) ## Commented because we were having too much hits on GA.
except:
logging.debug("BAZARR unable to track event.")
pass
else:
settings.analytics.visitor = base64.b64encode(pickle.dumps(visitor))
settings.analytics.visitor = codecs.encode(pickle.dumps(visitor), "base64").decode()
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle:
settings.write(handle)

@ -51,9 +51,9 @@ def update_series():
return
else:
# Get current shows in DB
current_shows_db = database.execute("SELECT tvdbId FROM table_shows")
current_shows_db = database.execute("SELECT sonarrSeriesId FROM table_shows")
current_shows_db_list = [x['tvdbId'] for x in current_shows_db]
current_shows_db_list = [x['sonarrSeriesId'] for x in current_shows_db]
current_shows_sonarr = []
series_to_update = []
series_to_add = []
@ -82,7 +82,7 @@ def update_series():
alternateTitles = None
# Add shows in Sonarr to current shows list
current_shows_sonarr.append(show['tvdbId'])
current_shows_sonarr.append(show['id'])
if show['tvdbId'] in current_shows_db_list:
series_to_update.append({'title': six.text_type(show["title"]),
@ -129,7 +129,7 @@ def update_series():
removed_series = list(set(current_shows_db_list) - set(current_shows_sonarr))
for series in removed_series:
database.execute("DELETE FROM table_shows WHERE tvdbId=?",(series,))
database.execute("DELETE FROM table_shows WHERE sonarrSEriesId=?",(series,))
# Update existing series in DB
series_in_db_list = []

@ -3,138 +3,88 @@ from __future__ import absolute_import
import ast
import os
import re
import types
import logging
import operator
import libs
import chardet
from bs4 import UnicodeDammit
from collections import OrderedDict
from config import settings
from utils import get_sonarr_platform, get_radarr_platform
def sonarr_path_mapping_regex():
global path_mapping
global sonarr_regex
global sonarr_use_path_mapping
path_mapping = ast.literal_eval(settings.general.path_mappings)
path_mapping = sorted(path_mapping, key=operator.itemgetter(0), reverse=True)
path_mapping = OrderedDict((mapping[0], mapping[1]) for mapping in path_mapping if mapping[0] != '')
if any(item for sublist in path_mapping for item in sublist):
sonarr_use_path_mapping = True
sonarr_regex = re.compile("|".join(path_mapping.keys()))
else:
sonarr_use_path_mapping = False
def sonarr_path_mapping_reverse_regex():
global sonarr_platform
global path_mapping_reverse
global sonarr_reverse_regex
global sonarr_use_path_mapping
sonarr_platform = get_sonarr_platform()
path_mapping_reverse = ast.literal_eval(settings.general.path_mappings)
path_mapping_reverse = sorted(path_mapping_reverse, key=operator.itemgetter(0), reverse=True)
path_mapping_reverse = OrderedDict((mapping[1], mapping[0]) for mapping in path_mapping_reverse if mapping[0] != '')
if any(item for sublist in path_mapping_reverse for item in sublist):
sonarr_use_path_mapping = True
sonarr_reverse_regex = re.compile("|".join(map(re.escape, path_mapping_reverse.keys())))
else:
sonarr_use_path_mapping = False
def radarr_path_mapping_regex():
global path_mapping_movie
global radarr_regex
global radarr_use_path_mapping
path_mapping_movie = ast.literal_eval(settings.general.path_mappings_movie)
path_mapping_movie = sorted(path_mapping_movie, key=operator.itemgetter(0), reverse=True)
path_mapping_movie = OrderedDict((mapping[0], mapping[1]) for mapping in path_mapping_movie if mapping[0] != '')
if any(item for sublist in path_mapping_movie for item in sublist):
radarr_use_path_mapping = True
radarr_regex = re.compile("|".join(path_mapping_movie.keys()))
else:
radarr_use_path_mapping = False
def radarr_path_mapping_reverse_regex():
global radarr_platform
global path_mapping_reverse_movie
global radarr_reverse_regex
global radarr_use_path_mapping
radarr_platform = get_sonarr_platform()
path_mapping_reverse_movie = ast.literal_eval(settings.general.path_mappings)
path_mapping_reverse_movie = sorted(path_mapping_reverse_movie, key=operator.itemgetter(0), reverse=True)
path_mapping_reverse_movie = OrderedDict((mapping[1], mapping[0]) for mapping in path_mapping_reverse_movie if mapping[0] != '')
if any(item for sublist in path_mapping_reverse_movie for item in sublist):
radarr_use_path_mapping = True
radarr_reverse_regex = re.compile("|".join(map(re.escape, path_mapping_reverse_movie.keys())))
else:
radarr_use_path_mapping = False
def path_replace(path):
if path is None or sonarr_use_path_mapping is False:
return path
reverted_path = sonarr_regex.sub(lambda match: path_mapping[match.group(0)], path, count=1)
from os.path import normpath
return normpath(reverted_path)
if path is None:
return None
for path_mapping in ast.literal_eval(settings.general.path_mappings):
if path_mapping[0] == path_mapping[1]:
continue
if '' in path_mapping:
continue
if path_mapping[0] in path:
path = path.replace(path_mapping[0], path_mapping[1])
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
path = path.replace('/', '\\')
elif path.startswith('/'):
path = path.replace('\\', '/')
break
return path
def path_replace_reverse(path):
if path is None or sonarr_use_path_mapping is False:
return path
reverted_path_temp = sonarr_reverse_regex.sub(lambda match: path_mapping_reverse[match.group(0)], path, count=1)
if sonarr_platform == 'posix':
from posixpath import normpath
reverted_path = reverted_path_temp.replace('\\', '/')
elif sonarr_platform == 'nt':
from ntpath import normpath
reverted_path = reverted_path_temp.replace('/', '\\')
return normpath(reverted_path)
if path is None:
return None
for path_mapping in ast.literal_eval(settings.general.path_mappings):
if path_mapping[0] == path_mapping[1]:
continue
if '' in path_mapping:
continue
if path_mapping[1] in path:
path = path.replace(path_mapping[1], path_mapping[0])
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
path = path.replace('/', '\\')
elif path.startswith('/'):
path = path.replace('\\', '/')
break
return path
def path_replace_movie(path):
if path is None or radarr_use_path_mapping is False:
return path
reverted_path = radarr_regex.sub(lambda match: path_mapping_movie[match.group(0)], path, count=1)
from os.path import normpath
return normpath(reverted_path)
if path is None:
return None
for path_mapping in ast.literal_eval(settings.general.path_mappings_movie):
if path_mapping[0] == path_mapping[1]:
continue
if '' in path_mapping:
continue
if path_mapping[0] in path:
path = path.replace(path_mapping[0], path_mapping[1])
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
path = path.replace('/', '\\')
elif path.startswith('/'):
path = path.replace('\\', '/')
break
return path
def path_replace_reverse_movie(path):
if path is None or radarr_use_path_mapping is False:
return path
reverted_path_temp = radarr_reverse_regex.sub(lambda match: path_mapping_reverse_movie[match.group(0)], path, count=1)
if radarr_platform == 'posix':
from posixpath import normpath
reverted_path = reverted_path_temp.replace('\\', '/')
elif radarr_platform == 'nt':
from ntpath import normpath
reverted_path = reverted_path_temp.replace('/', '\\')
return normpath(reverted_path)
if path is None:
return None
for path_mapping in ast.literal_eval(settings.general.path_mappings_movie):
if path_mapping[0] == path_mapping[1]:
continue
if '' in path_mapping:
continue
if path_mapping[1] in path:
path = path.replace(path_mapping[1], path_mapping[0])
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
path = path.replace('/', '\\')
elif path.startswith('/'):
path = path.replace('\\', '/')
break
return path
def pp_replace(pp_command, episode, subtitles, language, language_code2, language_code3, forced):
@ -203,9 +153,3 @@ def force_unicode(s):
except UnicodeDecodeError:
s = UnicodeDammit(s).unicode_markup
return s
sonarr_path_mapping_regex()
sonarr_path_mapping_reverse_regex()
radarr_path_mapping_regex()
radarr_path_mapping_reverse_regex()

@ -90,14 +90,15 @@ def store_subtitles(original_path, reversed_path):
database.execute("UPDATE table_episodes SET subtitles=? WHERE path=?",
(str(actual_subtitles), original_path))
episode = database.execute("SELECT sonarrEpisodeId FROM table_episodes WHERE path=?",
(original_path,), only_one=True)
matching_episodes = database.execute("SELECT sonarrEpisodeId FROM table_episodes WHERE path=?",
(original_path,))
if episode:
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
list_missing_subtitles(epno=episode['sonarrEpisodeId'])
else:
logging.debug("BAZARR haven't been able to update existing subtitles to DB : " + str(actual_subtitles))
for episode in matching_episodes:
if episode:
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
list_missing_subtitles(epno=episode['sonarrEpisodeId'])
else:
logging.debug("BAZARR haven't been able to update existing subtitles to DB : " + str(actual_subtitles))
else:
logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.")
@ -161,13 +162,14 @@ def store_subtitles_movie(original_path, reversed_path):
database.execute("UPDATE table_movies SET subtitles=? WHERE path=?",
(str(actual_subtitles), original_path))
movie = database.execute("SELECT radarrId FROM table_movies WHERE path=?", (original_path,), only_one=True)
matching_movies = database.execute("SELECT radarrId FROM table_movies WHERE path=?", (original_path,))
if movie:
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
list_missing_subtitles_movies(no=movie['radarrId'])
else:
logging.debug("BAZARR haven't been able to update existing subtitles to DB : " + str(actual_subtitles))
for movie in matching_movies:
if movie:
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
list_missing_subtitles_movies(no=movie['radarrId'])
else:
logging.debug("BAZARR haven't been able to update existing subtitles to DB : " + str(actual_subtitles))
else:
logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.")
@ -364,23 +366,29 @@ def guess_external_subtitles(dest_folder, subtitles):
subtitle_path)
continue
detected_language = None
with open(subtitle_path, 'r') as f:
text = f.read()
try:
encoding = UnicodeDammit(text)
if six.PY2:
text = text.decode(encoding.original_encoding)
detected_language = langdetect.detect(text)
except Exception as e:
logging.exception('BAZARR Error trying to detect language for this subtitles file: ' +
subtitle_path + ' You should try to delete this subtitles file manually and ask '
'Bazarr to download it again.')
else:
if detected_language:
logging.debug("BAZARR external subtitles detected and guessed this language: " + str(
detected_language))
try:
subtitles[subtitle] = Language.rebuild(Language.fromietf(detected_language))
except:
pass
if six.PY3:
with open(subtitle_path, 'r', errors='ignore') as f:
text = f.read()
else:
with open(subtitle_path, 'r') as f:
text = f.read()
try:
encoding = UnicodeDammit(text)
if six.PY2:
text = text.decode(encoding.original_encoding)
detected_language = langdetect.detect(text)
except Exception as e:
logging.exception('BAZARR Error trying to detect language for this subtitles file: ' +
subtitle_path + ' You should try to delete this subtitles file manually and ask '
'Bazarr to download it again.')
else:
if detected_language:
logging.debug("BAZARR external subtitles detected and guessed this language: " + str(
detected_language))
try:
subtitles[subtitle] = Language.rebuild(Language.fromietf(detected_language))
except:
pass
return subtitles

@ -140,7 +140,7 @@ def custom_auth_basic(check):
def check_credentials(user, pw):
username = settings.auth.username
password = settings.auth.password
if hashlib.md5(pw).hexdigest() == password and user == username:
if hashlib.md5(pw.encode('utf-8')).hexdigest() == password and user == username:
return True
return False
@ -152,8 +152,8 @@ def authorize():
def api_authorize():
if 'apikey' in request.args.dict:
if request.args.dict['apikey'][0] == settings.auth.apikey:
if 'apikey' in request.GET.dict:
if request.GET.dict['apikey'][0] == settings.auth.apikey:
return
else:
abort(401, 'Unauthorized')
@ -262,7 +262,6 @@ def wizard():
# @custom_auth_basic(check_credentials)
def save_wizard():
authorize()
test = request.form
settings_general_ip = request.form.get('settings_general_ip')
settings_general_port = request.form.get('settings_general_port')
@ -425,7 +424,7 @@ def save_wizard():
database.execute("UPDATE table_settings_languages SET enabled=0")
for item in settings_subliminal_languages:
# Enable each desired language in DB
database.execute("UPDATE table_settings_languages SET enabled=1 WHERE code2=?", item)
database.execute("UPDATE table_settings_languages SET enabled=1 WHERE code2=?", (item,))
settings_serie_default_enabled = request.form.get('settings_serie_default_enabled')
if settings_serie_default_enabled is None:
@ -1412,7 +1411,7 @@ def save_settings():
else:
settings.auth.type = text_type(settings_auth_type)
settings.auth.username = text_type(settings_auth_username)
settings.auth.password = hashlib.md5(settings_auth_password).hexdigest()
settings.auth.password = hashlib.md5(settings_auth_password.encode('utf-8')).hexdigest()
if settings_auth_username not in aaa._store.users:
cork = Cork(os.path.normpath(os.path.join(args.config_dir, 'config')), initialize=True)
cork._store.roles[''] = 100
@ -2251,6 +2250,8 @@ def api_help():
# Mute DeprecationWarning
warnings.simplefilter("ignore", DeprecationWarning)
if six.PY3:
warnings.simplefilter("ignore", BrokenPipeError)
if args.debug:
server = app.run(
host=str(settings.general.ip), port=(int(args.port) if args.port else int(settings.general.port)), debug=True)

@ -0,0 +1,6 @@
sympy
vcrpy>=1.6.1
pytest
pytest-pep8
pytest-flakes
pytest-cov

@ -41,7 +41,11 @@ import base64, cgi, email.utils, functools, hmac, imp, itertools, mimetypes,\
from datetime import date as datedate, datetime, timedelta
from tempfile import TemporaryFile
from traceback import format_exc, print_exc
from inspect import getargspec
from six import PY2
if PY2:
from inspect import getargspec
else:
from inspect import getfullargspec as getargspec
from unicodedata import normalize

@ -256,7 +256,7 @@ class FileCache(MutableMapping):
return self._loads(f.read())
except (IOError, OSError):
logger.warning('Error opening file: {}'.format(filename))
return None
raise
def __setitem__(self, key, value):
ekey = self._encode_key(key)

@ -46,15 +46,7 @@ if os.name == 'nt': # pragma: no cover
dst = unicode(dst, sys.getfilesystemencoding())
if _rename_atomic(src, dst):
return True
retry = 0
rv = False
while not rv and retry < 100:
rv = _MoveFileEx(src, dst, _MOVEFILE_REPLACE_EXISTING |
_MOVEFILE_WRITE_THROUGH)
if not rv:
time.sleep(0.001)
retry += 1
return rv
return _MoveFileEx(src, dst, _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH)
# new in Vista and Windows Server 2008
_CreateTransaction = ctypes.windll.ktmw32.CreateTransaction
@ -68,18 +60,11 @@ if os.name == 'nt': # pragma: no cover
if ta == -1:
return False
try:
retry = 0
rv = False
while not rv and retry < 100:
rv = _MoveFileTransacted(src, dst, None, None,
_MOVEFILE_REPLACE_EXISTING |
_MOVEFILE_WRITE_THROUGH, ta)
if rv:
rv = _CommitTransaction(ta)
break
else:
time.sleep(0.001)
retry += 1
rv = _MoveFileTransacted(src, dst, None, None,
_MOVEFILE_REPLACE_EXISTING |
_MOVEFILE_WRITE_THROUGH, ta)
if rv:
rv = _CommitTransaction(ta)
return rv
finally:
_CloseHandle(ta)
@ -92,7 +77,7 @@ if os.name == 'nt': # pragma: no cover
return
# Fall back to "move away and replace"
try:
os.rename(src, dst)
shutil.move(src, dst)
except OSError as e:
if e.errno != errno.EEXIST:
raise

@ -5,6 +5,7 @@ import calendar
from math import floor
from pyga.entities import Campaign, CustomVariable, Event, Item, Page, Session, SocialInteraction, Transaction, Visitor
import pyga.utils as utils
from six import itervalues
try:
from urllib import urlencode
from urllib2 import Request as urllib_request
@ -210,7 +211,7 @@ class Request(GIFRequest):
x10.clear_key(self.X10_CUSTOMVAR_VALUE_PROJCT_ID)
x10.clear_key(self.X10_CUSTOMVAR_SCOPE_PROJECT_ID)
for cvar in custom_vars.itervalues():
for cvar in itervalues(custom_vars):
name = utils.encode_uri_components(cvar.name)
value = utils.encode_uri_components(cvar.value)
x10.set_key(

@ -10,8 +10,8 @@ class AssrtConverter(LanguageReverseConverter):
u'英文': ('eng',),
u'chs': ('zho', None, 'Hans'), u'cht': ('zho', None, 'Hant'),
u'chn': ('zho', None, 'Hans'), u'twn': ('zho', None, 'Hant')}
self.to_assrt = { ('zho', None, 'Hans'): u'chs', ('zho', None, 'Hant'): u'cht', ('eng',) : u'eng',
('zho',): u'chs'}
self.to_assrt = { ('zho', None, 'Hans'): u'chs', ('zho', None, 'Hant'): u'cht',
('eng', None, None) : u'eng', ('zho', None, None): u'chs'}
self.codes = set(self.from_assrt.keys())
def convert(self, alpha3, country=None, script=None):

@ -23,6 +23,20 @@ language_converters.register('assrt = subliminal_patch.converters.assrt:AssrtCon
server_url = 'https://api.assrt.net/v1'
supported_languages = list(language_converters['assrt'].to_assrt.keys())
def language_contains(subset, superset):
if subset.alpha3 != superset.alpha3:
return False
if superset.country != None and subset.country != superset.country:
return False
if superset.script != None and subset.script != superset.script:
return False
return True
def search_language_in_list(lang, langlist):
for l in langlist:
if language_contains(lang, l):
return l
return None
class AssrtSubtitle(Subtitle):
"""Assrt Sbutitle."""
@ -46,6 +60,7 @@ class AssrtSubtitle(Subtitle):
if self._detail:
return self._detail
params = {'token': self.token, 'id': self.id}
logger.info('Get subtitle detail: GET /sub/detail %r', params)
r = self.session.get(server_url + '/sub/detail', params=params, timeout=10)
r.raise_for_status()
@ -55,9 +70,7 @@ class AssrtSubtitle(Subtitle):
# first pass: guessit
for f in files:
logger.info('File %r', f)
guess = guessit(f['f'], self.guessit_options)
logger.info('GuessIt %r', guess)
langs = set()
if 'language' in guess:
langs.update(guess['language'])
@ -71,7 +84,6 @@ class AssrtSubtitle(Subtitle):
codes = language_converters['assrt'].codes
for f in files:
langs = set([ Language.fromassrt(k) for k in codes if k in f['f'] ])
logger.info('%s: %r', f['f'], langs)
if self.language in langs:
self._defail = f
return f
@ -127,18 +139,15 @@ class AssrtProvider(Provider):
query = ' '.join(keywords)
params = {'token': self.token, 'q': query, 'is_file': 1}
logger.debug('Searching subtitles %r', params)
logger.debug('Searching subtitles: GET /sub/search %r', params)
res = self.session.get(server_url + '/sub/search', params=params, timeout=10)
res.raise_for_status()
result = res.json()
if result['status'] != 0:
logger.error('status error: %r', r)
logger.error('status error: %r', result['status'])
return []
if not result['sub']['subs']:
logger.debug('No subtitle found')
# parse the subtitles
pattern = re.compile(r'lang(?P<code>\w+)')
subtitles = []
@ -149,8 +158,9 @@ class AssrtProvider(Provider):
match = pattern.match(key)
try:
language = Language.fromassrt(match.group('code'))
if language in languages:
subtitles.append(AssrtSubtitle(language, sub['id'], sub['videoname'], self.session, self.token))
output_language = search_language_in_list(language, languages)
if output_language:
subtitles.append(AssrtSubtitle(output_language, sub['id'], sub['videoname'], self.session, self.token))
except:
pass
@ -160,7 +170,6 @@ class AssrtProvider(Provider):
return self.query(languages, video)
def download_subtitle(self, subtitle):
logger.info('Downloading subtitle %r', subtitle)
r = self.session.get(subtitle.download_link, timeout=10)
r.raise_for_status()

@ -0,0 +1,605 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27The+Big+Bang+Theory+S07E05%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"The Big Bang Theory S07E05\",\"\
result\":\"succeed\",\"subs\":[{\"subtype\":\"Subrip(srt)\",\"id\":618200,\"\
lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"langchs\":true}},\"vote_score\"\
:0,\"upload_time\":\"2018-01-26 19:23:52\",\"native_name\":\"\u5929\u624D\u7406\
\u8BBA\u4F20\u7B2C7\u5B63\u516824\u96C6The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\"\
,\"videoname\":\"The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\",\"release_site\"\
:\"\u4F0A\u7538\u56ED\",\"revision\":0},{\"upload_time\":\"2014-12-06 04:13:43\"\
,\"subtype\":\"Subrip(srt)\",\"id\":316965,\"native_name\":\"\u751F\u6D3B\u5927\
\u7206\u70B8 \u7B2C\u4E03\u5B63 \u7B2C 5 \u96C6\",\"videoname\":\"The Big\
\ Bang Theory S07E05 720p HDTV X264-DIMENSION\",\"revision\":0,\"vote_score\"\
:0},{\"upload_time\":\"2014-12-06 04:13:43\",\"subtype\":\"Subrip(srt)\",\"\
id\":316966,\"native_name\":\"\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\u5B63\
\ \u7B2C 5 \u96C6\",\"videoname\":\"The Big Bang Theory S07E05 720p HDTV X264-DIMENSION\"\
,\"revision\":0,\"vote_score\":0},{\"upload_time\":\"2014-11-02 10:41:05\"\
,\"subtype\":\"SSA\",\"revision\":0,\"id\":264973,\"lang\":{\"desc\":\"\u53CC\
\u8BED\",\"langlist\":{\"langdou\":true}},\"videoname\":\"The.Big.Bang.Theory.S07E05.720p.BluRay.x264-DEMAND\"\
,\"native_name\":\"The Big Bang Theory S07\\/\u751F\u6D3B\u5927\u7206\u70B8\
\ \u7B2C\u4E03\u5B63\\/The Big Bang Theory Season 07\",\"vote_score\":80},{\"\
upload_time\":\"2014-08-30 05:11:21\",\"subtype\":\"Subrip(srt)\",\"revision\"\
:0,\"id\":261680,\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"langchs\":true}},\"\
videoname\":\"The.Big.Bang.Theory.S07.720p.BluRay.x264-DEMAND\",\"native_name\"\
:\"\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\u5B63\\/\u5929\u624D\u7406\u8BBA\
\u4F20\",\"vote_score\":0},{\"upload_time\":\"2013-10-19 03:34:04\",\"subtype\"\
:\"Subrip(srt)\",\"revision\":0,\"id\":244659,\"lang\":{\"desc\":\"\u82F1\
\ \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\":true,\"langcht\"\
:true}},\"videoname\":\"The Big Bang Theory S07E05 the.big.bang.theory.705.hdtv-lol\"\
,\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\\/\u751F\u6D3B\u5927\u7206\
\u70B8 \u7B2C\u4E03\u5B63\u7B2C\u4E94\u96C6\",\"vote_score\":0},{\"upload_time\"\
:\"2013-10-18 23:33:24\",\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\"\
:244640,\"lang\":{\"desc\":\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"langlist\"\
:{\"langcht\":true,\"langeng\":true,\"langdou\":true,\"langchs\":true}},\"\
videoname\":\"\u751F\u6D3B\u5927\u7206\u70B8\\/The Big Bang Theory S07E05\\\
/\u7B2C\u4E03\u5B63\u7B2C5\u96C6\\/\u5723\u57CE\u5BB6\u56ED\u53CC\u8BED\u5B57\
\u5E55 the.big.bang.theory.705.hdtv-lol\",\"native_name\":\"\",\"vote_score\"\
:0},{\"upload_time\":\"2013-10-18 22:15:16\",\"subtype\":\"SSA\",\"revision\"\
:0,\"id\":244632,\"lang\":{\"desc\":\"\u82F1 \u7B80\",\"langlist\":{\"langchs\"\
:true,\"langeng\":true}},\"videoname\":\"The.Big.Bang.Theory.S07E05.720p.HDTV.X264-DIMENSION\"\
,\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\\/The Big Bang Theory S07E05\u751F\
\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\u5B63\u7B2C\u4E94\u96C6\u3010\u8C22\u8033\
\u6735\u5B57\u5E55\u7EC4\u3011\",\"vote_score\":0},{\"upload_time\":\"2013-10-18\
\ 21:31:21\",\"subtype\":\"\u5176\u4ED6\",\"revision\":0,\"id\":244630,\"\
lang\":{\"desc\":\"\",\"langlist\":{}},\"videoname\":\"\u751F\u6D3B\u5927\u7206\
\u70B8 \u7B2C7\u96C6\u7B2C5\u96C6 720P\",\"native_name\":\"\",\"vote_score\"\
:0},{\"upload_time\":\"2013-10-18 20:46:57\",\"subtype\":\"\u5176\u4ED6\"\
,\"revision\":0,\"id\":244624,\"lang\":{\"desc\":\"\u82F1 \u7B80 \u7E41\"\
,\"langlist\":{\"langeng\":true,\"langchs\":true,\"langcht\":true}},\"videoname\"\
:\"\u751F\u6D3B\u5927\u7206\u70B8\u7B2C\u4E03\u5B63\u7B2C5\u96C6\",\"native_name\"\
:\"The Big Bang Theory S07E05\",\"vote_score\":0},{\"subtype\":\"Subrip(srt)\"\
,\"id\":585062,\"lang\":{\"desc\":\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"\
langlist\":{\"langcht\":true,\"langeng\":true,\"langdou\":true,\"langchs\"\
:true}},\"vote_score\":0,\"upload_time\":\"2013-10-17 17:31:00\",\"native_name\"\
:\"\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C7\u96C6\u7B2C5\u96C6\",\"videoname\"\
:\"The Big Bang Theory S07E05\",\"release_site\":\"\u4EBA\u4EBA\u5F71\u89C6\
YYeTs\",\"revision\":0}],\"action\":\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:14:41 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/detail?token=SECRET&id=%5B%27618200%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"result\":\"succeed\",\"subs\":[{\"id\":618200,\"\
filelist\":[{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\/-\\\
/1\\/The.Big.Bang.Theory.S07E01.The.Hofstadter.Insufficiency.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=dc994ecdf3a6a02a2651950fb52956d5&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E01.The.Hofstadter.Insufficiency.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"20KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/2\\/The.Big.Bang.Theory.S07E02.The.Deception.Verification.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=3d7591f8ce42e96aae82d6565f45847f&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E02.The.Deception.Verification.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"25KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/3\\/The.Big.Bang.Theory.S07E03.The.Scavenger.Vortex.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=b243d9b5ea70772b40af9e1399c3dce2&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E03.The.Scavenger.Vortex.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"25KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/4\\/The.Big.Bang.Theory.S07E04.The.Raiders.Minimization.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=0b6f5092475eeb0e24442658271cc8a7&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E04.The.Raiders.Minimization.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"24KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/5\\/The.Big.Bang.Theory.S07E05.The.Workplace.Proximity.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=f2aed4f15f4806f96780aafe2b2aed71&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E05.The.Workplace.Proximity.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"19KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/6\\/The.Big.Bang.Theory.S07E06.The.Romance.Resonance.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=8f6888f21277235187af784756188bd7&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E06.The.Romance.Resonance.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"24KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/7\\/The.Big.Bang.Theory.S07E07.The.Proton.Displacement.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=90d234aed204bdef9a3e2d699e1a3f11&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E07.The.Proton.Displacement.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"20KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/8\\/The.Big.Bang.Theory.S07E08.The.Itchy.Brain.Simulation.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=e65fd7846fcdf3fb1c12c4d81bae4600&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E08.The.Itchy.Brain.Simulation.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"20KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/9\\/The.Big.Bang.Theory.S07E09.The.Thanksgiving.Decoupling.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=56aa3deed2441fc3ba57501e44240739&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E09.The.Thanksgiving.Decoupling.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"21KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/10\\/The.Big.Bang.Theory.S07E10.The.Discovery.Dissipation.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=02740b8e5500328af67531babfba02ff&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E10.The.Discovery.Dissipation.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"24KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/11\\/The.Big.Bang.Theory.S07E11.The.Cooper.Extraction.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=4402626f09db033a2f1fd7cd9ac374d4&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E11.The.Cooper.Extraction.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"21KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/12\\/The.Big.Bang.Theory.S07E12.The.Hesitation.Ramification.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=24ebaf0165ab4b525419afb41aded7b6&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E12.The.Hesitation.Ramification.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"20KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/13\\/The.Big.Bang.Theory.S07E13.The.Occupation.Recalibration.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=44a96783c63e37c23504e203f3a963ee&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E13.The.Occupation.Recalibration.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"23KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/14\\/The.Big.Bang.Theory.S07E14.The.Convention.Conundrum.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=a581f9a7a58cd18fda8d29cbad3000b3&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E14.The.Convention.Conundrum.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"23KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/15\\/The.Big.Bang.Theory.S07E15.The.Locomotive.Manipulation.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=217c6ae8f48eba667d258b6448fe1022&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E15.The.Locomotive.Manipulation.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"22KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/16\\/The.Big.Bang.Theory.S07E16.The.Table.Polarization.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=ef0f11100e90ed343fe510418effaaf9&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E16.The.Table.Polarization.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"22KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/17\\/The.Big.Bang.Theory.S07E17.The.Friendship.Turbulence.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=63a6b5c214c15b380674315bc9a7a1ad&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E17.The.Friendship.Turbulence.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"21KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/18\\/The.Big.Bang.Theory.S07E18.The.Mommy.Observation.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.srt?_=1575098081&-=21b5bfa881f07f4a9dcb04189b7f2666&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E18.The.Mommy.Observation.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.srt\"\
,\"s\":\"22KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/19\\/The.Big.Bang.Theory.S07E19.The.Indecision.Amalgamation.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.srt?_=1575098081&-=0d3cf082feb58e0c92ffe27bdc396fca&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E19.The.Indecision.Amalgamation.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.srt\"\
,\"s\":\"21KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/20\\/The.Big.Bang.Theory.S07E20.The.Relationship.Diremption.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=79e8f4c5123eac1a33860e333a4056e8&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E20.The.Relationship.Diremption.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"22KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/21\\/The.Big.Bang.Theory.S07E21.The.Anything.Can.Happen.Recurrence.720p.WEB-DL.DD5.1.H.264.srt?_=1575098081&-=c8cf7d8354f11fe4ed919ed2428b9cb3&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E21.The.Anything.Can.Happen.Recurrence.720p.WEB-DL.DD5.1.H.264.srt\"\
,\"s\":\"19KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/22\\/The.Big.Bang.Theory.S07E22.The.Protron.Transmogrification.720p.WEB-DL.DD5.1.H.264.gb.srt?_=1575098081&-=874f8e01f5c910b365e1fa2dcb2633d3&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E22.The.Protron.Transmogrification.720p.WEB-DL.DD5.1.H.264.gb.srt\"\
,\"s\":\"22KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/23\\/The.Big.Bang.Theory.S07E23.The.Gorilla.Dissolution.720p.WEB-DL.DD5.1.H.264.gb.srt?_=1575098081&-=58925fc05efb7b49bf8caa65ec7e79a2&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E23.The.Gorilla.Dissolution.720p.WEB-DL.DD5.1.H.264.gb.srt\"\
,\"s\":\"23KB\"},{\"url\":\"http:\\/\\/file0.assrt.net\\/onthefly\\/618200\\\
/-\\/24\\/The.Big.Bang.Theory.S07E24.The.Status.Quo.Combustion.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.gb.srt?_=1575098081&-=796e260c7590e4a5eb6e2a866de47111&api=1\"\
,\"f\":\"The.Big.Bang.Theory.S07E24.The.Status.Quo.Combustion.720p.WEB-DL.DD5.1.AAC2.0.H.264-YFN.gb.srt\"\
,\"s\":\"26KB\"}],\"url\":\"http:\\/\\/file0.assrt.net\\/download\\/618200\\\
/The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264.zip?_=1575098081&-=b56a01003b604bdd203ef305f3b49287&api=1\"\
,\"release_site\":\"\u4F0A\u7538\u56ED\",\"revision\":0,\"filename\":\"The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264.zip\"\
,\"subtype\":\"Subrip(srt)\",\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"\
langchs\":true}},\"videoname\":\"The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\"\
,\"vote_score\":0,\"upload_time\":\"2018-01-26 19:23:52\",\"title\":\"\u5929\
\u624D\u7406\u8BBA\u4F20\u7B2C7\u5B63\u516824\u96C6The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\"\
,\"view_count\":1020,\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\u7B2C\
7\u5B63\u516824\u96C6The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\",\"\
producer\":{\"source\":\"\u539F\u521B\u7FFB\u8BD1\",\"verifier\":\"\",\"producer\"\
:\"\",\"uploader\":\"\"},\"size\":247871,\"down_count\":309}],\"action\":\"\
detail\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:14:41 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: http://file0.assrt.net/onthefly/618200/-/1/The.Big.Bang.Theory.S07E01.The.Hofstadter.Insufficiency.720p.WEB-DL.DD5.1.H.264.srt?api=%5B%271%27%5D&-=%5B%27dc994ecdf3a6a02a2651950fb52956d5%27%5D&_=%5B%271575098081%27%5D
response:
body:
string: !!binary |
MQ0KMDA6MDA6MTAsMDAwIC0tPiAwMDowMDoxMiw2MDANClNoZWxkb24gz9bU2rK7ysfBxMzstcS6
w8qxuvIhDQoNCjINCjAwOjAwOjEyLDYwMCAtLT4gMDA6MDA6MTQsMDcwDQrE48/ruMnC8D8NCg0K
Mw0KMDA6MDA6MTQsMDcwIC0tPiAwMDowMDoyMCwwNzANCsTjusPRvSCxp8e4ILWr1eLKwrrc1tjS
qg0KDQo0DQowMDowMDoyMCwwNzAgLS0+IDAwOjAwOjIxLDcxMA0KybbKwj8NCg0KNQ0KMDA6MDA6
MjEsNzEwIC0tPiAwMDowMDoyNiwxODANCiK72LW9zrTAtCK12rb+sr+1xLX6xqwNCtewtb212sj9
sr+1xLrQ19PA78HLDQoNCjYNCjAwOjAwOjI2LDE4MCAtLT4gMDA6MDA6MzEsODIwDQq2+CK72LW9
zrTAtCK12sj9sr+1xLX6xqwNCsXcvfjBy7Xatv6yv7XEutDX08DvDQoNCjcNCjAwOjAwOjMyLDI2
MCAtLT4gMDA6MDA6MzMsNzkwDQrL+dLUxNg/DQoNCjgNCjAwOjAwOjMzLDgwMCAtLT4gMDA6MDA6
MzgsOTMwDQrL+dLUINXiysfE47jJtcQNCru5ysfLtbzSwO/T0LHwyMu9+MC0wcs/DQoNCjkNCjAw
OjAwOjM5LDkwMCAtLT4gMDA6MDA6NDIsMDIwDQpTaGVsZG9uIM7StcO9+LLVwcsNCg0KMTANCjAw
OjAwOjQyLDAyMCAtLT4gMDA6MDA6NDQsODUwDQrN4sPmt+fAy9S9wLTUvbTzwcsNCg0KMTENCjAw
OjAwOjQ2LDAyMCAtLT4gMDA6MDA6NDgsOTQwDQrE49Tau9ix3M7KzOINCs7Svs3WqrXAysfE47jJ
tcQNCg0KMTINCjAwOjAwOjUyLDUzMCAtLT4gMDA6MDA6NTMsODgwDQrKssO0yfnS9D8NCg0KMTMN
CjAwOjAwOjUzLDg4MCAtLT4gMDA6MDA6NTUsNDAwDQrKssO0yrLDtMn50vQ/DQoNCjE0DQowMDow
MDo1NSw0MDAgLS0+IDAwOjAwOjU2LDgyMA0K0MW6xcrHsrvMq7rDDQoNCjE1DQowMDowMDo1Niw4
MjAgLS0+IDAwOjAwOjU5LDk1MA0KtavM/cbwwLTP8crHDQrT0MjLsNG6o7nWuPi3xbP2wLTByw0K
DQoxNg0KMDA6MDA6NTYsODIwIC0tPiAwMDowMDo1OSw5NTENCntcYTd9KLP219Qi1u7J8dau1b0i
KQ0KDQoxNw0KMDA6MDE6MDAsNzQwIC0tPiAwMDowMTowNCw5NjANCrrDwcsgztK50rXnu7DByw0K
DQoxOA0KMDA6MDE6MDQsOTYwIC0tPiAwMDowMTowNiw2NjANCsTj1qq1wMTHtqvO97j5sb6yuy4u
Lg0KDQoxOQ0KMDA6MDE6MDksNDEwIC0tPiAwMDowMToxMiwyMjANCrK7IQ0KDQoyMA0KMDA6MDE6
MTIsMjIwIC0tPiAwMDowMToxNiw3NTANClBlbm55IFBlbm55IFBlbm55IQ0KDQoyMQ0KMDA6MDE6
MTYsNzUwIC0tPiAwMDowMToxOSwxNzANCtT1w7TByz8NCg0KMjINCjAwOjAxOjE5LDE3MCAtLT4g
MDA6MDE6MjQsNzEwDQq27i4uLsTHuPYuLi7O0rWj0MQNCsTju+HS8s6qz+vE7kxlb25hcmQNCg0K
MjMNCjAwOjAxOjI1LDc2MCAtLT4gMDA6MDE6MjgsNDgwDQq2+Nf22KzDzg0KDQoyNA0KMDA6MDE6
MjgsNDgwIC0tPiAwMDowMTozMyw5OTANCrHIyOfKx8Tjyc+0ssewv7S1xA0KItbuyfHWrtW9IsDv
tcTH6b3aDQoNCjI1DQowMDowMTozNCw3NDAgLS0+IDAwOjAxOjM3LDY2MA0Kx9ewrrXEIMTj1/bY
rMPOwcs/DQoNCjI2DQowMDowMTozOCw1MzAgLS0+IDAwOjAxOjQwLDExMA0Ky7XKtbuwIMO7tO0N
Cg0KMjcNCjAwOjAxOjQxLDA2MCAtLT4gMDA6MDE6NDUsNDEwDQoiu9i1vc60wLQitdq2/rK/tcS1
+sasDQqxu7fFvfi12sj9sr+1xLrQ19PA78HLDQoNCjI4DQowMDowMTo0NSw0MjAgLS0+IDAwOjAx
OjQ3LDUzMA0KysdMZW9uYXJkuMm1xA0KDQoyOQ0KMDA6MDE6NDcsNTQwIC0tPiAwMDowMTo0OCw1
MDANCs3tsLINCg0KMzANCjAwOjAxOjQ4LDUwMCAtLT4gMDA6MDE6NDksOTkwDQqx8CC1yLXIDQoN
CjMxDQowMDowMTo0OSw5OTAgLS0+IDAwOjAxOjU1LDYxMA0K0rLQ7c7S06a4w8uvxOPV4rb5DQrV
4tH5xOO+zbK7u+HMq8/rxO5MZW9uYXJkwcsNCg0KMzINCjAwOjAxOjU1LDYxMCAtLT4gMDA6MDE6
NTgsODQwDQrE49aqtcDE49Ta1eK3vcPmzabQocWuyfq1xA0KDQozMw0KMDA6MDI6MDMsMzAwIC0t
PiAwMDowMjowNSw4MDANCtXi0fnIt8q1xNzIw87SusPK3NCpDQoNCjM0DQowMDowMjowNSw4MDAg
LS0+IDAwOjAyOjA3LDY5MA0KLSDQu9C7DQotILK7v83G+A0KDQozNQ0KMDA6MDI6MTEsNjYwIC0t
PiAwMDowMjoxMyw4MTANCs3tsLINCg0KMzYNCjAwOjAyOjE1LDQ0MCAtLT4gMDA6MDI6MjEsMDMw
DQo8Zm9udCBjb2xvcj0iI2ZmZmYwMCI+LT3SwbXp1LDDwL7nICBodHRwOi8vYmJzLnNmaWxlMjAx
Mi5jb209LQ0KLT3SwbXp1LDX1sS71b4gIGh0dHA6Ly95dGV0Lm9yZy89LQ0KyNnT/rP2xrcNCrG+
19bEu732uanRp8+wvbvB96Os0c+9+9PD09rJzNK1zb6+tjwvZm9udD4NCg0KMzcNCjAwOjAyOjIx
LDEzMCAtLT4gMDA6MDI6MzEsNjYwDQo8Zm9udCBjb2xvcj0iI2ZmZmYwMCI+LT1ZVEVULdLBtenU
sNfWxLvX6T0tDQq3rdLrOiBELlm7xtChzcMgSG9sbGllIKH01tKpptiRqaafrSBlbGVxdWVudA0K
0KO21DogsKK5qw0KyrG85NbhOiCw7rXC1u0gPC9mb250Pg0KDQozOA0KMDA6MDI6MzMsMTYwIC0t
PiAwMDowMjozNSw1NTANCjxmb250IGNvbG9yPSIjZmZmZjAwIj7M7LLFwO3C27SrILXaxt+8viC1
2tK7vK8NCjcyMFAgaVR1bmVzIC0g19TAtPfcYWs8L2ZvbnQ+DQoNCjM5DQowMDowMjo0MSwyODAg
LS0+IDAwOjAyOjQ0LDU4MA0KztK+9bXDxOPM/bW91eK49rvhuN/Qy7XEDQq98dTn1NrNo7O1s6EN
Cg0KNDANCjAwOjAyOjQ0LDU4MCAtLT4gMDA6MDI6NDksNjAwDQrO0r+018W12MnPtcTTzdfVDQrQ
zte0vs3P8c7StcTHsMWu09FMdWN5DQoNCjQxDQowMDowMjo0OSw2MDAgLS0+IDAwOjAyOjUxLDY5
MA0KtvjO0s3qyKvDu9PQsa/Jy9O/yc/QxM23tcS40L71DQoNCjQyDQowMDowMjo1MSw2OTAgLS0+
IDAwOjAyOjUzLDM0MA0KztLOqsTjuNC1vb2+sMENCg0KNDMNCjAwOjAyOjUzLDM0MCAtLT4gMDA6
MDI6NTcsMTMwDQq1sci7wLIg0vLOqsv9vs3Su8PAyMvF39fTDQoNCjQ0DQowMDowMjo1NywxMzAg
LS0+IDAwOjAzOjAwLDQ2MA0KzOzExSEgxOPKx7j2zOzOxNGnvNINCg0KNDUNCjAwOjAzOjAwLDQ3
MCAtLT4gMDA6MDM6MDQsNjcwDQrSstDtxOO74dPQ0KmzvsrAtcTHo7DtDQq1q8Tj06a4w7DR0MTL
vLfFtb3M7Mzl0dC+v8nPyKUNCg0KNDYNCjAwOjAzOjA0LDY3MCAtLT4gMDA6MDM6MDksMjkwDQrJ
8bChIL7NwayxsM6itcTKur/HwMkNCra8u+HA+9PDzOzM5bnmwsnAtNbGtqjQ0L34wrfP3w0KDQo0
Nw0KMDA6MDM6MDksMjkwIC0tPiAwMDowMzoxMCw0NjANCtXmtcQ/DQoNCjQ4DQowMDowMzoxMCw0
NjAgLS0+IDAwOjAzOjEzLDI2MA0KztLL+dHUvLTKx9XmwO0NCg0KNDkNCjAwOjAzOjEzLDI2MCAt
LT4gMDA6MDM6MTcsNjEwDQq1sci7wLIgyrq/x8DJ0rLPsru2s9S34LHjDQrXodTat+Cx48DvDQoN
CjUwDQowMDowMzoxNyw2MjAgLS0+IDAwOjAzOjE5LDkzMA0KsNG34LHjufazydChx/LH8g0KDQo1
MQ0KMDA6MDM6MTksOTMwIC0tPiAwMDowMzoyNSw2MjANCsv50tTV4sG91tbJ+rvut73KvQ0KxOPX
1Ly60aHSu9bWsMkNCg0KNTINCjAwOjAzOjI2LDQ0MCAtLT4gMDA6MDM6MjgsMTIwDQqw3c3QIMTj
z9bU2sTcuPrFrsn6vbvMuMHLDQoNCjUzDQowMDowMzoyOCwxMzAgLS0+IDAwOjAzOjMwLDI4MA0K
srvE0dTZ1dK49tDCxa7T0bXEDQoNCjU0DQowMDowMzozMCwyODAgLS0+IDAwOjAzOjM0LDE4MA0K
ztLP1tTav7TJtra8s6TBy9XFTHVjecGzDQrV4tH5ztLU9cO01dLQwsWu09GwoT8NCg0KNTUNCjAw
OjAzOjM0LDE4MCAtLT4gMDA6MDM6MzksMjkwDQrE0bXAxOPDu9Ta1eLFzLymyOLFycnPDQq/tLW9
y/21xM6i0KbC8D8NCg0KNTYNCjAwOjAzOjM5LDI5MCAtLT4gMDA6MDM6NDEsMTQwDQrE48TcsrvE
3M/7zaO147ChIQ0KDQo1Nw0KMDA6MDM6NDUsNDYwIC0tPiAwMDowMzo0Niw3MTANCs/W1NogzP3O
0su1DQoNCjU4DQowMDowMzo0Niw3MTAgLS0+IDAwOjAzOjQ5LDA1MA0KvfHN7dPQuPbQwr36sqnK
v7rzu7bTrcXJttQNCg0KNTkNCjAwOjAzOjQ5LDA1MCAtLT4gMDA6MDM6NTMsOTAwDQrIpbLOvNMg
yLu689XSuPbIy8Dg1/bFrtPRDQoNCjYwDQowMDowMzo1Myw5MDAgLS0+IDAwOjAzOjU3LDI0MA0K
xOPAz8bFyse49sjLwODBy7K7xvCwoT8NCg0KNjENCjAwOjAzOjU5LDY0MCAtLT4gMDA6MDQ6MDMs
MzEwDQrM/dfFIEJlcm5pZbj6QW15DQrIpbLOvNPJ8b6tv8bRp7vh0unByw0KDQo2Mg0KMDA6MDQ6
MDMsMzEwIC0tPiAwMDowNDowNCw2OTANCs7SuPrE49K7xvDIpcXJttQNCg0KNjMNCjAwOjA0OjA0
LDcwMCAtLT4gMDA6MDQ6MDUsODUwDQotIMTj1LjS4sXjztI/DQotILWxyLsNCg0KNjQNCjAwOjA0
OjA1LDg1MCAtLT4gMDA6MDQ6MDcsMDgwDQrE48rHztLF89PRDQoNCjY1DQowMDowNDowNywwODAg
LS0+IDAwOjA0OjA4LDQ1MA0KztLPo837xOO/qtDEDQoNCjY2DQowMDowNDowOCw0NTAgLS0+IDAw
OjA0OjEwLDMzMA0K0LvQuyDEx8O0IFNoZWxkb24NCg0KNjcNCjAwOjA0OjEwLDM0MCAtLT4gMDA6
MDQ6MTEsODcwDQq8yMi7QW150rLIpb+qu+HByw0KxOPUuNLi0rvG8MC0wvA/DQoNCjY4DQowMDow
NDoxMSw4NzAgLS0+IDAwOjA0OjE3LDg3MA0KztLSss+jzfvE47+q0MQNCrWr1eKyu9fj0tS02cq5
ztLOqrTL1/bIzrrOysINCg0KNjkNCjAwOjA0OjIwLDU4MCAtLT4gMDA6MDQ6MjYsMTMwDQpIb3dp
ZSCx8NXi0fkg1eLDtMjiwum1xLuwDQrO0r2ysruz9r/aIEFtedTaxdSx38TYDQoNCjcwDQowMDow
NDoyNiwxMzAgLS0+IDAwOjA0OjMxLDUyMA0KU2hlbGRvbiCx8NXi0fkgztLU2cu11+6689K7sekN
Cs7Ssru74bDRtLLKrbT4u9jIpbXEDQoNCjcxDQowMDowNDozMSw1MjAgLS0+IDAwOjA0OjMyLDY3
MA0K1eLCw7ndutyw9A0KDQo3Mg0KMDA6MDQ6MzIsNjcwIC0tPiAwMDowNDozNCwzOTANCtPQ076z
2CDT0L2hye23vw0KDQo3Mw0KMDA6MDQ6MzQsMzkwIC0tPiAwMDowNDozNiwwMTANCr7GsMnSsrrc
sru07Q0KDQo3NA0KMDA6MDQ6MzYsMDEwIC0tPiAwMDowNDozOSw5MDANCtLyzqrO0r+0wcu0ssbM
DQrEx8nPw+bDu9PQtLLKrQ0KDQo3NQ0KMDA6MDQ6MzksOTAwIC0tPiAwMDowNDo0MSwyMDANCs7S
0rKwrsTjDQoNCjc2DQowMDowNDo0MSwyMDAgLS0+IDAwOjA0OjQ1LDQ4MA0KyOe5+8Tjy6/Xxcew
IMO709DM/bW9ztK1xMn50vQNCsTHztK74dPrxOPU2sPOwO/P4LvhtcQNCg0KNzcNCjAwOjA0OjQ1
LDQ5MCAtLT4gMDA6MDQ6NDYsNzQwDQrN7bCyDQoNCjc4DQowMDowNDo0Niw3NDAgLS0+IDAwOjA0
OjUwLDA0MA0KsrsgztKyu7vhv7zCx8uv1NrCw9DQtPzA77XEDQoNCjc5DQowMDowNDo1MywzOTAg
LS0+IDAwOjA0OjU3LDE2MA0KUGVubnkgxOPT0MO709DP67n9DQrQx7zKvaK207bTs6TKx8jnus4u
Li4NCg0KODANCjAwOjA0OjU3LDE3MCAtLT4gMDA6MDQ6NTksMzUwDQrDu9PQDQoNCjgxDQowMDow
NTowMSwxNzAgLS0+IDAwOjA1OjAzLDM5MA0KxMfP1tTaztK8pMbwxOO1xNDLyKTByw0KDQo4Mg0K
MDA6MDU6MDMsMzkwIC0tPiAwMDowNTowNiwzNDANCru2063AtLW9M0S5+rzKz/PG5bXEyfHG5srA
vecNCg0KODMNCjAwOjA1OjA2LDM0MCAtLT4gMDA6MDU6MDksNDgwDQrE47jJwvCyu7jJtOC147PQ
yM/Byw0KxOPP683m1eLTzs+31rvKx9LyzqouLi4NCg0KODQNCjAwOjA1OjA5LDQ4MCAtLT4gMDA6
MDU6MTIsMDEwDQrE49fcuPpMZW9uYXJk0rvG8M3mDQq2+MTjz9bU2rrcz+vL+z8NCg0KODUNCjAw
OjA1OjEyLDAxMCAtLT4gMDA6MDU6MTUsNTYwDQrE48yruN+5wMv71NrO0sn6w/zW0LXE1tjSqtDU
wcsNCg0KODYNCjAwOjA1OjE2LDgyMCAtLT4gMDA6MDU6MjEsMjIwDQrO0rvhz+vE7sv7ysfI57rO
DQrU2s7StcS7qrfysf3Jz9PDufu9tLut0KbBs7XEwvA/DQoNCjg3DQowMDowNToyMSwyMjAgLS0+
IDAwOjA1OjIyLDgxMA0KssWyu7vhxNgNCg0KODgNCjAwOjA1OjIyLDgxMCAtLT4gMDA6MDU6Mjgs
MDMwDQrO0rvhz+vE7sv7ysfI57rO0N66ww0KztKxu7+o16G1xLzQv8vArcG0tcTC8D8NCg0KODkN
CjAwOjA1OjI4LDAzMCAtLT4gMDA6MDU6MzAsMTEwDQrO0r/JsrvV4sO0vvW1ww0KDQo5MA0KMDA6
MDU6MzAsMTEwIC0tPiAwMDowNTozNSw5OTANCs7Su+HP68TuztLDx8rHyOe6zg0K08PEpsu5tefC
69TaztTK0se9yc/Hw7P2Is3tsLIitcTC8D8NCg0KOTENCjAwOjA1OjQwLDg0MCAtLT4gMDA6MDU6
NDIsMjYwDQrO0rauwcsgztK2rsHLDQoNCjkyDQowMDowNTo0MiwyNjAgLS0+IDAwOjA1OjQ0LDEz
MA0KxOO+zcrHuPbDu7jQx+m1xLv6xvfIyw0KDQo5Mw0KMDA6MDU6NDQsMTMwIC0tPiAwMDowNTo0
Niw1MzANCs7SvqHBpsHLDQoNCjk0DQowMDowNTo0Niw1MzAgLS0+IDAwOjA1OjQ5LDE3MA0Kv+y/
qsq81eLJtdPOz7ewyQ0KDQo5NQ0KMDA6MDU6NDksMTcwIC0tPiAwMDowNTo1MCw0MDANCsyrusPB
yyDO0s/IwLQNCg0KOTYNCjAwOjA1OjUwLDQwMCAtLT4gMDA6MDU6NTIsNTUwDQq21MHLIMTju+HQ
3sCtwbTC8D8NCg0KOTcNCjAwOjA1OjUyLDU1MCAtLT4gMDA6MDU6NTMsMjQwDQrU9cO0Pw0KDQo5
OA0KMDA6MDU6NTMsMjcwIC0tPiAwMDowNTo1Nyw2MTANCs7SsdjQ68il0rvMy8+0yta85A0K1eLA
rcG0v8nE0cCtwcsNCg0KOTkNCjAwOjA2OjAwLDIzMCAtLT4gMDA6MDY6MDQsNjMwDQrE47bUy67E
uMnxvq3N+MLntcTR0L6/zabT0MiktcQNCg0KMTAwDQowMDowNjowNCw2MzAgLS0+IDAwOjA2OjA1
LDgyMA0Kw7u07Q0KDQoxMDENCjAwOjA2OjA1LDgyMCAtLT4gMDA6MDY6MDgsNjIwDQrE47/J0tTI
pdGn0KPN+NW+z8LU2M7StcTC287EDQoNCjEwMg0KMDA6MDY6MDgsNjIwIC0tPiAwMDowNjoxMyw2
NjANCrrDtcQgxOPSsr/J0tTIpc/C1NgNCs7SudjT2re2sKzC17f4yeS0+NHQvr+1xMLbzsQNCg0K
MTAzDQowMDowNjoxMyw2NjAgLS0+IDAwOjA2OjE1LDQxMA0KusO1xA0KDQoxMDQNCjAwOjA2OjE2
LDQxMCAtLT4gMDA6MDY6MTgsNTgwDQq6w7DJDQoNCjEwNQ0KMDA6MDY6MzIsNzQwIC0tPiAwMDow
NjozNCwzMTANCtT1w7TR+T8NCg0KMTA2DQowMDowNjozNCwzMTAgLS0+IDAwOjA2OjQwLDQ4MA0K
yOe5+8Tjz7K7tt7P3s7H0s20v+C12LjJwcQNCsTHvs3L47Osy7PA+w0KDQoxMDcNCjAwOjA2OjQx
LDMwMCAtLT4gMDA6MDY6NDIsNzUwDQq/7L+0DQoNCjEwOA0KMDA6MDY6NDIsNzUwIC0tPiAwMDow
Njo0NCw4MjANCsjLysKyv7XERGF2aXPQob3jDQoNCjEwOQ0KMDA6MDY6NDQsODIwIC0tPiAwMDow
Njo0Nyw0NzANCsv9usPP8dTavOC2vdDUyafIxQ0KDQoxMTANCjAwOjA2OjQ3LDQ4MCAtLT4gMDA6
MDY6NDgsNzIwDQrMq7rDwcsNCg0KMTExDQowMDowNjo0OCw3MzAgLS0+IDAwOjA2OjUxLDY0MA0K
ztLU4tP20NTJp8jFtcS7+rvhw7vByw0KDQoxMTINCjAwOjA2OjUxLDY1MCAtLT4gMDA6MDY6NTYs
NDIwDQrM/cu1y/3Az7mrxdfG+sv9DQrV0sHLuPbE6sfhxq/BwbXEtPPRp8n6DQoNCjExMw0KMDA6
MDY6NTYsNDIwIC0tPiAwMDowNjo1OSwyMDANCtfcscjV0rj209bAz9PWs/O1xNKqusOwyQ0KDQox
MTQNCjAwOjA3OjAzLDk0MCAtLT4gMDA6MDc6MDYsNDMwDQpXb2xvd2l0es/IyfogS29vdGhyYXBw
YWxpsqnKvw0KDQoxMTUNCjAwOjA3OjA2LDQzMCAtLT4gMDA6MDc6MDcsODQwDQpEYXZpc8Wuyr8g
xOO6ww0KDQoxMTYNCjAwOjA3OjA3LDg1MCAtLT4gMDA6MDc6MTQsMjAwDQrO0tfuvfy/tMHLxqrT
0LnYxvO27LK71tK1xM7E1cINCg0KMTE3DQowMDowNzoxNCwyMDAgLS0+IDAwOjA3OjE2LDgwMA0K
usO1xA0KDQoxMTgNCjAwOjA3OjE2LDgwMCAtLT4gMDA6MDc6MjEsMzQwDQrI57n7xOPS8s6q1cm3
8rXExdfG+rb4xNG5/Q0KxOPWu9KqvMfXoS4uLg0KDQoxMTkNCjAwOjA3OjIxLDM0MCAtLT4gMDA6
MDc6MjQsMzgwDQrG87bs0rK74bP2uewgsru5/cv7w8e63L/JsK7E2A0KDQoxMjANCjAwOjA3OjM3
LDI0MCAtLT4gMDA6MDc6MzksOTYwDQqxyMTjsrvE3Lj6xa7Iy72yu7C1xMqxuvK6w7bgwcsNCg0K
MTIxDQowMDowNzo0MiwxMzAgLS0+IDAwOjA3OjQ4LDQ3MA0KztK7ude8sbjIpcz9uvO/27T4u9jG
pLLjy/DJyw0K0v3G8NfUtKvM5bzH0uS1xNHdvbINCg0KMTIyDQowMDowNzo0OCw0NzAgLS0+IDAw
OjA3OjUwLDQyMA0KxNTL8MnLyse63M780v3Iy7XEDQoNCjEyMw0KMDA6MDc6NTAsNDIwIC0tPiAw
MDowNzo1Myw1MTANCsjnufvKx8Tj19S8usvwycsNCsTHvs2yu8780v3Iy8HLDQoNCjEyNA0KMDA6
MDc6NTMsNTEwIC0tPiAwMDowNzo1NiwwNDANCr60v8bRp7XEvfiyvQ0KDQoxMjUNCjAwOjA3OjU2
LDA0MCAtLT4gMDA6MDc6NTksMTQwDQq+tMq5v8bRp734sr21xLyysqG6zcvAzfYNCg0KMTI2DQow
MDowODowMSwyNjAgLS0+IDAwOjA4OjA0LDQzMA0K09DS4su8tcTKxw0KztLDx7u5tNPDu7rNUGVu
bnnM1sLbuf3V4tCpDQoNCjEyNw0KMDA6MDg6MDQsNDQwIC0tPiAwMDowODowNiwxOTANCtK7sOO2
vMrHwcTXxcHE18W+zcHEtb3E0MjLwcsNCg0KMTI4DQowMDowODowNiwxOTAgLS0+IDAwOjA4OjEw
LDM5MA0Ksru5/crKtbG808jr0afK9bbUu7DNprrDtcQNCg0KMTI5DQowMDowODoxMCwzOTAgLS0+
IDAwOjA4OjEzLDAxMA0KsMnMqMG9zrvE0Mq/x+u1xA0KDQoxMzANCjAwOjA4OjEzLDAxMCAtLT4g
MDA6MDg6MTQsNjEwDQrM7MTEINPQxNDIy8frztLDx7/NIQ0KDQoxMzENCjAwOjA4OjE0LDYxMCAt
LT4gMDA6MDg6MTcsMjgwDQrT0MTQyMvH67/NIQ0KDQoxMzINCjAwOjA4OjE3LDI4MCAtLT4gMDA6
MDg6MTksMTUwDQrQu9C7INC70LsgzKu40NC7wcsNCg0KMTMzDQowMDowODoyMCw1MzAgLS0+IDAw
OjA4OjIyLDI1MA0KLSC1rbaoteMNCi0g1PXDtLWttqi1w8bwwLQhDQoNCjEzNA0KMDA6MDg6MjIs
MjUwIC0tPiAwMDowODoyNSwzNDANCtPQxNDIy73TvfzO0sPHILu5srvKx9LyzqpQZW5ueQ0KDQox
MzUNCjAwOjA4OjI2LDMyMCAtLT4gMDA6MDg6MjgsMDkwDQrKx7ChDQoNCjEzNg0KMDA6MDg6Mjgs
MDkwIC0tPiAwMDowODoyOSw1NDANCtC70LvAsg0KDQoxMzcNCjAwOjA4OjM0LDEzMCAtLT4gMDA6
MDg6MzYsMzMwDQrg3iEgs/TG5dK7sr0NCg0KMTM4DQowMDowODozNiwzMzAgLS0+IDAwOjA4OjM4
LDUwMA0KsKE/IM6qyrLDtD8NCg0KMTM5DQowMDowODozOCw1MDAgLS0+IDAwOjA4OjQxLDcyMA0K
ztK1xLvKuvPP1tTaxNy008/Cw+YNCrPUtfTE47XEs7XByw0KDQoxNDANCjAwOjA4OjQxLDcyMCAt
LT4gMDA6MDg6NDMsODEwDQrS4su8ysfO0srkwcs/DQoNCjE0MQ0KMDA6MDg6NDMsODEwIC0tPiAw
MDowODo0NSw0NDANCr3hyvjByyENCg0KMTQyDQowMDowODo0NSw0NDAgLS0+IDAwOjA4OjQ4LDg0
MA0KyOe5+87S19/V4tK7sr0uLi4NCg0KMTQzDQowMDowODo0OCw4NTAgLS0+IDAwOjA4OjUyLDM2
MA0KxMe+zbK7u+HV4sO0usPN5sHLDQrL+dLUztKyu7vh19+1xA0KDQoxNDQNCjAwOjA4OjUzLDE3
MCAtLT4gMDA6MDg6NTYsMDQwDQrQ3c+i0rvPwrDJDQoNCjE0NQ0KMDA6MDg6NTYsMDQwIC0tPiAw
MDowODo1OCw5NTANCs7Sw8fDu77GwcsNCg0KMTQ2DQowMDowODo1OCw5NjAgLS0+IDAwOjA5OjAw
LDU5MA0KztLT1rK7ysfSqsilusi+xg0KDQoxNDcNCjAwOjA5OjA3LDA4MCAtLT4gMDA6MDk6MDgs
ODMwDQq6w8/r1qq1wExlb25hcmTU2rjJwvANCg0KMTQ4DQowMDowOTowOCw4MzAgLS0+IDAwOjA5
OjExLDEzMA0KusPP68v7DQoNCjE0OQ0KMDA6MDk6MTEsMTQwIC0tPiAwMDowOToxNCwxNzANCs7S
w8e08rXnu7C4+Mv7sMkNCg0KMTUwDQowMDowOToxNCwxNzAgLS0+IDAwOjA5OjE2LDM3MA0KztIg
ztLKx8u1IMTjtPK157uwuPjL+7DJDQoNCjE1MQ0KMDA6MDk6MTYsMzcwIC0tPiAwMDowOToxOSw4
MTANCs7S1q7HsMu1uf0NCsXz09Gyu9TasqKyu8TcyrnO0snL0MQNCg0KMTUyDQowMDowOToxOSw4
MTAgLS0+IDAwOjA5OjI1LDQwMA0K0qG59snZxOpQYXVsIFNpbW9u1PjLtQ0KIs7S1rvKx7/pyq/N
tyDSu8astbottbottbrT7CINCg0KMTUzDQowMDowOToyNiw1NzAgLS0+IDAwOjA5OjI4LDM3MA0K
ztLAtLTyDQoNCjE1NA0KMDA6MDk6MjgsMzcwIC0tPiAwMDowOTozMCwyNDANCrrDsKEhIL+qw+LM
4SENCg0KMTU1DQowMDowOTozOCw2NjAgLS0+IDAwOjA5OjQxLDYxMA0Ksru6w9Liy7wgztK1xL/j
19PV8LavwLINCg0KMTU2DQowMDowOTo0NCwwMDAgLS0+IDAwOjA5OjQ2LDQ5MA0KsbG6oyDT0Mnx
wu0iyqoiwvA/DQoNCjE1Nw0KMDA6MDk6NDgsNTcwIC0tPiAwMDowOTo0OSw1NDANCkxlb25hcmQ/
DQoNCjE1OA0KMDA6MDk6NDksNTQwIC0tPiAwMDowOTo1MCw2NzANClBlbm55Pw0KDQoxNTkNCjAw
OjA5OjUwLDY4MCAtLT4gMDA6MDk6NTEsNzkwDQq62SDKx1Blbm55DQoNCjE2MA0KMDA6MDk6NTEs
NzkwIC0tPiAwMDowOTo1Miw5OTANCrTzvNLSu8bwwLS4+lBlbm55tPLV0Lr0DQoNCjE2MQ0KMDA6
MDk6NTIsOTkwIC0tPiAwMDowOTo1NCw2ODANCuDLIFBlbm55IQ0KDQoxNjINCjAwOjA5OjU0LDY4
MCAtLT4gMDA6MDk6NTgsNDAwDQrN2yC/tMC0xOPN5rXDzaa/qtDEtcTC7w0KDQoxNjMNCjAwOjA5
OjU4LDQwMCAtLT4gMDA6MTA6MDEsMjgwDQrIy8n61+6/qtDEtcTKsbniIQ0KDQoxNjQNCjAwOjEw
OjAyLDg5MCAtLT4gMDA6MTA6MDYsMDQwDQrEx8DvsrvKx7LF1OfJzzU6MzDC8D8NCg0KMTY1DQow
MDoxMDowNiwwNDAgLS0+IDAwOjEwOjA3LDE3MA0KysfC8D8NCg0KMTY2DQowMDoxMDowNywxNzAg
LS0+IDAwOjEwOjA5LDg5MA0KutkgtPO77yDP1tTaysfU58nPNTozMCENCg0KMTY3DQowMDoxMDox
Myw0NTAgLS0+IDAwOjEwOjE2LDg1MA0KusOwySDO0sPHtPK157uwysfS8s6qz+vE48HLDQoNCjE2
OA0KMDA6MTA6MTYsODUwIC0tPiAwMDoxMDoxOCwwNzANCrH5yb0hDQoNCjE2OQ0KMDA6MTA6MTgs
MDcwIC0tPiAwMDoxMDoxOSwxNTANCrXIu+G2+Q0KDQoxNzANCjAwOjEwOjE5LDE1MCAtLT4gMDA6
MTA6MjAsNzkwDQrE49PQzqPP1cHLwvA/DQoNCjE3MQ0KMDA6MTA6MjAsNzkwIC0tPiAwMDoxMDoy
MiwzMjANCrK7yscg1eLKx7j2s6nS+9POz7cNCg0KMTcyDQowMDoxMDoyMiwzMjAgLS0+IDAwOjEw
OjI0LDM2MA0K1rvSqsz9tb0isfnJvSLBvbj219YNCr7NvtmxrbOp0vshDQoNCjE3Mw0KMDA6MTA6
MjQsMzYwIC0tPiAwMDoxMDoyNiw0MTANCrH5yb0hILH5yb0hDQoNCjE3NA0KMDA6MTA6MjYsNDEw
IC0tPiAwMDoxMDoyOCw4MzANCrH5yb0hILH5yb0hILH5yb0hILH5yb0hDQoNCjE3NQ0KMDA6MTA6
MjksNTUwIC0tPiAwMDoxMDozMCw4MzANCkxlb25hcmQgTGVvbmFyZD8NCg0KMTc2DQowMDoxMDoz
Myw5NzAgLS0+IDAwOjEwOjM2LDY3MA0KztLDx765yLu74c/rxMe49rvstbANCg0KMTc3DQowMDox
MDozNiw2NzAgLS0+IDAwOjEwOjM5LDQ5MA0KysfE48/rDQoNCjE3OA0KMDA6MTA6NDMsODUwIC0t
PiAwMDoxMDo0NSw3MzANCtT1w7TR+cHLPw0KDQoxNzkNCjAwOjEwOjQ1LDczMCAtLT4gMDA6MTA6
NDksMDcwDQrDu8rCIM7S09bQu7n9y/vDxw0KuObL38v7w8cgztLDx8P7u6jT0Nb3wcsNCg0KMTgw
DQowMDoxMDo0OSwwNzAgLS0+IDAwOjEwOjUzLDE2MA0K1eLDtMu1IM7SsrvTw7PUv/e+zb/J0tS6
yL7GwLINCg0KMTgxDQowMDoxMDo1MywxNjAgLS0+IDAwOjEwOjU0LDI3MA0Kyse1xCDMq7/hwcsN
Cg0KMTgyDQowMDoxMDo1NCwyODAgLS0+IDAwOjEwOjU4LDQ5MA0K0qrKx8Tjz+u6zcv7w8fG5NbQ
0ru49sy4zLgNCsO7yMu74bnWxOO1xA0KDQoxODMNCjAwOjEwOjU4LDUwMCAtLT4gMDA6MTE6MDEs
MjgwDQrOqsm2w7vIy7vhudbO0g0KDQoxODQNCjAwOjExOjAyLDEyMCAtLT4gMDA6MTE6MDUsNTcw
DQrO0tTauvrR1MLS0+/E2A0KDQoxODUNCjAwOjExOjA1LDU3MCAtLT4gMDA6MTE6MDksODQwDQrM
/cbwwLTE49Liy7zKxw0KztLE3NXStb2xyFNoZWxkb264/LrDtcQNCg0KMTg2DQowMDoxMTowOSw4
NDAgLS0+IDAwOjExOjEyLDIxMA0K1eK+xr/J1ebB0rChDQoNCjE4Nw0KMDA6MTE6MTMsNjMwIC0t
PiAwMDoxMToxNyw4NjANCszsxMUgztK98c3tv8+2qNKqzcLLwMHLDQoNCjE4OA0KMDA6MTE6MTks
MTgwIC0tPiAwMDoxMToyMiw2NDANCrjmy9/O0iDE48u1xMe7sMqyw7TS4su8DQoNCjE4OQ0KMDA6
MTE6MjQsODEwIC0tPiAwMDoxMToyOSwwNjANCsTjw7u94bvpIMTjxNDF89PR09bKxy4uLg0KDQox
OTANCjAwOjExOjI5LDA2MCAtLT4gMDA6MTE6MzEsMDMwDQpTaGVsZG9uxMfA4NDNtcQNCg0KMTkx
DQowMDoxMTozMSwwMzAgLS0+IDAwOjExOjM0LDA2MA0KxOPVybfyu7nKx0hvd2FyZMTH0M21xMTY
DQoNCjE5Mg0KMDA6MTE6MzQsMDcwIC0tPiAwMDoxMTozNiw1MzANCsTjz+ux7bTvyrLDtA0KDQox
OTMNCjAwOjExOjM3LDYyMCAtLT4gMDA6MTE6MzksNDUwDQqxp8e4IM7Syba2vLK7z+ux7bTvDQoN
CjE5NA0KMDA6MTE6MzksNDUwIC0tPiAwMDoxMTo0MCw5NDANCsu11eLKwsyrzt7BxMHLDQoNCjE5
NQ0KMDA6MTE6NDAsOTQwIC0tPiAwMDoxMTo0MywzMjANCtTbxNzN/MHL1eKy5yC8zND44MvG8MC0
sMkNCg0KMTk2DQowMDoxMTo0MywzMjAgLS0+IDAwOjExOjQ2LDYzMA0Kv8nS1LXEILWrsrvQ0rXE
yscNCs7StPPE1L/Jw7vT0MvwycsNCg0KMTk3DQowMDoxMTo0Niw2MzAgLS0+IDAwOjExOjUwLDc1
MA0KztK7ubzHtcPE48u1ztK80rGmsbS1xLu1u7DE2A0KDQoxOTgNCjAwOjExOjUwLDc1MCAtLT4g
MDA6MTE6NTEsOTEwDQq6w8CyIM7StcDHuA0KDQoxOTkNCjAwOjExOjUxLDkyMCAtLT4gMDA6MTE6
NTMsODgwDQrE3M38vMe41bLFtcTKwsLwDQoNCjIwMA0KMDA6MTE6NTQsODQwIC0tPiAwMDoxMTo1
NywwOTANCi0gtbHIuw0KLSDQu8CyDQoNCjIwMQ0KMDA6MTE6NTgsODkwIC0tPiAwMDoxMjowMSw3
OTANCsTj1cm38rXEudbS7LrNtKnXxcyru6y7/MHLDQoNCjIwMg0KMDA6MTI6MDQsMjMwIC0tPiAw
MDoxMjowNSwyODANCtXmsru40s/g0MUNCg0KMjAzDQowMDoxMjowNSwyODAgLS0+IDAwOjEyOjA4
LDI4MA0K1eK2zsqxvOQgztK+zdK71rHX+NfFz+vE7sTHvNK77w0KDQoyMDQNCjAwOjEyOjA4LDI4
MCAtLT4gMDA6MTI6MDksOTMwDQrWqrXA1+7U47XEysfKssO0wvANCg0KMjA1DQowMDoxMjowOSw5
MzAgLS0+IDAwOjEyOjEzLDU3MA0KxOPP1tTa1eLDtMnL0MQgu7nDu7eovei+xs/7s+4/DQoNCjIw
Ng0KMDA6MTI6MTgsNDkwIC0tPiAwMDoxMjoyMCw0OTANCrK7yscNCg0KMjA3DQowMDoxMjoyMCw1
MDAgLS0+IDAwOjEyOjIyLDU4MA0Kw7u07Q0KDQoyMDgNCjAwOjEyOjI0LDQ4MCAtLT4gMDA6MTI6
MjYsNDgwDQrWqrXAu7nT0Mqyw7TSsrrc1OPC8A0KDQoyMDkNCjAwOjEyOjI2LDQ4MCAtLT4gMDA6
MTI6MjgsMDMwDQrL+7j5sb6+zbK7z+vO0g0KDQoyMTANCjAwOjEyOjI4LDA0MCAtLT4gMDA6MTI6
MzAsOTQwDQrIw87SwLSwss6/z8LE47DJDQoNCjIxMQ0KMDA6MTI6MzAsOTQwIC0tPiAwMDoxMjoz
NCwxMTANCsbwwuvE49Xi0fnX9s2mvaG/tbXEDQoNCjIxMg0KMDA6MTI6MzYsMTEwIC0tPiAwMDox
MjozOCw3MzANCtXmtc65/iDN6srCwcsg1eLSssvjsLLOvw0KDQoyMTMNCjAwOjEyOjM4LDczMCAt
LT4gMDA6MTI6NDUsNzkwDQrSu7DZxOq68yDE48Gptryyu9TawcsNCsTHvs3Du7nYz7XByw0KDQoy
MTQNCjAwOjEyOjQ1LDc5MCAtLT4gMDA6MTI6NDcsOTQwDQq448qyw7SwoQ0KDQoyMTUNCjAwOjEy
OjQ3LDk0MCAtLT4gMDA6MTI6NTAsNzIwDQrE49OmuMPLtSAiy/u1sci7z+vE4yINCg0KMjE2DQow
MDoxMjo1MCw3MzAgLS0+IDAwOjEyOjUzLDY4MA0Ky/vWrsv50tTN5sTHw7S36A0KysfP6838tfTL
+7XEsa/Jyw0KDQoyMTcNCjAwOjEyOjUzLDY4MCAtLT4gMDA6MTI6NTYsMzMwDQrO0r/JsrvEx8O0
yM/Oqg0KDQoyMTgNCjAwOjEyOjU4LDg1MCAtLT4gMDA6MTM6MDAsMjMwDQrMq7vEw/3Byw0KDQoy
MTkNCjAwOjEzOjAwLDI0MCAtLT4gMDA6MTM6MDIsNzQwDQq+zdLyzqrL+83mtcO63ODLIM7Svs3S
qsTRuf3C8A0KDQoyMjANCjAwOjEzOjAyLDc0MCAtLT4gMDA6MTM6MDYsOTYwDQrV4rj2wu8uLi7S
stDtxOPU2s/rDQoNCjIyMQ0KMDA6MTM6MDYsOTYwIC0tPiAwMDoxMzoxMSwyOTANCsv7us3ExLj2
xO/Dx77GuvPC0tDUxNgNCg0KMjIyDQowMDoxMzoxMyw2ODAgLS0+IDAwOjEzOjE3LDMyMA0KysfC
8CDO0su1ttTBy8LwDQoNCjIyMw0KMDA6MTM6MTgsODQwIC0tPiAwMDoxMzoxOSw5MjANCsyrsPTA
sg0KDQoyMjQNCjAwOjEzOjE5LDkyMCAtLT4gMDA6MTM6MjIsMjEwDQrE47K708PK1NfFsLLOv87S
wcsNCg0KMjI1DQowMDoxMzoyMiwyMTAgLS0+IDAwOjEzOjI3LDQ2MA0KsrvQ0CBMZW9uYXJk19/W
rsewDQrL+8jDztKxo9akIM7Su+HV1bnLusPE47XEDQoNCjIyNg0KMDA6MTM6MjcsNDYwIC0tPiAw
MDoxMzoyOSw4NTANCi0g1ea1xMLwDQotIMrHtcQNCg0KMjI3DQowMDoxMzoyOSw4NTAgLS0+IDAw
OjEzOjMyLDYzMA0KzKvM+dDEwcsNCg0KMjI4DQowMDoxMzozMiw2MzAgLS0+IDAwOjEzOjM3LDE3
MA0Ku7nT0CDI57n7ztLX9rXDs/bJqw0Ky/vLtbvhuPjO0rT4u9jAtNK7tqXLrsrWw7ENCg0KMjI5
DQowMDoxMzozOSwwNzAgLS0+IDAwOjEzOjQwLDk5MA0Kz9bU2s7SuPzP68Tuy/vByw0KDQoyMzAN
CjAwOjEzOjQwLDk5MCAtLT4gMDA6MTM6NDUsNTgwDQrI57n7udzTw7XEu7AgztLIt9DFDQoNCjIz
MQ0KMDA6MTM6NDUsNTgwIC0tPiAwMDoxMzo1MSwwMzANCkxlb25hcmTUtsDrxOO7s7Gnus3T8bS9
DQq1xMO/0ru/zLa8sbjK3LzlsL4NCg0KMjMyDQowMDoxMzo1Miw1MDAgLS0+IDAwOjEzOjUzLDQ3
MA0K0LvQuw0KDQoyMzMNCjAwOjEzOjUzLDQ3MCAtLT4gMDA6MTM6NTUsMzQwDQrE47u5tbHV5sCy
DQoNCjIzNA0KMDA6MTM6NTcsOTQwIC0tPiAwMDoxNDowMCwzODANCrTyyMXByyBEYXZpc7fyyMsN
Cg0KMjM1DQowMDoxNDowMCwzODAgLS0+IDAwOjE0OjAxLDY4MA0K1PXDtMHLDQoNCjIzNg0KMDA6
MTQ6MDEsNjgwIC0tPiAwMDoxNDowNCw3MTANCrGnx7jO0sTHw7TCs8OnDQoNCjIzNw0KMDA6MTQ6
MDQsNzIwIC0tPiAwMDoxNDoxMSw5NDANCru5zqrO28PvxvO27LXAx7gNCtLyzqo5OSW1xMbztuy2
vLu5zabT0NLiy7y1xA0KDQoyMzgNCjAwOjE0OjExLDk0MCAtLT4gMDA6MTQ6MTMsOTcwDQrL48HL
sMkNCg0KMjM5DQowMDoxNDoxNSwzNjAgLS0+IDAwOjE0OjE4LDQ5MA0K1qq1wMLwINTbwanT0NDt
tuDP4MvG1q60pg0KDQoyNDANCjAwOjE0OjE4LDUwMCAtLT4gMDA6MTQ6MjEsNjEwDQotIMrHwvAN
Ci0gtbHIuyDO0tKyLi4uDQoNCjI0MQ0KMDA6MTQ6MjEsNjIwIC0tPiAwMDoxNDoyNCwyMzANCrGl
ytzQxMvp1q7NtA0KDQoyNDINCjAwOjE0OjI0LDI0MCAtLT4gMDA6MTQ6MjYsMDQwDQq6w7DJIMz9
ztLPuM+4tcDAtA0KDQoyNDMNCjAwOjE0OjI4LDY2MCAtLT4gMDA6MTQ6MzMsMTMwDQq4+MTjsa3I
yNL7ILCyzr/PwsTjDQoNCjI0NA0KMDA6MTQ6MzMsMTMwIC0tPiAwMDoxNDozNSwwMzANCtPDtcTS
u7TO0NSxrdfTDQoNCjI0NQ0KMDA6MTQ6MzUsMDMwIC0tPiAwMDoxNDozNiw4ODANCsvmsePIzsTj
tKbWww0KDQoyNDYNCjAwOjE0OjM4LDYyMCAtLT4gMDA6MTQ6NDEsNTAwDQqx8MLvILu51OfE2A0K
DQoyNDcNCjAwOjE0OjQxLDUwMCAtLT4gMDA6MTQ6NDIsODkwDQrV0rXjysLX9rDJDQoNCjI0OA0K
MDA6MTQ6NDIsODkwIC0tPiAwMDoxNDo0OCw0NzANCs7S0rvWsdTaubnLvDREufq8ys/zxuUNCg0K
MjQ5DQowMDoxNDo0OCw0ODAgLS0+IDAwOjE0OjUwLDE5MA0K0qqyu77NueLBxMzssMkNCg0KMjUw
DQowMDoxNDo1MCwxOTAgLS0+IDAwOjE0OjUxLDI0MA0KusOwyQ0KDQoyNTENCjAwOjE0OjUxLDI1
MCAtLT4gMDA6MTQ6NTMsNTEwDQotINTaNES5+rzKz/PG5dbQDQotIM2jDQoNCjI1Mg0KMDA6MTQ6
NTQsNjgwIC0tPiAwMDoxNDo1NywyMjANCsC0wcTBxMn6u+6wyQ0KDQoyNTMNCjAwOjE0OjU3LDIy
MCAtLT4gMDA6MTQ6NTksMTAwDQq45svfztLQqcTjsrvOqsjL1qq1xMrCDQoNCjI1NA0KMDA6MTU6
MDIsMTcwIC0tPiAwMDoxNTowNSw5ODANCs7S09C+xcz1v+PX0w0KDQoyNTUNCjAwOjE1OjA3LDgx
MCAtLT4gMDA6MTU6MTIsMjEwDQq/qs23sru07SDO0s/rzP3Qqbj8y73Iy7XEysINCg0KMjU2DQow
MDoxNToxMiwyMjAgLS0+IDAwOjE1OjE0LDU4MA0KztK2rsHLDQoNCjI1Nw0KMDA6MTU6MTQsNTkw
IC0tPiAwMDoxNToxOCw5OTANCs7S09C+xcz1xNq/4w0KDQoyNTgNCjAwOjE1OjIxLDI5MCAtLT4g
MDA6MTU6MjMsMDYwDQrSqrK7ztLPyMC0sMkNCg0KMjU5DQowMDoxNToyMywwNjAgLS0+IDAwOjE1
OjI2LDIxMA0KtavO0rK7z+vWqrXAxOPT0Ly4zPXE2r/jDQoNCjI2MA0KMDA6MTU6MjYsMjEwIC0t
PiAwMDoxNTozMCwwNTANCrK7uf24+b7dxOPO1MrStdiw5cC0v7QNCsTj06a4w9PQ0rvHp8z1sMkN
Cg0KMjYxDQowMDoxNTozMCwwNTAgLS0+IDAwOjE1OjM0LDU1MA0KzP3XxSC45svfxOPQqc7SsrvO
qsjL1qq1xMrCDQoNCjI2Mg0KMDA6MTU6MzQsNTYwIC0tPiAwMDoxNTozNiwzOTANCs7SuNWw4bW9
wuXJvO22yrENCg0KMjYzDQowMDoxNTozNiwzOTAgLS0+IDAwOjE1OjQwLDQ0MA0KztLC49DYs/bR
3cHL0ruyv7nY09oNCrTz0MnQycmxyta1xLXNs8mxvr/WssDGrA0KDQoyNjQNCjAwOjE1OjQwLDQ1
MCAtLT4gMDA6MTU6NDEsODQ2DQrWrrrzIM7SuNC1vbrc0N/Aog0KDQoyNjUNCjAwOjE1OjQyLDAx
MCAtLT4gMDA6MTU6NDYsMTgwDQq40NC7yc+12yDEx8as19PDu7eisrwNCg0KMjY2DQowMDoxNTo0
NiwxODAgLS0+IDAwOjE1OjQ4LDM1MA0KztK/tLn9xMfGrMTYDQoNCjI2Nw0KMDA6MTU6NDksMzAw
IC0tPiAwMDoxNTo1MSw0MDANCsrHsKEgway7t7HkzKzQydDJDQoNCjI2OA0KMDA6MTU6NTQsMDQw
IC0tPiAwMDoxNTo1Niw5NjANCrz7xOO12tK7zOwgSG93YXJkvs3L0bW9wcsNCg0KMjY5DQowMDox
NTo1Niw5NjAgLS0+IDAwOjE1OjU4LDQ2MA0KxbYgzOzExC4uLg0KDQoyNzANCjAwOjE1OjU4LDQ2
MCAtLT4gMDA6MTY6MDEsMjYwDQq+zdTaxOOz9sPFxMfSu7/MDQoNCjI3MQ0KMDA6MTY6MDMsMjAw
IC0tPiAwMDoxNjowNyw4MDANCs7Sz9bU2taqtcDE49KqwcTKssO0xNrI3cHLDQoNCjI3Mg0KMDA6
MTY6MDcsODEwIC0tPiAwMDoxNjoxMSw1MTANCrrDsMkg1eK49sPYw9wNCs7Ssb7AtNKqtPi9+LnX
ssS1xA0KDQoyNzMNCjAwOjE2OjExLDUxMCAtLT4gMDA6MTY6MTIsNzkwDQq6ww0KDQoyNzQNCjAw
OjE2OjE1LDEwMCAtLT4gMDA6MTY6MTksNjgwDQrWrsewIFlvdXR1YmWw0dPDu6e958PmDQoNCjI3
NQ0KMDA6MTY6MTksNjgwIC0tPiAwMDoxNjoyNCwzNzANCtPJIsbA0Mciu7uzySKwtNTeIg0KDQoy
NzYNCjAwOjE2OjI0LDM3MCAtLT4gMDA6MTY6MjksMzkwDQrO0rHtw+bJz9TezawgxuTKtdK7teO2
vLK7DQoNCjI3Nw0KMDA6MTY6MzQsMjYwIC0tPiAwMDoxNjozNSw5MjANCtXivs3Kx8TjtcTD2MPc
Pw0KDQoyNzgNCjAwOjE2OjM1LDkyMCAtLT4gMDA6MTY6MzcsMDA4DQrKx7XEDQoNCjI3OQ0KMDA6
MTY6MzcsNjUwIC0tPiAwMDoxNjo0MSwyNDANCs3bISDSu8/Cx+HBy8quve8NCg0KMjgwDQowMDox
Njo0MSwyNDAgLS0+IDAwOjE2OjQ1LDk5MA0KusPByyDO0rK7zebByyDLr771yKUNCg0KMjgxDQow
MDoxNjo0Niw2ODAgLS0+IDAwOjE2OjQ5LDIxMA0K1Nm4+sTjy7W8/s7SsrvOqsjL1qq1xMrCDQoN
CjI4Mg0KMDA6MTY6NDksMjEwIC0tPiAwMDoxNjo1MCw2NjANCsTjuNXJy7qmwcvO0g0KDQoyODMN
CjAwOjE2OjUwLDY3MCAtLT4gMDA6MTY6NTIsNTcwDQrO0tf2tO3JtsHLPw0KDQoyODQNCjAwOjE2
OjUyLDU3MCAtLT4gMDA6MTY6NTgsMDIwDQrO0rOov6rQxLuzILjmy9/E47z+yMPO0sTRyty1xMrC
DQrE48i0sru1sbvYysINCg0KMjg1DQowMDoxNjo1OCwwMjAgLS0+IDAwOjE3OjAwLDg5MA0KztIu
Li4gztKyu771tcPEx9PQyrLDtA0KDQoyODYNCjAwOjE3OjAwLDg5MCAtLT4gMDA6MTc6MDMsNzMw
DQq1q7bUztLAtMu1yLTKx7TzysINCg0KMjg3DQowMDoxNzowNiw1ODAgLS0+IDAwOjE3OjA4LDI2
MA0KU2hlbGRvbiDE48u1tcO21A0KDQoyODgNCjAwOjE3OjA4LDI3MCAtLT4gMDA6MTc6MTEsMDIw
DQrV5rXEttSyu8bwDQrO0tOmuMO4/MHLveLE4w0KDQoyODkNCjAwOjE3OjExLDAyMCAtLT4gMDA6
MTc6MTIsODUwDQq908rcxOO1xLXAx7gNCg0KMjkwDQowMDoxNzoxMiw4NTAgLS0+IDAwOjE3OjE0
LDk0MA0K0LvQuw0KDQoyOTENCjAwOjE3OjE0LDk0MCAtLT4gMDA6MTc6MTYsMjQwDQrAtCCxp7Gn
Pw0KDQoyOTINCjAwOjE3OjE2LDI0MCAtLT4gMDA6MTc6MTksNjMwDQotILu5ysfO1crWsMk/DQot
IMC0sMkNCg0KMjkzDQowMDoxNzoyMiw2MTAgLS0+IDAwOjE3OjI3LDgzMA0Kz9bU2s7Swcu94sTj
sbux5Mys0MnQyc+uu/e1xLjQvvXByw0KDQoyOTQNCjAwOjE3OjQzLDMyMCAtLT4gMDA6MTc6NDQs
MzUwDQrN7bCyDQoNCjI5NQ0KMDA6MTc6NTIsMzMwIC0tPiAwMDoxNzo1NSw1OTANCr7TyLvT0MSw
yfrIy8Lyvsa4+M7Sw8cNCsrcs+jI9L6qsKENCg0KMjk2DQowMDoxNzo1NSw2MDAgLS0+IDAwOjE3
OjU4LDEwMA0KysewoSC40L71sru07Q0KDQoyOTcNCjAwOjE3OjU5LDYzMCAtLT4gMDA6MTg6MDIs
NzAwDQrD99TnztLDx7XDtKnM9dDUuNC/47/jDQoNCjI5OA0KMDA6MTg6MDIsNzAwIC0tPiAwMDox
ODowNSw5MTANCr+0v7TT0MO709DD4rfRusmw/LWwDQoNCjI5OQ0KMDA6MTg6MDcsMzcwIC0tPiAw
MDoxODoxMyw5MTANCrzZyOfLtSDV5tKq0aEgxOPRocTE0ru49j8NCg0KMzAwDQowMDoxODoxNiwx
ODAgLS0+IDAwOjE4OjIwLDI3MA0KztLRocTHuPa3otDNudbS7LXEsKu49tfTDQoNCjMwMQ0KMDA6
MTg6MjAsMjcwIC0tPiAwMDoxODoyMiwzNDANCsyrusPByyDO0s+yu7bEx7j2yt2437j2tvkNCg0K
MzAyDQowMDoxODoyMiwzNDAgLS0+IDAwOjE4OjI3LDAxMA0Ky/u/tMbwwLS63LTPw/cg0rK63LnC
xqcNCtKy0O3Du8qyw7TQ1L6t0ekNCg0KMzAzDQowMDoxODoyNywwMTAgLS0+IDAwOjE4OjI5LDkw
MA0Ku7m1w87SvczL+w0KDQozMDQNCjAwOjE4OjMxLDc3MCAtLT4gMDA6MTg6MzMsNjIwDQrO0tGh
tcS/ybK71eLR+Q0KDQozMDUNCjAwOjE4OjMzLDYyMCAtLT4gMDA6MTg6MzUsNTcwDQrO0r+0tb3L
+7ai18XO0tDYv7TE2A0KDQozMDYNCjAwOjE4OjM2LDQ3MCAtLT4gMDA6MTg6NDEsMjkwDQrO0s+y
u7bEx9bWDQrP68y9y/fO0sOr0sLA78PmtcTE0MjLDQoNCjMwNw0KMDA6MTg6NDEsMjkwIC0tPiAw
MDoxODo0NCwyOTANCsuzsePLtc/CIMDvw+a7ucrHvP7Dq9LCDQoNCjMwOA0KMDA6MTg6NDYsNDMw
IC0tPiAwMDoxODo0OSw3NzANCsTHuPa8or/KtcSwq7j219PT0LXjz/FIb3dhcmQNCg0KMzA5DQow
MDoxODo0OSw3NzAgLS0+IDAwOjE4OjUzLDA0MA0KxOPEx7j2tM/D97XEtKbE0M/xU2hlbGRvbg0K
DQozMTANCjAwOjE4OjUzLDEwMCAtLT4gMDA6MTg6NTUsNjQwDQotIM3tsLINCi0gze2wsg0KDQoz
MTENCjAwOjE4OjU4LDM0MCAtLT4gMDA6MTk6MDEsMzEwDQq6w8HLIEtvb3RocmFwcGFsabKpyr8N
Crj6xOPMuLuwuty439DLDQoNCjMxMg0KMDA6MTk6MDEsMzEwIC0tPiAwMDoxOTowMyw4MTANCrWr
ztLSqrvYvNINCr3it8XO0rXEsaPEt8HLDQoNCjMxMw0KMDA6MTk6MDMsODEwIC0tPiAwMDoxOTow
NiwwNzANCsrHsKEgztLBy73itaXJ7bi4xLi1xLjQytwNCg0KMzE0DQowMDoxOTowNiwwNzAgLS0+
IDAwOjE5OjA4LDAyMA0KztLT0NK71rvQobm3DQoNCjMxNQ0KMDA6MTk6MDgsMDIwIC0tPiAwMDox
OToxMCw4NTANCsrHsKEgzerIq9K70fkNCg0KMzE2DQowMDoxOToxMCw4NjAgLS0+IDAwOjE5OjEy
LDE1MA0Kze2wsg0KDQozMTcNCjAwOjE5OjEyLDE2MCAtLT4gMDA6MTk6MTMsODIwDQpEYXZpc8Wu
yr8uLi4NCg0KMzE4DQowMDoxOToxMyw4MjAgLS0+IDAwOjE5OjE2LDY2MA0KztIuLi4gtu4gxuTK
tS4uLg0KDQozMTkNCjAwOjE5OjE2LDY2MCAtLT4gMDA6MTk6MjAsODEwDQq98c3tztLKx7Gn18XD
7MOjz6PN+w0Kuf3AtL+0v7TE3LK7xNzF3bW9ucK2wLXEsqnKv7rzDQoNCjMyMA0KMDA6MTk6MjAs
ODIwIC0tPiAwMDoxOToyNSwwNTANCrWryLS6zcTj1ebQxMHEyc/Byw0KDQozMjENCjAwOjE5OjI1
LDA1MCAtLT4gMDA6MTk6MjcsODIwDQq4/LzTw8DD7rXE0rvN7Q0KDQozMjINCjAwOjE5OjI4LDU2
MCAtLT4gMDA6MTk6MzAsNjIwDQrE48jLuty6ww0KDQozMjMNCjAwOjE5OjMwLDYzMCAtLT4gMDA6
MTk6MzIsMzcwDQrE47K7u+G21M7S09DS4su8sMk/DQoNCjMyNA0KMDA6MTk6MzIsMzgwIC0tPiAw
MDoxOTozNCwxMzANCrK7ILK7ILK7IMTHvs236MHLIQ0KDQozMjUNCjAwOjE5OjM0LDEzMCAtLT4g
MDA6MTk6MzgsNDAwDQq82cjnztK21MTj09DS4su8IMTj1Oe3or71wcsNCtTauNC+9bK7y6zWrtPg
IMTju7m74dPQtePNrMfpztINCg0KMzI2DQowMDoxOTo0Miw2NzAgLS0+IDAwOjE5OjQ0LDU1MA0K
xOPV5r/JsK4NCg0KMzI3DQowMDoxOTo0NCw1OTAgLS0+IDAwOjE5OjQ2LDk5OQ0Kze2wsiBLb290
aHJhcHBhbGmyqcq/DQoNCjMyOA0KMDA6MTk6NDcsMDEwIC0tPiAwMDoxOTo0OSw2MTANCs3tsLIN
Cg0KMzI5DQowMDoxOTo1MSwxMTAgLS0+IDAwOjE5OjUzLDMzMA0Kw7LLxsTjtcDHuLPJuabByw0K
DQozMzANCjAwOjE5OjUzLDMzMCAtLT4gMDA6MTk6NTUsMDMwDQq2+MfSLi4uDQoNCjMzMQ0KMDA6
MTk6NTUsMDMwIC0tPiAwMDoxOTo1NywxMjANCs7SvvW1w87Sw8e7uc2mwLS157XEDQoNCjMzMg0K
MDA6MTk6NTcsMTIwIC0tPiAwMDoxOTo1OSw3OTANCsvjwcuwySDAtLXnxOO49s23DQoNCjMzMw0K
MDA6MTk6NTksNzkwIC0tPiAwMDoyMDowMSw5OTANCsTjyrLDtMqxuvKzycHLIsC0tefWrs31IsHL
Pw0KDQozMzQNCjAwOjIwOjA0LDMyMCAtLT4gMDA6MjA6MDYsMDk4DQq6w7DJIL7Ny+PE48PH09DA
tLXnDQoNCjMzNQ0KMDA6MjA6MDYsMTEwIC0tPiAwMDoyMDowOCw3ODANCi0gsb7AtL7N09ANCi0g
w7vT0A0KDQozMzYNCjAwOjIwOjA4LDc4MCAtLT4gMDA6MjA6MTIsODgwDQq1qy4uLiC1q7y0yrnT
0CDE49Kq1PXDtNf2Pw0KDQozMzcNCjAwOjIwOjEyLDg4MCAtLT4gMDA6MjA6MTgsODAwDQrO0rvh
wv3C/bm00v3L/Q0K1rG1vcv9zt7W+rXYtbnU2s7StLLJzw0KDQozMzgNCjAwOjIwOjE4LDgxMCAt
LT4gMDA6MjA6MjAsODEwDQq/ys3718XWu9PQztLE3Lj4y/21xL/swNYNCg0KMzM5DQowMDoyMDoy
MCw4MTAgLS0+IDAwOjIwOjIyLDY4MA0KLSDL+dLUy7UgyrLDtLa8srvX9g0KLSDKssO0tryyu9f2
DQoNCjM0MA0KMDA6MjA6MjgsNjAwIC0tPiAwMDoyMDozNCw3MzANCtXmuN/Qy76vsuzW1dPa16W1
vcHLxMe49g0K0MTA7bHkzKy1xLv50vK4xNTs0MnQyQ0KDQozNDENCjAwOjIwOjM5LDk5MCAtLT4g
MDA6MjA6NDIsMjEwDQrO0reiysQg1eLKx87Sxa7F89PRIQ0KDQozNDINCjAwOjIwOjQzLDc1MCAt
LT4gMDA6MjA6NDcsMjgwDQpMZW9uYXJkISBMZW9uYXJkIQ0KTGVvbmFyZCEgTGVvbmFyZCENCg0K
MzQzDQowMDoyMDo0OCwyNDAgLS0+IDAwOjIwOjUwLDE0MA0KPGZvbnQgY29sb3I9IzIzOEU2OD4t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Ksb7C28yz19bEu732t63S6727
wffRp8+w1q7Tww0KvfvWucjOus7JzNK108PNvrfx1PK687n719S4ug0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L2ZvbnQ+DQoNCjM0NA0KMDA6MjA6NTAsMjgwIC0tPiAw
MDoyMDo1MiwyNjANCjxmb250IGNvbG9yPSMyMzhFNjg+zOyyxcDtwtu0qyC12sbfvL4gtdrSu7yv
IM3qDQo3MjBQIGlUdW5lcyAtINfUwLT33GFrPC9mb250Pg0K
headers:
cache-control:
- max-age=2678400
connection:
- keep-alive
content-disposition:
- subtitle; filename="The.Big.Bang.Theory.S07E01.The.Hofstadter.Insufficiency.720p.WEB-DL.DD5.1.H.264.srt"
content-length:
- '21411'
content-type:
- application/octet-stream
date:
- Sat, 30 Nov 2019 07:14:46 GMT
expires:
- Tue, 31 Dec 2019 07:14:46 GMT
master:
- Windu
server:
- nginx
x-cache:
- HIT
status:
code: 200
message: OK
version: 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,83 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27The+Big+Bang+Theory+S07E05%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"The Big Bang Theory S07E05\",\"\
result\":\"succeed\",\"subs\":[{\"subtype\":\"Subrip(srt)\",\"id\":618200,\"\
lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"langchs\":true}},\"vote_score\"\
:0,\"upload_time\":\"2018-01-26 19:23:52\",\"release_site\":\"\u4F0A\u7538\
\u56ED\",\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\u7B2C7\u5B63\u5168\
24\u96C6The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\",\"videoname\":\"\
The.Big.Bang.Theory.S07.1080p.WEB-DL.DD5.1.H.264\",\"revision\":0},{\"subtype\"\
:\"Subrip(srt)\",\"id\":316965,\"vote_score\":0,\"upload_time\":\"2014-12-06\
\ 04:13:43\",\"native_name\":\"\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\
\u5B63 \u7B2C 5 \u96C6\",\"videoname\":\"The Big Bang Theory S07E05 720p HDTV\
\ X264-DIMENSION\",\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":316966,\"\
vote_score\":0,\"upload_time\":\"2014-12-06 04:13:43\",\"native_name\":\"\u751F\
\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\u5B63 \u7B2C 5 \u96C6\",\"videoname\"\
:\"The Big Bang Theory S07E05 720p HDTV X264-DIMENSION\",\"revision\":0},{\"\
subtype\":\"SSA\",\"id\":264973,\"lang\":{\"desc\":\"\u53CC\u8BED\",\"langlist\"\
:{\"langdou\":true}},\"vote_score\":80,\"upload_time\":\"2014-11-02 10:41:05\"\
,\"native_name\":\"The Big Bang Theory S07\\/\u751F\u6D3B\u5927\u7206\u70B8\
\ \u7B2C\u4E03\u5B63\\/The Big Bang Theory Season 07\",\"videoname\":\"The.Big.Bang.Theory.S07E05.720p.BluRay.x264-DEMAND\"\
,\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":261680,\"lang\":{\"desc\"\
:\"\u7B80\",\"langlist\":{\"langchs\":true}},\"vote_score\":0,\"upload_time\"\
:\"2014-08-30 05:11:21\",\"native_name\":\"\u751F\u6D3B\u5927\u7206\u70B8\
\ \u7B2C\u4E03\u5B63\\/\u5929\u624D\u7406\u8BBA\u4F20\",\"videoname\":\"The.Big.Bang.Theory.S07.720p.BluRay.x264-DEMAND\"\
,\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":244659,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"\
langchs\":true}},\"vote_score\":0,\"upload_time\":\"2013-10-19 03:34:04\"\
,\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\\/\u751F\u6D3B\u5927\u7206\
\u70B8 \u7B2C\u4E03\u5B63\u7B2C\u4E94\u96C6\",\"videoname\":\"The Big Bang\
\ Theory S07E05 the.big.bang.theory.705.hdtv-lol\",\"revision\":0},{\"subtype\"\
:\"Subrip(srt)\",\"id\":244640,\"lang\":{\"desc\":\"\u82F1 \u7B80 \u7E41 \u53CC\
\u8BED\",\"langlist\":{\"langchs\":true,\"langeng\":true,\"langdou\":true,\"\
langcht\":true}},\"vote_score\":0,\"upload_time\":\"2013-10-18 23:33:24\"\
,\"native_name\":\"\",\"videoname\":\"\u751F\u6D3B\u5927\u7206\u70B8\\/The\
\ Big Bang Theory S07E05\\/\u7B2C\u4E03\u5B63\u7B2C5\u96C6\\/\u5723\u57CE\u5BB6\
\u56ED\u53CC\u8BED\u5B57\u5E55 the.big.bang.theory.705.hdtv-lol\",\"revision\"\
:0},{\"subtype\":\"SSA\",\"id\":244632,\"lang\":{\"desc\":\"\u82F1 \u7B80\"\
,\"langlist\":{\"langeng\":true,\"langchs\":true}},\"vote_score\":0,\"upload_time\"\
:\"2013-10-18 22:15:16\",\"native_name\":\"\u5929\u624D\u7406\u8BBA\u4F20\\\
/The Big Bang Theory S07E05\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C\u4E03\u5B63\
\u7B2C\u4E94\u96C6\u3010\u8C22\u8033\u6735\u5B57\u5E55\u7EC4\u3011\",\"videoname\"\
:\"The.Big.Bang.Theory.S07E05.720p.HDTV.X264-DIMENSION\",\"revision\":0},{\"\
subtype\":\"\u5176\u4ED6\",\"id\":244630,\"lang\":{\"desc\":\"\",\"langlist\"\
:{}},\"vote_score\":0,\"upload_time\":\"2013-10-18 21:31:21\",\"native_name\"\
:\"\",\"videoname\":\"\u751F\u6D3B\u5927\u7206\u70B8 \u7B2C7\u96C6\u7B2C5\u96C6\
\ 720P\",\"revision\":0},{\"subtype\":\"\u5176\u4ED6\",\"id\":244624,\"lang\"\
:{\"desc\":\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langcht\"\
:true,\"langchs\":true}},\"vote_score\":0,\"upload_time\":\"2013-10-18 20:46:57\"\
,\"native_name\":\"The Big Bang Theory S07E05\",\"videoname\":\"\u751F\u6D3B\
\u5927\u7206\u70B8\u7B2C\u4E03\u5B63\u7B2C5\u96C6\",\"revision\":0},{\"subtype\"\
:\"Subrip(srt)\",\"id\":585062,\"lang\":{\"desc\":\"\u82F1 \u7B80 \u7E41 \u53CC\
\u8BED\",\"langlist\":{\"langchs\":true,\"langeng\":true,\"langdou\":true,\"\
langcht\":true}},\"vote_score\":0,\"upload_time\":\"2013-10-17 17:31:00\"\
,\"release_site\":\"\u4EBA\u4EBA\u5F71\u89C6YYeTs\",\"native_name\":\"\u751F\
\u6D3B\u5927\u7206\u70B8 \u7B2C7\u96C6\u7B2C5\u96C6\",\"videoname\":\"The\
\ Big Bang Theory S07E05\",\"revision\":0}],\"action\":\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:14:39 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

@ -0,0 +1,98 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27Man+of+Steel+2013%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"Man of Steel 2013\",\"result\"\
:\"succeed\",\"subs\":[{\"subtype\":\"SSA\",\"id\":618185,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"langlist\":{\"langchs\":true,\"langeng\"\
:true,\"langdou\":true,\"langcht\":true}},\"vote_score\":0,\"upload_time\"\
:\"2018-01-26 12:19:27\",\"release_site\":\"CMCT\",\"native_name\":\"\u8D85\
\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF.Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT.\u7B80\
\u7E41\u82F1\u53CC\u8BED\u5B57\u5E55\",\"videoname\":\"Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT\"\
,\"revision\":0},{\"subtype\":\"SSA\",\"id\":316973,\"vote_score\":0,\"upload_time\"\
:\"2014-12-06 04:13:44\",\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\
\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\u96C4\",\"videoname\":\"Man\
\ of Steel 2013 720p BluRay x264 DTS-WiKi\",\"revision\":0},{\"subtype\":\"\
Subrip(srt)\",\"id\":253629,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"\
langcht\":true}},\"vote_score\":0,\"upload_time\":\"2014-03-17 15:30:19\"\
,\"native_name\":\"\",\"videoname\":\"[\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4\
]Man.of.Steel.(2013).BDRip.720p.DTS.X264-Felony\",\"revision\":0},{\"subtype\"\
:\"SSA\",\"id\":252930,\"lang\":{\"desc\":\"\u82F1 \u7E41 \u53CC\u8BED\",\"\
langlist\":{\"langeng\":true,\"langdou\":true,\"langcht\":true}},\"vote_score\"\
:45,\"upload_time\":\"2014-03-05 18:10:39\",\"native_name\":\"\u8D85\u4EBA\
\uFF1A\u92FC\u9435\u82F1\u96C4\",\"videoname\":\"Man of Steel\",\"revision\"\
:0},{\"subtype\":\"Subrip(srt)\",\"id\":246016,\"lang\":{\"desc\":\"\u82F1\
\ \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"langchs\"\
:true}},\"vote_score\":0,\"upload_time\":\"2013-11-09 10:43:13\",\"native_name\"\
:\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\
\u82F1\u96C4\\/\u3010TLF\u5B57\u5E55\u7EC4\u3011Man of Steel\",\"videoname\"\
:\"Man.of.Steel.2013.720p.BluRay.x264.YIFY\",\"revision\":0},{\"subtype\"\
:\"SSA\",\"id\":245602,\"lang\":{\"desc\":\"\u7B80 \u7E41 \u53CC\u8BED\",\"\
langlist\":{\"langchs\":true,\"langdou\":true,\"langcht\":true}},\"vote_score\"\
:0,\"upload_time\":\"2013-11-02 05:56:40\",\"native_name\":\"\u8D85\u4EBA\uFF1A\
\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\u96C4\\/\u7279\
\u6548\u53CC\u8BED\\/\u84DD\u5149\u5B57\u5E55\",\"videoname\":\"Man of Steel\
\ 1080p.bluray.x264-sector7\",\"revision\":0},{\"subtype\":\"\u5176\u4ED6\"\
,\"id\":245568,\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"langchs\":true}},\"\
vote_score\":0,\"upload_time\":\"2013-10-31 23:41:07\",\"native_name\":\"\u8D85\
\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\u96C4\"\
,\"videoname\":\"Man.of.Steel.2013\",\"revision\":0},{\"subtype\":\"VobSub\"\
,\"id\":245259,\"vote_score\":100,\"upload_time\":\"2013-10-27 07:04:18\"\
,\"native_name\":\"\",\"videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":245131,\"lang\":{\"desc\"\
:\"\u7B80\",\"langlist\":{\"langchs\":true}},\"vote_score\":80,\"upload_time\"\
:\"2013-10-25 04:50:37\",\"native_name\":\"\u8D85\u4EBA-\u94A2\u94C1\u4E4B\
\u8EAF\",\"videoname\":\"Man.Of.Steel\",\"revision\":0},{\"subtype\":\"SSA\"\
,\"id\":245056,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"langcht\":true}},\"\
vote_score\":0,\"upload_time\":\"2013-10-24 07:52:31\",\"native_name\":\"\"\
,\"videoname\":\"\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4 Man of Steel (2013)\
\ 1080p.cht\",\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":244971,\"\
lang\":{\"desc\":\"\u7B80 \u7E41\",\"langlist\":{\"langchs\":true,\"langcht\"\
:true}},\"vote_score\":10,\"upload_time\":\"2013-10-23 00:46:40\",\"native_name\"\
:\"\u84DD\u5149\u539F\u76D8\u5B57\u5E55\",\"videoname\":\"\u8D85\u4EBA: \u94A2\
\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\u96C4(\u6E2F\\/\u53F0\
).Man.of.Steel.2013.BluRay CEE\u7248\u84DD\u5149\u539F\u76D8\",\"revision\"\
:0},{\"subtype\":\"Subrip(srt)\",\"id\":244969,\"lang\":{\"desc\":\"\",\"\
langlist\":{}},\"vote_score\":0,\"upload_time\":\"2013-10-22 23:39:00\",\"\
native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF 3D\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/Man of Steel 3D\",\"videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"revision\":0},{\"subtype\":\"SSA\",\"id\":244960,\"lang\":{\"desc\":\"\u82F1\
\ \u7B80\",\"langlist\":{\"langeng\":true,\"langchs\":true}},\"vote_score\"\
:0,\"upload_time\":\"2013-10-22 22:06:42\",\"native_name\":\"\u8D85\u4EBA\
:\u94A2\u94C1\u4E4B\u8EAF\",\"videoname\":\"Superman: Man of Steel BD\",\"\
revision\":0},{\"subtype\":\"\u5176\u4ED6\",\"id\":244939,\"lang\":{\"desc\"\
:\"\",\"langlist\":{}},\"vote_score\":0,\"upload_time\":\"2013-10-22 17:42:45\"\
,\"native_name\":\"\",\"videoname\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\
\u8EAF.Man.of.Steel.2013.1080p-PublicHD 2D.1080p\u62163D.1080p.HSBS-PublicHD\"\
,\"revision\":0},{\"subtype\":\"Subrip(srt)\",\"id\":244863,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"\
langchs\":true}},\"vote_score\":0,\"upload_time\":\"2013-10-21 16:52:23\"\
,\"native_name\":\"\\/Man of Steel \\/\u8D85\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\
\\/\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA:\u94A2\u94C1\u82F1\u96C4\",\"videoname\"\
:\"man.of.steel.2013.720p.bluray.x264-felony.mkv\",\"revision\":0}],\"action\"\
:\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 08:28:00 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

@ -0,0 +1,97 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27Man+of+Steel+2013%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"Man of Steel 2013\",\"result\"\
:\"succeed\",\"subs\":[{\"subtype\":\"SSA\",\"id\":618185,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"langlist\":{\"langcht\":true,\"langeng\"\
:true,\"langdou\":true,\"langchs\":true}},\"vote_score\":0,\"upload_time\"\
:\"2018-01-26 12:19:27\",\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\
\u8EAF.Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT.\u7B80\u7E41\u82F1\
\u53CC\u8BED\u5B57\u5E55\",\"videoname\":\"Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT\"\
,\"release_site\":\"CMCT\",\"revision\":0},{\"upload_time\":\"2014-12-06 04:13:44\"\
,\"subtype\":\"SSA\",\"id\":316973,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\u96C4\",\"videoname\"\
:\"Man of Steel 2013 720p BluRay x264 DTS-WiKi\",\"revision\":0,\"vote_score\"\
:0},{\"upload_time\":\"2014-03-17 15:30:19\",\"subtype\":\"Subrip(srt)\",\"\
revision\":0,\"id\":253629,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"\
langcht\":true}},\"videoname\":\"[\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4]Man.of.Steel.(2013).BDRip.720p.DTS.X264-Felony\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2014-03-05 18:10:39\"\
,\"subtype\":\"SSA\",\"revision\":0,\"id\":252930,\"lang\":{\"desc\":\"\u82F1\
\ \u7E41 \u53CC\u8BED\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"\
langdou\":true}},\"videoname\":\"Man of Steel\",\"native_name\":\"\u8D85\u4EBA\
\uFF1A\u92FC\u9435\u82F1\u96C4\",\"vote_score\":45},{\"upload_time\":\"2013-11-09\
\ 10:43:13\",\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":246016,\"lang\"\
:{\"desc\":\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\"\
:true,\"langcht\":true}},\"videoname\":\"Man.of.Steel.2013.720p.BluRay.x264.YIFY\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/\u3010TLF\u5B57\u5E55\u7EC4\u3011Man of Steel\"\
,\"vote_score\":0},{\"upload_time\":\"2013-11-02 05:56:40\",\"subtype\":\"\
SSA\",\"revision\":0,\"id\":245602,\"lang\":{\"desc\":\"\u7B80 \u7E41 \u53CC\
\u8BED\",\"langlist\":{\"langcht\":true,\"langchs\":true,\"langdou\":true}},\"\
videoname\":\"Man of Steel 1080p.bluray.x264-sector7\",\"native_name\":\"\u8D85\
\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\
\u96C4\\/\u7279\u6548\u53CC\u8BED\\/\u84DD\u5149\u5B57\u5E55\",\"vote_score\"\
:0},{\"upload_time\":\"2013-10-31 23:41:07\",\"subtype\":\"\u5176\u4ED6\"\
,\"revision\":0,\"id\":245568,\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"\
langchs\":true}},\"videoname\":\"Man.of.Steel.2013\",\"native_name\":\"\u8D85\
\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\u96C4\"\
,\"vote_score\":0},{\"upload_time\":\"2013-10-27 07:04:18\",\"subtype\":\"\
VobSub\",\"id\":245259,\"native_name\":\"\",\"videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"revision\":0,\"vote_score\":100},{\"upload_time\":\"2013-10-25 04:50:37\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":245131,\"lang\":{\"desc\"\
:\"\u7B80\",\"langlist\":{\"langchs\":true}},\"videoname\":\"Man.Of.Steel\"\
,\"native_name\":\"\u8D85\u4EBA-\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\"\
:80},{\"upload_time\":\"2013-10-24 07:52:31\",\"subtype\":\"SSA\",\"revision\"\
:0,\"id\":245056,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"langcht\":true}},\"\
videoname\":\"\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4 Man of Steel (2013) 1080p.cht\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-23 00:46:40\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244971,\"lang\":{\"desc\"\
:\"\u7B80 \u7E41\",\"langlist\":{\"langcht\":true,\"langchs\":true}},\"videoname\"\
:\"\u8D85\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\
\u96C4(\u6E2F\\/\u53F0).Man.of.Steel.2013.BluRay CEE\u7248\u84DD\u5149\u539F\
\u76D8\",\"native_name\":\"\u84DD\u5149\u539F\u76D8\u5B57\u5E55\",\"vote_score\"\
:10},{\"upload_time\":\"2013-10-22 23:39:00\",\"subtype\":\"Subrip(srt)\"\
,\"revision\":0,\"id\":244969,\"lang\":{\"desc\":\"\",\"langlist\":{}},\"\
videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF 3D\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/Man of Steel 3D\",\"vote_score\":0},{\"upload_time\"\
:\"2013-10-22 22:06:42\",\"subtype\":\"SSA\",\"revision\":0,\"id\":244960,\"\
lang\":{\"desc\":\"\u82F1 \u7B80\",\"langlist\":{\"langchs\":true,\"langeng\"\
:true}},\"videoname\":\"Superman: Man of Steel BD\",\"native_name\":\"\u8D85\
\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\":0},{\"upload_time\":\"2013-10-22\
\ 17:42:45\",\"subtype\":\"\u5176\u4ED6\",\"revision\":0,\"id\":244939,\"\
lang\":{\"desc\":\"\",\"langlist\":{}},\"videoname\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF.Man.of.Steel.2013.1080p-PublicHD 2D.1080p\u62163D.1080p.HSBS-PublicHD\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-21 16:52:23\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244863,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\":true,\"\
langcht\":true}},\"videoname\":\"man.of.steel.2013.720p.bluray.x264-felony.mkv\"\
,\"native_name\":\"\\/Man of Steel \\/\u8D85\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\
\\/\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA:\u94A2\u94C1\u82F1\u96C4\",\"vote_score\"\
:0}],\"action\":\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:14:39 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

@ -0,0 +1,97 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27Man+of+Steel+2013%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"Man of Steel 2013\",\"result\"\
:\"succeed\",\"subs\":[{\"subtype\":\"SSA\",\"id\":618185,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"langlist\":{\"langcht\":true,\"langeng\"\
:true,\"langdou\":true,\"langchs\":true}},\"vote_score\":0,\"upload_time\"\
:\"2018-01-26 12:19:27\",\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\
\u8EAF.Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT.\u7B80\u7E41\u82F1\
\u53CC\u8BED\u5B57\u5E55\",\"videoname\":\"Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT\"\
,\"release_site\":\"CMCT\",\"revision\":0},{\"upload_time\":\"2014-12-06 04:13:44\"\
,\"subtype\":\"SSA\",\"id\":316973,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\u96C4\",\"videoname\"\
:\"Man of Steel 2013 720p BluRay x264 DTS-WiKi\",\"revision\":0,\"vote_score\"\
:0},{\"upload_time\":\"2014-03-17 15:30:19\",\"subtype\":\"Subrip(srt)\",\"\
revision\":0,\"id\":253629,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"\
langcht\":true}},\"videoname\":\"[\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4]Man.of.Steel.(2013).BDRip.720p.DTS.X264-Felony\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2014-03-05 18:10:39\"\
,\"subtype\":\"SSA\",\"revision\":0,\"id\":252930,\"lang\":{\"desc\":\"\u82F1\
\ \u7E41 \u53CC\u8BED\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"\
langdou\":true}},\"videoname\":\"Man of Steel\",\"native_name\":\"\u8D85\u4EBA\
\uFF1A\u92FC\u9435\u82F1\u96C4\",\"vote_score\":45},{\"upload_time\":\"2013-11-09\
\ 10:43:13\",\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":246016,\"lang\"\
:{\"desc\":\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\"\
:true,\"langcht\":true}},\"videoname\":\"Man.of.Steel.2013.720p.BluRay.x264.YIFY\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/\u3010TLF\u5B57\u5E55\u7EC4\u3011Man of Steel\"\
,\"vote_score\":0},{\"upload_time\":\"2013-11-02 05:56:40\",\"subtype\":\"\
SSA\",\"revision\":0,\"id\":245602,\"lang\":{\"desc\":\"\u7B80 \u7E41 \u53CC\
\u8BED\",\"langlist\":{\"langcht\":true,\"langchs\":true,\"langdou\":true}},\"\
videoname\":\"Man of Steel 1080p.bluray.x264-sector7\",\"native_name\":\"\u8D85\
\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\
\u96C4\\/\u7279\u6548\u53CC\u8BED\\/\u84DD\u5149\u5B57\u5E55\",\"vote_score\"\
:0},{\"upload_time\":\"2013-10-31 23:41:07\",\"subtype\":\"\u5176\u4ED6\"\
,\"revision\":0,\"id\":245568,\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"\
langchs\":true}},\"videoname\":\"Man.of.Steel.2013\",\"native_name\":\"\u8D85\
\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\u96C4\"\
,\"vote_score\":0},{\"upload_time\":\"2013-10-27 07:04:18\",\"subtype\":\"\
VobSub\",\"id\":245259,\"native_name\":\"\",\"videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"revision\":0,\"vote_score\":100},{\"upload_time\":\"2013-10-25 04:50:37\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":245131,\"lang\":{\"desc\"\
:\"\u7B80\",\"langlist\":{\"langchs\":true}},\"videoname\":\"Man.Of.Steel\"\
,\"native_name\":\"\u8D85\u4EBA-\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\"\
:80},{\"upload_time\":\"2013-10-24 07:52:31\",\"subtype\":\"SSA\",\"revision\"\
:0,\"id\":245056,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"langcht\":true}},\"\
videoname\":\"\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4 Man of Steel (2013) 1080p.cht\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-23 00:46:40\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244971,\"lang\":{\"desc\"\
:\"\u7B80 \u7E41\",\"langlist\":{\"langcht\":true,\"langchs\":true}},\"videoname\"\
:\"\u8D85\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\
\u96C4(\u6E2F\\/\u53F0).Man.of.Steel.2013.BluRay CEE\u7248\u84DD\u5149\u539F\
\u76D8\",\"native_name\":\"\u84DD\u5149\u539F\u76D8\u5B57\u5E55\",\"vote_score\"\
:10},{\"upload_time\":\"2013-10-22 23:39:00\",\"subtype\":\"Subrip(srt)\"\
,\"revision\":0,\"id\":244969,\"lang\":{\"desc\":\"\",\"langlist\":{}},\"\
videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF 3D\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/Man of Steel 3D\",\"vote_score\":0},{\"upload_time\"\
:\"2013-10-22 22:06:42\",\"subtype\":\"SSA\",\"revision\":0,\"id\":244960,\"\
lang\":{\"desc\":\"\u82F1 \u7B80\",\"langlist\":{\"langchs\":true,\"langeng\"\
:true}},\"videoname\":\"Superman: Man of Steel BD\",\"native_name\":\"\u8D85\
\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\":0},{\"upload_time\":\"2013-10-22\
\ 17:42:45\",\"subtype\":\"\u5176\u4ED6\",\"revision\":0,\"id\":244939,\"\
lang\":{\"desc\":\"\",\"langlist\":{}},\"videoname\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF.Man.of.Steel.2013.1080p-PublicHD 2D.1080p\u62163D.1080p.HSBS-PublicHD\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-21 16:52:23\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244863,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\":true,\"\
langcht\":true}},\"videoname\":\"man.of.steel.2013.720p.bluray.x264-felony.mkv\"\
,\"native_name\":\"\\/Man of Steel \\/\u8D85\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\
\\/\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA:\u94A2\u94C1\u82F1\u96C4\",\"vote_score\"\
:0}],\"action\":\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:14:39 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

@ -0,0 +1,97 @@
interactions:
- request:
body: null
headers:
User-Agent:
- Sub-Zero/2
method: GET
uri: https://api.assrt.net/v1/sub/search?q=%5B%27Man+of+Steel+2013%27%5D&token=SECRET&is_file=%5B%271%27%5D
response:
body:
string: "{\"status\":0,\"sub\":{\"keyword\":\"Man of Steel 2013\",\"result\"\
:\"succeed\",\"subs\":[{\"subtype\":\"SSA\",\"id\":618185,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41 \u53CC\u8BED\",\"langlist\":{\"langcht\":true,\"langeng\"\
:true,\"langdou\":true,\"langchs\":true}},\"vote_score\":0,\"upload_time\"\
:\"2018-01-26 12:19:27\",\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\
\u8EAF.Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT.\u7B80\u7E41\u82F1\
\u53CC\u8BED\u5B57\u5E55\",\"videoname\":\"Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT\"\
,\"release_site\":\"CMCT\",\"revision\":0},{\"upload_time\":\"2014-12-06 04:13:44\"\
,\"subtype\":\"SSA\",\"id\":316973,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\u96C4\",\"videoname\"\
:\"Man of Steel 2013 720p BluRay x264 DTS-WiKi\",\"revision\":0,\"vote_score\"\
:0},{\"upload_time\":\"2014-03-17 15:30:19\",\"subtype\":\"Subrip(srt)\",\"\
revision\":0,\"id\":253629,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"\
langcht\":true}},\"videoname\":\"[\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4]Man.of.Steel.(2013).BDRip.720p.DTS.X264-Felony\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2014-03-05 18:10:39\"\
,\"subtype\":\"SSA\",\"revision\":0,\"id\":252930,\"lang\":{\"desc\":\"\u82F1\
\ \u7E41 \u53CC\u8BED\",\"langlist\":{\"langeng\":true,\"langcht\":true,\"\
langdou\":true}},\"videoname\":\"Man of Steel\",\"native_name\":\"\u8D85\u4EBA\
\uFF1A\u92FC\u9435\u82F1\u96C4\",\"vote_score\":45},{\"upload_time\":\"2013-11-09\
\ 10:43:13\",\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":246016,\"lang\"\
:{\"desc\":\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\"\
:true,\"langcht\":true}},\"videoname\":\"Man.of.Steel.2013.720p.BluRay.x264.YIFY\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/\u3010TLF\u5B57\u5E55\u7EC4\u3011Man of Steel\"\
,\"vote_score\":0},{\"upload_time\":\"2013-11-02 05:56:40\",\"subtype\":\"\
SSA\",\"revision\":0,\"id\":245602,\"lang\":{\"desc\":\"\u7B80 \u7E41 \u53CC\
\u8BED\",\"langlist\":{\"langcht\":true,\"langchs\":true,\"langdou\":true}},\"\
videoname\":\"Man of Steel 1080p.bluray.x264-sector7\",\"native_name\":\"\u8D85\
\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA\uFF1A\u94A2\u94C1\u82F1\
\u96C4\\/\u7279\u6548\u53CC\u8BED\\/\u84DD\u5149\u5B57\u5E55\",\"vote_score\"\
:0},{\"upload_time\":\"2013-10-31 23:41:07\",\"subtype\":\"\u5176\u4ED6\"\
,\"revision\":0,\"id\":245568,\"lang\":{\"desc\":\"\u7B80\",\"langlist\":{\"\
langchs\":true}},\"videoname\":\"Man.of.Steel.2013\",\"native_name\":\"\u8D85\
\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\u96C4\"\
,\"vote_score\":0},{\"upload_time\":\"2013-10-27 07:04:18\",\"subtype\":\"\
VobSub\",\"id\":245259,\"native_name\":\"\",\"videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"revision\":0,\"vote_score\":100},{\"upload_time\":\"2013-10-25 04:50:37\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":245131,\"lang\":{\"desc\"\
:\"\u7B80\",\"langlist\":{\"langchs\":true}},\"videoname\":\"Man.Of.Steel\"\
,\"native_name\":\"\u8D85\u4EBA-\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\"\
:80},{\"upload_time\":\"2013-10-24 07:52:31\",\"subtype\":\"SSA\",\"revision\"\
:0,\"id\":245056,\"lang\":{\"desc\":\"\u7E41\",\"langlist\":{\"langcht\":true}},\"\
videoname\":\"\u8D85\u4EBA \u92FC\u9435\u82F1\u96C4 Man of Steel (2013) 1080p.cht\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-23 00:46:40\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244971,\"lang\":{\"desc\"\
:\"\u7B80 \u7E41\",\"langlist\":{\"langcht\":true,\"langchs\":true}},\"videoname\"\
:\"\u8D85\u4EBA: \u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA: \u94A2\u94C1\u82F1\
\u96C4(\u6E2F\\/\u53F0).Man.of.Steel.2013.BluRay CEE\u7248\u84DD\u5149\u539F\
\u76D8\",\"native_name\":\"\u84DD\u5149\u539F\u76D8\u5B57\u5E55\",\"vote_score\"\
:10},{\"upload_time\":\"2013-10-22 23:39:00\",\"subtype\":\"Subrip(srt)\"\
,\"revision\":0,\"id\":244969,\"lang\":{\"desc\":\"\",\"langlist\":{}},\"\
videoname\":\"Man.Of.Steel.3D.2013.1080p.BluRay.Half-SBS.DTS.x264-PublicHD\"\
,\"native_name\":\"\u8D85\u4EBA\uFF1A\u94A2\u94C1\u4E4B\u8EAF 3D\\/\u8D85\u4EBA\
\uFF1A\u94A2\u94C1\u82F1\u96C4\\/Man of Steel 3D\",\"vote_score\":0},{\"upload_time\"\
:\"2013-10-22 22:06:42\",\"subtype\":\"SSA\",\"revision\":0,\"id\":244960,\"\
lang\":{\"desc\":\"\u82F1 \u7B80\",\"langlist\":{\"langchs\":true,\"langeng\"\
:true}},\"videoname\":\"Superman: Man of Steel BD\",\"native_name\":\"\u8D85\
\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\",\"vote_score\":0},{\"upload_time\":\"2013-10-22\
\ 17:42:45\",\"subtype\":\"\u5176\u4ED6\",\"revision\":0,\"id\":244939,\"\
lang\":{\"desc\":\"\",\"langlist\":{}},\"videoname\":\"\u8D85\u4EBA\uFF1A\u94A2\
\u94C1\u4E4B\u8EAF.Man.of.Steel.2013.1080p-PublicHD 2D.1080p\u62163D.1080p.HSBS-PublicHD\"\
,\"native_name\":\"\",\"vote_score\":0},{\"upload_time\":\"2013-10-21 16:52:23\"\
,\"subtype\":\"Subrip(srt)\",\"revision\":0,\"id\":244863,\"lang\":{\"desc\"\
:\"\u82F1 \u7B80 \u7E41\",\"langlist\":{\"langeng\":true,\"langchs\":true,\"\
langcht\":true}},\"videoname\":\"man.of.steel.2013.720p.bluray.x264-felony.mkv\"\
,\"native_name\":\"\\/Man of Steel \\/\u8D85\u4EBA:\u94A2\u94C1\u4E4B\u8EAF\
\\/\u94A2\u94C1\u4E4B\u8EAF\\/\u8D85\u4EBA:\u94A2\u94C1\u82F1\u96C4\",\"vote_score\"\
:0}],\"action\":\"search\"}}\n"
headers:
access-control-allow-origin:
- '*'
connection:
- keep-alive
content-type:
- application/json
date:
- Sat, 30 Nov 2019 07:27:41 GMT
server:
- nginx
transfer-encoding:
- chunked
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

@ -0,0 +1,117 @@
# -*- coding: utf-8 -*-
import libs
from io import BytesIO
import os
from zipfile import ZipFile
import pytest
import requests
try:
from unittest.mock import Mock
except ImportError:
from mock import Mock
from subliminal import Episode, Movie
from subliminal.cache import region
@pytest.fixture(autouse=True, scope='session')
def configure_region():
region.configure('dogpile.cache.null')
region.configure = Mock()
@pytest.fixture
def movies():
return {'man_of_steel':
Movie(os.path.join('Man of Steel (2013)', 'man.of.steel.2013.720p.bluray.x264-felony.mkv'), 'Man of Steel',
format='BluRay', release_group='felony', resolution='720p', video_codec='h264', audio_codec='DTS',
imdb_id='tt0770828', size=7033732714, year=2013,
hashes={'napiprojekt': '6303e7ee6a835e9fcede9fb2fb00cb36',
'opensubtitles': '5b8f8f4e41ccb21e',
'shooter': '314f454ab464775498ae6f1f5ad813a9;fdaa8b702d8936feba2122e93ba5c44f;'
'0a6935e3436aa7db5597ef67a2c494e3;4d269733f36ddd49f71e92732a462fe5',
'thesubdb': 'ad32876133355929d814457537e12dc2'}),
'enders_game':
Movie('enders.game.2013.720p.bluray.x264-sparks.mkv', 'Ender\'s Game',
format='BluRay', release_group='sparks', resolution='720p', video_codec='h264', year=2013),
'interstellar':
Movie('Interstellar.2014.2014.1080p.BluRay.x264.YIFY.rar', 'Interstellar',
format='BluRay', release_group='YIFY', resolution='1080p', video_codec='h264', year=2014)}
@pytest.fixture
def episodes():
return {'bbt_s07e05':
Episode(os.path.join('The Big Bang Theory', 'Season 07',
'The.Big.Bang.Theory.S07E05.720p.HDTV.X264-DIMENSION.mkv'),
'The Big Bang Theory', 7, 5, title='The Workplace Proximity', year=2007, tvdb_id=4668379,
series_tvdb_id=80379, series_imdb_id='tt0898266', format='HDTV', release_group='DIMENSION',
resolution='720p', video_codec='h264', audio_codec='AC3', imdb_id='tt3229392', size=501910737,
hashes={'napiprojekt': '6303e7ee6a835e9fcede9fb2fb00cb36',
'opensubtitles': '6878b3ef7c1bd19e',
'shooter': 'c13e0e5243c56d280064d344676fff94;cd4184d1c0c623735f6db90841ce15fc;'
'3faefd72f92b63f2504269b4f484a377;8c68d1ef873afb8ba0cc9f97cbac41c1',
'thesubdb': '9dbbfb7ba81c9a6237237dae8589fccc'}),
'got_s03e10':
Episode(os.path.join('Game of Thrones', 'Season 03',
'Game.of.Thrones.S03E10.Mhysa.720p.WEB-DL.DD5.1.H.264-NTb.mkv'),
'Game of Thrones', 3, 10, title='Mhysa', tvdb_id=4517466, series_tvdb_id=121361,
series_imdb_id='tt0944947', format='WEB-DL', release_group='NTb', resolution='720p',
video_codec='h264', audio_codec='AC3', imdb_id='tt2178796', size=2142810931,
hashes={'napiprojekt': '6303e7ee6a835e9fcede9fb2fb00cb36',
'opensubtitles': 'b850baa096976c22',
'shooter': 'b02d992c04ad74b31c252bd5a097a036;ef1b32f873b2acf8f166fc266bdf011a;'
'82ce34a3bcee0c66ed3b26d900d31cca;78113770551f3efd1e2d4ec45898c59c',
'thesubdb': 'b1f899c77f4c960b84b8dbf840d4e42d'}),
'dallas_s01e03':
Episode('Dallas.S01E03.mkv', 'Dallas', 1, 3, title='Spy in the House', year=1978, tvdb_id=228224,
series_tvdb_id=77092, series_imdb_id='tt0077000'),
'dallas_2012_s01e03':
Episode('Dallas.2012.S01E03.mkv', 'Dallas', 1, 3, title='The Price You Pay', year=2012,
original_series=False, tvdb_id=4199511, series_tvdb_id=242521, series_imdb_id='tt1723760',
imdb_id='tt2205526'),
'marvels_agents_of_shield_s02e06':
Episode('Marvels.Agents.of.S.H.I.E.L.D.S02E06.720p.HDTV.x264-KILLERS.mkv',
'Marvel\'s Agents of S.H.I.E.L.D.', 2, 6, year=2013, format='HDTV', release_group='KILLERS',
resolution='720p', video_codec='h264'),
'csi_cyber_s02e03':
Episode('CSI.Cyber.S02E03.hdtv-lol.mp4', 'CSI: Cyber', 2, 3, format='HDTV', release_group='lol'),
'the_x_files_s10e02':
Episode('The.X-Files.S10E02.HDTV.x264-KILLERS.mp4', 'The X-Files', 10, 2, format='HDTV',
release_group='KILLERS', video_codec='h264'),
'colony_s01e09':
Episode('Colony.S01E09.720p.HDTV.x264-KILLERS.mkv', 'Colony', 1, 9, title='Zero Day', year=2016,
tvdb_id=5463229, series_tvdb_id=284210, series_imdb_id='tt4209256', format='HDTV',
release_group='KILLERS', resolution='720p', video_codec='h264', imdb_id='tt4926022'),
'the_jinx_e05':
Episode('The.Jinx-The.Life.and.Deaths.of.Robert.Durst.E05.BDRip.x264-ROVERS.mkv',
'The Jinx: The Life and Deaths of Robert Durst', 1, 5, year=2015, original_series=True,
format='BluRay', release_group='ROVERS', video_codec='h264'),
'the_100_s03e09':
Episode('The.100.S03E09.720p.HDTV.x264-AVS.mkv', 'The 100', 3, 9, title='Stealing Fire', year=2014,
tvdb_id=5544536, series_tvdb_id=268592, series_imdb_id='tt2661044', format='HDTV',
release_group='AVS', resolution='720p', video_codec='h264', imdb_id='tt4799896'),
'csi_s15e18':
Episode('CSI.S15E18.720p.HDTV.X264.DIMENSION.mkv', 'CSI: Crime Scene Investigation', 15, 18,
title='The End Game', year=2000, tvdb_id=5104359, series_tvdb_id=72546, series_imdb_id='tt0247082',
format='HDTV', release_group='DIMENSION', resolution='720p', video_codec='h264',
imdb_id='tt4145952')}
@pytest.fixture(scope='session')
def mkv():
data_path = os.path.join('tests', 'data', 'mkv')
# download matroska test suite
if not os.path.exists(data_path) or len(os.listdir(data_path)) != 8:
r = requests.get('http://downloads.sourceforge.net/project/matroska/test_files/matroska_test_w1_1.zip')
with ZipFile(BytesIO(r.content), 'r') as f:
f.extractall(data_path, [m for m in f.namelist() if os.path.splitext(m)[1] == '.mkv'])
# populate a dict with mkv files
files = {}
for path in os.listdir(data_path):
name, _ = os.path.splitext(path)
files[name] = os.path.join(data_path, path)
return files

@ -0,0 +1,11 @@
# coding=utf-8
import os
import sys
def set_libs():
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../libs/'))
set_libs()

@ -0,0 +1,172 @@
# -*- coding: utf-8 -*-
import os
from babelfish import language_converters
from subzero.language import Language
import pytest
from vcr import VCR
from urlparse import urlparse, parse_qs
from urllib import urlencode
from subliminal_patch.providers.assrt import AssrtSubtitle, AssrtProvider, \
language_contains, search_language_in_list, supported_languages
def remove_auth_token(request):
parsed_uri = urlparse(request.uri)
parsed_query = parse_qs(parsed_uri.query)
if 'token' in parsed_query:
parsed_query['token'] = 'SECRET'
parsed_uri = parsed_uri._replace(query=urlencode(parsed_query))
request.uri = parsed_uri.geturl()
return request
vcr = VCR(path_transformer=lambda path: path + '.yaml',
before_record_request=remove_auth_token,
record_mode=os.environ.get('VCR_RECORD_MODE', 'once'),
match_on=['method', 'scheme', 'host', 'port', 'path', 'body'],
cassette_library_dir=os.path.realpath(os.path.join('cassettes', 'assrt')))
TOKEN=os.environ.get('ASSRT_TOKEN', 'NO_TOKEN_PROVIDED')
def test_supported_languages():
assert set(supported_languages) == set([('zho', None, None),
('eng', None, None),
('zho', None, 'Hans'),
('zho', None, 'Hant')])
def test_language_contains():
assert language_contains(Language('zho'), Language('zho'))
assert language_contains(Language('zho', 'TW', None), Language('zho'))
assert language_contains(Language('zho', 'CN', None), Language('zho'))
assert language_contains(Language('zho', None, 'Hant'), Language('zho'))
assert language_contains(Language('zho', None, 'Hans'), Language('zho'))
assert language_contains(Language('zho', 'TW', 'Hant'), Language('zho'))
assert language_contains(Language('zho', 'CN', 'Hans'), Language('zho'))
assert language_contains(Language('zho', None, 'Hant'), Language('zho', None, 'Hant'))
assert language_contains(Language('zho', None, 'Hans'), Language('zho', None, 'Hans'))
def test_search_language_in_list():
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho', None, 'Hant')])
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hans')])
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho')])
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho')])
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('eng'), Language('zho')])
assert not search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant')])
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant'), Language('zho')])
def test_get_matches_exact_movie_name(movies):
subtitle = AssrtSubtitle(Language('zho'), 253629,
'man.of.steel.2013.720p.bluray.x264-felony.mkv',
None, None)
matches = subtitle.get_matches(movies['man_of_steel'])
assert matches == {'title', 'format', 'release_group', 'year',
'video_codec', 'resolution'}
def test_get_matches_movie_name(movies):
subtitle = AssrtSubtitle(Language('zho'), 618185,
'Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT',
None, None)
matches = subtitle.get_matches(movies['man_of_steel'])
assert matches == {'title', 'format', 'year', 'video_codec', 'resolution'}
@pytest.mark.converter
def test_converter_convert_alpha3():
assert language_converters['assrt'].convert('zho', None, 'Hans') == 'chs'
assert language_converters['assrt'].convert('zho', None, 'Hant') == 'cht'
assert language_converters['assrt'].convert('eng') == 'eng'
@pytest.mark.converter
def test_converter_reverse():
assert language_converters['assrt'].reverse('chs') == ('zho', None, 'Hans')
assert language_converters['assrt'].reverse('cht') == ('zho', None, 'Hant')
assert language_converters['assrt'].reverse(u'簡體') == ('zho', None, 'Hans')
assert language_converters['assrt'].reverse(u'繁體') == ('zho', None, 'Hant')
assert language_converters['assrt'].reverse(u'简体') == ('zho', None, 'Hans')
assert language_converters['assrt'].reverse(u'繁体') == ('zho', None, 'Hant')
@pytest.mark.integration
@vcr.use_cassette
def test_query_movie_zh_Hans(movies):
languages = [Language('zho', None, 'Hant')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.query(languages, video)
assert len(subtitles) == 8
@pytest.mark.integration
@vcr.use_cassette
def test_query_movie_zh_Hant(movies):
languages = [Language('zho', None, 'Hans')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.query(languages, video)
assert len(subtitles) == 8
@pytest.mark.integration
@vcr.use_cassette
def test_query_movie_zh(movies):
languages = [Language('zho')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.query(languages, video)
assert len(subtitles) == 16
@pytest.mark.integration
@vcr.use_cassette
def test_query_episode(episodes):
video = episodes['bbt_s07e05']
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
with AssrtProvider(TOKEN) as provider:
subtitles = provider.query(languages, video)
assert len(subtitles) == 11
@pytest.mark.integration
@vcr.use_cassette
def test_query_list_subtitles(movies):
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.list_subtitles(video, languages)
assert len(subtitles) == 16
@pytest.mark.integration
@vcr.use_cassette
def test_download_subtitle(movies):
languages = [Language('zho', None, 'Hant')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.list_subtitles(video, languages)
provider.download_subtitle(subtitles[0])
assert subtitles[0].content is not None
assert subtitles[0].language == Language('zho', None, 'Hant')
@pytest.mark.integration
@vcr.use_cassette
def test_download_subtitle_zh(movies):
languages = [Language('zho')]
video = movies['man_of_steel']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.list_subtitles(video, languages)
provider.download_subtitle(subtitles[0])
assert subtitles[0].content is not None
assert subtitles[0].language == Language('zho')
@pytest.mark.integration
@vcr.use_cassette
def test_download_episode_subtitle(episodes):
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
video = episodes['bbt_s07e05']
with AssrtProvider(TOKEN) as provider:
subtitles = provider.list_subtitles(video, languages)
provider.download_subtitle(subtitles[0])
assert subtitles[0].content is not None
assert subtitles[0].language == Language('zho', None, 'Hans')

@ -74,6 +74,8 @@
background-color: #ffcccc !important;
line-height: 0 !important;
}
.episode_history { cursor: pointer; }
</style>
<script>
@ -382,7 +384,7 @@
<div class="episode_dialog ui modal">
<i class="close icon"></i>
<div class="header">
<span id="series_title_span"></span> - <span id="season"></span>x<span id="episode"></span> - <span id="episode_title"></span>
<span class="series_title_span"></span> - <span class="season_span"></span>x<span class="episode_span"></span> - <span class="episode_title_span"></span>
</div>
<div class="scrolling content">
<table id="episode_result" class="display" style="width:100%">
@ -405,7 +407,7 @@
<div class="search_dialog ui modal">
<i class="close icon"></i>
<div class="header">
<span id="series_title_span"></span> - <span id="season"></span>x<span id="episode"></span> - <span id="episode_title"></span>
<span class="series_title_span"></span> - <span class="season_span"></span>x<span class="episode_span"></span> - <span class="episode_title_span"></span>
<br><h5>Episode path is: <div class="ui tiny inverted label" style="background-color: #35c5f4;"><span id="episode_path_span"></span></div>
<br>Scenename is: <div class="ui tiny inverted label" style="background-color: orange;"><span id="episode_scenename_span"></span></div></h5>
</div>
@ -588,10 +590,10 @@
});
$('.episode_history').on('click', function(){
$("#series_title_span").html($(this).data("series_title"));
$("#season").html($(this).data("season"));
$("#episode").html($(this).data("episode"));
$("#episode_title").html($(this).data("episode_title"));
$(".series_title_span").html($(this).data("series_title"));
$(".season_span").html($(this).data("season"));
$(".episode_span").html($(this).data("episode"));
$(".episode_title_span").html($(this).data("episode_title"));
sonarrEpisodeId = $(this).attr("data-sonarrEpisodeId");
@ -633,10 +635,10 @@
});
$('.manual_search').on('click', function(){
$("#series_title_span").html($(this).data("series_title"));
$("#season").html($(this).data("season"));
$("#episode").html($(this).data("episode"));
$("#episode_title").html($(this).data("episode_title"));
$(".series_title_span").html($(this).data("series_title"));
$(".season_span").html($(this).data("season"));
$(".episode_span").html($(this).data("episode"));
$(".episode_title_span").html($(this).data("episode_title"));
$("#episode_path_span").html($(this).attr("data-episodePath"));
$("#episode_scenename_span").html($(this).attr("data-sceneName"));

@ -42,6 +42,8 @@
.dataTables_filter{
display:none;
}
#logs > tbody > tr { cursor: pointer; }
</style>
</head>
<body>

@ -86,13 +86,18 @@
<label></label>
</div>
</div>
<div class="collapsed column">
<div class="one wide column">
<div class="collapsed center aligned column">
<div class="ui basic icon" data-tooltip="Download a single subtitle file without adding the language code to the filename." data-inverted="">
<i class="help circle large icon"></i>
</div>
</div>
</div>
<div class="ten wide column">
<div class="fluid column">
<div style="color: red;">We don't recommend enabling this option unless absolutely required (ie: media player not supporting language code in subtitles filename). Results may vary.</div>
</div>
</div>
</div>
<div class="middle aligned row">

Loading…
Cancel
Save