breezy_pdf_lite 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4645bb1f1bbd92cf3cf60199b151cbc56bb3b19e
4
+ data.tar.gz: 6fdd5da0ff5367451b01a3b7efd66045e63a5b0d
5
+ SHA512:
6
+ metadata.gz: 28bbd3ba22f00f49d5dc0cc4037636db49250915bbf15b45f9e339add01eae7765db092cdb5c3c27c6c2f8c96520041cbd5dbd2c875cc75331dbcb0fb41aada0
7
+ data.tar.gz: dc8f6dd3f1e6dbc7733fad8d83be440a0d21f7e2dd2c20098fca05dad00985e421646a659e2d9ab9d2ca3375540d72ae47c487051660a8223b8a7aa9f40f9bda
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ example/example.pdf
@@ -0,0 +1,2 @@
1
+ rubocop:
2
+ config_file: .rubocop.yml
@@ -0,0 +1,22 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Style/StringLiterals:
4
+ EnforcedStyle: double_quotes
5
+ Metrics/LineLength:
6
+ Max: 110
7
+ Metrics/MethodLength:
8
+ Max: 20
9
+ Style/ClassAndModuleChildren:
10
+ Enabled: false
11
+ Style/ClassVars:
12
+ Enabled: false
13
+ Metrics/CyclomaticComplexity:
14
+ Enabled: false
15
+ Metrics/PerceivedComplexity:
16
+ Enabled: false
17
+ Metrics/AbcSize:
18
+ Enabled: false
19
+ Security/Open:
20
+ Enabled: false
21
+ Naming/HeredocDelimiterNaming:
22
+ Enabled: false
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.2
5
+ before_install: gem install bundler -v 1.16.0
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in breezy_pdf_lite.gemspec
8
+ gemspec
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ breezy_pdf_lite (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.0)
10
+ minitest (5.11.3)
11
+ minitest-stub-const (0.6)
12
+ parallel (1.12.1)
13
+ parser (2.5.1.0)
14
+ ast (~> 2.4.0)
15
+ powerpack (0.1.2)
16
+ rainbow (3.0.0)
17
+ rake (10.5.0)
18
+ rubocop (0.54.0)
19
+ parallel (~> 1.10)
20
+ parser (>= 2.5)
21
+ powerpack (~> 0.1)
22
+ rainbow (>= 2.2.2, < 4.0)
23
+ ruby-progressbar (~> 1.7)
24
+ unicode-display_width (~> 1.0, >= 1.0.1)
25
+ ruby-progressbar (1.9.0)
26
+ unicode-display_width (1.4.0)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ breezy_pdf_lite!
33
+ bundler (~> 1.16)
34
+ minitest (~> 5.0)
35
+ minitest-stub-const (~> 0.6)
36
+ rake (~> 10.0)
37
+ rubocop (= 0.54)
38
+
39
+ BUNDLED WITH
40
+ 1.16.0
@@ -0,0 +1,165 @@
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+ This version of the GNU Lesser General Public License incorporates
10
+ the terms and conditions of version 3 of the GNU General Public
11
+ License, supplemented by the additional permissions listed below.
12
+
13
+ 0. Additional Definitions.
14
+
15
+ As used herein, "this License" refers to version 3 of the GNU Lesser
16
+ General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+ General Public License.
18
+
19
+ "The Library" refers to a covered work governed by this License,
20
+ other than an Application or a Combined Work as defined below.
21
+
22
+ An "Application" is any work that makes use of an interface provided
23
+ by the Library, but which is not otherwise based on the Library.
24
+ Defining a subclass of a class defined by the Library is deemed a mode
25
+ of using an interface provided by the Library.
26
+
27
+ A "Combined Work" is a work produced by combining or linking an
28
+ Application with the Library. The particular version of the Library
29
+ with which the Combined Work was made is also called the "Linked
30
+ Version".
31
+
32
+ The "Minimal Corresponding Source" for a Combined Work means the
33
+ Corresponding Source for the Combined Work, excluding any source code
34
+ for portions of the Combined Work that, considered in isolation, are
35
+ based on the Application, and not on the Linked Version.
36
+
37
+ The "Corresponding Application Code" for a Combined Work means the
38
+ object code and/or source code for the Application, including any data
39
+ and utility programs needed for reproducing the Combined Work from the
40
+ Application, but excluding the System Libraries of the Combined Work.
41
+
42
+ 1. Exception to Section 3 of the GNU GPL.
43
+
44
+ You may convey a covered work under sections 3 and 4 of this License
45
+ without being bound by section 3 of the GNU GPL.
46
+
47
+ 2. Conveying Modified Versions.
48
+
49
+ If you modify a copy of the Library, and, in your modifications, a
50
+ facility refers to a function or data to be supplied by an Application
51
+ that uses the facility (other than as an argument passed when the
52
+ facility is invoked), then you may convey a copy of the modified
53
+ version:
54
+
55
+ a) under this License, provided that you make a good faith effort to
56
+ ensure that, in the event an Application does not supply the
57
+ function or data, the facility still operates, and performs
58
+ whatever part of its purpose remains meaningful, or
59
+
60
+ b) under the GNU GPL, with none of the additional permissions of
61
+ this License applicable to that copy.
62
+
63
+ 3. Object Code Incorporating Material from Library Header Files.
64
+
65
+ The object code form of an Application may incorporate material from
66
+ a header file that is part of the Library. You may convey such object
67
+ code under terms of your choice, provided that, if the incorporated
68
+ material is not limited to numerical parameters, data structure
69
+ layouts and accessors, or small macros, inline functions and templates
70
+ (ten or fewer lines in length), you do both of the following:
71
+
72
+ a) Give prominent notice with each copy of the object code that the
73
+ Library is used in it and that the Library and its use are
74
+ covered by this License.
75
+
76
+ b) Accompany the object code with a copy of the GNU GPL and this license
77
+ document.
78
+
79
+ 4. Combined Works.
80
+
81
+ You may convey a Combined Work under terms of your choice that,
82
+ taken together, effectively do not restrict modification of the
83
+ portions of the Library contained in the Combined Work and reverse
84
+ engineering for debugging such modifications, if you also do each of
85
+ the following:
86
+
87
+ a) Give prominent notice with each copy of the Combined Work that
88
+ the Library is used in it and that the Library and its use are
89
+ covered by this License.
90
+
91
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+ document.
93
+
94
+ c) For a Combined Work that displays copyright notices during
95
+ execution, include the copyright notice for the Library among
96
+ these notices, as well as a reference directing the user to the
97
+ copies of the GNU GPL and this license document.
98
+
99
+ d) Do one of the following:
100
+
101
+ 0) Convey the Minimal Corresponding Source under the terms of this
102
+ License, and the Corresponding Application Code in a form
103
+ suitable for, and under terms that permit, the user to
104
+ recombine or relink the Application with a modified version of
105
+ the Linked Version to produce a modified Combined Work, in the
106
+ manner specified by section 6 of the GNU GPL for conveying
107
+ Corresponding Source.
108
+
109
+ 1) Use a suitable shared library mechanism for linking with the
110
+ Library. A suitable mechanism is one that (a) uses at run time
111
+ a copy of the Library already present on the user's computer
112
+ system, and (b) will operate properly with a modified version
113
+ of the Library that is interface-compatible with the Linked
114
+ Version.
115
+
116
+ e) Provide Installation Information, but only if you would otherwise
117
+ be required to provide such information under section 6 of the
118
+ GNU GPL, and only to the extent that such information is
119
+ necessary to install and execute a modified version of the
120
+ Combined Work produced by recombining or relinking the
121
+ Application with a modified version of the Linked Version. (If
122
+ you use option 4d0, the Installation Information must accompany
123
+ the Minimal Corresponding Source and Corresponding Application
124
+ Code. If you use option 4d1, you must provide the Installation
125
+ Information in the manner specified by section 6 of the GNU GPL
126
+ for conveying Corresponding Source.)
127
+
128
+ 5. Combined Libraries.
129
+
130
+ You may place library facilities that are a work based on the
131
+ Library side by side in a single library together with other library
132
+ facilities that are not Applications and are not covered by this
133
+ License, and convey such a combined library under terms of your
134
+ choice, if you do both of the following:
135
+
136
+ a) Accompany the combined library with a copy of the same work based
137
+ on the Library, uncombined with any other library facilities,
138
+ conveyed under the terms of this License.
139
+
140
+ b) Give prominent notice with the combined library that part of it
141
+ is a work based on the Library, and explaining where to find the
142
+ accompanying uncombined form of the same work.
143
+
144
+ 6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+ The Free Software Foundation may publish revised and/or new versions
147
+ of the GNU Lesser General Public License from time to time. Such new
148
+ versions will be similar in spirit to the present version, but may
149
+ differ in detail to address new problems or concerns.
150
+
151
+ Each version is given a distinguishing version number. If the
152
+ Library as you received it specifies that a certain numbered version
153
+ of the GNU Lesser General Public License "or any later version"
154
+ applies to it, you have the option of following the terms and
155
+ conditions either of that published version or of any later version
156
+ published by the Free Software Foundation. If the Library as you
157
+ received it does not specify a version number of the GNU Lesser
158
+ General Public License, you may choose any version of the GNU Lesser
159
+ General Public License ever published by the Free Software Foundation.
160
+
161
+ If the Library as you received it specifies that a proxy can decide
162
+ whether future versions of the GNU Lesser General Public License shall
163
+ apply, that proxy's public statement of acceptance of any version is
164
+ permanent authorization for you to choose that version for the
165
+ Library.
@@ -0,0 +1,74 @@
1
+ # BreezyPDFLite
2
+
3
+ [![Build Status](https://travis-ci.org/danielwestendorf/breezy_pdf_lite-ruby.svg?branch=master)](https://travis-ci.org/danielwestendorf/breezy_pdf_lite-ruby)
4
+
5
+ A ruby client for [BreezyPDFLite](https://github.com/danielwestendorf/breezy-pdf-lite), a one-click-to-deploy microservice for converting HTML to PDF with Google Chrome. Send the library a chunk of HTML, get a PDF of it back. Configure how the PDF is rendered via [`meta` tags](https://github.com/danielwestendorf/breezy-pdf-lite#2-configure-with-meta-tags-optional) in the HTML.
6
+
7
+ Use pragmatically, or as a Rack Middleware.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'breezy_pdf_lite'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install breezy_pdf_lite
24
+
25
+ ## Usage
26
+
27
+ BreezyPDFLite requires some configuration before you can use it. Somewhere in your application (perhaps in `config/intializers/breezy_pdf_lite.rb`), configure the `base_url`and the `secret_api_key` of your service. Get these from your Heroku configuration.
28
+
29
+ ```ruby
30
+ BreezyPDFLite.setup do |config|
31
+ config.secret_api_key = ENV["BREEZYPDF_SECRET_API_KEY"]
32
+ config.base_url = ENV.fetch("BREEZYPDF_BASE_URL", "http://localhost:5001")
33
+ end
34
+ ```
35
+
36
+ ### Middleware
37
+
38
+ Add the Middleware to your stack.
39
+
40
+ _Ruby on Rails_
41
+ ```ruby
42
+ # config/application.rb
43
+ config.middleware.use BreezyPDFLite::Middleware
44
+ ```
45
+
46
+ Any URL ending in `.pdf` will be intercepted, rendered as HTML, rendered to a PDF, and then returned to the client.
47
+
48
+ _Rack/Sinatra/etc_
49
+
50
+ See `example/config.ru`
51
+
52
+ ### Pragmatic
53
+
54
+ See `example/pragmatic.rb`
55
+
56
+
57
+ ## Examples
58
+ Examples depend on the [BreezyPDFLite](https://github.com/danielwestendorf/breezy-pdf-lite) microservice being avialable.
59
+
60
+ _Middleware_
61
+
62
+ `BREEZYPDF_SECRET_API_KEY=YOURSECRETKEY BREEZYPDF_BASE_URL=https://YOURHEROKUAPPORWHATEVER.herokuapp.com/ rackup example/config.ru`
63
+
64
+ Visit `https://localhost:9292` and click the link to download the PDF.
65
+
66
+ _Pragmatic_
67
+
68
+ `BREEZYPDF_SECRET_API_KEY=YOURSECRETKEY BREEZYPDF_BASE_URL=https://YOURHEROKUAPPORWHATEVER.herokuapp.com/ ruby example/pragmatic.rb`
69
+
70
+ The PDF will be downloaded to `example/example.pdf`
71
+
72
+ ## License
73
+
74
+ See `LICENSE.txt`.
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ end
11
+
12
+ task default: :test
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "breezy_pdf_lite"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,29 @@
1
+
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path("lib", __dir__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require "breezy_pdf_lite/version"
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "breezy_pdf_lite"
10
+ spec.version = BreezyPDFLite::VERSION
11
+ spec.authors = ["Daniel Westendorf"]
12
+ spec.email = ["daniel@prowestech.com"]
13
+
14
+ spec.summary = "Ruby/rack middleware for BreezyPDF Lite. HTML to PDF."
15
+ spec.license = "GPLv3"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.16"
25
+ spec.add_development_dependency "minitest", "~> 5.0"
26
+ spec.add_development_dependency "minitest-stub-const", "~> 0.6"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rubocop", "0.54"
29
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
+ require "breezy_pdf_lite"
5
+
6
+ html = File.read(File.expand_path("ex.html", __dir__))
7
+
8
+ BreezyPDFLite.setup do |config|
9
+ config.secret_api_key = ENV["BREEZYPDF_SECRET_API_KEY"]
10
+ config.base_url = ENV.fetch("BREEZYPDF_BASE_URL", "http://localhost:5001")
11
+ config.middleware_path_matchers = [/as-pdf.pdf/]
12
+ end
13
+
14
+ use BreezyPDFLite::Middleware
15
+ run proc { |_env| ["200", { "Content-Type" => "text/html" }, [html]] }
@@ -0,0 +1,366 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="breezy-pdf-variable" content="pdfRenderReady">
7
+ <meta name="breezy-pdf-displayBackground" content="true">
8
+ <meta name="breezy-pdf-marginTop" content="0.4">
9
+ <meta name="breezy-pdf-marginBottom" content="0.7">
10
+ <meta name="breezy-pdf-footerTemplate" content=" &lt;style type=&quot;text/css&quot;&gt;
11
+ #footer {
12
+ font-size: 12px;
13
+ font-weight: 400;
14
+ line-height: 1.5;
15
+ color: #212529;
16
+ font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,&quot;Helvetica Neue&quot;,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;,&quot;Segoe UI Symbol&quot;;
17
+ width: 100%;
18
+ align-items: flex-end;
19
+ padding-bottom: 0.4cm;
20
+ color: lightgrey;
21
+ }
22
+
23
+ .left {
24
+ flex: none;
25
+ padding-left: 0.7cm;
26
+ padding-right: 0.1cm;
27
+ }
28
+
29
+ .center {
30
+ flex: auto;
31
+ padding-left: 0.7cm;
32
+ padding-right: 0.7cm;
33
+ text-align: center;
34
+ }
35
+
36
+ .right {
37
+ flex: none;
38
+ padding-left: 0.1cm;
39
+ padding-right: 0.7cm;
40
+ }
41
+
42
+ .grow {
43
+ flex: auto;
44
+ }
45
+
46
+ .text {
47
+ font-size: 8px;
48
+ overflow: hidden;
49
+ text-overflow: ellipsis;
50
+ white-space: nowrap;
51
+ }
52
+
53
+ .text img {
54
+ height: 16px;
55
+ }
56
+ &lt;/style&gt;
57
+ &lt;div id=&quot;footer&quot;&gt;
58
+ &lt;div class=&quot;left text&quot;&gt;
59
+ &lt;span class=&quot;date&quot;&gt;&lt;/span&gt;
60
+ &lt;/div&gt;
61
+ &lt;div class=&quot;text center grow&quot;&gt;
62
+ &lt;a href=&quot;https://breezypdf.com&quot;&gt;
63
+ &lt;img src=&quot;data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwNnB4IiBoZWlnaHQ9IjczcHgiIHZpZXdCb3g9IjAgMCA0MDYgNzMiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iTGlnaHRCRyI+CiAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTQuMDAwMDAwLCAxMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMjAuNTExMjc4LDIuMzUgTDIyOC43MDU5ODUsMi4zNSBDMjMzLjE0MjQzLDIuMzUgMjM2LjMzMjQsMi43NTc5MzY4OCAyMzguMjkxNTk0LDMuNTY0NTM5MzQgQzI0MC4yNTA3ODksNC4zNzExNDE4IDI0MS44MDQ5NTcsNS42NjkxMjI3NyAyNDIuOTM1MjYyLDcuNDc3MDI0ODMgQzI0NC4wNjU1NjYsOS4yNzU2NTU2IDI0NC42MzA3MTgsMTEuNDM1ODY2OCAyNDQuNjMwNzE4LDEzLjk0NTI5NjcgQzI0NC42MzA3MTgsMTYuNzM1OTU1OCAyNDMuODg2NjAxLDE5LjA1Mzc3ODkgMjQyLjQwNzc4NiwyMC44OTg3NjYxIEMyNDAuOTI4OTcxLDIyLjc0OTkzNDIgMjM4LjkxMzI2MiwyNC4wMzI0NjMxIDIzNi4zNzk0OTYsMjQuNzUyNTMzNSBDMjM0Ljg5MTI2MiwyNS4xNjk3NDE2IDIzMi4xODE2NzEsMjUuMzgyOTgxNCAyMjguMjQ0NDQ0LDI1LjM4Mjk4MTQgTDIyOC4yNDQ0NDQsNDIuMyBMMjIwLjUxMTI3OCw0Mi4zIEwyMjAuNTExMjc4LDIuMzUgWiBNMjI4LjI0NDQ0NCwxNy45NjkwMzc3IEwyMzAuNjkzNDM3LDE3Ljk2OTAzNzcgQzIzMi42MjQzNzQsMTcuOTY5MDM3NyAyMzMuOTcxMzIsMTcuODI5OTY4MyAyMzQuNzI0ODU2LDE3LjU2MTEwMDggQzIzNS40NzgzOTIsMTcuMjkyMjMzMyAyMzYuMDY4NjYyLDE2LjgzNzk0IDIzNi41MDUwODUsMTYuMjE2NzYzNCBDMjM2LjkzODM2OSwxNS41OTU1ODY4IDIzNy4xNTE4NzEsMTQuODM1MzQwOCAyMzcuMTUxODcxLDEzLjk0NTI5NjcgQzIzNy4xNTE4NzEsMTIuNDA5MzUyNSAyMzYuNTM5NjIzLDExLjI4NzUyNjEgMjM1LjMzNzEwNCwxMC41ODI5MDc5IEMyMzQuNDUxNjk5LDEwLjA1NDQ0NDIgMjMyLjgxMjc1OCw5Ljc5NDg0Nzk5IDIzMC40MjAyOCw5Ljc5NDg0Nzk5IEwyMjguMjQ0NDQ0LDkuNzk0ODQ3OTkgTDIyOC4yNDQ0NDQsMTcuOTY5MDM3NyBaIE0yNTIuMjEwMDM3LDIuMzUgTDI2MS4zNzE3ODIsMi4zNSBDMjY3LjI3NzYyMywyLjM1IDI3MS42NjY5NzEsMy4wNzMxNjA4MyAyNzQuNTMwNDA5LDQuNTEwMjExMTkgQzI3Ny40MDAxMjYsNS45NTY1MzI4NCAyNzkuNzY0MzQ3LDguMjkyODk4NTggMjgxLjYxOTkzLDExLjUzNzg1MSBDMjgzLjQ3NTUxMywxNC43NzA0NDE3IDI4NC40MDgwMTQsMTguNTUzMTI5MSAyODQuNDA4MDE0LDIyLjg4MjgyMjggQzI4NC40MDgwMTQsMjUuOTYwODkxOSAyODMuODg5OTU4LDI4Ljc4NTU0NTggMjgyLjg1Mzg0NSwzMS4zNzIyMzY0IEMyODEuODA4MzE0LDMzLjk0OTY1NTggMjgwLjM3NjU5NSwzNi4wOTEzMjQ0IDI3OC41NDkyNjksMzcuNzk0MTUxOCBDMjc2LjcxMjUyNSwzOS40OTA3OTgzIDI3NC43MzQ0OTIsNDAuNjY4MjUyNSAyNzIuNTk5NDczLDQxLjMyNjUxNDMgQzI3MC40NzA3MzMsNDEuOTc1NTA0OCAyNjYuNzY4OTg2LDQyLjMgMjYxLjUwNjc5MSw0Mi4zIEwyNTIuMjEwMDM3LDQyLjMgTDI1Mi4yMTAwMzcsMi4zNSBaIE0yNTkuOTExODA2LDkuNjgwNTAyMDUgTDI1OS45MTE4MDYsMzQuODU4MjQyNCBMMjYzLjQ5NDI0MywzNC44NTgyNDI0IEMyNjcuMDIzMzA0LDM0Ljg1ODI0MjQgMjY5LjU4NTMyNywzNC40NTk1NzY5IDI3MS4xNzcxNzMsMzMuNjYyMjQ1NyBDMjcyLjc2OTAxOCwzMi44NjQ5MTQ1IDI3NC4wNjU3MjksMzEuNTI5ODQ4NCAyNzUuMDgzMDAyLDI5LjY0Nzc3NiBDMjc2LjA5Mzk5NywyNy43NjU3MDM2IDI3Ni41OTk0OTQsMjUuNDUwOTcwOCAyNzYuNTk5NDk0LDIyLjY5NzM5NjkgQzI3Ni41OTk0OTQsMTguNDYwNDE2MiAyNzUuMzkzODM2LDE1LjE2OTEwNzMgMjcyLjk4NTY2LDEyLjgzMjc0MTUgQzI3MC44MTkyNDMsMTAuNzM3NDI5NCAyNjcuMzM0MTM4LDkuNjgwNTAyMDUgMjYyLjUzMzQ4NCw5LjY4MDUwMjA1IEwyNTkuOTExODA2LDkuNjgwNTAyMDUgWiBNMjkxLjg1NTQ2NCwyLjM1IEwzMTIsMi4zNSBMMzEyLDkuNzY3MDM0MTEgTDI5OS40OTEyOTgsOS43NjcwMzQxMSBMMjk5LjQ5MTI5OCwxNy4wMTQwOTQ1IEwzMTIsMTcuMDE0MDk0NSBMMzEyLDI0LjMyNjA1NCBMMjk5LjQ5MTI5OCwyNC4zMjYwNTQgTDI5OS40OTEyOTgsNDIuMyBMMjkxLjg1NTQ2NCw0Mi4zIEwyOTEuODU1NDY0LDIuMzUgWiIgaWQ9IkZpbGwtMiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LjcyNjY2OTcsMjguNjI2NDM4NyBMMjQuNzI2NjY5NywzMi4yMjk2NTYxIEwwLDIwLjY2MzkyOTUgTDAsMTcuNDU2MTQ4NiBMMjQuNzI2NjY5Nyw1Ljg0Mjk2OTY0IEwyNC43MjY2Njk3LDkuNDY4MzMxNDMgTDQuNjQwNjY1NSwxOS4wOTE2NzQgTDI0LjcyNjY2OTcsMjguNjI2NDM4NyBaIE0zMS4xNjcwOTAzLDM3LjE4Njg0OCBMMzEuMTY3MDkwMywwIEwzNC41MDI0NzI3LDAgTDM0LjUwMjQ3MjcsMTQuOTY2NDgwNCBDMzUuOTA2MDM2LDEzLjE5MTc2MTUgMzcuNDc1NDQ3LDExLjg2OTQyMTggMzkuMjE2ODQ4MywxMC45ODM2NDQxIEM0MC45NTgyNDk2LDEwLjExMDUyMDMgNDIuODYyNDI3Myw5LjY2NDQ2NzkzIDQ0LjkzODU5NTQsOS42NjQ0Njc5MyBDNDguNjI0MTAwNyw5LjY2NDQ2NzkzIDUxLjc2OTA2NTMsMTEuMDQzNzUwNCA1NC4zODI3MDI4LDEzLjc5NTk4ODQgQzU2Ljk5MDE5NzksMTYuNTQ4MjI2NCA1OC4yOTU0ODEsMTkuODkyMDM3NCA1OC4yOTU0ODEsMjMuODIxMDk0NCBDNTguMjk1NDgxLDI3LjY5OTUzNTYgNTYuOTgwOTg0MSwzMS4wMTgwMzg2IDU0LjM0Mjc3NjUsMzMuNzYwNzg2MiBDNTEuNzEwNzExNSwzNi41MDY2OTcyIDQ4LjU0MTE3NjgsMzcuODc2NDg5MiA0NC44MzcyNDQsMzcuODc2NDg5MiBDNDIuNzE1MDA3MSwzNy44NzY0ODkyIDQwLjc5MjQwMTgsMzcuNDA1MTI4OSAzOS4wNjk0MjgxLDM2LjQ3MTg5ODggQzM3LjM0NjQ1NDMsMzUuNTM4NjY4NiAzNS44MjYxODM0LDM0LjEzMDkxNDcgMzQuNTAyNDcyNywzMi4yNTQ5NjQgTDM0LjUwMjQ3MjcsMzcuMTg2ODQ4IEwzMS4xNjcwOTAzLDM3LjE4Njg0OCBaIE00NC41NzYxODczLDM0LjU1MTY1OTIgQzQ2LjQ0OTY1MjYsMzQuNTUxNjU5MiA0OC4xNjM0MTI1LDM0LjA3Mzk3MTkgNDkuNzQ4MTc5OSwzMy4xMzEyNTEzIEM1MS4zMjY4MDQ2LDMyLjE4ODUzMDcgNTIuNTg2MDE5LDMwLjg1NjcwMDUgNTMuNTE2NjA5MSwyOS4xNDg0MTQ5IEM1NC40NTY0MTI5LDI3LjQ0MDEyOTIgNTQuOTIzMjQzNiwyNS42MzA2MTE4IDU0LjkyMzI0MzYsMjMuNzE5ODYyNyBDNTQuOTIzMjQzNiwyMS44MTg2MDQgNTQuNDQ3MTk5MiwxOS45OTk1OTYxIDUzLjUwNzM5NTMsMTguMjcyMzI5NSBDNTIuNTY3NTkxNSwxNi41NDgyMjY0IDUxLjMwMjIzNDYsMTUuMjAwNTc4OSA0OS43MDgyNTM1LDE0LjI0MjA0MDggQzQ4LjEyMzQ4NjIsMTMuMjgzNTAyNyA0Ni40MzEyMjUsMTIuODAyNjUxOSA0NC42MjUzMjc0LDEyLjgwMjY1MTkgQzQyLjc4ODcxNzIsMTIuODAyNjUxOSA0MS4wNDczMTU5LDEzLjI4MzUwMjcgMzkuMzk0OTgxLDE0LjI0MjA0MDggQzM3Ljc0NTcxNzQsMTUuMjAwNTc4OSAzNi40NzExNDY4LDE2LjQ5NzYxMDYgMzUuNTg2NjI1NSwxOC4xMjM2NDU0IEMzNC43MDUxNzU1LDE5Ljc1NjAwNzMgMzQuMjU2NzcyMywyMS41ODEzNDIxIDM0LjI1Njc3MjMsMjMuNjI4MTIxNCBDMzQuMjU2NzcyMywyNi43MzQ2NzA1IDM1LjI1MTg1ODgsMjkuMzI1NTcwNCAzNy4yMzg5NjA0LDMxLjQxMzQ3NTEgQzM5LjIyNjA2MiwzMy41MDEzNzk4IDQxLjY3Mzg1MTksMzQuNTUxNjU5MiA0NC41NzYxODczLDM0LjU1MTY1OTIgWiBNNjMuMTM1Nzc4MSwxMC4zNTQxMDkyIEw2Ni41NTcxNTU1LDEwLjM1NDEwOTIgTDY2LjU1NzE1NTUsMTQuMjc2ODM5MiBDNjcuNTc5ODgzMywxMi43MzYyMTg2IDY4LjY1Nzg5MzYsMTEuNTgxNTQ0MSA2OS43ODUwNDQsMTAuODE1OTc5IEM3MC45MjE0MDgxLDEwLjA1MDQxMzkgNzIuMDk3Njk4Niw5LjY2NDQ2NzkzIDczLjMzMjM0MjksOS42NjQ0Njc5MyBDNzQuMjU2NzkwNSw5LjY2NDQ2NzkzIDc1LjI0NTczNDQsOS45NzQ0OTAxNCA3Ni4yOTkxNzQ3LDEwLjU4MTg4MDYgTDc0LjU1MTYzMDksMTMuNDk1NDU2NyBDNzMuODQ4MzEzNiwxMy4xNzI3ODA1IDczLjI1ODYzMjgsMTMuMDI0MDk2NCA3Mi43NzY0NDU4LDEzLjAyNDA5NjQgQzcxLjY2NDY1MTcsMTMuMDI0MDk2NCA3MC41ODY2NDE0LDEzLjQ5NTQ1NjcgNjkuNTQ4NTU3NCwxNC40MzUwMTM4IEM2OC41MTA0NzM0LDE1LjM4NzIyNDkgNjcuNzE4MDg5NywxNi44NTE5MjE3IDY3LjE4MDYyMDIsMTguODM4NTk0NiBDNjYuNzYyOTI5NiwyMC4zNjk3MjQ3IDY2LjU1NzE1NTUsMjMuNDYwNDU2NCA2Ni41NTcxNTU1LDI4LjExMzk1MyBMNjYuNTU3MTU1NSwzNy4xODY4NDggTDYzLjEzNTc3ODEsMzcuMTg2ODQ4IEw2My4xMzU3NzgxLDEwLjM1NDEwOTIgWiBNMTAxLjA4NDE5OCwyOC4yODE2MTgxIEwxMDMuOTAzNjEsMjkuODEyNzQ4MiBDMTAyLjk3OTE2MiwzMS42OTE4NjI0IDEwMS45MTAzNjYsMzMuMTk3Njg0NiAxMDAuNzAwMjkxLDM0LjM1MjM1OTIgQzk5LjQ4MTAwMzQsMzUuNTAzODcwMiA5OC4xMTczNjY0LDM2LjM4MDE1NzUgOTYuNjAzMjM4LDM2Ljk3NDg5NCBDOTUuMDg2MDM4MywzNy41NzU5NTc1IDkzLjM2OTIwNywzNy44NzY0ODkyIDkxLjQ1NTgxNTUsMzcuODc2NDg5MiBDODcuMjA4MjcwNiwzNy44NzY0ODkyIDgzLjg4ODI0NDUsMzYuNDQ2NTkwOCA4MS40OTU3MzczLDMzLjU3NzMwMzYgQzc5LjEwMDE1ODgsMzAuNzA0ODUyOSA3Ny45MDg1MTIxLDI3LjQ2NTQzNzIgNzcuOTA4NTEyMSwyMy44NDY0MDI0IEM3Ny45MDg1MTIxLDIwLjQ0NTY0ODUgNzguOTIyMDI2LDE3LjQwODY5NjIgODAuOTQ5MDU0LDE0Ljc0ODE5OTUgQzgzLjUxMzU1MTUsMTEuMzYzMjYzMSA4Ni45NTY0Mjc3LDkuNjY0NDY3OTMgOTEuMjYyMzI2NSw5LjY2NDQ2NzkzIEM5NS42OTcyMTc5LDkuNjY0NDY3OTMgOTkuMjQ0NTE2OCwxMS40MDQzODg1IDEwMS44OTE5MzgsMTQuODc0NzM5MiBDMTAzLjc4MDc2LDE3LjMyMzI4MiAxMDQuNzM1OTIsMjAuMzc5MjE1MiAxMDQuNzY5NzA0LDI0LjAzOTM3NTQgTDgxLjM1NzUzMDgsMjQuMDM5Mzc1NCBDODEuNDE1ODg0NywyNy4xNzEyMzI0IDgyLjM4NjQwMTEsMjkuNzMwNDk3NCA4NC4yNTA2NTI1LDMxLjcyNjY2MDggQzg2LjEyMTA0NjUsMzMuNzE5NjYwOCA4OC40MjQ0ODczLDM0LjcyMjQ4NzcgOTEuMTcwMTg4OCwzNC43MjI0ODc3IEM5Mi40OTM4OTk1LDM0LjcyMjQ4NzcgOTMuNzg2ODk3NiwzNC40ODUyMjU4IDk1LjAzNjg5ODIsMzQuMDA3NTM4NSBDOTYuMjg2ODk4OCwzMy41MjY2ODc4IDk3LjM1NTY5NTMsMzIuODkzOTg5NCA5OC4yMzEwMDI5LDMyLjEwMzExNjQgQzk5LjEwNjMxMDQsMzEuMzIxNzMzOSAxMDAuMDYxNDcxLDMwLjA0MDUxOTYgMTAxLjA4NDE5OCwyOC4yODE2MTgxIFogTTEwMS4wODQxOTgsMjEuMDU5MzY2IEMxMDAuNjM1Nzk1LDE5LjIxODIxMzYgOTkuOTgxNjE3OSwxNy43NDQwMjY0IDk5LjEzMDg4MDQsMTYuNjQ5NDU4MiBDOTguMjc0MDAwNCwxNS41NDg1NjMgOTcuMTQzNzc4OCwxNC42NTMyOTQ3IDk1Ljc0MDIxNTUsMTMuOTgyNjM0NCBDOTQuMzMzNTgwOSwxMy4zMDg4MTA3IDkyLjg2MjQ1MDEsMTIuOTcwMzE3IDkxLjMxMTQ2NjUsMTIuOTcwMzE3IEM4OC43NTkyNTQxLDEyLjk3MDMxNyA4Ni41NjMzMDcxLDEzLjgyMTI5NjQgODQuNzMyODM5NSwxNS41MTM3NjQ2IEM4My4zOTM3NzI1LDE2Ljc0NDM2MjkgODIuMzc3MTg3MywxOC41OTUwMDU3IDgxLjY5MjI5NzYsMjEuMDU5MzY2IEwxMDEuMDg0MTk4LDIxLjA1OTM2NiBaIE0xMzIuOTQ1MzkyLDI4LjI4MTYxODEgTDEzNS43NjQ4MDQsMjkuODEyNzQ4MiBDMTM0Ljg0MDM1NiwzMS42OTE4NjI0IDEzMy43NzE1NiwzMy4xOTc2ODQ2IDEzMi41NTg0MTQsMzQuMzUyMzU5MiBDMTMxLjM0MjE5NywzNS41MDM4NzAyIDEyOS45Nzg1NiwzNi4zODAxNTc1IDEyOC40NjQ0MzIsMzYuOTc0ODk0IEMxMjYuOTQ3MjMyLDM3LjU3NTk1NzUgMTI1LjIzMDQwMSwzNy44NzY0ODkyIDEyMy4zMTcwMDksMzcuODc2NDg5MiBDMTE5LjA2OTQ2NCwzNy44NzY0ODkyIDExNS43NDk0MzgsMzYuNDQ2NTkwOCAxMTMuMzU2OTMxLDMzLjU3NzMwMzYgQzExMC45NjEzNTMsMzAuNzA0ODUyOSAxMDkuNzY5NzA2LDI3LjQ2NTQzNzIgMTA5Ljc2OTcwNiwyMy44NDY0MDI0IEMxMDkuNzY5NzA2LDIwLjQ0NTY0ODUgMTEwLjc4MzIyLDE3LjQwODY5NjIgMTEyLjgxMDI0OCwxNC43NDgxOTk1IEMxMTUuMzc0NzQ1LDExLjM2MzI2MzEgMTE4LjgxNDU1LDkuNjY0NDY3OTMgMTIzLjEyMzUyLDkuNjY0NDY3OTMgQzEyNy41NTg0MTIsOS42NjQ0Njc5MyAxMzEuMTA1NzExLDExLjQwNDM4ODUgMTMzLjc1MzEzMiwxNC44NzQ3MzkyIEMxMzUuNjQxOTU0LDE3LjMyMzI4MiAxMzYuNTk3MTE0LDIwLjM3OTIxNTIgMTM2LjYzMDg5NywyNC4wMzkzNzU0IEwxMTMuMjE4NzI1LDI0LjAzOTM3NTQgQzExMy4yNzQwMDcsMjcuMTcxMjMyNCAxMTQuMjQ3NTk1LDI5LjczMDQ5NzQgMTE2LjEwODc3NSwzMS43MjY2NjA4IEMxMTcuOTgyMjQsMzMuNzE5NjYwOCAxMjAuMjg1NjgxLDM0LjcyMjQ4NzcgMTIzLjAzMTM4MywzNC43MjI0ODc3IEMxMjQuMzU1MDkzLDM0LjcyMjQ4NzcgMTI1LjY0NTAyLDM0LjQ4NTIyNTggMTI2Ljg5ODA5MiwzNC4wMDc1Mzg1IEMxMjguMTQ4MDkzLDMzLjUyNjY4NzggMTI5LjIxNjg4OSwzMi44OTM5ODk0IDEzMC4wOTIxOTcsMzIuMTAzMTE2NCBDMTMwLjk2NzUwNCwzMS4zMjE3MzM5IDEzMS45MjI2NjQsMzAuMDQwNTE5NiAxMzIuOTQ1MzkyLDI4LjI4MTYxODEgWiBNMTMyLjk0NTM5MiwyMS4wNTkzNjYgQzEzMi40OTY5ODksMTkuMjE4MjEzNiAxMzEuODQyODEyLDE3Ljc0NDAyNjQgMTMwLjk5MjA3NCwxNi42NDk0NTgyIEMxMzAuMTMyMTIzLDE1LjU0ODU2MyAxMjkuMDA0OTczLDE0LjY1MzI5NDcgMTI3LjYwMTQwOSwxMy45ODI2MzQ0IEMxMjYuMTk0Nzc1LDEzLjMwODgxMDcgMTI0LjcyMzY0NCwxMi45NzAzMTcgMTIzLjE3MjY2LDEyLjk3MDMxNyBDMTIwLjYyMDQ0OCwxMi45NzAzMTcgMTE4LjQyNDUwMSwxMy44MjEyOTY0IDExNi41OTQwMzMsMTUuNTEzNzY0NiBDMTE1LjI1MTg5NSwxNi43NDQzNjI5IDExNC4yMzgzODEsMTguNTk1MDA1NyAxMTMuNTUzNDkxLDIxLjA1OTM2NiBMMTMyLjk0NTM5MiwyMS4wNTkzNjYgWiBNMTQwLjc0MDIzNiwxMC4zNTQxMDkyIEwxNTkuODcxMDgsMTAuMzU0MTA5MiBMMTQ1LjExOTg0NSwzNC4xMzA5MTQ3IEwxNTkuMzk1MDM2LDM0LjEzMDkxNDcgTDE1OS4zOTUwMzYsMzcuMTg2ODQ4IEwxMzkuMzUyMDI5LDM3LjE4Njg0OCBMMTU0LjEwMDE5MywxMy4zOTEwNjE1IEwxNDAuNzQwMjM2LDEzLjM5MTA2MTUgTDE0MC43NDAyMzYsMTAuMzU0MTA5MiBaIE0xNjAuODk5OTUsMTAuMzU0MTA5MiBMMTY0LjQ0NzI0OSwxMC4zNTQxMDkyIEwxNzMuNDAzMDI3LDMxLjAyNzUyOTEgTDE4Mi4wODg1MzUsMTAuMzU0MTA5MiBMMTg1LjY1NzMzMywxMC4zNTQxMDkyIEwxNzAuMTE2Nzg1LDQ3IEwxNjYuNTc4Nyw0NyBMMTcxLjYwMzI3MiwzNS4xNjUzNzY2IEwxNjAuODk5OTUsMTAuMzU0MTA5MiBaIE0xODguNzQ3MDE0LDI4LjYyNjQzODcgTDIwOC44MzMwMTksMTkuMDkxNjc0IEwxODguNzQ3MDE0LDkuNDY4MzMxNDMgTDE4OC43NDcwMTQsNS44NDI5Njk2NCBMMjEzLjQ3MzY4NCwxNy40NTYxNDg2IEwyMTMuNDczNjg0LDIwLjY2MzkyOTUgTDE4OC43NDcwMTQsMzIuMjI5NjU2MSBMMTg4Ljc0NzAxNCwyOC42MjY0Mzg3IFoiIGlkPSJGaWxsLTMiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMiI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMCwwIEw1OC4zMzMzMzMzLDAgTDU4LjMzMzMzMzMsNDIuMzg3MDk2OCBMMCw0Mi4zODcwOTY4IEw3LjQzMzQ4NzUxLDIxLjE5MzU0ODQgTDAsMCBaIE0yNi40NjE2OTM1LDI4LjgyMTA1NTggTDI2LjQ2MTY5MzUsMjQuOTA2MDM2IEwxNi40NTY0MDYyLDIxLjE3NzI3MzUgTDI2LjQ2MTY5MzUsMTcuMzg3MDI4IEwyNi40NjE2OTM1LDEzLjQ3MjAwODEgTDEyLjkxOTUzMjcsMTkuMTEwMzYgTDEyLjkxOTUzMjcsMjMuMTgyNzA0IEwyNi40NjE2OTM1LDI4LjgyMTA1NTggWiBNMzEuMDc2MDU5NSwzMi4yNjc3MTk5IEwzOC4xNzU3NDkxLDEwLjEyMTE4NTIgTDM0LjQzMTMzMywxMC4xMjExODUyIEwyNy4zMzE2NDMzLDMyLjI2NzcxOTkgTDMxLjA3NjA1OTUsMzIuMjY3NzE5OSBaIE01Mi41ODc4NTk3LDIzLjE4MjcwNCBMNTIuNTg3ODU5NywxOS4xMTAzNiBMMzkuMDQzOTY5NCwxMy40NzIwMDgxIEwzOS4wNDM5Njk0LDE3LjM4NzAyOCBMNDkuMDUwOTg2MywyMS4xNzcyNzM1IEwzOS4wNDM5Njk0LDI0LjkwNjAzNiBMMzkuMDQzOTY5NCwyOC44MjEwNTU4IEw1Mi41ODc4NTk3LDIzLjE4MjcwNCBaIiBpZD0iQ29tYmluZWQtU2hhcGUiIGZpbGw9IiMxQTk2QzciPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC42NjY2NjY3LDMwLjYxMjkwMzIgTDY5LjU2NjUxMjUsMzAuNjEyOTAzMiBMNzcsNTEuODA2NDUxNiBMNjkuNTY2NTEyNSw3MyBMMTguNjY2NjY2Nyw3MyBMMTguNjY2NjY2NywzMC42MTI5MDMyIFogTTMyLjIwMDE3OTksNTkuMzQ3MTU5NSBMMzIuMjAwMTc5OSw1NC42MDAzMTEgTDM1LjUyOTUxMDYsNTQuNjAwMzExIEMzNi4zNzE3ODgsNTQuNTk0ODg2MSAzNy4xMTg5NDE3LDU0LjQ1NzQ1MzUgMzcuNzY0MDUzNiw1NC4xODk4MjE2IEMzOC40MDkxNjU1LDUzLjkxNjc2NDggMzguOTQ4Nzc2NSw1My41NDk2NzUyIDM5LjM4ODA3NTIsNTMuMDc0MDg2MiBDMzkuODI3MzczOSw1Mi41OTg0OTcyIDQwLjE1OTQ0MjIsNTIuMDUyMzgzNiA0MC4zODI1NTA2LDUxLjQzMzkzNyBDNDAuNjA1NjU5LDUwLjgxMzY4MjIgNDAuNzE4MDc4LDUwLjE1MDAyNzUgNDAuNzE4MDc4LDQ5LjQ0NjU4OTggQzQwLjcxODA3OCw0OC43MzQxMTA0IDQwLjYwNTY1OSw0OC4wNjY4MzkyIDQwLjM4MjU1MDYsNDcuNDQ0Nzc2IEM0MC4xNTk0NDIyLDQ2LjgyNDUyMTEgMzkuODI3MzczOSw0Ni4yNzQ3OTA4IDM5LjM4ODA3NTIsNDUuNzk5MjAxOCBDMzguOTQ4Nzc2NSw0NS4zMjM2MTI4IDM4LjQwOTE2NTUsNDQuOTUxMDk4MiAzNy43NjQwNTM2LDQ0LjY3OTg0OTcgQzM3LjExODk0MTcsNDQuNDEyMjE3OSAzNi4zNzE3ODgsNDQuMjcyOTc3IDM1LjUyOTUxMDYsNDQuMjY5MzYwMyBMMjcuODMzMTM1Nyw0NC4yNjkzNjAzIEwyNy44MzMxMzU3LDU5LjM0NzE1OTUgTDMyLjIwMDE3OTksNTkuMzQ3MTU5NSBaIE0zNC45Njc0MTU4LDUwLjYyMDE5MTYgTDMyLjIwMDE3OTksNTAuNjIwMTkxNiBMMzIuMjAwMTc5OSw0OC4yNDc2NzE1IEwzNC45Njc0MTU4LDQ4LjI0NzY3MTUgQzM1LjIxNjQ2Nyw0OC4yNDc2NzE1IDM1LjQzOTU3NTQsNDguMjg5MjYyOSAzNS42MzY3NDEsNDguMzc2MDYyNCBDMzUuODM1NjM2MSw0OC40NjI4NjE5IDM1Ljk5MTI5MzEsNDguNTk0ODY5NSAzNi4xMDg5MDA2LDQ4Ljc3MjA4NTIgQzM2LjIyNDc3ODYsNDguOTQ5MzAwOSAzNi4yODM1ODI0LDQ5LjE3MzUzMyAzNi4yODUzMTE5LDQ5LjQ0NjU4OTggQzM2LjI4MzU4MjQsNDkuNzA4Nzk2NyAzNi4yMjQ3Nzg2LDQ5LjkyNzYwMzggMzYuMTA4OTAwNiw1MC4xMDEyMDI4IEMzNS45OTEyOTMxLDUwLjI3NDgwMTggMzUuODM1NjM2MSw1MC40MDY4MDk0IDM1LjYzNjc0MSw1MC40OTM2MDg5IEMzNS40Mzk1NzU0LDUwLjU4MDQwODUgMzUuMjE2NDY3LDUwLjYyMDE5MTYgMzQuOTY3NDE1OCw1MC42MjAxOTE2IFogTTQ4LjYwOTg4ODksNTkuMzQ3MTU5NSBDNDkuNzQ0NDU1Niw1OS4zNDE3MzQ2IDUwLjc5MjU0NjMsNTkuMTc3MTc3MSA1MS43NDcyNDI2LDU4Ljg0NjI1NCBDNTIuNzA1Mzk4MSw1OC41MDk5MDU5IDUzLjUzOTAyNzksNTguMDE5ODUwMyA1NC4yNDgxMzIxLDU3LjM3NjA4NzIgQzU0Ljk1NzIzNjMsNTYuNzMyMzI0MSA1NS41MDg5NTQsNTUuOTQwMjc4NSA1NS45MDE1NTU2LDU1LjAwNzE4MzcgQzU2LjI5NDE1NzIsNTQuMDcyMjgwNiA1Ni40OTMwNTIzLDUzLjAwMTc1MzMgNTYuNDk5OTcwNCw1MS43OTc0MSBDNTYuNDkzMDUyMyw1MC41OTEyNTg0IDU2LjI5NDE1NzIsNDkuNTIwNzMxIDU1LjkwMTU1NTYsNDguNTkxMjUyOSBDNTUuNTA4OTU0LDQ3LjY1NjM0OTggNTQuOTU3MjM2Myw0Ni44Njk3MjkyIDU0LjI0ODEzMjEsNDYuMjI5NTgyNyBDNTMuNTM1NTY4OSw0NS41ODQwMTEzIDUyLjY5ODQ4LDQ1LjA5NzU3MjQgNTEuNzQwMzI0Niw0NC43NjY2NDkyIEM1MC43Nzg3MTAxLDQ0LjQzOTM0MjcgNDkuNzI4ODg5OSw0NC4yNjkzNjAzIDQ4LjU4NzQwNTEsNDQuMjY5MzYwMyBMNDIuMTQ0OTM0LDQ0LjI2OTM2MDMgTDQyLjE0NDkzNCw1OS4zNDcxNTk1IEw0OC42MDk4ODg5LDU5LjM0NzE1OTUgWiBNNDguNTg3NDA1MSw1NS4zNjg4NDg0IEw0Ni41MTE5NzgyLDU1LjM2ODg0ODQgTDQ2LjUxMTk3ODIsNDguMjQ3NjcxNSBMNDguNjA5ODg4OSw0OC4yNDc2NzE1IEM0OS4zODY0NDQ1LDQ4LjI1MTI4ODEgNTAuMDMxNTU2NCw0OC40MTA0MjA2IDUwLjU0MzQ5NSw0OC43MTQyMTg5IEM1MS4wNTU0MzM3LDQ5LjAxOTgyNTUgNTEuNDM3NjU4MSw0OS40Mzc1NDgyIDUxLjY5MDE2ODQsNDkuOTcyODExOCBDNTEuOTQyNjc4Nyw1MC41MDQ0NTg5IDUyLjA2NzIwNDMsNTEuMTEwMjQ3MiA1Mi4wNjcyMDQzLDUxLjc5NzQxIEM1Mi4wNjcyMDQzLDUyLjI3NDgwNzMgNTEuOTg3NjQ2Myw1Mi43MjY4ODgxIDUxLjgzMDI1OTcsNTMuMTU3MjY5MSBDNTEuNjc0NjAyNyw1My41ODIyMjUgNTEuNDQ4MDM1Myw1My45NjM3ODEyIDUxLjE0NTM2ODgsNTQuMjk0NzA0NCBDNTAuODQ2MTYxNCw1NC42MjU2Mjc1IDUwLjQ4Mjk2MTcsNTQuODg2MDI2MSA1MC4wNTQwNDAyLDU1LjA3NzcwODQgQzQ5LjYyMTY1OTYsNTUuMjY1Nzc0IDQ5LjEzNTY2MzcsNTUuMzY1MjMxOCA0OC41ODc0MDUxLDU1LjM2ODg0ODQgWiBNNjIuNDIzNTg0OCw1OS4zNDcxNTk1IEw2Mi40MjM1ODQ4LDUzLjcxNzg0OTMgTDY4Ljg0NTMwMTYsNTMuNzE3ODQ5MyBMNjguODQ1MzAxNiw0OS43Mzk1MzgxIEw2Mi40MjM1ODQ4LDQ5LjczOTUzODEgTDYyLjQyMzU4NDgsNDguMjQ3NjcxNSBMNjguOTk1NzcwMSw0OC4yNDc2NzE1IEw2OC45OTU3NzAxLDQ0LjI2OTM2MDMgTDU4LjA1NjU0MDYsNDQuMjY5MzYwMyBMNTguMDU2NTQwNiw1OS4zNDcxNTk1IEw2Mi40MjM1ODQ4LDU5LjM0NzE1OTUgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRTY0NzU5Ij48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=&quot; alt=&quot;BreezyPDF&quot;&gt;
64
+ &lt;/a&gt;
65
+ &lt;/div&gt;
66
+ &lt;div class=&quot;right text&quot;&gt;
67
+ Page &lt;span class=&quot;pageNumber&quot;&gt;&lt;/span&gt; of &lt;span class=&quot;totalPages&quot;&gt;&lt;/span&gt;
68
+ &lt;/div&gt;
69
+ &lt;/div&gt;
70
+ ">
71
+ <meta name="breezy-pdf-headerTemplate" content="&nbsp;">
72
+ <meta name="breezy-pdf-filename" content="breezy-pdf-dashboard-example.pdf">
73
+
74
+ <link rel="shortcut icon" href="https://ruby.demo.breezypdf.com/reports/img/favicon.png">
75
+ <title>Widget Builders</title>
76
+ <link rel="stylesheet" href="https://ruby.demo.breezypdf.com/reports/css/app.min.css" type="text/css"/>
77
+ <script defer src="https://use.fontawesome.com/releases/v5.0.10/js/all.js" integrity="sha384-slN8GvtUJGnv6ca26v8EzVaR9DC58QEwsIk9q1QXdCU8Yu8ck/tL/5szYlBbqmS+" crossorigin="anonymous"></script>
78
+ </head>
79
+ <body>
80
+
81
+ <div class="mai-wrapper">
82
+
83
+ <div class="main-content container pt-4 pt-md-0">
84
+ <div class="row mt-3 breezy-pdf-remove">
85
+ <div class="col-12 text-right">
86
+ <span id="waiting" hidden="">
87
+ <svg class="svg-inline--fa fa-sync fa-w-16 fa-spin" aria-hidden="true" data-prefix="fas" data-icon="sync" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z"></path></svg><!-- <i class="fas fa-sync fa-spin"></i> --> Please wait...
88
+ &nbsp;
89
+ </span>
90
+ <a id="download" class="btn btn-primary" href="/as-pdf.pdf"><svg class="svg-inline--fa fa-file-pdf fa-w-12" aria-hidden="true" data-prefix="far" data-icon="file-pdf" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" data-fa-i2svg=""><path fill="currentColor" d="M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"></path></svg><!-- <i class="far fa-file-pdf"></i> --> Download PDF</a>
91
+ </div>
92
+ </div>
93
+ <div class="row">
94
+ <div class="col-7">
95
+ <div class="widget widget-fullwidth user-develop-chart">
96
+ <div class="widget-head">
97
+ <span class="title">Development Activity</span>
98
+ </div>
99
+ <div class="widget-chart-container">
100
+ <div id="develop-chart-legend" class="legend-container"></div>
101
+ <div id="develop-chart" style="height: 225px;"></div>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <div class="col-5">
106
+ <div class="widget-indicators">
107
+ <div class="indicator-item">
108
+ <div class="indicator-item-icon">
109
+ <div class="icon"><span class="fas fa-chart-line"></span></div>
110
+ </div>
111
+ <div class="indicator-item-value"><span data-toggle="counter" data-end="36" class="indicator-value-counter">0</span>
112
+ <div class="indicator-value-title">Today's Orders</div>
113
+ </div>
114
+ </div>
115
+ <div class="indicator-item">
116
+ <div class="indicator-item-icon">
117
+ <div class="icon"><span class="fas fa-chart-pie"></span></div>
118
+ </div>
119
+ <div class="indicator-item-value"><span data-toggle="counter" data-end="157" class="indicator-value-counter">0</span>
120
+ <div class="indicator-value-title">Support Tickets</div>
121
+ </div>
122
+ </div>
123
+ <div class="indicator-item">
124
+ <div class="indicator-item-icon">
125
+ <div class="icon"><span class="fas fa-chart-area"></span></div>
126
+ </div>
127
+ <div class="indicator-item-value"><span data-toggle="counter" data-decimals="1" data-end="17.9" class="indicator-value-counter">0</span>
128
+ <div class="indicator-value-title">Download Files</div>
129
+ </div>
130
+ </div>
131
+ <div class="indicator-item">
132
+ <div class="indicator-item-icon">
133
+ <div class="icon"><span class="fas fa-shopping-cart"></span></div>
134
+ </div>
135
+ <div class="indicator-item-value"><span data-toggle="counter" data-decimals="2" data-end="78,450" data-prefix="$" class="indicator-value-counter">0</span>
136
+ <div class="indicator-value-title">Total Purchases</div>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ <div class="row page-break-after">
143
+ <div class="col-12">
144
+ <div class="widget widget-fullwidth week-chart">
145
+ <div class="widget-head mb-0 mb-lg-5"><span class="title">Week Activity</span></div>
146
+ <div class="widget-chart-container">
147
+ <div id="week-chart" style="height: 215px;"></div>
148
+ </div>
149
+ <div class="row widget-info">
150
+ <div class="col-6 counter-block"><span data-toggle="counter" data-end="735" class="counter"></span><span class="title">New Users</span></div>
151
+ <div class="col-6 counter-block"><span data-toggle="counter" data-end="73" data-suffix="%" class="counter">0</span><span class="title">More Visits</span></div>
152
+ </div>
153
+ </div>
154
+ </div>
155
+ </div>
156
+ <div class="row mt-1">
157
+ <div class="col-6">
158
+ <div class="user-stats">
159
+ <div class="user-stats-id mb-3">
160
+ <div class="user-stats-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img3.jpg" alt="avatar"></div>
161
+ <div class="user-stats-info"><span class="user-stats-name">Justin Adams</span><span class="user-stats-position">Sales</span></div>
162
+ </div>
163
+ <div class="user-stats-indicators">
164
+ <div class="user-stats-indicator"><span class="user-stats-indicator-title">Premium Purchases</span><span data-toggle="counter" data-end="173" class="user-stats-indicator-counter">0</span></div>
165
+ <div class="user-stats-indicator"><span class="user-stats-indicator-title">Standard Plans </span><span data-toggle="counter" data-end="367" class="user-stats-indicator-counter">0</span></div>
166
+ <div class="user-stats-indicator"><span class="user-stats-indicator-title">Services</span><span data-toggle="counter" data-end="724" class="user-stats-indicator-counter">0</span></div>
167
+ <div class="user-stats-indicator"><span class="user-stats-indicator-title">Total Sales</span><span data-toggle="counter" data-end="1264" class="user-stats-indicator-counter">0</span></div>
168
+ </div>
169
+ <div class="user-stats-milestone"><span>Current Progress</span>
170
+ <div class="progress">
171
+ <div style="width: 45%" class="progress-bar progress-bar-primary"></div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ <div class="col-6">
177
+ <div class="widget widget-fullwidth ads-chart">
178
+ <div class="widget-head mb-0 pb-0"><span class="title">Advertisement</span></div>
179
+ <div class="ads-resume">
180
+ <div class="ads-info pb-0">
181
+ <div class="ads-progress"><span data-toggle="counter" data-end="55" data-suffix="%" class="ads-progress-counter">0</span><span class="ads-progress-title">Advance</span>
182
+ <div class="progress">
183
+ <div style="width: 55%" class="progress-bar progress-bar-primary"></div>
184
+ </div>
185
+ </div>
186
+ <div id="ads-chart-legend" class="ads-legend"></div>
187
+ </div>
188
+ <div class="ads-users">
189
+ <div class="widget-chart-container">
190
+ <div id="users-chart" style="height: 153px;"></div>
191
+ <div class="users-chart-counter"><span data-toggle="counter" data-end="1207" class="users-counter">0</span><span class="users-title">New Users</span></div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ <div class="widget-chart-container">
196
+ <div id="ads-chart" style="height: 229px;"></div>
197
+ </div>
198
+ </div>
199
+ </div>
200
+ </div>
201
+ <div class="row page-break-avoid">
202
+ <div class="col-6">
203
+ <div class="widget widget-fullwidth earnings">
204
+ <div class="widget-head mb-0 pb-0">
205
+ </div>
206
+ <div class="earnings-resume">
207
+ <div class="earnings-value earnings-value-big mb-4"><span data-toggle="counter" data-end="127.95" data-decimals="2" data-prefix="$" class="earnings-counter">0</span><span class="earnings-title">Advance</span></div>
208
+ <div class="earnings-value"><span data-toggle="counter" data-end="527" data-decimals="2" data-prefix="$" class="earnings-counter">0</span><span class="earnings-title">Estimated</span></div>
209
+ <div class="earnings-value"><span data-toggle="counter" data-end="79" data-suffix="%" class="earnings-counter">0</span><span class="earnings-title">More Sales</span></div>
210
+ </div>
211
+ <div class="earnings-chart">
212
+ <div id="earnings-chart" style="height: 156px;"></div>
213
+ </div>
214
+ </div>
215
+ </div>
216
+ <div class="col-6">
217
+ <div class="usage usage-dark p-4">
218
+ <div class="usage-head"><span class="usage-head-title">Download Files</span>
219
+ </div>
220
+ <div class="usage-resume">
221
+ <div class="usage-data"><span data-toggle="counter" data-end="73.6" data-decimals="1" data-suffix="%" class="usage-counter"></span><span class="usage-title">Download Files</span><span class="usage-detail">13,5 MB</span></div>
222
+ <div class="usage-icon"><span class="icon fas fa-chart-area"></span></div>
223
+ </div>
224
+ </div>
225
+ <div class="usage usage-primary p-4">
226
+ <div class="usage-head"><span class="usage-head-title">Server CPU</span>
227
+ </div>
228
+ <div class="usage-resume">
229
+ <div class="usage-data"><span data-toggle="counter" data-end="33.9" data-decimals="1" data-suffix="%" class="usage-counter"></span><span class="usage-title">Total Usage</span><span class="usage-detail">178 MB</span></div>
230
+ <div class="usage-icon"><span class="icon fas fa-tachometer-alt"></span></div>
231
+ </div>
232
+ </div>
233
+ </div>
234
+ </div>
235
+ <div class="row page-break-before">
236
+ <div class="col-12 align-self-stretch d-flex">
237
+ <div class="widget widget-fullwidth todo-list align-self-stretch w-100">
238
+ <div class="widget-head"><span class="title">Todo List</span></div>
239
+ <div class="todo-list-container">
240
+ <ul class="todo-tasks">
241
+ <li class="todo-task">
242
+ <label class="custom-control custom-checkbox">
243
+ <input type="checkbox" checked="true" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
244
+ </label>
245
+ </li>
246
+ <li class="todo-task">
247
+ <label class="custom-control custom-checkbox">
248
+ <input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
249
+ </label>
250
+ </li>
251
+ <li class="todo-task">
252
+ <label class="custom-control custom-checkbox">
253
+ <input type="checkbox" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
254
+ </label>
255
+ </li>
256
+ <li class="todo-task">
257
+ <label class="custom-control custom-checkbox">
258
+ <input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
259
+ </label>
260
+ </li>
261
+ <li class="todo-task">
262
+ <label class="custom-control custom-checkbox">
263
+ <input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
264
+ </label>
265
+ </li>
266
+ <li class="todo-task">
267
+ <label class="custom-control custom-checkbox">
268
+ <input type="checkbox" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
269
+ </label>
270
+ </li>
271
+ </ul>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ </div>
276
+ <div class="row ">
277
+ <div class="col-12">
278
+ <div class="project-list">
279
+ <div class="project-list-title mt-5">Project Progress</div>
280
+ <div class="project-item pdf">
281
+ <div class="project-item-title"><span class="name">Product Design</span><span class="description">Create the new product design</span></div>
282
+ <div class="project-item-user">
283
+ <div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img4.jpg" alt="avatar"></div>
284
+ <div class="user-info"><span class="name">Marshal Hogan</span><span class="position description">Product designer</span></div>
285
+ </div>
286
+ <div class="project-item-state"><span class="name">In Progress</span><span class="description">3D modeling</span></div>
287
+ <div class="project-item-date"><span class="date">May 6, 2017</span><span class="time description">8:30</span></div>
288
+ <div class="project-item-progress"><span class="description">50%</span>
289
+ <div class="progress">
290
+ <div style="width: 50%" class="progress-bar progress-bar-primary"></div>
291
+ </div>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </div>
296
+ </div>
297
+ <div class="row page-break-avoid">
298
+ <div class="col-12">
299
+ <div class="project-list">
300
+ <div class="project-item pdf">
301
+ <div class="project-item-title"><span class="name">Concept Design</span><span class="description">Create the concept</span></div>
302
+ <div class="project-item-user">
303
+ <div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img1.jpg" alt="avatar"></div>
304
+ <div class="user-info"><span class="name">Ryan Lawrence</span><span class="position description">Marketing</span></div>
305
+ </div>
306
+ <div class="project-item-state"><span class="name">Completed</span><span class="description">Collection concept</span></div>
307
+ <div class="project-item-date"><span class="date">April 22, 2017</span><span class="time description">14:45</span></div>
308
+ <div class="project-item-progress"><span class="description">100%</span>
309
+ <div class="progress">
310
+ <div style="width: 100%" class="progress-bar progress-bar-primary"></div>
311
+ </div>
312
+ </div>
313
+ </div>
314
+ </div>
315
+ </div>
316
+ </div>
317
+ <div class="row page-break-avoid">
318
+ <div class="col-12">
319
+ <div class="project-list">
320
+ <div class="project-item pdf">
321
+ <div class="project-item-title"><span class="name">Product Development</span><span class="description">3D printing</span></div>
322
+ <div class="project-item-user">
323
+ <div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img2.jpg" alt="avatar"></div>
324
+ <div class="user-info"><span class="name">Benji Miller</span><span class="position description">3D printer</span></div>
325
+ </div>
326
+ <div class="project-item-state"><span class="name">Waiting</span><span class="description">Waiting for 3D design</span></div>
327
+ <div class="project-item-date"><span class="date">April 15, 2017</span><span class="time description">10:00</span></div>
328
+ <div class="project-item-progress"><span class="description">0%</span>
329
+ <div class="progress">
330
+ <div style="width: 0%" class="progress-bar progress-bar-primary"></div>
331
+ </div>
332
+ </div>
333
+ </div>
334
+ </div>
335
+ </div>
336
+ </div>
337
+ </div>
338
+
339
+
340
+
341
+ </div>
342
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery/jquery.min.js" type="text/javascript"></script>
343
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/bootstrap/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
344
+ <script src="https://ruby.demo.breezypdf.com/reports/js/app.js" type="text/javascript"></script>
345
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.min.js" type="text/javascript"></script>
346
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.pie.min.js" type="text/javascript"></script>
347
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.time.min.js" type="text/javascript"></script>
348
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.resize.min.js" type="text/javascript"></script>
349
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/plugins/curvedLines.min.js" type="text/javascript"></script>
350
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/plugins/jquery.flot.tooltip.min.js" type="text/javascript"></script>
351
+ <script src="https://ruby.demo.breezypdf.com/reports/lib/countup/countUp.min.js" type="text/javascript"></script>
352
+ <script src="https://ruby.demo.breezypdf.com/reports/js/app-dashboard.js" type="text/javascript"></script>
353
+ <script type="text/javascript">
354
+ $(document).ready(function(){
355
+ //initialize the javascript
356
+ window.pdf = true;
357
+ App.init();
358
+ App.dashboard();
359
+ setTimeout(function() {
360
+ window.pdfRenderReady = true
361
+ }, 250)
362
+
363
+ });
364
+ </script>
365
+ </body>
366
+ </html>