s3arch 0.1.3 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86ab9ff26fb027515006bee668f41d7d5f264fc301110d57f6ac4d365b426588
4
- data.tar.gz: bb2a513c4f7252620668c7292357d0e314a60d9efae70738c5ffd127f386d4b2
3
+ metadata.gz: 8c46893f02a5588325d730a0dbd3dfd7944a269ae03f398ca1ca9b0ebac13773
4
+ data.tar.gz: f2758f7ceb14bf54762c0f889d881a2f0e1edd4efa53ca143d31b1ba0bc6ea6d
5
5
  SHA512:
6
- metadata.gz: 6def4b186fc609041e90c7246d1a9fb0453aeb01ae7c880040d9c8154a94eb514505adeab291191094c8e5e755e9fb753ccf699dd04cabccc672b0c7f74ad4cc
7
- data.tar.gz: d1e054232f1d30443340ddd06f2a264458166b030a69b823327f82a61025f4065c000fadba2bbfc82d45949ee69b00e25d5be350d12a09309e4efab133d49503
6
+ metadata.gz: 8dc8da0493198ceb3248fe17e3a4f13ed82f0bc2459598fb0798a30334307df5597413b07e4f6007a3ea25a6cdd866bd796571e712a3801d8618f2b0d2f1db89
7
+ data.tar.gz: 5c32d8cea5c684d5471411865de486462d313f222aece96f69cc1863111bfab3d7a001d22714272d734b154e61c6a897cff3a51e9eee9a3658ed42735b48c3ee
data/README.md CHANGED
@@ -93,26 +93,18 @@ indexer.rebuild("user-123")
93
93
 
94
94
  ## Infrastructure
95
95
 
