haystack-ml-stack 0.4.9__tar.gz → 0.4.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/PKG-INFO +1 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/pyproject.toml +1 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/_kafka.py +2 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/_serializers.py +1 -0
- haystack_ml_stack-0.4.11/src/haystack_ml_stack/_version.py +1 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/app.py +12 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/dynamo.py +18 -21
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/v1/features_pb2.py +32 -32
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/v1/features_pb2.pyi +3 -1
- haystack_ml_stack-0.4.11/src/haystack_ml_stack/tmp.py +28 -0
- haystack_ml_stack-0.4.11/src/haystack_ml_stack/tmp2.py +28 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/utils.py +0 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/PKG-INFO +1 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/SOURCES.txt +2 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/tests/test_serializers.py +0 -0
- haystack_ml_stack-0.4.9/src/haystack_ml_stack/_version.py +0 -1
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/README.md +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/setup.cfg +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/__init__.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/cache.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/exceptions.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/__init__.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/v1/__init__.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/model_store.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/settings.py +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/dependency_links.txt +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/requires.txt +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/top_level.txt +0 -0
- {haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/tests/test_utils.py +0 -0
|
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "haystack-ml-stack"
|
|
8
|
-
version = "0.4.
|
|
8
|
+
version = "0.4.11"
|
|
9
9
|
description = "Functions related to Haystack ML"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
authors = [{ name = "Oscar Vega", email = "oscar@haystack.tv" }]
|
|
@@ -72,7 +72,7 @@ async def send_channels_to_kafka(
|
|
|
72
72
|
"userid": user.get("userid"),
|
|
73
73
|
"client_os": user.get("clientOs"),
|
|
74
74
|
"model_input": {"user": user, "channels": channels},
|
|
75
|
-
"model_output": model_output,
|
|
75
|
+
"model_output": {c: v for c, v in model_output.items() if c != "__meta__"},
|
|
76
76
|
"model_name": state["model_name"].replace(".pkl", "")
|
|
77
77
|
if state["model_name"]
|
|
78
78
|
else None,
|
|
@@ -83,6 +83,7 @@ async def send_channels_to_kafka(
|
|
|
83
83
|
"user_features": state.get("user_features", []),
|
|
84
84
|
"global_features": state.get("global_features", []),
|
|
85
85
|
"query_params": query_params,
|
|
86
|
+
**model_output.get("__meta__", {})
|
|
86
87
|
},
|
|
87
88
|
"processed_at": processed_at.isoformat(),
|
|
88
89
|
}
|
|
@@ -297,6 +297,7 @@ class GlobalChannelsSerializerV1(SimpleSerializer):
|
|
|
297
297
|
channel_msg.name = str(channel["name"])
|
|
298
298
|
channel_msg.category_group = str(channel["category_group"])
|
|
299
299
|
channel_msg.start_date = int(channel["start_date"])
|
|
300
|
+
channel_msg.required_features.extend(str(f) for f in (channel.get("required_features") or []))
|
|
300
301
|
return root_msg
|
|
301
302
|
|
|
302
303
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.11"
|
|
@@ -516,6 +516,7 @@ def create_channel_app(
|
|
|
516
516
|
)
|
|
517
517
|
|
|
518
518
|
model = state["model"]
|
|
519
|
+
exploration_mode = query_params.get("exploration") in ["True", "true", "1"]
|
|
519
520
|
try:
|
|
520
521
|
preprocess_start = time.perf_counter_ns()
|
|
521
522
|
model["params"]["query_params"] = query_params
|
|
@@ -526,6 +527,16 @@ def create_channel_app(
|
|
|
526
527
|
)
|
|
527
528
|
predict_start = time.perf_counter_ns()
|
|
528
529
|
model_output = model["predict"](model_input, model["params"])
|
|
530
|
+
if exploration_mode:
|
|
531
|
+
if "exploration" not in model:
|
|
532
|
+
raise ValueError("Model does not support exploration mode")
|
|
533
|
+
model_output = model["exploration"](
|
|
534
|
+
user,
|
|
535
|
+
channels,
|
|
536
|
+
model_output,
|
|
537
|
+
model["params"],
|
|
538
|
+
)
|
|
539
|
+
|
|
529
540
|
predict_end = time.perf_counter_ns()
|
|
530
541
|
except Exception as e:
|
|
531
542
|
logger.error("Model prediction failed: \n%s", traceback.format_exc())
|
|
@@ -547,7 +558,7 @@ def create_channel_app(
|
|
|
547
558
|
"retrieval_ms": retrieval_meta.retrieval_ms,
|
|
548
559
|
"preprocess_ms": (predict_start - preprocess_start) * 1e-6,
|
|
549
560
|
"predict_ms": (predict_end - predict_start) * 1e-6,
|
|
550
|
-
"total_channels": len(model_output),
|
|
561
|
+
"total_channels": len(model_output) - ("__meta__" in model_output),
|
|
551
562
|
}
|
|
552
563
|
newrelic.agent.record_custom_event(
|
|
553
564
|
"ChannelInference",
|
|
@@ -495,35 +495,32 @@ def _process_channels(
|
|
|
495
495
|
"USER_" + k.replace("#", "_"): v for k, v in user.items() if k in user_features
|
|
496
496
|
}
|
|
497
497
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
for stat in playlist_stats_global.values():
|
|
501
|
-
all_channels.update(stat.data.keys())
|
|
502
|
-
if playlist_stats_user:
|
|
503
|
-
for stat in playlist_stats_user.values():
|
|
504
|
-
all_channels.update(stat.data.keys())
|
|
505
|
-
|
|
506
|
-
all_channels = all_channels | set(DEFAULT_CHANNELS)
|
|
507
|
-
|
|
508
|
-
# My headlines will stay on top so not part of the candidates
|
|
498
|
+
# My headlines and local news will stay on top so not part of the candidates
|
|
499
|
+
# watch history and liked videos are always part of the bottom also
|
|
509
500
|
# The group labels are also ignored, not real channels for UI
|
|
510
|
-
ignore_channels =
|
|
501
|
+
ignore_channels = {"my headlines", "local news", "national_favorite", "local_favorite", "watch history", "liked videos", "nn_join_us"}
|
|
511
502
|
|
|
512
|
-
#
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
503
|
+
# Rules to filter candidates
|
|
504
|
+
channel_features = user.get("channelFeatures", {})
|
|
505
|
+
channel_eligibility = channel_features.get("eligibility", {})
|
|
506
|
+
channel_feature_predicates = channel_features.get("features", {})
|
|
507
|
+
|
|
508
|
+
# Eligibility rules
|
|
509
|
+
for name in channel_eligibility:
|
|
510
|
+
if not channel_eligibility[name]:
|
|
511
|
+
ignore_channels.add(name)
|
|
518
512
|
|
|
519
513
|
inserted_channel_names = set()
|
|
520
514
|
if channel_candidates is not None:
|
|
521
515
|
preferred = set(user.get("preferredChannels", []) or [])
|
|
522
516
|
for ch in channel_candidates.data:
|
|
517
|
+
# Feature predicate rules for special channels
|
|
518
|
+
if ch.required_features and not all(channel_feature_predicates.get(f, False) for f in ch.required_features):
|
|
519
|
+
ignore_channels.add(ch.name)
|
|
523
520
|
# Rule for authors
|
|
524
521
|
if (
|
|
525
522
|
ch.category_group in ("national_favorite", "local_favorite")
|
|
526
|
-
and ch.name not in preferred
|
|
523
|
+
and (ch.name not in preferred or not channel_eligibility.get(ch.category_group, True))
|
|
527
524
|
):
|
|
528
525
|
ignore_channels.add(ch.name)
|
|
529
526
|
# Rule for shows
|
|
@@ -541,13 +538,13 @@ def _process_channels(
|
|
|
541
538
|
)
|
|
542
539
|
inserted_channel_names.add(ch.name)
|
|
543
540
|
|
|
544
|
-
for name in
|
|
541
|
+
for name in DEFAULT_CHANNELS:
|
|
545
542
|
if name not in ignore_channels and name not in inserted_channel_names:
|
|
546
543
|
channels.append(
|
|
547
544
|
{
|
|
548
545
|
"name": name,
|
|
549
546
|
"category_group": "",
|
|
550
|
-
"start_date": int(datetime.datetime
|
|
547
|
+
"start_date": int(datetime.datetime(2020, 1, 1).timestamp()),
|
|
551
548
|
}
|
|
552
549
|
)
|
|
553
550
|
|
|
@@ -24,7 +24,7 @@ _sym_db = _symbol_database.Default()
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x66\x65\x61tures.proto\x12\x1ahaystack_ml_stack.features\"7\n\x12\x45ntryContextCounts\x12\x10\n\x08\x61ttempts\x18\x01 \x01(\x05\x12\x0f\n\x07watched\x18\x02 \x01(\x05\"_\n\x0cSelectCounts\x12\x15\n\rtotal_selects\x18\x01 \x01(\x05\x12!\n\x19total_selects_and_watched\x18\x02 \x01(\x05\x12\x15\n\rtotal_browsed\x18\x03 \x01(\x05\"\xf3\x02\n\x14\x45ntryContextPWatched\x12@\n\x08\x61utoplay\x18\x01 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12\x41\n\tsel_thumb\x18\x02 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12\x43\n\x0b\x63hoose_next\x18\x03 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12@\n\x08\x63h_swtch\x18\x04 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12O\n\x17launch_first_in_session\x18\x05 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\"\x85\x02\n\x0fPositionPSelect\x12;\n\tfirst_pos\x18\x01 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12<\n\nsecond_pos\x18\x02 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12;\n\tthird_pos\x18\x03 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12:\n\x08rest_pos\x18\x04 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\"\xa9\x01\n\x1f\x42rowsedDebiasedPositionPSelects\x12\x44\n\x0fup_to_4_browsed\x18\x01 \x01(\x0b\x32+.haystack_ml_stack.features.PositionPSelect\x12@\n\x0b\x61ll_browsed\x18\x02 \x01(\x0b\x32+.haystack_ml_stack.features.PositionPSelect\"\xb8\x01\n\x16PlaylistStatsForGlobal\x12\x15\n\rwatched_count\x18\x01 \x01(\x05\x12\x19\n\x11not_watched_count\x18\x02 \x01(\x05\x12\x1b\n\x13\x63\x61pped_watched_secs\x18\x03 \x01(\x02\x12\x1f\n\x17\x63\x61pped_not_watched_secs\x18\x04 \x01(\x02\x12\x14\n\x0cwatched_secs\x18\x05 \x01(\x02\x12\x18\n\x10not_watched_secs\x18\x06 \x01(\x02\"\xc5\x01\n\x14PlaylistStatsForUser\x12\x12\n\ntotal_days\x18\x01 \x01(\x05\x12\x12\n\nstart_days\x18\x02 \x01(\x05\x12\x13\n\x0b\x61\x63tive_days\x18\x03 \x01(\x05\x12\x15\n\rtotal_watched\x18\x04 \x01(\x02\x12\x1c\n\x14\x63\x61pped_total_watched\x18\x05 \x01(\x02\x12 \n\x18\x63\x61pped_total_log_watched\x18\x06 \x01(\x02\x12\x19\n\x11\x66irst_active_date\x18\x07 \x01(\t\"
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x66\x65\x61tures.proto\x12\x1ahaystack_ml_stack.features\"7\n\x12\x45ntryContextCounts\x12\x10\n\x08\x61ttempts\x18\x01 \x01(\x05\x12\x0f\n\x07watched\x18\x02 \x01(\x05\"_\n\x0cSelectCounts\x12\x15\n\rtotal_selects\x18\x01 \x01(\x05\x12!\n\x19total_selects_and_watched\x18\x02 \x01(\x05\x12\x15\n\rtotal_browsed\x18\x03 \x01(\x05\"\xf3\x02\n\x14\x45ntryContextPWatched\x12@\n\x08\x61utoplay\x18\x01 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12\x41\n\tsel_thumb\x18\x02 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12\x43\n\x0b\x63hoose_next\x18\x03 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12@\n\x08\x63h_swtch\x18\x04 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\x12O\n\x17launch_first_in_session\x18\x05 \x01(\x0b\x32..haystack_ml_stack.features.EntryContextCounts\"\x85\x02\n\x0fPositionPSelect\x12;\n\tfirst_pos\x18\x01 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12<\n\nsecond_pos\x18\x02 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12;\n\tthird_pos\x18\x03 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\x12:\n\x08rest_pos\x18\x04 \x01(\x0b\x32(.haystack_ml_stack.features.SelectCounts\"\xa9\x01\n\x1f\x42rowsedDebiasedPositionPSelects\x12\x44\n\x0fup_to_4_browsed\x18\x01 \x01(\x0b\x32+.haystack_ml_stack.features.PositionPSelect\x12@\n\x0b\x61ll_browsed\x18\x02 \x01(\x0b\x32+.haystack_ml_stack.features.PositionPSelect\"\xb8\x01\n\x16PlaylistStatsForGlobal\x12\x15\n\rwatched_count\x18\x01 \x01(\x05\x12\x19\n\x11not_watched_count\x18\x02 \x01(\x05\x12\x1b\n\x13\x63\x61pped_watched_secs\x18\x03 \x01(\x02\x12\x1f\n\x17\x63\x61pped_not_watched_secs\x18\x04 \x01(\x02\x12\x14\n\x0cwatched_secs\x18\x05 \x01(\x02\x12\x18\n\x10not_watched_secs\x18\x06 \x01(\x02\"\xc5\x01\n\x14PlaylistStatsForUser\x12\x12\n\ntotal_days\x18\x01 \x01(\x05\x12\x12\n\nstart_days\x18\x02 \x01(\x05\x12\x13\n\x0b\x61\x63tive_days\x18\x03 \x01(\x05\x12\x15\n\rtotal_watched\x18\x04 \x01(\x02\x12\x1c\n\x14\x63\x61pped_total_watched\x18\x05 \x01(\x02\x12 \n\x18\x63\x61pped_total_log_watched\x18\x06 \x01(\x02\x12\x19\n\x11\x66irst_active_date\x18\x07 \x01(\t\"^\n\x07\x43hannel\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\x0e\x63\x61tegory_group\x18\x02 \x01(\t\x12\x12\n\nstart_date\x18\x03 \x01(\x05\x12\x19\n\x11required_features\x18\x04 \x03(\t\"k\n\rStreamPSelect\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12I\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32;.haystack_ml_stack.features.BrowsedDebiasedPositionPSelects\"a\n\x0eStreamPWatched\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12>\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x30.haystack_ml_stack.features.EntryContextPWatched\"_\n\x0cUserPWatched\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12>\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x30.haystack_ml_stack.features.EntryContextPWatched\"\xda\x01\n\x19UserPersonalizingPWatched\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12M\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32?.haystack_ml_stack.features.UserPersonalizingPWatched.DataEntry\x1a]\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x05value\x18\x02 \x01(\x0b\x32\x30.haystack_ml_stack.features.EntryContextPWatched:\x02\x38\x01\"i\n\x0bUserPSelect\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12I\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32;.haystack_ml_stack.features.BrowsedDebiasedPositionPSelects\"\xe3\x01\n\x18UserPersonalizingPSelect\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12L\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32>.haystack_ml_stack.features.UserPersonalizingPSelect.DataEntry\x1ah\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12J\n\x05value\x18\x02 \x01(\x0b\x32;.haystack_ml_stack.features.BrowsedDebiasedPositionPSelects:\x02\x38\x01\"\xa2\x01\n\x16StreamSimilarityScores\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12J\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32<.haystack_ml_stack.features.StreamSimilarityScores.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\"\xd0\x01\n\x13GlobalPlaylistStats\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12G\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x39.haystack_ml_stack.features.GlobalPlaylistStats.DataEntry\x1a_\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x41\n\x05value\x18\x02 \x01(\x0b\x32\x32.haystack_ml_stack.features.PlaylistStatsForGlobal:\x02\x38\x01\"\xca\x01\n\x11UserPlaylistStats\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x45\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x37.haystack_ml_stack.features.UserPlaylistStats.DataEntry\x1a]\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x05value\x18\x02 \x01(\x0b\x32\x30.haystack_ml_stack.features.PlaylistStatsForUser:\x02\x38\x01\"T\n\x0eGlobalChannels\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x31\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32#.haystack_ml_stack.features.Channelb\x06proto3')
|
|
28
28
|
|
|
29
29
|
_globals = globals()
|
|
30
30
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -56,35 +56,35 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
56
56
|
_globals['_PLAYLISTSTATSFORUSER']._serialized_start=1198
|
|
57
57
|
_globals['_PLAYLISTSTATSFORUSER']._serialized_end=1395
|
|
58
58
|
_globals['_CHANNEL']._serialized_start=1397
|
|
59
|
-
_globals['_CHANNEL']._serialized_end=
|
|
60
|
-
_globals['_STREAMPSELECT']._serialized_start=
|
|
61
|
-
_globals['_STREAMPSELECT']._serialized_end=
|
|
62
|
-
_globals['_STREAMPWATCHED']._serialized_start=
|
|
63
|
-
_globals['_STREAMPWATCHED']._serialized_end=
|
|
64
|
-
_globals['_USERPWATCHED']._serialized_start=
|
|
65
|
-
_globals['_USERPWATCHED']._serialized_end=
|
|
66
|
-
_globals['_USERPERSONALIZINGPWATCHED']._serialized_start=
|
|
67
|
-
_globals['_USERPERSONALIZINGPWATCHED']._serialized_end=
|
|
68
|
-
_globals['_USERPERSONALIZINGPWATCHED_DATAENTRY']._serialized_start=
|
|
69
|
-
_globals['_USERPERSONALIZINGPWATCHED_DATAENTRY']._serialized_end=
|
|
70
|
-
_globals['_USERPSELECT']._serialized_start=
|
|
71
|
-
_globals['_USERPSELECT']._serialized_end=
|
|
72
|
-
_globals['_USERPERSONALIZINGPSELECT']._serialized_start=
|
|
73
|
-
_globals['_USERPERSONALIZINGPSELECT']._serialized_end=
|
|
74
|
-
_globals['_USERPERSONALIZINGPSELECT_DATAENTRY']._serialized_start=
|
|
75
|
-
_globals['_USERPERSONALIZINGPSELECT_DATAENTRY']._serialized_end=
|
|
76
|
-
_globals['_STREAMSIMILARITYSCORES']._serialized_start=
|
|
77
|
-
_globals['_STREAMSIMILARITYSCORES']._serialized_end=
|
|
78
|
-
_globals['_STREAMSIMILARITYSCORES_DATAENTRY']._serialized_start=
|
|
79
|
-
_globals['_STREAMSIMILARITYSCORES_DATAENTRY']._serialized_end=
|
|
80
|
-
_globals['_GLOBALPLAYLISTSTATS']._serialized_start=
|
|
81
|
-
_globals['_GLOBALPLAYLISTSTATS']._serialized_end=
|
|
82
|
-
_globals['_GLOBALPLAYLISTSTATS_DATAENTRY']._serialized_start=
|
|
83
|
-
_globals['_GLOBALPLAYLISTSTATS_DATAENTRY']._serialized_end=
|
|
84
|
-
_globals['_USERPLAYLISTSTATS']._serialized_start=
|
|
85
|
-
_globals['_USERPLAYLISTSTATS']._serialized_end=
|
|
86
|
-
_globals['_USERPLAYLISTSTATS_DATAENTRY']._serialized_start=
|
|
87
|
-
_globals['_USERPLAYLISTSTATS_DATAENTRY']._serialized_end=
|
|
88
|
-
_globals['_GLOBALCHANNELS']._serialized_start=
|
|
89
|
-
_globals['_GLOBALCHANNELS']._serialized_end=
|
|
59
|
+
_globals['_CHANNEL']._serialized_end=1491
|
|
60
|
+
_globals['_STREAMPSELECT']._serialized_start=1493
|
|
61
|
+
_globals['_STREAMPSELECT']._serialized_end=1600
|
|
62
|
+
_globals['_STREAMPWATCHED']._serialized_start=1602
|
|
63
|
+
_globals['_STREAMPWATCHED']._serialized_end=1699
|
|
64
|
+
_globals['_USERPWATCHED']._serialized_start=1701
|
|
65
|
+
_globals['_USERPWATCHED']._serialized_end=1796
|
|
66
|
+
_globals['_USERPERSONALIZINGPWATCHED']._serialized_start=1799
|
|
67
|
+
_globals['_USERPERSONALIZINGPWATCHED']._serialized_end=2017
|
|
68
|
+
_globals['_USERPERSONALIZINGPWATCHED_DATAENTRY']._serialized_start=1924
|
|
69
|
+
_globals['_USERPERSONALIZINGPWATCHED_DATAENTRY']._serialized_end=2017
|
|
70
|
+
_globals['_USERPSELECT']._serialized_start=2019
|
|
71
|
+
_globals['_USERPSELECT']._serialized_end=2124
|
|
72
|
+
_globals['_USERPERSONALIZINGPSELECT']._serialized_start=2127
|
|
73
|
+
_globals['_USERPERSONALIZINGPSELECT']._serialized_end=2354
|
|
74
|
+
_globals['_USERPERSONALIZINGPSELECT_DATAENTRY']._serialized_start=2250
|
|
75
|
+
_globals['_USERPERSONALIZINGPSELECT_DATAENTRY']._serialized_end=2354
|
|
76
|
+
_globals['_STREAMSIMILARITYSCORES']._serialized_start=2357
|
|
77
|
+
_globals['_STREAMSIMILARITYSCORES']._serialized_end=2519
|
|
78
|
+
_globals['_STREAMSIMILARITYSCORES_DATAENTRY']._serialized_start=2476
|
|
79
|
+
_globals['_STREAMSIMILARITYSCORES_DATAENTRY']._serialized_end=2519
|
|
80
|
+
_globals['_GLOBALPLAYLISTSTATS']._serialized_start=2522
|
|
81
|
+
_globals['_GLOBALPLAYLISTSTATS']._serialized_end=2730
|
|
82
|
+
_globals['_GLOBALPLAYLISTSTATS_DATAENTRY']._serialized_start=2635
|
|
83
|
+
_globals['_GLOBALPLAYLISTSTATS_DATAENTRY']._serialized_end=2730
|
|
84
|
+
_globals['_USERPLAYLISTSTATS']._serialized_start=2733
|
|
85
|
+
_globals['_USERPLAYLISTSTATS']._serialized_end=2935
|
|
86
|
+
_globals['_USERPLAYLISTSTATS_DATAENTRY']._serialized_start=2842
|
|
87
|
+
_globals['_USERPLAYLISTSTATS_DATAENTRY']._serialized_end=2935
|
|
88
|
+
_globals['_GLOBALCHANNELS']._serialized_start=2937
|
|
89
|
+
_globals['_GLOBALCHANNELS']._serialized_end=3021
|
|
90
90
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -97,10 +97,12 @@ class Channel(_message.Message):
|
|
|
97
97
|
NAME_FIELD_NUMBER: _ClassVar[int]
|
|
98
98
|
CATEGORY_GROUP_FIELD_NUMBER: _ClassVar[int]
|
|
99
99
|
START_DATE_FIELD_NUMBER: _ClassVar[int]
|
|
100
|
+
REQUIRED_FEATURES_FIELD_NUMBER: _ClassVar[int]
|
|
100
101
|
name: str
|
|
101
102
|
category_group: str
|
|
102
103
|
start_date: int
|
|
103
|
-
|
|
104
|
+
required_features: _containers.RepeatedScalarFieldContainer[str]
|
|
105
|
+
def __init__(self, name: _Optional[str] = ..., category_group: _Optional[str] = ..., start_date: _Optional[int] = ..., required_features: _Optional[_Iterable[str]] = ...) -> None: ...
|
|
104
106
|
|
|
105
107
|
class StreamPSelect(_message.Message):
|
|
106
108
|
__slots__ = ()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import base64
|
|
3
|
+
|
|
4
|
+
b64 = """
|
|
5
|
+
CAESHAoEa3VzYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa25vZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2Z0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94NWF0bGFudGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0bHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBndjdmJ0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RpdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3BzZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa2d3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z2VtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdnVlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y21oEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraWlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHhsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aWZyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrb2NvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYnR4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnJjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmlyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCgpuZXdzbmF0aW9uEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmNuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxjYnNtaW5uZXNvdGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEikKEWZveDU5aW5kaWFuYXBvbGlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2xwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c2ZhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCgljYnNkZW52ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBTEzYWJjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrb2F0dHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2NiY21hbml0b2JhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYW1yEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bGF4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRra2NvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y2F4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRra3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZW5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdG52Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cmVnEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrc2J3dHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDXRoZW5ld3NjZW50ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKCG5iY3RvZGF5EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZWh0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIbCgN3b2kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdmeHQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhbmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttdnQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmZveDdhdXN0aW4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKCW5ld3NtYXh0dhIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2J0dxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIQoJY2JzYm9zdG9uEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbGZ5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZmFhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYXJkEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eHl6Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrb2xvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHNtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXZ5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZ3VuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZxEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgd0aGVoaWxsEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZGJqEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eGlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cHhpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c3ltEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eG1pEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXZlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXRlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIpChFmb3gyMW5ld3Njb2xvcmFkbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JleBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2F0YxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJwoPZm94MTFsb3NhbmdlbGVzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c29jEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3emR4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc253Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCgx5YWhvb2ZpbmFuY2USEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjYmQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KA2NubhIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RyaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BueBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSLwoUZGV1dHNjaGV3ZWxsZWVuZ2xpc2gSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdueXcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDWNic3NhY3JhbWVudG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwcmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtud2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhYmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHduZHUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBjFjYnNsYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2dtYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JxZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3BpeBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JlbRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R2bRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2dhbBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hzdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2JuZxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3FhZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHQoFbmJjMTUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNiY3Rvcm9udG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt2dnUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB2FiY25ld3MSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0aWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0dnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd4aXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpcm8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKBXZldWVyEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3cm9jEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2J0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIgCghhemZhbWlseRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDd3dsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGJmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCglibG9vbWJlcmcSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdibnMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0a3ISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttYmMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt0dXUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiYKDmZveDRrYW5zYXNjaXR5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2F5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIqChJoYXlzdGFja192YW5jb3V2ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdka3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEioKD2Fzc29jaWF0ZWRwcmVzcxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHgoGa25vcHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YmtvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eGlhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aXNuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGFlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXB0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZmb3g1ZGMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCGZveDhuZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3amNsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aHRtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZWF1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrZnlydHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdib2MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdrcmcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkc3USDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdvd2sSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0b2wSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtianISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjcmcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKCG5ld3N5aHViEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrc250Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCgpsaXZlbm93Zm94EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmVwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCgZncmF5ZGMSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBGt5dHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd1c2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtvYWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkaG4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt0dmISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdpc3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bG94Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgdjYmNuZXdzEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrZ3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cHZpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3b3d0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIdCgVraG9uMhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2VybxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZveBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHQoFa2N0djUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtzdHASDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtnbnMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBm5ld3MxMhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2ZvchIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDbmNtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxjYnNiYWx0aW1vcmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdyZGUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDVzYW5kaWVnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2FsYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2l0bhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RhYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa21naBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHgoGd210d3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgpjYnNjaGljYWdvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dG9rEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3amJmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y3BvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGFzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCgxyZXV0ZXJzdmlkZW8SEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHduZW0SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtyb24SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhoKDGNubi9hbWFucG91chIEc2hvdxiAwq/wBRIcCgR3ZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGJxEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZhYmM3bnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdnbnR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZmRhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRuYmM2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y2piEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHdvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIjCghldXJvbmV3cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3N5chIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NhdRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94MmRldHJvaXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdvb2QSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjY2kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNic2RldHJvaXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpdmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdobzEzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGFqEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZXljEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR0bWo0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z2hwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCg1jYnNwaXR0c2J1cmdoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc3dvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRramN0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIjCgtuYmNzYW5kaWVnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLbmJjbmVicmFza2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2NiY2VkbW9udG9uEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZGFtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z3J6Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCg1mb3g2bWlsd2F1a2VlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZmZmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWJiEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmVjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bG5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdGFsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbnh2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRranJoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCg9jYnNzYW5mcmFuY2lzY28SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtZ3QSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2ZveGNhcm9saW5hEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIfCgdmb3gxMHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrcmlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrcHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZXNoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraW5nEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dnRtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eHh2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWFyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2Z5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWJkEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIgCghjYnNtaWFtaRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoIcG9saXRpY3MSCmhzX2NoYW5uZWwYxIba8AUSHAoEa2FsYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJAoMZm94MzVvcmxhbmRvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHhsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCglhYmNuZXdzMjQSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsa3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjYmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpZHkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtlbG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEicKD3dlc3Rlcm5tYXNzbmV3cxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3R2eBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJAoMY2JzNnBvcnRsYW5kEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmN0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZ3aXZidHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNiY2NhbGdhcnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtldm4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGFiYzcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtsdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdpbHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzcGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdoaW8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtYmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsZXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt3cWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdnYmESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDMyY2hpY2FnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIgoKY2JzbmV3eW9yaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2p6eRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3VschIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa3NsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGVuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZnRzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmx0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZm1iEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYXJrEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnJlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgdjb3VydHR2EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3YmFsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRImChJ3aWxkZmlyZS1uZXdzLTIwMjYSCmhzX2NoYW5uZWwYmJTP0wYSHAoEd3BiZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3JibBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2FpdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3htYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hudBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3NlZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3NtdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3hhbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R0bhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZzYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIQoGY25ldHR2EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIdCgV3bWN0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa29iEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3a3l0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRreGlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2xhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGhyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bHd0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZnZzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dnVlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dm5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdGxhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aWJ3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrd2NoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIrChBhbGphemVlcmFlbmdsaXNoEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIjCgthYmM3Y2hpY2FnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94MzFkZW52ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsdHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhZmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwbXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdiaXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0dmQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0cmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGthcmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtmc24SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjaWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtdXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXoSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKCW55cHNwb3J0cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSJgoObmV3czJuYXNodmlsbGUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtmZHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBmtldHZ0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKQoRZm94MjlwaGlsYWRlbHBoaWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBmNic2RmdxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NlbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIAoIZm94NG5ld3MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjbmMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtzdHUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt4eHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdiYXkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttaWQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKEGlyYW4tY3Jpc2lzLW5ld3MSCmhzX2NoYW5uZWwY6LuLzQYSHAoEa3NkaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZydhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hlYxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2pldBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2JtdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2hicxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2ZzbRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3R0YxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJwoPZm94OW1pbm5lYXBvbGlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3enptEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxmb3gxMHBob2VuaXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkaW8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDI2aG91c3RvbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3d0eBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLY2JjbW9udHJlYWwSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdyaWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtobmwSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdib3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCGFiYzduZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cmR3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bGJ0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgpxMTNzZWF0dGxlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIdCgVjYnM0NhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoIYW1hemVsYWISEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwdHoSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDWZveDEzdGFtcGFiYXkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB25iY25ld3MSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0b2MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhsKA2tocRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2dldBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RodhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd21hehIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3l0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa21vdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZteRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIgoHaTI0bmV3cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2VjdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2p0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3FyZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3lsZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKAoQY2hhbm5lbDhsYXN2ZWdhcxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3dueRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BheBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2RlZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKgoPZnJhbmNlMjRlbmdsaXNoEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2hiEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIbCgN3c2ISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdmbGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB2NoZWRkYXISEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEiEKBmJ1eno2MBIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2JiaBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BsYxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3NieRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3lmZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3dzYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJQoKZm94d2VhdGhlchIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NiZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJgoOdmFsbGV5bmV3c2xpdmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjcmESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCDEwMTFuZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZ1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc25mEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bHVjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3b2lvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIoChBjYnNwaGlsYWRlbHBoaWExEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraG91Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbmR1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCg1pbnRlcm5hdGlvbmFsEgpoc19jaGFubmVsGOzSs/AFEi4KDWRvY3VtZW50YXJpZXMSCmhzX2NoYW5uZWwYovTQ0QYiC3ByZXZpZXdHYXRlEh4KCnlvdXItbW9uZXkSCmhzX2NoYW5uZWwYid3H0wY=
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
data = base64.b64decode(b64.strip().replace(' ', '').replace('\n', ''))
|
|
9
|
+
print(f"Binary size: {len(data)} bytes")
|
|
10
|
+
|
|
11
|
+
# --- 0.4.10 ---
|
|
12
|
+
sys.path.insert(0, '/Users/admin/miniconda3/envs/py311/lib/python3.11/site-packages')
|
|
13
|
+
from haystack_ml_stack.generated.v1 import features_pb2 as pb2_v10
|
|
14
|
+
|
|
15
|
+
msg10 = pb2_v10.GlobalChannels()
|
|
16
|
+
msg10.ParseFromString(data)
|
|
17
|
+
|
|
18
|
+
empty10 = [c.name for c in msg10.data if not c.category_group]
|
|
19
|
+
print(f"\n=== 0.4.10 ===")
|
|
20
|
+
print(f"version={msg10.version}, channels={len(msg10.data)}")
|
|
21
|
+
print(f"Empty category_group: {len(empty10)}")
|
|
22
|
+
if empty10:
|
|
23
|
+
print(f" {empty10}")
|
|
24
|
+
for c in msg10.data:
|
|
25
|
+
if c.category_group == 'hs_channel':
|
|
26
|
+
print(f" [hs] {c.name:<30} start_date={c.start_date} required_features={list(c.required_features)}")
|
|
27
|
+
|
|
28
|
+
print([c for c in msg10.data if c.name in ('wbns', 'wdsu', 'kcau', 'weau', 'kndu', 'ktuu')])
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# decode_v49_only.py — run with: /tmp/hms_v49_env/bin/python3 decode_v49_only.py
|
|
2
|
+
import sys
|
|
3
|
+
import base64
|
|
4
|
+
|
|
5
|
+
# No 0.4.10 path here at all
|
|
6
|
+
b64 = """
|
|
7
|
+
CAESHAoEa3VzYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa25vZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2Z0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94NWF0bGFudGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0bHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBndjdmJ0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RpdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3BzZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa2d3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z2VtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdnVlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y21oEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraWlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHhsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aWZyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrb2NvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYnR4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnJjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmlyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCgpuZXdzbmF0aW9uEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmNuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxjYnNtaW5uZXNvdGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEikKEWZveDU5aW5kaWFuYXBvbGlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2xwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c2ZhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCgljYnNkZW52ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBTEzYWJjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrb2F0dHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2NiY21hbml0b2JhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYW1yEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bGF4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRra2NvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y2F4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRra3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZW5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdG52Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cmVnEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrc2J3dHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDXRoZW5ld3NjZW50ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKCG5iY3RvZGF5EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZWh0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIbCgN3b2kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdmeHQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhbmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttdnQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmZveDdhdXN0aW4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKCW5ld3NtYXh0dhIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2J0dxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIQoJY2JzYm9zdG9uEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbGZ5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZmFhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYXJkEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eHl6Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrb2xvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHNtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXZ5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZ3VuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZxEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgd0aGVoaWxsEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZGJqEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eGlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cHhpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c3ltEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eG1pEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXZlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXRlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIpChFmb3gyMW5ld3Njb2xvcmFkbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JleBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2F0YxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJwoPZm94MTFsb3NhbmdlbGVzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3c29jEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3emR4Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc253Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCgx5YWhvb2ZpbmFuY2USEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjYmQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KA2NubhIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RyaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BueBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSLwoUZGV1dHNjaGV3ZWxsZWVuZ2xpc2gSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdueXcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDWNic3NhY3JhbWVudG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwcmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtud2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhYmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHduZHUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBjFjYnNsYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2dtYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JxZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3BpeBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3JlbRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R2bRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2dhbBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hzdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2JuZxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3FhZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHQoFbmJjMTUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNiY3Rvcm9udG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt2dnUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB2FiY25ld3MSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0aWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0dnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd4aXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpcm8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKBXZldWVyEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3cm9jEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2J0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIgCghhemZhbWlseRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDd3dsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGJmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCglibG9vbWJlcmcSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdibnMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0a3ISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttYmMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt0dXUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiYKDmZveDRrYW5zYXNjaXR5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3d2F5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIqChJoYXlzdGFja192YW5jb3V2ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdka3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEioKD2Fzc29jaWF0ZWRwcmVzcxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHgoGa25vcHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YmtvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eGlhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aXNuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGFlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YXB0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZmb3g1ZGMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCGZveDhuZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3amNsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aHRtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZWF1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZrZnlydHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdib2MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdrcmcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkc3USDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdvd2sSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0b2wSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtianISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjcmcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKCG5ld3N5aHViEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrc250Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCgpsaXZlbm93Zm94EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmVwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCgZncmF5ZGMSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBGt5dHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd1c2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtvYWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkaG4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt0dmISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdpc3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bG94Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgdjYmNuZXdzEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrZ3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cHZpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3b3d0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIdCgVraG9uMhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2VybxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZveBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHQoFa2N0djUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtzdHASDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtnbnMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBm5ld3MxMhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2ZvchIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDbmNtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxjYnNiYWx0aW1vcmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdyZGUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDVzYW5kaWVnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2FsYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2l0bhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RhYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa21naBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHgoGd210d3R2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgpjYnNjaGljYWdvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dG9rEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3amJmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y3BvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGFzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCgxyZXV0ZXJzdmlkZW8SEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHduZW0SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtyb24SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhoKDGNubi9hbWFucG91chIEc2hvdxiAwq/wBRIcCgR3ZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aGJxEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZhYmM3bnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdnbnR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZmRhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRuYmM2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Y2piEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHdvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIjCghldXJvbmV3cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3N5chIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NhdRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94MmRldHJvaXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdvb2QSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjY2kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNic2RldHJvaXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpdmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh0KBXdobzEzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGFqEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZXljEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR0bWo0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z2hwEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCg1jYnNwaXR0c2J1cmdoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc3dvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRramN0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIjCgtuYmNzYW5kaWVnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLbmJjbmVicmFza2ESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2NiY2VkbW9udG9uEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZGFtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3Z3J6Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIlCg1mb3g2bWlsd2F1a2VlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZmZmEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWJiEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmVjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bG5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdGFsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbnh2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRranJoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRInCg9jYnNzYW5mcmFuY2lzY28SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtZ3QSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiMKC2ZveGNhcm9saW5hEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIfCgdmb3gxMHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrcmlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrcHR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZXNoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraW5nEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dnRtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3eHh2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWFyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2Z5Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bWJkEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIgCghjYnNtaWFtaRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoIcG9saXRpY3MSCmhzX2NoYW5uZWwYxIba8AUSHAoEa2FsYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJAoMZm94MzVvcmxhbmRvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHhsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCglhYmNuZXdzMjQSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsa3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjYmkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtpZHkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtlbG8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEicKD3dlc3Rlcm5tYXNzbmV3cxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3R2eBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJAoMY2JzNnBvcnRsYW5kEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bmN0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIeCgZ3aXZidHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKCmNiY2NhbGdhcnkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtldm4SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGFiYzcSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtsdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdpbHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzcGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdoaW8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtYmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsZXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt3cWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdnYmESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDMyY2hpY2FnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIgoKY2JzbmV3eW9yaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2p6eRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3VschIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa3NsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGVuEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3ZnRzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZtEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dmx0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZm1iEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrYXJrEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnJlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgdjb3VydHR2EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgR3YmFsEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRImChJ3aWxkZmlyZS1uZXdzLTIwMjYSCmhzX2NoYW5uZWwYmJTP0wYSHAoEd3BiZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3JibBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2FpdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3htYRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hudBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3NlZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3NtdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3hhbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R0bhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZzYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIQoGY25ldHR2EhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIdCgV3bWN0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSGwoDa29iEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3a3l0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dHZyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRreGlpEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2xhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dGhyEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bHd0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3YnR2Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrZnZzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dnVlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3dm5zEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdGxhEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3aWJ3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrd2NoEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIrChBhbGphemVlcmFlbmdsaXNoEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIjCgthYmM3Y2hpY2FnbxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLZm94MzFkZW52ZXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdsdHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdhZmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwbXQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdiaXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0dmQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0cmYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGthcmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtmc24SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjaWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwdHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdtdXISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdzYXoSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKCW55cHNwb3J0cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSJgoObmV3czJuYXNodmlsbGUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtmZHgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBmtldHZ0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKQoRZm94MjlwaGlsYWRlbHBoaWESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEh4KBmNic2RmdxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NlbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIAoIZm94NG5ld3MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdjbmMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtzdHUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGt4eHYSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdiYXkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGttaWQSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKEGlyYW4tY3Jpc2lzLW5ld3MSCmhzX2NoYW5uZWwY6LuLzQYSHAoEa3NkaxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZydhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2hlYxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2pldBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2JtdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2hicxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2ZzbRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3R0YxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJwoPZm94OW1pbm5lYXBvbGlzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3enptEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIkCgxmb3gxMHBob2VuaXgSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdkaW8SDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiQKDGZveDI2aG91c3RvbhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3d0eBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoLY2JjbW9udHJlYWwSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdyaWMSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtobmwSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdib3kSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCGFiYzduZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3cmR3Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bGJ0Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIiCgpxMTNzZWF0dGxlEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIdCgVjYnM0NhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIwoIYW1hemVsYWISEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHdwdHoSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiUKDWZveDEzdGFtcGFiYXkSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB25iY25ld3MSEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEhwKBHd0b2MSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhsKA2tocRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2dldBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3RodhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd21hehIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3l0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa21vdhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2ZteRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSIgoHaTI0bmV3cxIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2VjdBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2p0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3FyZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3lsZRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKAoQY2hhbm5lbDhsYXN2ZWdhcxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3dueRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BheBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2RlZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSKgoPZnJhbmNlMjRlbmdsaXNoEhFuYXRpb25hbF9mYXZvcml0ZRiAwq/wBRIcCgRrc2hiEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIbCgN3c2ISDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBHdmbGESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiIKB2NoZWRkYXISEW5hdGlvbmFsX2Zhdm9yaXRlGIDCr/AFEiEKBmJ1eno2MBIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2JiaBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3BsYxIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEa3NieRIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd2R0dhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3lmZhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSHAoEd3dzYhIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJQoKZm94d2VhdGhlchIRbmF0aW9uYWxfZmF2b3JpdGUYgMKv8AUSHAoEa2NiZBIObG9jYWxfZmF2b3JpdGUYgMKv8AUSJgoOdmFsbGV5bmV3c2xpdmUSDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEhwKBGtjcmESDmxvY2FsX2Zhdm9yaXRlGIDCr/AFEiAKCDEwMTFuZXdzEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrdHZ1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrc25mEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3bHVjEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgR3b2lvEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIoChBjYnNwaGlsYWRlbHBoaWExEg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRraG91Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIcCgRrbmR1Eg5sb2NhbF9mYXZvcml0ZRiAwq/wBRIhCg1pbnRlcm5hdGlvbmFsEgpoc19jaGFubmVsGOzSs/AFEi4KDWRvY3VtZW50YXJpZXMSCmhzX2NoYW5uZWwYovTQ0QYiC3ByZXZpZXdHYXRlEh4KCnlvdXItbW9uZXkSCmhzX2NoYW5uZWwYid3H0wY=
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
s = b64.strip().replace(' ', '').replace('\n', '')
|
|
11
|
+
data = base64.b64decode(s + '=' * (-len(s) % 4))
|
|
12
|
+
|
|
13
|
+
# -len(s) % 4 computes exactly how many = characters are needed (0, 1, or 2), so it handles any input correctly.
|
|
14
|
+
#data = base64.b64decode(b64.strip().replace(' ', '').replace('\n', ''))
|
|
15
|
+
|
|
16
|
+
from haystack_ml_stack.generated.v1 import features_pb2 as pb2
|
|
17
|
+
|
|
18
|
+
msg = pb2.GlobalChannels()
|
|
19
|
+
msg.ParseFromString(data)
|
|
20
|
+
|
|
21
|
+
empty = [c.name for c in msg.data if not c.category_group]
|
|
22
|
+
print(f"version={msg.version}, channels={len(msg.data)}")
|
|
23
|
+
print(f"Empty category_group: {len(empty)}")
|
|
24
|
+
if empty:
|
|
25
|
+
print(f" {empty}")
|
|
26
|
+
for c in msg.data:
|
|
27
|
+
if c.category_group == 'hs_channel':
|
|
28
|
+
print(f" [hs] {c.name:<30} start_date={c.start_date} required_features={list(c.required_features)}")
|
{haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/SOURCES.txt
RENAMED
|
@@ -10,6 +10,8 @@ src/haystack_ml_stack/dynamo.py
|
|
|
10
10
|
src/haystack_ml_stack/exceptions.py
|
|
11
11
|
src/haystack_ml_stack/model_store.py
|
|
12
12
|
src/haystack_ml_stack/settings.py
|
|
13
|
+
src/haystack_ml_stack/tmp.py
|
|
14
|
+
src/haystack_ml_stack/tmp2.py
|
|
13
15
|
src/haystack_ml_stack/utils.py
|
|
14
16
|
src/haystack_ml_stack.egg-info/PKG-INFO
|
|
15
17
|
src/haystack_ml_stack.egg-info/SOURCES.txt
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.4.9"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/__init__.py
RENAMED
|
File without changes
|
{haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack/generated/v1/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/requires.txt
RENAMED
|
File without changes
|
{haystack_ml_stack-0.4.9 → haystack_ml_stack-0.4.11}/src/haystack_ml_stack.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|