sendgrid-ruby 4.0.8 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +4 -4
- data/Gemfile +1 -1
- data/README.md +8 -3
- data/config.ru +4 -0
- data/lib/sendgrid/helpers/inbound/README.md +81 -0
- data/lib/sendgrid/helpers/inbound/app.rb +20 -0
- data/lib/sendgrid/helpers/inbound/config.yml +26 -0
- data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
- data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
- data/lib/sendgrid/helpers/inbound/send.rb +26 -0
- data/lib/sendgrid/version.rb +1 -1
- data/sendgrid-ruby.gemspec +1 -1
- data/test/sendgrid/test_sendgrid-ruby.rb +2 -2
- metadata +26 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4935426058ea7d1c14f61020231f4260b12a8ef8
|
4
|
+
data.tar.gz: 5d52f19f64ace9e2cc1f66ed13e97087138ddbdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a2681e049f3ef54cc5d322c6854edfbae48ed8a3b797b1e9f71dbc0b40ddb961156dcda684b19287aae71ac52c0df0700c0a85f5a6f87dc74a56ef9a99af759
|
7
|
+
data.tar.gz: dd6e20dc8672654f467f152a357a56b2e8ac6545d0db35df7565076577514376fd422594c3c2adcbaf254a4fdf55a3c768148cd112eb36d0ff75af9c471d7bc9
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [4.1.0] - 2016-2-17 ##
|
5
|
+
### Add
|
6
|
+
- #144: Add [Inbound Email Parse Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/inbound_email.html) support
|
7
|
+
- Thanks to [Wataru Sato](https://github.com/awwa) for the pull request!
|
8
|
+
|
4
9
|
## [4.0.8] - 2016-2-17 ##
|
5
10
|
### Add
|
6
11
|
- Solves #147: Add User Agent string
|
data/CONTRIBUTING.md
CHANGED
@@ -16,13 +16,13 @@ We use [Milestones](https://github.com/sendgrid/sendgrid-ruby/milestones) to hel
|
|
16
16
|
<a name="cla"></a>
|
17
17
|
## CLAs and CCLAs
|
18
18
|
|
19
|
-
Before you get started, SendGrid requires that a SendGrid Contributor License Agreement (CLA)
|
19
|
+
Before you get started, SendGrid requires that a SendGrid Contributor License Agreement (CLA) be filled out by every contributor to a SendGrid open source project.
|
20
20
|
|
21
|
-
Our goal with the CLA
|
21
|
+
Our goal with the CLA is to clarify the rights of our contributors and reduce other risks arising from inappropriate contributions. The CLA also clarifies the rights SendGrid holds in each contribution and helps to avoid misunderstandings over what rights each contributor is required to grant to SendGrid when making a contribution. In this way the CLA encourages broad participation by our open source community and helps us build strong open source projects, free from any individual contributor withholding or revoking rights to any contribution.
|
22
22
|
|
23
|
-
SendGrid does not merge a pull request made against a SendGrid open source project until that pull request is associated with a signed CLA
|
23
|
+
SendGrid does not merge a pull request made against a SendGrid open source project until that pull request is associated with a signed CLA. Copies of the CLA are available [here](https://gist.github.com/SendGridDX/98b42c0a5d500058357b80278fde3be8#file-sendgrid_cla).
|
24
24
|
|
25
|
-
|
25
|
+
When you create a Pull Request, after a few seconds, a comment will appear with a link to the CLA. Click the link and fill out the brief form and then click the "I agree" button and you are all set. You will not be asked to re-sign the CLA unless we make a change.
|
26
26
|
|
27
27
|
There are a few ways to contribute, which we'll enumerate below:
|
28
28
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -16,6 +16,7 @@ We appreciate your continued support, thank you!
|
|
16
16
|
|
17
17
|
* [Installation](#installation)
|
18
18
|
* [Quick Start](#quick_start)
|
19
|
+
* [Processing Inbound Email](#inbound)
|
19
20
|
* [Usage](#usage)
|
20
21
|
* [Use Cases](#use_cases)
|
21
22
|
* [Announcements](#announcements)
|
@@ -151,6 +152,11 @@ puts response.body
|
|
151
152
|
puts response.headers
|
152
153
|
```
|
153
154
|
|
155
|
+
<a name="inbound"></a>
|
156
|
+
# Processing Inbound Email
|
157
|
+
|
158
|
+
Please see [our helper](https://github.com/sendgrid/sendgrid-ruby/tree/master/lib/sendgrid/helpers/inbound) for utilizing our Inbound Parse webhook.
|
159
|
+
|
154
160
|
<a name="usage"></a>
|
155
161
|
# Usage
|
156
162
|
|
@@ -160,7 +166,7 @@ puts response.headers
|
|
160
166
|
- [How-to: Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html)
|
161
167
|
- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-python/tree/master/sendgrid/helpers/mail) - build a request object payload for a v3 /mail/send API call.
|
162
168
|
|
163
|
-
<a name="use_cases">
|
169
|
+
<a name="use_cases"></a>
|
164
170
|
# Use Cases
|
165
171
|
|
166
172
|
[Examples of common API use cases](https://github.com/sendgrid/sendgrid-ruby/blob/master/USE_CASES.md), such as how to send an email with a transactional template.
|
@@ -199,5 +205,4 @@ sendgrid-ruby is guided and supported by the SendGrid [Developer Experience Team
|
|
199
205
|
|
200
206
|
sendgrid-ruby is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-ruby are trademarks of SendGrid, Inc.
|
201
207
|
|
202
|
-
![SendGrid Logo]
|
203
|
-
(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png)
|
208
|
+
![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png)
|
data/config.ru
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
**This helper is a stand alone module to help get you started consuming and processing Inbound Parse data.**
|
2
|
+
|
3
|
+
## Table of Contents
|
4
|
+
|
5
|
+
* [Quick Start for Local Testing with Sample Data](#quick_start_local_sample)
|
6
|
+
* [Quick Start for Local Testing with Real Data](#quick_start_local_real)
|
7
|
+
* [Code Walkthrough](#code_walkthrough)
|
8
|
+
* [Contributing](#contributing)
|
9
|
+
|
10
|
+
<a name="quick_start_local_sample"></a>
|
11
|
+
# Quick Start for Local Testing with Sample Data
|
12
|
+
|
13
|
+
```bash
|
14
|
+
git clone https://github.com/sendgrid/sendgrid-ruby.git
|
15
|
+
cd sendgrid-ruby
|
16
|
+
bundle install
|
17
|
+
```
|
18
|
+
|
19
|
+
Run the Inbound Parse listener in your terminal:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
rackup
|
23
|
+
```
|
24
|
+
|
25
|
+
In another terminal, run the test data sender:
|
26
|
+
|
27
|
+
```bash
|
28
|
+
cd [path to sendgrid-ruby]
|
29
|
+
bundle install
|
30
|
+
ruby ./lib/sendgrid/helpers/inbound/send.rb ./lib/sendgrid/helpers/inbound/sample_data/default_data.txt
|
31
|
+
```
|
32
|
+
|
33
|
+
More sample data can be found [here](https://github.com/sendgrid/sendgrid-ruby/tree/master/sendgrid/helpers/inbound/sample_data).
|
34
|
+
|
35
|
+
View the results in the first terminal.
|
36
|
+
|
37
|
+
<a name="quick_start_local_real"></a>
|
38
|
+
# Quick Start for Local Testing with Real Data
|
39
|
+
|
40
|
+
[Setup your MX records.](https://sendgrid.com/docs/Classroom/Basics/Inbound_Parse_Webhook/setting_up_the_inbound_parse_webhook.html#-Setup) Depending on your domain name host, you may need to wait up to 48 hours for the settings to propagate.
|
41
|
+
|
42
|
+
Run the Inbound Parse listener in your terminal:
|
43
|
+
|
44
|
+
```bash
|
45
|
+
git clone https://github.com/sendgrid/sendgrid-ruby.git
|
46
|
+
cd sendgrid-ruby
|
47
|
+
bundle install
|
48
|
+
rackup
|
49
|
+
```
|
50
|
+
|
51
|
+
In another terminal, use [ngrok](https://ngrok.com/) to allow external access to your machine:
|
52
|
+
```bash
|
53
|
+
ngrok http 9292
|
54
|
+
```
|
55
|
+
|
56
|
+
Update your SendGrid Incoming Parse settings: [Settings Page](https://app.sendgrid.com/settings/parse) | [Docs](https://sendgrid.com/docs/Classroom/Basics/Inbound_Parse_Webhook/setting_up_the_inbound_parse_webhook.html#-Pointing-to-a-Hostname-and-URL)
|
57
|
+
|
58
|
+
- For the HOSTNAME field, use the domain that you changed the MX records (e.g. inbound.yourdomain.com)
|
59
|
+
- For the URL field, use the URL generated by ngrok + /inbound, e.g http://XXXXXXX.ngrok.io/inbound
|
60
|
+
|
61
|
+
Next, send an email to [anything]@inbound.yourdomain.com, then look at the terminal where you started the Inbound Parse listener.
|
62
|
+
|
63
|
+
<a name="code_walkthrough"></a>
|
64
|
+
# Code Walkthrough
|
65
|
+
|
66
|
+
## app.rb
|
67
|
+
|
68
|
+
This module runs a [Sinatra](http://www.sinatrarb.com/) server, that by default (you can change those settings [here](https://github.com/sendgrid/sendgrid-ruby/blob/master/sendgrid/helpers/inbound/config.yml)), listens for POSTs on http://localhost:9292. When the server receives the POST, it parses and prints the key/value data.
|
69
|
+
|
70
|
+
## config.yml
|
71
|
+
|
72
|
+
This module loads application environment variables (located in [config.yml](https://github.com/sendgrid/sendgrid-ruby/blob/master/sendgrid/helpers/inbound/config.yml)).
|
73
|
+
|
74
|
+
## send.rb & /sample_data
|
75
|
+
|
76
|
+
This module is used to send sample test data. It is useful for testing and development, particularly while you wait for your MX records to propagate.
|
77
|
+
|
78
|
+
<a name="contributing"></a>
|
79
|
+
# Contributing
|
80
|
+
|
81
|
+
If you would like to contribute to this project, please see our [contributing guide](https://github.com/sendgrid/sendgrid-ruby/blob/master/CONTRIBUTING.md). Thanks!
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'logger'
|
3
|
+
require 'json'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
class Main < Sinatra::Base
|
7
|
+
configure :production, :development do
|
8
|
+
enable :logging
|
9
|
+
set :config, YAML.load_file(File.dirname(__FILE__) + '/config.yml')
|
10
|
+
end
|
11
|
+
|
12
|
+
get '/' do
|
13
|
+
redirect to('index.html')
|
14
|
+
end
|
15
|
+
|
16
|
+
post settings.config['endpoint'] do
|
17
|
+
filtered = params.select {|k, v| settings.config['keys'].include?(k)}
|
18
|
+
logger.info JSON.pretty_generate(filtered)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Incoming Parse endpoint for receiver
|
2
|
+
endpoint: '/inbound'
|
3
|
+
|
4
|
+
# List all Incoming Parse fields you would like parsed
|
5
|
+
# Reference: https://sendgrid.com/docs/Classroom/Basics/Inbound_Parse_Webhook/setting_up_the_inbound_parse_webhook.html
|
6
|
+
keys:
|
7
|
+
- from
|
8
|
+
- attachments
|
9
|
+
- headers
|
10
|
+
- text
|
11
|
+
- envelope
|
12
|
+
- to
|
13
|
+
- html
|
14
|
+
- sender_ip
|
15
|
+
- attachment-info
|
16
|
+
- subject
|
17
|
+
- dkim
|
18
|
+
- SPF
|
19
|
+
- charsets
|
20
|
+
- content-ids
|
21
|
+
- spam_report
|
22
|
+
- spam_score
|
23
|
+
- email
|
24
|
+
|
25
|
+
# URL that the sender will POST to
|
26
|
+
host: 'http://127.0.0.1:9292/inbound'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>SendGrid Incoming Parse</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>You have successfuly launched the server!</h1>
|
7
|
+
|
8
|
+
Check out <a href="https://github.com/sendgrid/sendgrid-ruby/tree/master/sendgrid/helpers/inbound">the documentation</a> on how to use this software to utilize the SendGrid Inbound Parse webhook.
|
9
|
+
</body>
|
10
|
+
</html>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
--xYzZY
|
2
|
+
Content-Disposition: form-data; name="headers"
|
3
|
+
|
4
|
+
MIME-Version: 1.0
|
5
|
+
Received: by 0.0.0.0 with HTTP; Wed, 10 Aug 2016 18:10:13 -0700 (PDT)
|
6
|
+
From: Example User <test@example.com>
|
7
|
+
Date: Wed, 10 Aug 2016 18:10:13 -0700
|
8
|
+
Subject: Inbound Parse Test Data
|
9
|
+
To: inbound@inbound.example.com
|
10
|
+
Content-Type: multipart/alternative; boundary=001a113df448cad2d00539c16e89
|
11
|
+
|
12
|
+
--xYzZY
|
13
|
+
Content-Disposition: form-data; name="dkim"
|
14
|
+
|
15
|
+
{@sendgrid.com : pass}
|
16
|
+
--xYzZY
|
17
|
+
Content-Disposition: form-data; name="to"
|
18
|
+
|
19
|
+
inbound@inbound.example.com
|
20
|
+
--xYzZY
|
21
|
+
Content-Disposition: form-data; name="html"
|
22
|
+
|
23
|
+
<html><body><strong>Hello SendGrid!</body></html>
|
24
|
+
|
25
|
+
--xYzZY
|
26
|
+
Content-Disposition: form-data; name="from"
|
27
|
+
|
28
|
+
Example User <test@example.com>
|
29
|
+
--xYzZY
|
30
|
+
Content-Disposition: form-data; name="text"
|
31
|
+
|
32
|
+
Hello SendGrid!
|
33
|
+
|
34
|
+
--xYzZY
|
35
|
+
Content-Disposition: form-data; name="sender_ip"
|
36
|
+
|
37
|
+
0.0.0.0
|
38
|
+
--xYzZY
|
39
|
+
Content-Disposition: form-data; name="envelope"
|
40
|
+
|
41
|
+
{"to":["inbound@inbound.example.com"],"from":"test@example.com"}
|
42
|
+
--xYzZY
|
43
|
+
Content-Disposition: form-data; name="attachments"
|
44
|
+
|
45
|
+
0
|
46
|
+
--xYzZY
|
47
|
+
Content-Disposition: form-data; name="subject"
|
48
|
+
|
49
|
+
Testing non-raw
|
50
|
+
--xYzZY
|
51
|
+
Content-Disposition: form-data; name="charsets"
|
52
|
+
|
53
|
+
{"to":"UTF-8","html":"UTF-8","subject":"UTF-8","from":"UTF-8","text":"UTF-8"}
|
54
|
+
--xYzZY
|
55
|
+
Content-Disposition: form-data; name="SPF"
|
56
|
+
|
57
|
+
pass
|
58
|
+
--xYzZY--
|
@@ -0,0 +1,57 @@
|
|
1
|
+
--xYzZY
|
2
|
+
Content-Disposition: form-data; name="dkim"
|
3
|
+
|
4
|
+
{@sendgrid.com : pass}
|
5
|
+
--xYzZY
|
6
|
+
Content-Disposition: form-data; name="email"
|
7
|
+
|
8
|
+
MIME-Version: 1.0
|
9
|
+
Received: by 0.0.0.0 with HTTP; Wed, 10 Aug 2016 14:44:21 -0700 (PDT)
|
10
|
+
From: Example User <test@example.com>
|
11
|
+
Date: Wed, 10 Aug 2016 14:44:21 -0700
|
12
|
+
Subject: Inbound Parse Test Raw Data
|
13
|
+
To: inbound@inbound.inbound.com
|
14
|
+
Content-Type: multipart/alternative; boundary=001a113ee97c89842f0539be8e7a
|
15
|
+
|
16
|
+
--001a113ee97c89842f0539be8e7a
|
17
|
+
Content-Type: text/plain; charset=UTF-8
|
18
|
+
|
19
|
+
Hello SendGrid!
|
20
|
+
|
21
|
+
--001a113ee97c89842f0539be8e7a
|
22
|
+
Content-Type: text/html; charset=UTF-8
|
23
|
+
Content-Transfer-Encoding: quoted-printable
|
24
|
+
|
25
|
+
<html><body><strong>Hello SendGrid!</body></html>
|
26
|
+
|
27
|
+
--001a113ee97c89842f0539be8e7a--
|
28
|
+
|
29
|
+
--xYzZY
|
30
|
+
Content-Disposition: form-data; name="to"
|
31
|
+
|
32
|
+
inbound@inbound.inbound.com
|
33
|
+
--xYzZY
|
34
|
+
Content-Disposition: form-data; name="from"
|
35
|
+
|
36
|
+
Example User <test@example.com>
|
37
|
+
--xYzZY
|
38
|
+
Content-Disposition: form-data; name="sender_ip"
|
39
|
+
|
40
|
+
0.0.0.0
|
41
|
+
--xYzZY
|
42
|
+
Content-Disposition: form-data; name="envelope"
|
43
|
+
|
44
|
+
{"to":["inbound@inbound.inbound.com"],"from":"test@example.com"}
|
45
|
+
--xYzZY
|
46
|
+
Content-Disposition: form-data; name="subject"
|
47
|
+
|
48
|
+
Testing with Request.bin
|
49
|
+
--xYzZY
|
50
|
+
Content-Disposition: form-data; name="charsets"
|
51
|
+
|
52
|
+
{"to":"UTF-8","subject":"UTF-8","from":"UTF-8"}
|
53
|
+
--xYzZY
|
54
|
+
Content-Disposition: form-data; name="SPF"
|
55
|
+
|
56
|
+
pass
|
57
|
+
--xYzZY--
|
@@ -0,0 +1,298 @@
|
|
1
|
+
--xYzZY
|
2
|
+
Content-Disposition: form-data; name="dkim"
|
3
|
+
|
4
|
+
{@sendgrid.com : pass}
|
5
|
+
--xYzZY
|
6
|
+
Content-Disposition: form-data; name="email"
|
7
|
+
|
8
|
+
MIME-Version: 1.0
|
9
|
+
Received: by 0.0.0.0 with HTTP; Mon, 15 Aug 2016 13:47:21 -0700 (PDT)
|
10
|
+
From: Example User <test@example.com>
|
11
|
+
Date: Mon, 15 Aug 2016 13:47:21 -0700
|
12
|
+
Subject: Inbound Parse Test Raw Data with Attachment
|
13
|
+
To: inbound@inbound.inbound.com
|
14
|
+
Content-Type: multipart/mixed; boundary=001a1140ffb6f4fc63053a2257e2
|
15
|
+
|
16
|
+
--001a1140ffb6f4fc63053a2257e2
|
17
|
+
Content-Type: multipart/alternative; boundary=001a1140ffb6f4fc5f053a2257e0
|
18
|
+
|
19
|
+
--001a1140ffb6f4fc5f053a2257e0
|
20
|
+
Content-Type: text/plain; charset=UTF-8
|
21
|
+
|
22
|
+
Hello SendGrid!
|
23
|
+
|
24
|
+
--001a1140ffb6f4fc5f053a2257e0
|
25
|
+
Content-Type: text/html; charset=UTF-8
|
26
|
+
Content-Transfer-Encoding: quoted-printable
|
27
|
+
|
28
|
+
<html><body><strong>Hello SendGrid!</body></html>
|
29
|
+
|
30
|
+
--001a1140ffb6f4fc5f053a2257e0--
|
31
|
+
|
32
|
+
--001a1140ffb6f4fc63053a2257e2
|
33
|
+
Content-Type: image/jpeg; name="SendGrid.jpg"
|
34
|
+
Content-Disposition: attachment; filename="SendGrid.jpg"
|
35
|
+
Content-Transfer-Encoding: base64
|
36
|
+
X-Attachment-Id: f_irwihell0
|
37
|
+
|
38
|
+
/9j/4AAQSkZJRgABAQABLAEsAAD/4QDKRXhpZgAATU0AKgAAAAgABwESAAMA
|
39
|
+
AAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAEx
|
40
|
+
AAIAAAARAAAAcgEyAAIAAAAUAAAAhIdpAAQAAAABAAAAmAAAAAAAAAEsAAAA
|
41
|
+
AQAAASwAAAABUGl4ZWxtYXRvciAzLjQuNAAAMjAxNjowODoxMSAxNjowODo1
|
42
|
+
NwAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACEqADAAQAAAABAAACFQAAAAD/
|
43
|
+
4Qn2aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVn
|
44
|
+
aW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4
|
45
|
+
bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAg
|
46
|
+
Q29yZSA1LjQuMCI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53
|
47
|
+
My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3Jp
|
48
|
+
cHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2Jl
|
49
|
+
LmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9l
|
50
|
+
bGVtZW50cy8xLjEvIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxNi0wOC0xMVQxNjow
|
51
|
+
ODo1NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBJbWFnZVJlYWR5Ij4gPGRj
|
52
|
+
OnN1YmplY3Q+IDxyZGY6QmFnLz4gPC9kYzpzdWJqZWN0PiA8L3JkZjpEZXNj
|
53
|
+
cmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAg
|
54
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
55
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
56
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
57
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
58
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
59
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
60
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
61
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
62
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
63
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
64
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
65
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
66
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
67
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
68
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
69
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
70
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
71
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
72
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
73
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
74
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
75
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
76
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
77
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
78
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
79
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
80
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
81
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
82
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
83
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
84
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
85
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
86
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
87
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
88
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
89
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
90
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
91
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
92
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
93
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
94
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
95
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
96
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
97
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
98
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
99
|
+
ICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+AP/tADhQaG90b3Nob3Ag
|
100
|
+
My4wADhCSU0EBAAAAAAAADhCSU0EJQAAAAAAENQdjNmPALIE6YAJmOz4Qn7/
|
101
|
+
wAARCAIVAhIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF
|
102
|
+
BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
|
103
|
+
FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI
|
104
|
+
SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKj
|
105
|
+
pKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
|
106
|
+
8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
|
107
|
+
tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB
|
108
|
+
CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldY
|
109
|
+
WVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmq
|
110
|
+
srO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6
|
111
|
+
/9sAQwAcHBwcHBwwHBwwRDAwMERcRERERFx0XFxcXFx0jHR0dHR0dIyMjIyM
|
112
|
+
jIyMqKioqKioxMTExMTc3Nzc3Nzc3Nzc/9sAQwEiJCQ4NDhgNDRg5pyAnObm
|
113
|
+
5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm
|
114
|
+
5ubm/90ABAAi/9oADAMBAAIRAxEAPwDpKKKKACiiigAooooAKKKKACiiigAo
|
115
|
+
oooAKKKKACiiigAooooAKKKKACiiigDEnkkEzgMep71F5sn94/nTp/8AXP8A
|
116
|
+
U1FXWloeZJu7H+bJ/eP50ebJ/eP50yinYm7H+bJ/eP50ebJ/eP50yiiwXY/z
|
117
|
+
ZP7x/OjzZP7x/OmUUWC7H+bJ/eP50ebJ/eP50yiiwXY/zZP7x/OjzZP7x/Om
|
118
|
+
UUWC7H+bJ/eP50ebJ/eP50yiiwXY/wA2T+8fzo82T+8fzplFFgux/myf3j+d
|
119
|
+
Hmyf3j+dMoosF2P82T+8fzo82T+8fzplFFgux/myf3j+dHmyf3j+dMoosF2I
|
120
|
+
0sufvt+dJ5sv99vzNMbrSVVkbpuxJ5sv99vzNHmy/wB9vzNR0U7Id2SebL/f
|
121
|
+
b8zR5sv99vzNR0UWQXZJ5sv99vzNHmy/32/M1HRRZBdknmy/32/M0ebL/fb8
|
122
|
+
zUdFFkF2SebL/fb8zR5sv99vzNR0UWQXZJ5sv99vzNHmy/32/M1HRRZBdknm
|
123
|
+
y/32/M0ebL/fb8zUdFFkF2SebL/fb8zR5sv99vzNR0UWQXZJ5sv99vzNHmy/
|
124
|
+
32/M1HRRZBdknmy/32/M0ebL/fb8zUdFFkF2SebL/fb8zR5sv99vzNR0UWQX
|
125
|
+
Z//Q6SiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
|
126
|
+
oooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKACiiigAooooAKK
|
127
|
+
KKACiiigAooooAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiigAooooAKKKKAC
|
128
|
+
iiigAooooAKKKKACiiigAooooAKKKKACiiigD//R6SiiigAooooAKKKKACii
|
129
|
+
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKu
|
130
|
+
xbHly3YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
|
131
|
+
CJutJSt1pKo3WwUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
|
132
|
+
oAKKKKACiiigD//S6SiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
|
133
|
+
KKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKAC
|
134
|
+
iiigAooooAKKKKACiiigAooooAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiig
|
135
|
+
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//T6SiiigAo
|
136
|
+
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwZ/9c/1N
|
137
|
+
RVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooo
|
138
|
+
oAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiigAooooAKKKKACiiigAooooAKK
|
139
|
+
KKACiiigAooooAKKKKACiiigD//U6SiiigAooooAKKKKACiiigAooooAKKKK
|
140
|
+
ACiiigAooooAKKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUy
|
141
|
+
QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCJutJSt1pKo3
|
142
|
+
WwUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
|
143
|
+
D//V6SiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
|
144
|
+
oooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKACiiigAooooAKK
|
145
|
+
KKACiiigAooooAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiigAooooAKKKKAC
|
146
|
+
iiigAooooAKKKKACiiigAooooAKKKKACiiigD//W6SiiigAooooAKKKKACii
|
147
|
+
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKu
|
148
|
+
xbHly3YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
|
149
|
+
CJutJSt1pKo3WwUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
|
150
|
+
oAKKKKACiiigD//X6SiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
|
151
|
+
KKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKAC
|
152
|
+
iiigAooooAKKKKACiiigAooooAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiig
|
153
|
+
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q6SiiigAo
|
154
|
+
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwZ/9c/1N
|
155
|
+
RVLP/rn+pqKuxbHly3YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooo
|
156
|
+
oAKKKKACiiigCJutJSt1pKo3WwUUUUDCiiigAooooAKKKKACiiigAooooAKK
|
157
|
+
KKACiiigAooooAKKKKACiiigD//R6SiiigAooooAKKKKACiiigAooooAKKKK
|
158
|
+
ACiiigAooooAKKKKACiiigAooooAwZ/9c/1NRVLP/rn+pqKuxbHly3YUUUUy
|
159
|
+
QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCJutJSt1pKo3
|
160
|
+
WwUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
|
161
|
+
D//S2i7560m9/WmnqaStbHPdj97+tG9/WmUUWC7H739aN7+tMoosF2P3v60b
|
162
|
+
39aZRRYLsfvf1o3v60yiiwXY/e/rRvf1plFFgux+9/Wje/rTKKLBdj97+tG9
|
163
|
+
/WmUUWC7H739aN7+tMoosF2P3v60b39aZRRYLsfvf1o3v60yiiwXZlzEmVvr
|
164
|
+
UeTT5f8AWt9ajrdbHI9xcmjJpKKYhcmjJpKKAFyaMmkooAXJoyaSigBcmjJp
|
165
|
+
KKAFyaMmkooAXJoyaSigBcmjJpKKAFyaMmkooAXJoyaSigBwAPWlwKB0paBX
|
166
|
+
YmBRgUtFAXYmBRgUtFAXYmBRgUtFAXYmBRgUtFAXYmBRgUtFAXYmBRgUtFAX
|
167
|
+
YmBRgUtFAXYmBRgUtFAXYmBRgUtFAXYmBRgUtFAXYmBRgUtFAXZ//9PXPU0l
|
168
|
+
KeppK1OYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
|
169
|
+
AMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFF
|
170
|
+
FABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACiiigAooooAKKKKACiiigAoooo
|
171
|
+
AKKKKACiiigAooooAKKKKACiiigD/9TXPU0lKeppK1OYKKKKACiiigAooooA
|
172
|
+
KKKKACiiigAooooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyv
|
173
|
+
cKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQ
|
174
|
+
dKWgkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
|
175
|
+
iigD/9XXPU0lKeppK1OYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
|
176
|
+
igAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABR
|
177
|
+
RRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACiiigAooooAKKK
|
178
|
+
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9bXPU0lKeppK1OYKKKK
|
179
|
+
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqS
|
180
|
+
X/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
|
181
|
+
AFFFFADx0paQdKWgkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
|
182
|
+
ooooAKKKKACiiigD/9fXPU0lKeppK1OYKKKKACiiigAooooAKKKKACiiigAo
|
183
|
+
oooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQA
|
184
|
+
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACi
|
185
|
+
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9DXPU0l
|
186
|
+
KeppK1OYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
|
187
|
+
AMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFF
|
188
|
+
FABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACiiigAooooAKKKKACiiigAoooo
|
189
|
+
AKKKKACiiigAooooAKKKKACiiigD/9HXPU0lKeppK1OYKKKKACiiigAooooA
|
190
|
+
KKKKACiiigAooooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyv
|
191
|
+
cKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQ
|
192
|
+
dKWgkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
|
193
|
+
iigD/9LXPU0lKeppK1OYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
|
194
|
+
igAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABR
|
195
|
+
RRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACiiigAooooAKKK
|
196
|
+
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9PXPU0lKeppK1OYKKKK
|
197
|
+
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqS
|
198
|
+
X/Wt9ajroRyvcKKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
|
199
|
+
AFFFFADx0paQdKWgkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
|
200
|
+
ooooAKKKKACiiigD/9TXPU0lKeppK1OYKKKKACiiigAooooAKKKKACiiigAo
|
201
|
+
oooAKKKKACiiigAooooAKKKKAMqX/Wt9ajqSX/Wt9ajroRyvcKKKKBBRRRQA
|
202
|
+
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADx0paQdKWgkKKKKACi
|
203
|
+
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9WV7mUO
|
204
|
+
Rnv6U37TN6/pUMn32+pptdyiuxxNssfaZvX9KPtM3r+lV6KOVdguyx9pm9f0
|
205
|
+
o+0zev6VXoo5V2C7LH2mb1/Sj7TN6/pVeijlXYLssfaZvX9KPtM3r+lV6KOV
|
206
|
+
dguyx9pm9f0o+0zev6VXoo5V2C7LH2mb1/Sj7TN6/pVeijlXYLssfaZvX9KP
|
207
|
+
tM3r+lV6KOVdguyx9pm9f0o+0zev6VXoo5V2C7LH2mb1/Sj7TN6/pVeijlXY
|
208
|
+
LssfaZvX9KPtM3r+lV6KOVdguzRSFJFEjdTyad9mi96fD/ql+lS1g27lcqK/
|
209
|
+
2aL3o+zRe9WKKXMw5V2K/wBmi96Ps0XvViijmYcq7Ff7NF70fZoverFFHMw5
|
210
|
+
V2K/2aL3o+zRe9WKKOZhyrsV/s0XvR9mi96sUUczDlXYr/Zovej7NF71Yoo5
|
211
|
+
mHKuxX+zRe9H2aL3qxRRzMOVdiv9mi96Ps0XvViijmYcq7Ff7NF70fZoverF
|
212
|
+
FHMw5V2K/wBmi96Ps0XvViijmYcq7BHZwlcnP50/7FB6H86ni+4KkqHJ9zdU
|
213
|
+
422Kn2KD0P50fYoPQ/nVuilzvuP2cexU+xQeh/Oj7FB6H86t0Uc77h7OPYqf
|
214
|
+
YoPQ/nR9ig9D+dW6KOd9w9nHsVPsUHofzo+xQeh/OrdFHO+4ezj2Kn2KD0P5
|
215
|
+
0fYoPQ/nVuijnfcPZx7FT7FB6H86PsUHofzq3RRzvuHs49ip9ig9D+dH2KD0
|
216
|
+
P51boo533D2cexU+xQeh/Oj7FB6H86t0Uc77h7OPYqfYoPQ/nR9ig9D+dW6K
|
217
|
+
Od9w9nHsVPsUHofzo+xQeh/OrdFHO+4ezj2Kn2KD0P50fYoPQ/nVuijnfcPZ
|
218
|
+
x7H/1mSffb6mm06T77fU02u9HCwooooAKKKKACiiigAooooAKKKKACiiigAo
|
219
|
+
oooAKKKKACiiigAooooA1of9Uv0qWoof9Uv0qWuZ7mqCiiikAUUUUAFFFFAB
|
220
|
+
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBai+4KkqOL7gqSs3udEdgooo
|
221
|
+
pDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9dk
|
222
|
+
n32+pptOk++31NNrvRwsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
|
223
|
+
igAooooAKKKKANaH/VL9KlqKH/VL9Klrme5qgooopAFFFFABRRRQAUUUUAFF
|
224
|
+
FFABRRRQAUUUUAFFFFABRRRQAUUUUAWovuCpKji+4KkrN7nRHYKKKKQwoooo
|
225
|
+
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//QZJ99vqab
|
226
|
+
TpPvt9TTa70cLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
|
227
|
+
ACiiigDWh/1S/Spaih/1S/Spa5nuaoKKKKQBRRRQAUUUUAFFFFABRRRQAUUU
|
228
|
+
UAFFFFABRRRQAUUUUAFFFFAFqL7gqSo4vuCpKze50R2CiiikMKKKKACiiigA
|
229
|
+
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0WSffb6mm06T77fU
|
230
|
+
02u9HCwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
|
231
|
+
1of9Uv0qWoof9Uv0qWuZ7mqCiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
|
232
|
+
AUUUUAFFFFABRRRQBai+4KkqOL7gqSs3udEdgooopDCiiigAooooAKKKKACi
|
233
|
+
iigAooooAKKKKACiiigAooooAKKKKACiiigD/9Jkn32+pptOk++31NNrvRws
|
234
|
+
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKANaH/VL9
|
235
|
+
KlqKH/VL9Klrme5qgooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
|
236
|
+
RRRQAUUUUAWovuCpKji+4KkrN7nRHYKKKKQwooooAKKKKACiiigAooooAKKK
|
237
|
+
KACiiigAooooAKKKKACiiigAooooA//TZJ99vqabTpPvt9TTa70cLCiiigAo
|
238
|
+
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDWh/1S/Spaih/1
|
239
|
+
S/Spa5nuaoKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
|
240
|
+
FFAFqL7gqSo4vuCpKze50R2CiiikMKKKKACiiigAooooAKKKKACiiigAoooo
|
241
|
+
AKKKKACiiigAooooAKKKKAP/1GSffb6mm06T77fU02u9HCwooooAKKKKACii
|
242
|
+
igAooooAKKKKACiiigAooooAKKKKACiiigAooooA1of9Uv0qWoof9Uv0qWuZ
|
243
|
+
7mqCiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBai+
|
244
|
+
4KkqOL7gqSs3udEdgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigA
|
245
|
+
ooooAKKKKACiiigD/9Vkn32+pptOk++31NNrvRwsKKKKACiiigAooooAKKKK
|
246
|
+
ACiiigAooooAKKKKACiiigAooooAKKKKANaH/VL9KlqKH/VL9Klrme5qgooo
|
247
|
+
pAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAWovuCpKji+
|
248
|
+
4KkrN7nRHYKKKKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
|
249
|
+
iigAooooA//WZJ99vqabTpPvt9TTa70cLCiiigAooooAKKKKACiiigAooooA
|
250
|
+
KKKKACiiigAooooAKKKKACiiigDWh/1S/Spaih/1S/Spa5nuaoKKKKQBRRRQ
|
251
|
+
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFqL7gqSo4vuCpKze5
|
252
|
+
0R2CiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
|
253
|
+
KAP/12Sffb6mm06T77fU02u9HCwooooAKKKKACiiigAooooAKKKKACiiigAo
|
254
|
+
oooAKKKKACiiigAooooA1of9Uv0qWoof9Uv0qWuZ7mqCiiikAUUUUAFFFFAB
|
255
|
+
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBai+4KkqOL7gqSs3udEdgooo
|
256
|
+
pDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9DU
|
257
|
+
OnxMSdx5pP7Oi/vNWjRV+0l3I5I9jO/s6L+81H9nRf3mrRoo9pLuHs49jO/s
|
258
|
+
6L+81H9nRf3mrRoo9pLuHs49jO/s6L+81H9nRf3mrRoo9pLuHs49jO/s6L+8
|
259
|
+
1H9nRf3mrRoo9pLuHs49jO/s6L+81H9nRf3mrRoo9pLuHs49jO/s6L+81H9n
|
260
|
+
Rf3mrRoo9pLuHs49jO/s6L+81H9nRf3mrRoo9pLuHs49jO/s6L+81H9nRf3m
|
261
|
+
rRoo9pLuHs49jO/s6L+81H9nRf3mrRoo9pLuHs49jO/s6L+81H9nRf3mrRoo
|
262
|
+
9pLuHs49iBLdUUKCeKd5K+pqWip5mPlRF5K+po8lfU1LRRdhyoi8lfU0eSvq
|
263
|
+
aloouw5UReSvqaPJX1NS0UXYcqIvJX1NHkr6mpaKLsOVEXkr6mjyV9TUtFF2
|
264
|
+
HKiLyV9TR5K+pqWii7DlRF5K+po8lfU1LRRdhyoi8lfU0eSvqaloouw5UReS
|
265
|
+
vqaPJX1NS0UXYcqIvJX1NHkr6mpaKLsOVCKu0YFLRRSKCiiigAooooAKKKKA
|
266
|
+
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=
|
267
|
+
|
268
|
+
--001a1140ffb6f4fc63053a2257e2--
|
269
|
+
|
270
|
+
--xYzZY
|
271
|
+
Content-Disposition: form-data; name="to"
|
272
|
+
|
273
|
+
inbound@inbound.inbound.com
|
274
|
+
--xYzZY
|
275
|
+
Content-Disposition: form-data; name="from"
|
276
|
+
|
277
|
+
Example User <test@example.com>
|
278
|
+
--xYzZY
|
279
|
+
Content-Disposition: form-data; name="sender_ip"
|
280
|
+
|
281
|
+
0.0.0.0
|
282
|
+
--xYzZY
|
283
|
+
Content-Disposition: form-data; name="envelope"
|
284
|
+
|
285
|
+
{"to":["inbound@inbound.inbound.com"],"from":"test@example.com"}
|
286
|
+
--xYzZY
|
287
|
+
Content-Disposition: form-data; name="subject"
|
288
|
+
|
289
|
+
Raw Payload
|
290
|
+
--xYzZY
|
291
|
+
Content-Disposition: form-data; name="charsets"
|
292
|
+
|
293
|
+
{"to":"UTF-8","subject":"UTF-8","from":"UTF-8"}
|
294
|
+
--xYzZY
|
295
|
+
Content-Disposition: form-data; name="SPF"
|
296
|
+
|
297
|
+
pass
|
298
|
+
--xYzZY--
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# A module for sending test SendGrid Inbound Parse messages
|
2
|
+
# Usage: ruby ./send.rb [path to file containing test data]
|
3
|
+
require 'ruby_http_client'
|
4
|
+
require 'yaml'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
OPTS = {}
|
8
|
+
opt = OptionParser.new
|
9
|
+
opt.on('--host=HOST') {|v| OPTS[:host] = v}
|
10
|
+
argv = opt.parse!(ARGV)
|
11
|
+
config = YAML.load_file(File.dirname(__FILE__) + '/config.yml')
|
12
|
+
host = OPTS[:host] || config['host']
|
13
|
+
client = SendGrid::Client.new(host: host)
|
14
|
+
File.open(argv[0]) do |file|
|
15
|
+
data = file.read
|
16
|
+
headers = {
|
17
|
+
'User-Agent' => 'SendGrid-Test',
|
18
|
+
'Content-Type' => 'multipart/form-data; boundary=xYzZY'
|
19
|
+
}
|
20
|
+
response = client.post(
|
21
|
+
request_body: data, request_headers: headers
|
22
|
+
)
|
23
|
+
puts response.status_code
|
24
|
+
puts response.body
|
25
|
+
puts response.headers
|
26
|
+
end
|
data/lib/sendgrid/version.rb
CHANGED
data/sendgrid-ruby.gemspec
CHANGED
@@ -16,8 +16,8 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(/^(test|spec|features)/)
|
18
18
|
spec.require_paths = ['lib']
|
19
|
-
|
20
19
|
spec.add_dependency 'ruby_http_client', '~> 3.0.1'
|
20
|
+
spec.add_dependency 'sinatra', '~> 1.4.7'
|
21
21
|
spec.add_development_dependency 'rake', '~> 0'
|
22
22
|
spec.add_development_dependency 'minitest'
|
23
23
|
end
|
@@ -55,7 +55,7 @@ class TestAPI < MiniTest::Test
|
|
55
55
|
')
|
56
56
|
assert_equal(test_headers, sg.request_headers)
|
57
57
|
assert_equal("v3", sg.version)
|
58
|
-
assert_equal("4.0
|
58
|
+
assert_equal("4.1.0", SendGrid::VERSION)
|
59
59
|
assert_instance_of(SendGrid::Client, sg.client)
|
60
60
|
end
|
61
61
|
|
@@ -1874,7 +1874,7 @@ class TestAPI < MiniTest::Test
|
|
1874
1874
|
email = "test_url_param"
|
1875
1875
|
headers = JSON.parse('{"X-Mock": 200}')
|
1876
1876
|
|
1877
|
-
response = @sg.client.suppression.
|
1877
|
+
response = @sg.client.suppression.spam_reports._(email).get(request_headers: headers)
|
1878
1878
|
|
1879
1879
|
self.assert_equal('200', response.status_code)
|
1880
1880
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elmer Thomas
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-04-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ruby_http_client
|
@@ -26,6 +26,20 @@ dependencies:
|
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 3.0.1
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: sinatra
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.4.7
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.4.7
|
29
43
|
- !ruby/object:Gem::Dependency
|
30
44
|
name: rake
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +86,7 @@ files:
|
|
72
86
|
- TROUBLESHOOTING.md
|
73
87
|
- USAGE.md
|
74
88
|
- USE_CASES.md
|
89
|
+
- config.ru
|
75
90
|
- examples/accesssettings/accesssettings.rb
|
76
91
|
- examples/alerts/alerts.rb
|
77
92
|
- examples/apikeys/apikeys.rb
|
@@ -100,6 +115,14 @@ files:
|
|
100
115
|
- examples/whitelabel/whitelabel.rb
|
101
116
|
- lib/sendgrid-ruby.rb
|
102
117
|
- lib/sendgrid/client.rb
|
118
|
+
- lib/sendgrid/helpers/inbound/README.md
|
119
|
+
- lib/sendgrid/helpers/inbound/app.rb
|
120
|
+
- lib/sendgrid/helpers/inbound/config.yml
|
121
|
+
- lib/sendgrid/helpers/inbound/public/index.html
|
122
|
+
- lib/sendgrid/helpers/inbound/sample_data/default_data.txt
|
123
|
+
- lib/sendgrid/helpers/inbound/sample_data/raw_data.txt
|
124
|
+
- lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt
|
125
|
+
- lib/sendgrid/helpers/inbound/send.rb
|
103
126
|
- lib/sendgrid/helpers/mail/README.md
|
104
127
|
- lib/sendgrid/helpers/mail/mail.rb
|
105
128
|
- lib/sendgrid/version.rb
|
@@ -127,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
150
|
version: '0'
|
128
151
|
requirements: []
|
129
152
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.6.
|
153
|
+
rubygems_version: 2.6.10
|
131
154
|
signing_key:
|
132
155
|
specification_version: 4
|
133
156
|
summary: Official SendGrid Gem
|