96
- A Terraform module is provided at [`terraform/`](./terraform/) that provisions:
96
+ S3arch infrastructure is defined using [Belt](https://github.com/stowzilla/belt) and [Conveyor Belt](https://github.com/stowzilla/terraform-provider-conveyor-belt) conventions:
97
+
98
+ - **[`config/routes.rb`](./config/routes.rb)** — API Gateway routes for search and rebuild endpoints
99
+ - **[`config/contracts.rb`](./config/contracts.rb)** — Request/response schema contracts
100
+
101
+ When using S3arch with a Belt app, these files are automatically picked up by `belt deploy`. For standalone use, you'll need to provision:
97
102
 
98
103
  - S3 bucket for index storage (with 90-day lifecycle)
99
104
  - DynamoDB version tracking table (PAY_PER_REQUEST)
100
105
  - SQS queue + DLQ for the indexer
101
106
  - EventBridge Pipe (DynamoDB Stream → SQS)
102
107
 
103
- ```hcl
104
- module "s3arch" {
105
- source = "github.com/stowzilla/s3arch//terraform"
106
- app_name = "myapp"
107
- environment = "production"
108
- source_table_name = aws_dynamodb_table.items.name
109
- source_table_arn = aws_dynamodb_table.items.arn
110
- source_table_stream_arn = aws_dynamodb_table.items.stream_arn
111
- }
112
- ```
113
-
114
- Outputs include `indexer_env_vars`, `searcher_env_vars`, `indexer_permissions`, and `searcher_permissions` for easy Lambda configuration.
115
-
116
108
  ## Configuration Options
117
109
 
118
110
  | Option | Default | Description |
@@ -148,13 +140,13 @@ S3arch requires the `sqlite3` native extension at runtime. A Rake task is includ
148
140
  rake s3arch:layer:build
149
141
 
150
142
  # Build and publish in one step
151
- rake s3arch:layer:publish PROFILE=devzilla
143
+ rake s3arch:layer:publish PROFILE=your-profile
152
144
 
153
145
  # Customize the build
154
146
  rake s3arch:layer:build RUBY_VERSION=3.4 ARCHITECTURE=x86_64
155
147
 
156
148
  # Publish to a specific region/account
157
- rake s3arch:layer:publish PROFILE=production REGION=us-west-2 LAYER_NAME=stowzilla-sqlite3-ruby
149
+ rake s3arch:layer:publish PROFILE=production REGION=us-west-2 LAYER_NAME=my-sqlite3-ruby
158
150
  ```
159
151
 
160
152
  | Environment Variable | Default | Description |
@@ -164,7 +156,7 @@ rake s3arch:layer:publish PROFILE=production REGION=us-west-2 LAYER_NAME=stowzil
164
156
  | `OUTPUT` | `pkg/sqlite-layer.zip` | Output path for the zip |
165
157
  | `PROFILE` | (none) | AWS CLI profile for publishing |
166
158
  | `REGION` | `us-east-1` | AWS region to publish to |
167
- | `LAYER_NAME` | `stowzilla-sqlite3-ruby` | Layer name in AWS |
159
+ | `LAYER_NAME` | `sqlite3-ruby` | Layer name in AWS |
168
160
  | `S3ARCH_VERSION` | `~> current minor` | Version constraint for s3arch in the layer |
169
161
 
170
162
  Requires Docker to be running (uses the official AWS SAM build images).
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- TerraDispatch.schema.define do
3
+ Belt.application.schema.define do
4
4
  # S3arch does not define request/response models yet.
5
5
  # The search_indexes table is provisioned by s3arch's own Terraform module.
6
6
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- TerraDispatch.routes.draw do
3
+ Belt.application.routes.draw do
4
4
  namespace :s3arch, auth: :cognito, tables: [:search_indexes] do
5
5
  get '/', action: 'index'
6
6
  post '/rebuild', action: 'rebuild'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module S3arch
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.5'
5
5
  end
@@ -2,103 +2,134 @@
2
2
 
3
3
  require_relative '../s3arch/version'
4
4
 
5
+ module S3archLayerBuilder
6
+ module_function
7
+
8
+ def build_layer(ruby_version:, architecture:, output_file:, s3arch_version:)
9
+ require 'tmpdir'
10
+ require 'fileutils'
11
+
12
+ FileUtils.mkdir_p(File.dirname(output_file))
13
+
14
+ puts "🔨 Building Lambda layer (Ruby #{ruby_version} / #{architecture}, s3arch #{s3arch_version})..."
15
+
16
+ tmpdir = Dir.mktmpdir('s3arch-layer')
17
+ begin
18
+ write_gemfile(tmpdir, s3arch_version)
19
+ run_docker_build(tmpdir, ruby_version, architecture)
20
+ strip_layer("#{tmpdir}/layer")
21
+ verify_layer("#{tmpdir}/layer")
22
+ create_zip("#{tmpdir}/layer", output_file)
23
+ ensure
24
+ system('sudo', 'rm', '-rf', tmpdir) || FileUtils.rm_rf(tmpdir)
25
+ end
26
+ end
27
+
28
+ def write_gemfile(tmpdir, s3arch_version)
29
+ File.write("#{tmpdir}/Gemfile", <<~GEMFILE)
30
+ source 'https://rubygems.org'
31
+ gem 's3arch', '#{s3arch_version}'
32
+ GEMFILE
33
+ end
34
+
35
+ def run_docker_build(tmpdir, ruby_version, architecture)
36
+ docker_image = "public.ecr.aws/sam/build-ruby#{ruby_version}:latest-#{architecture}"
37
+ platform = architecture == 'x86_64' ? 'linux/amd64' : 'linux/arm64'
38
+
39
+ build_script = docker_build_script(ruby_version)
40
+
41
+ docker_cmd = [
42
+ 'docker', 'run', '--rm',
43
+ '--platform', platform,
44
+ '-v', "#{tmpdir}:/build",
45
+ '-w', '/build',
46
+ docker_image,
47
+ '/bin/bash', '-c', build_script
48
+ ]
49
+
50
+ puts "🐳 Building in Docker (#{docker_image})..."
51
+ abort '❌ Docker build failed' unless system(*docker_cmd)
52
+ end
53
+
54
+ def docker_build_script(ruby_version)
55
+ <<~BASH
56
+ yum install -y sqlite-devel 2>/dev/null || dnf install -y sqlite-devel 2>/dev/null
57
+ bundle config set --local path /build/layer/ruby/gems/#{ruby_version}.0
58
+ bundle config set --local without "development test"
59
+ bundle config set --local deployment false
60
+ bundle install
61
+ NESTED="/build/layer/ruby/gems/#{ruby_version}.0/ruby/#{ruby_version}.0"
62
+ if [ -d "$NESTED" ]; then
63
+ mkdir -p /build/layer-final/ruby/gems/#{ruby_version}.0
64
+ cp -a "$NESTED"/* /build/layer-final/ruby/gems/#{ruby_version}.0/
65
+ rm -rf /build/layer
66
+ mv /build/layer-final /build/layer
67
+ fi
68
+ BASH
69
+ end
70
+
71
+ def strip_layer(layer_dir)
72
+ puts '🧹 Stripping layer...'
73
+
74
+ Dir.glob("#{layer_dir}/ruby/gems/*/gems/*/").each do |gem_dir|
75
+ %w[spec test tests doc docs examples benchmarks].each do |fat_dir|
76
+ FileUtils.rm_rf("#{gem_dir}#{fat_dir}")
77
+ end
78
+ end
79
+
80
+ junk_patterns = %w[
81
+ *.md *.rdoc *.txt *.c *.h *.o Makefile *.log
82
+ CHANGELOG* HISTORY* LICENSE* README* .gitignore Rakefile
83
+ ]
84
+ junk_patterns.each do |pattern|
85
+ Dir.glob("#{layer_dir}/**/#{pattern}").each { |f| FileUtils.rm_f(f) }
86
+ end
87
+
88
+ Dir.glob("#{layer_dir}/**/*.so").each do |so|
89
+ system('strip', '--strip-debug', so, err: File::NULL)
90
+ end
91
+ end
92
+
93
+ def verify_layer(layer_dir)
94
+ sqlite_so = Dir.glob("#{layer_dir}/**/sqlite3_native.so") +
95
+ Dir.glob("#{layer_dir}/**/sqlite3.so")
96
+ abort '❌ sqlite3 native extension NOT found in layer' if sqlite_so.empty?
97
+ puts '✅ sqlite3 native extension included'
98
+
99
+ s3arch_lib = Dir.glob("#{layer_dir}/**/gems/s3arch-*/lib/s3arch.rb")
100
+ abort '❌ s3arch gem NOT found in layer' if s3arch_lib.empty?
101
+ puts '✅ s3arch gem included'
102
+ end
103
+
104
+ def create_zip(layer_dir, output_file)
105
+ FileUtils.rm_f(output_file)
106
+ abort '❌ Failed to create zip' unless system('zip', '-qr', output_file, 'ruby/', chdir: layer_dir)
107
+
108
+ size = `du -h #{output_file}`.split("\t").first
109
+ puts "✅ Layer built: #{output_file} (#{size})"
110
+ end
111
+ end
112
+
5
113
  namespace :s3arch do
6
114
  namespace :layer do
7
115
  desc 'Build the Lambda layer zip (defaults: RUBY_VERSION=3.4, ARCHITECTURE=x86_64)'
8
116
  task :build do
9
- require 'tmpdir'
10
- require 'fileutils'
11
-
12
117
  ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
13
118
  architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
14
119
  output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
15
120
  s3arch_version = ENV.fetch('S3ARCH_VERSION', "~> #{S3arch::VERSION.sub(/\.\d+$/, '.0')}")
16
121
 
17
- FileUtils.mkdir_p(File.dirname(output_file))
18
-
19
- puts "🔨 Building Lambda layer (Ruby #{ruby_version} / #{architecture}, s3arch #{s3arch_version})..."
20
-
21
- tmpdir = Dir.mktmpdir('s3arch-layer')
22
- begin
23
- File.write("#{tmpdir}/Gemfile", <<~GEMFILE)
24
- source 'https://rubygems.org'
25
- gem 'sqlite3', '~> 2.0'
26
- gem 's3arch', '#{s3arch_version}'
27
- GEMFILE
28
-
29
- docker_image = "public.ecr.aws/sam/build-ruby#{ruby_version}:latest-#{architecture}"
30
- platform = architecture == 'x86_64' ? 'linux/amd64' : 'linux/arm64'
31
-
32
- build_script = <<~BASH
33
- yum install -y sqlite-devel 2>/dev/null || dnf install -y sqlite-devel 2>/dev/null
34
- bundle config set --local path /build/layer/ruby/gems/#{ruby_version}.0
35
- bundle config set --local without "development test"
36
- bundle config set --local deployment false
37
- bundle install
38
- NESTED="/build/layer/ruby/gems/#{ruby_version}.0/ruby/#{ruby_version}.0"
39
- if [ -d "$NESTED" ]; then
40
- mkdir -p /build/layer-final/ruby/gems/#{ruby_version}.0
41
- cp -a "$NESTED"/* /build/layer-final/ruby/gems/#{ruby_version}.0/
42
- rm -rf /build/layer
43
- mv /build/layer-final /build/layer
44
- fi
45
- BASH
46
-
47
- docker_cmd = [
48
- 'docker', 'run', '--rm',
49
- '--platform', platform,
50
- '-v', "#{tmpdir}:/build",
51
- '-w', '/build',
52
- docker_image,
53
- '/bin/bash', '-c', build_script
54
- ]
55
-
56
- puts "🐳 Building in Docker (#{docker_image})..."
57
- abort '❌ Docker build failed' unless system(*docker_cmd)
58
-
59
- layer_dir = "#{tmpdir}/layer"
60
-
61
- puts '🧹 Stripping layer...'
62
- Dir.glob("#{layer_dir}/ruby/gems/*/gems/*/").each do |gem_dir|
63
- %w[spec test tests doc docs examples benchmarks].each do |fat_dir|
64
- FileUtils.rm_rf("#{gem_dir}#{fat_dir}")
65
- end
66
- end
67
-
68
- junk_patterns = %w[
69
- *.md *.rdoc *.txt *.c *.h *.o Makefile *.log
70
- CHANGELOG* HISTORY* LICENSE* README* .gitignore Rakefile
71
- ]
72
- junk_patterns.each do |pattern|
73
- Dir.glob("#{layer_dir}/**/#{pattern}").each { |f| FileUtils.rm_f(f) }
74
- end
75
-
76
- Dir.glob("#{layer_dir}/**/*.so").each do |so|
77
- system('strip', '--strip-debug', so, err: File::NULL)
78
- end
79
-
80
- sqlite_so = Dir.glob("#{layer_dir}/**/sqlite3_native.so") +
81
- Dir.glob("#{layer_dir}/**/sqlite3.so")
82
- abort '❌ sqlite3 native extension NOT found in layer' if sqlite_so.empty?
83
- puts '✅ sqlite3 native extension included'
84
-
85
- s3arch_lib = Dir.glob("#{layer_dir}/**/gems/s3arch-*/lib/s3arch.rb")
86
- abort '❌ s3arch gem NOT found in layer' if s3arch_lib.empty?
87
- puts '✅ s3arch gem included'
88
-
89
- FileUtils.rm_f(output_file)
90
- abort '❌ Failed to create zip' unless system('zip', '-qr', output_file, 'ruby/', chdir: layer_dir)
91
-
92
- size = `du -h #{output_file}`.split("\t").first
93
- puts "✅ Layer built: #{output_file} (#{size})"
94
- ensure
95
- system('sudo', 'rm', '-rf', tmpdir) || FileUtils.rm_rf(tmpdir)
96
- end
122
+ S3archLayerBuilder.build_layer(
123
+ ruby_version: ruby_version,
124
+ architecture: architecture,
125
+ output_file: output_file,
126
+ s3arch_version: s3arch_version
127
+ )
97
128
  end
98
129
 
99
- desc 'Build and publish the Lambda layer (set AWS_PROFILE, LAYER_NAME=stowzilla-sqlite3-ruby)'
130
+ desc 'Build and publish the Lambda layer (set AWS_PROFILE, LAYER_NAME=sqlite3-ruby)'
100
131
  task publish: :build do
101
- layer_name = ENV.fetch('LAYER_NAME', 'stowzilla-sqlite3-ruby')
132
+ layer_name = ENV.fetch('LAYER_NAME', 'sqlite3-ruby')
102
133
  ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
103
134
  architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
104
135
  output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
@@ -127,7 +158,7 @@ namespace :s3arch do
127
158
  owner_id = args.owner_id || ENV.fetch('OWNER_ID', nil)
128
159
  abort '❌ Usage: rake s3arch:rebuild[OWNER_ID]' unless owner_id
129
160
 
130
- S3arch.configure { |c| c.from_env! }
161
+ S3arch.configure(&:from_env!)
131
162
 
132
163
  puts "🔄 Rebuilding index for #{owner_id}..."
133
164
  S3arch::Indexer.new.rebuild(owner_id)
metadata CHANGED
@@ -1,39 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3arch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Dalton
8
8
  bindir: bin
9
- cert_chain:
10
- - |
11
- -----BEGIN CERTIFICATE-----
12
- MIIEdDCCAtygAwIBAgIBATANBgkqhkiG9w0BAQsFADBAMQ4wDAYDVQQDDAVhZ2Vu
13
- dDEZMBcGCgmSJomT8ixkARkWCXN0b3d6aWxsYTETMBEGCgmSJomT8ixkARkWA2Nv
14
- bTAeFw0yNjA2MDgxOTExNTlaFw0yNzA2MDgxOTExNTlaMEAxDjAMBgNVBAMMBWFn
15
- ZW50MRkwFwYKCZImiZPyLGQBGRYJc3Rvd3ppbGxhMRMwEQYKCZImiZPyLGQBGRYD
16
- Y29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAupBquKI/4WvXOgND
17
- pXyqH2GllZs1wG4TWWdn/DoMg45UoCwD+AWEuGrIdInBCpPN8vEJNJWPoM/RrU+b
18
- xRBZT4uUk00bnZRW2SYh5GJSqBoBR+rWc2DGkXyGfdRU2sQvkB0+is6ChgQ61WMM
19
- 33LE9+loBlVsZ6EVtrc18Uh2OW0mJpe0hN2nmBrxZqqOZigxC4DKRMFHvpRkxSb6
20
- mD4kit1AcwX9NEWJsXxrPaetL/SB/VbXaEZX93XAvp6USaXvCWt4slkDS2mIvqtn
21
- 9DtGC43LFC7SDGbnsG9PVenQgVCi8UWFPUAab0PqZSlmi3Qlbhw8qTGPp5Cbv4vz
22
- qjC2UGPOQigA/7lbbGRhCohMrjOVHMAQwkcgiIqtolUoYlnvPMIy+m3pdvgDv/PH
23
- bsZGvXQ7i0458xsmp1vaKthZocVAR+GboHbuIiYPUnO45ccXUQ00x6365tTe7mZi
24
- NvmUYdAGbQmVvFqyxF7IYA6sF74L2Lstu0knSfss557bAe1HAgMBAAGjeTB3MAkG
25
- A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSnxTL/lNBCeLqpeVIX6AUY
26
- kel4zjAeBgNVHREEFzAVgRNhZ2VudEBzdG93emlsbGEuY29tMB4GA1UdEgQXMBWB
27
- E2FnZW50QHN0b3d6aWxsYS5jb20wDQYJKoZIhvcNAQELBQADggGBACm9Fjit/UCv
28
- FxlKqeiCTIG94cIx+QrWAOJSx9knKydwUec1u04D/DbfZjTn3C2Bj227QgxeUn+6
29
- if3e2v7zAk1896hLmGYzML0+nxQPb0vmtdLR7HETUlSKTVabcv1fbwLyjsuGrBvk
30
- y51vOEzUEZ508a9yepLYqrQu1kOju4d57c9oA5l3H0mMKWz7av9tFj0B+STvuaWk
31
- HRYDWc5HgOEVTyV+w0uFt2Kw4OCb8C42uSvC5RfYYtw78MSP+5Ru+LXJ7XOtmuN0
32
- E6GVmofQ17ig9O3rgfFbMendSInrRmvPIGswvM1yivq9NOllFbdck2OJKPx6FCJF
33
- 7SJIkXQfc9P4B5iASIV1d1FsE0YX+g3jHXPJK/4mGL5bAyBKzpMfQB/mg6vQBzkh
34
- aOKPwcreFj7TznBl89R5tNS9wZQfPVR98zgPyocddWhK18eQNMSBUnv4eeJ8PPbk
35
- DovL+G8ajHDZ9fjH/+GVYHEMuiVdLarXrKJpHC1VfGTTUAp4NSEpUQ==
36
- -----END CERTIFICATE-----
9
+ cert_chain: []
37
10
  date: 1980-01-02 00:00:00.000000000 Z
38
11
  dependencies:
39
12
  - !ruby/object:Gem::Dependency
@@ -117,9 +90,8 @@ files:
117
90
  - CHANGELOG.md
118
91
  - LICENSE.txt
119
92
  - README.md
120
- - certs/stowzilla.pem
121
- - infrastructure/routes.tf.rb
122
- - infrastructure/schema.tf.rb
93
+ - config/contracts.rb
94
+ - config/routes.rb
123
95
  - lambda/controllers/s3arch_controller.rb
124
96
  - lambda/models/search_version.rb
125
97
  - lib/s3arch.rb
checksums.yaml.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- j��YC�����㯬`�Q����[��M~��Ҫ�q\Tr���Ih/4Z�]~�Қ�p�X�|;s��B��nP����R����X��Ꙁ�V -S6Ev�X�!ͦo���W9Y6�H$�04�6q[�4�E�P�(��HÊ���+$��[ ��L�~��!T~��A���
2
- N����ʽ˛[�O�C�k����*���Q��
data/certs/stowzilla.pem DELETED
@@ -1,26 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEdDCCAtygAwIBAgIBATANBgkqhkiG9w0BAQsFADBAMQ4wDAYDVQQDDAVhZ2Vu
3
- dDEZMBcGCgmSJomT8ixkARkWCXN0b3d6aWxsYTETMBEGCgmSJomT8ixkARkWA2Nv
4
- bTAeFw0yNjA2MDgxOTExNTlaFw0yNzA2MDgxOTExNTlaMEAxDjAMBgNVBAMMBWFn
5
- ZW50MRkwFwYKCZImiZPyLGQBGRYJc3Rvd3ppbGxhMRMwEQYKCZImiZPyLGQBGRYD
6
- Y29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAupBquKI/4WvXOgND
7
- pXyqH2GllZs1wG4TWWdn/DoMg45UoCwD+AWEuGrIdInBCpPN8vEJNJWPoM/RrU+b
8
- xRBZT4uUk00bnZRW2SYh5GJSqBoBR+rWc2DGkXyGfdRU2sQvkB0+is6ChgQ61WMM
9
- 33LE9+loBlVsZ6EVtrc18Uh2OW0mJpe0hN2nmBrxZqqOZigxC4DKRMFHvpRkxSb6
10
- mD4kit1AcwX9NEWJsXxrPaetL/SB/VbXaEZX93XAvp6USaXvCWt4slkDS2mIvqtn
11
- 9DtGC43LFC7SDGbnsG9PVenQgVCi8UWFPUAab0PqZSlmi3Qlbhw8qTGPp5Cbv4vz
12
- qjC2UGPOQigA/7lbbGRhCohMrjOVHMAQwkcgiIqtolUoYlnvPMIy+m3pdvgDv/PH
13
- bsZGvXQ7i0458xsmp1vaKthZocVAR+GboHbuIiYPUnO45ccXUQ00x6365tTe7mZi
14
- NvmUYdAGbQmVvFqyxF7IYA6sF74L2Lstu0knSfss557bAe1HAgMBAAGjeTB3MAkG
15
- A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSnxTL/lNBCeLqpeVIX6AUY
16
- kel4zjAeBgNVHREEFzAVgRNhZ2VudEBzdG93emlsbGEuY29tMB4GA1UdEgQXMBWB
17
- E2FnZW50QHN0b3d6aWxsYS5jb20wDQYJKoZIhvcNAQELBQADggGBACm9Fjit/UCv
18
- FxlKqeiCTIG94cIx+QrWAOJSx9knKydwUec1u04D/DbfZjTn3C2Bj227QgxeUn+6
19
- if3e2v7zAk1896hLmGYzML0+nxQPb0vmtdLR7HETUlSKTVabcv1fbwLyjsuGrBvk
20
- y51vOEzUEZ508a9yepLYqrQu1kOju4d57c9oA5l3H0mMKWz7av9tFj0B+STvuaWk
21
- HRYDWc5HgOEVTyV+w0uFt2Kw4OCb8C42uSvC5RfYYtw78MSP+5Ru+LXJ7XOtmuN0
22
- E6GVmofQ17ig9O3rgfFbMendSInrRmvPIGswvM1yivq9NOllFbdck2OJKPx6FCJF
23
- 7SJIkXQfc9P4B5iASIV1d1FsE0YX+g3jHXPJK/4mGL5bAyBKzpMfQB/mg6vQBzkh
24
- aOKPwcreFj7TznBl89R5tNS9wZQfPVR98zgPyocddWhK18eQNMSBUnv4eeJ8PPbk
25
- DovL+G8ajHDZ9fjH/+GVYHEMuiVdLarXrKJpHC1VfGTTUAp4NSEpUQ==
26
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file