Introduction Last updated: 2019-06-01

Codel has developed a patented technology called Codelmarking which combines a digital fingerprinting process and reference registry. It is used to prove the source, integrity and provenance of data. Proof of Source - the original owner and / or publisher of the data is clearly identifiable. This is critical from both an accountability perspective but also in order to help support intellectual property rights. Proof of Integrity - provides the only means of certainty that data was altered either unintentionally as a result of data corruption or intentionally as a result of malign activity. Proof of provenance - combined with authorship, precisely when data came in to being can also be a critical piece of information that can support assertions of content rights or even settle law suits. Codelmarking creates an immutable audit trail to give certainty to any type of data. Content owners and publishers can manage the status of their Codelmarks (and therefore the data to which they relate). This means that even after data is widely disseminated, verifying parties can establish whether the data they possess is still valid, whether it has been revoked or withdrawn and whether there is something more recent that the originator would like to draw to their attention.

Github Code Example:

You can embed your code snippets using Github gists

Highlight.js Example:

You can embed your code snippets using highlight.js It supports 185 languages and 89 styles.

This template uses Atom One Dark style for the code blocks:
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.2/styles/atom-one-dark.min.css">

[
  {
                            "title": "apples",
                            "count": [12000, 20000],
                            "description": {"text": "...", "sensitive": false}
  },
  {
                            "title": "oranges",
                            "count": [17500, null],
                            "description": {"text": "...", "sensitive": false}
  }
]


Section Item 1.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id.

Code Example: npm install <package>

Unordered List Examples:
  • HTML5: <div id="foo">
  • CSS: #foo { color: red }
  • JavaScript: console.log('#foo\bar');
Ordered List Examples:
  1. Download lorem ipsum dolor sit amet.
  2. Click ipsum faucibus venenatis.
  3. Configure fermentum malesuada nunc.
  4. Deploy donec non ante libero.
Callout Examples:

Note

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium <code> , Nemo enim ipsam voluptatem quia voluptas link example sit aspernatur aut odit aut fugit.

Warning

Nunc hendrerit odio quis dignissim efficitur. Proin ut finibus libero. Morbi posuere fringilla felis eget sagittis. Fusce sem orci, cursus in tortor link example tellus vel diam viverra elementum.

Tip

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Link example aenean commodo ligula eget dolor.

Danger

Morbi eget interdum sapien. Donec sed turpis sed nulla lacinia accumsan vitae ut tellus. Aenean vestibulum Link example maximus ipsum vel dignissim. Morbi ornare elit sit amet massa feugiat, viverra dictum ipsum pellentesque.

Alert Examples:

Section Item 1.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Lightbox Example:

The example below uses the simplelightbox plugin.

Custom Table:
Option 1 Option 1 desc lorem ipsum dolor sit amet, consectetur adipiscing elit.
Option 2 Option 2 desc lorem ipsum dolor sit amet, consectetur adipiscing elit.
Option 3 Option 3 desc lorem ipsum dolor sit amet, consectetur adipiscing elit.
Option 4 Option 4 desc lorem ipsum dolor sit amet, consectetur adipiscing elit.
Stripped Table:
# First Last Handle
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter
Bordered Dark Table:
# First Last Handle
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter

Section Item 1.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Badges Examples:
Primary Secondary Success Danger Warning Info Light Dark
Button Examples:
Progress Examples:

Section Item 1.4

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Pagination Example:

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 1.5

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 1.6

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Installation

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Hosting Codel2 Client Api on Redhat VM with nginx

Required Tools

  • Linux Redhat Operating System (16.04 or above)
  • .Net SDK 8.0
  • .Net runtime 8.0
  • Nginx (1.20 or above)

Step 1: Installing .Net 8 in Redhat Linux

sudo yum update
sudo dnf install dotnet-sdk-8.0
sudo dnf install aspnetcore-runtime-8.0

Step 2: Download Api and install

mkdir /var/codel2clientapi
cd /var/codel2clientapi
wget {ClientApiZipURL} -O clientapi.zip
unzip clientapi.zip
rm clientapi.zip

Step 3: Update Database Connection String in config file

sudo nano /var/codel2clientapi/appsettings.json

Maria DB Connection String example
server={ServerAddress};database={DbName};user id={DbUserName}; password={Password};sslmode=none;

Step 4: Create Service

sudo nano /etc/systemd/system/codel2clientapi.service
Service file example
[Unit]
Description=Codel2 Client Api
After=network.target
[Service]
WorkingDirectory=/var/codel2clientapi
ExecStart=/usr/bin/dotnet /var/codel2clientapi/Codel2.ClientApi.dll
Restart=always

#Restart service after 10 seconds if the dotnet service crashes:

RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=codel2clientapi
User=sftpusernew
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_NOLOGO=false

[Install]
WantedBy=multi-user.target

Step 5: Enable Service

sudo systemctl enable codel2clientapi.service

Step 6: Start Service

sudo systemctl start codel2clientapi.service

Step 7: Check Service Status

sudo systemctl status codel2client.service

Step 8: more commands (if required)

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_relay 1

Client Api on Windows VM

!!!Coming Soon!!!

Server Api on Redhat VM

!!!Coming Soon!!!

Server Api on Windows VM

!!!Coming Soon!!!

Client Api on Azure WebApp

!!!Coming Soon!!!

Server Api on Azure WebApp

!!!Coming Soon!!!

Client Api on Azure Functions

!!!Coming Soon!!!

Server Api on Azure Functions

!!!Coming Soon!!!

Client Api on AWS Lambda

!!!Coming Soon!!!

Server Api on AWS Lambda

!!!Coming Soon!!!

APIs

Section intro goes here. Lorem ipsum d olor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Client Authentication

Client Authorize URL: BaseURL + "/api/Client/authenticate"

Request Example:

curl -X 'POST' 'https://localhost:7046/api/Client/authenticate' -H 'accept: */*' -H 'Content-Type: application/json' -d '{ "username": "YourEmail@email.com", "password": "YourPassword"}'
Response Example:
{"AccessToken":{"Token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwianRpIjoiYWM1ODAwMTktYmIwYS00N2I1LWExMDQtYzZkZGQ5MzY0MTMyIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvddfdfdfbmFtZWlkZW50aWZpZXIiOiIxIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiVXNlciIsImV4cCI6MTcyMTAzNTcxMSwiaXNzIjoiQ29kZWxBdXRoZW50aWNhdGlvbkNsaWVudCIsImF1ZCI6IkNvZGVsQXV0aGVudGljYXRpb25DbGllbnQifQ.tNs0gZR7YVw2ppyhymntgNw83XLg-2yajQVFthDqE9U","TokenExpiryDate":"2024-07-15T09:28:31.5816471Z"},"RefreshToken":{"Token":"Cayi5SMR/L7IzUvfdfdfMfcovyjUmS4Yl8/fq4EJQtrAZ0hJDbOb8ZaBR8FPCUsqDor2ksSbuMqlDOmH5mOYIEeG6WA==","TokenExpiryDate":"2024-07-29T08:28:31.6286884Z"},"ClientID":1,"ClientCode":null,"ClientName":"Client Name","ContactName":null,"ClientEmail":"youremail@email.com","LicenseExpiryDate":null,"LicenseLastRenewDate":null}

Password Reset Code

URL: BaseURL + "/api/Client/passwordresetsecuritycode"

Request Example:
curl -X 'GET' 'https://localhost:7046/api/Client/passwordresetsecuritycode? ClientEmail=myemail%40codelmark.com' -H 'accept: */*'
Response Example: *Reset code sent in email.
Success

Client Password Reset

URL: BaseURL + "/api/Client/ResetPassword"

Request Example:
curl -X 'POST' 'https://localhost:7046/api/Client/ResetPassword' -H 'accept: */*'  -H 'Content-Type: application/json'  -d '{ "clientEmail": "myemail@email.com", "newPassword": "NewPassword", "resetSecurityCode": "ResetSecurityCode" }'
Response Example:
Success

Codelmark Text Data

URL: BaseURL + "/api/Hash/CalculateTextHash"

Request Example:

curl --location --request POST 'https://localhost:7046/api/Hash/CalculateTextHash?source=Hash%20Testing%2015.07.2024%20%20001' \
--header 'Authorization: Bearer ************'
Response Example:
{"value":{"status":1,"errorDetail":null,"data":{"hashLinked":"250B832DA3531D85B94066DC6CF30808936AA6E44BF820CECEB76AEB2B188772"}},"formatters":[],"contentTypes":[],"declaredType":null,"statusCode":200}

Codelmark File

URL: BaseURL + "/api/Hash/CalculateFileHash"

Request Example:
curl --location 'https://localhost:7046/api/Hash/CalculateFileHash' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Bearer ************** \
--form 'fileData=@"/C:/Users/kjchh/Pictures/cheque-trans1.png"'
Response Example:
{ "status": 1, "errorDetail": null, "data": { "hashLinked": "8E0DF6080BB5521A34A46BE57084ED737F0FD2268C5EBE436A539387F797E3E9"}}

Verify File Source

URL: BaseURL + "/api/Hash/VerifyFileSource"

Request Example:
curl --location 'https://localhost:7046/api/Hash/VerifyFileSource' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: ••••••' \
--form 'files1=@"/C:/Users/kjchh/Desktop/demo data/0907/0907-01.txt"' \
--form 'files1=@"/C:/Users/kjchh/Desktop/demo data/0907/0907-01_txt_Validata_20240709_bdd9938a0a6a2f8f95c71916ba636191cf63a4b14441.CDL"'
Response Example:
{ "hashID": 251458453, "server_ID": "CDL-01", "hash_Source": "BDD9938A0A6A2F8F95C7B0DDB3816D49A67B4CE41B0DAA8502617B208CC45334", "hash_Linked": "6DEAD2BE9FFA93F2F5B35E1FBEB2E309F995B7337F32BAC5520A7AF4018F0FE3", "hash_Previous": "DB313E04184F1978D7033482F2B60A840A64CFD0D1D48FD18F46B3BC77E95BE6", "hash_ConfirmedBy": "CF89903F4D90A4A687CC29119B44C8DBE959F3973E55F3B39C328677FC112AF3", "chain_Time": "2024-07-09T10:40:27", "codel_Time": "2024-07-09T10:25:57"}

Error Code List

Error Code Error Message
10010 Client Username or password is incorrect.
10011 Refresh token was not specified in request body
10012 Refresh token is expired or invalid
10013 Failed to Validate Token, Authorize again
10014 Unauthorized Device
Description: This error raised if Client Api used from Unauthorized Lambda function
10015 Invalid Username
Description: This error raised if email/username not exist in Client Database
10016 Invalid passwordecurity Code.
Description: This error raised if security code not passed as per received email
10017 Blank Password not allowed
10018 Duplicate Source
10019 Client Authentication failed
Description: This error raised if someone try to alter client Dll (assembly) files.
10020 Hash previous not retrieved
Description: If its due to any error then it will be displayed in error description.
10021 Prior hash not retrieved
Description: If its due to any error then it will be displayed in error description.
10022 AddHashToQueue Function Error
Description: If its due to any error then it will be displayed in error description.
10023 Heart-beat Hash Calculation Function Error
Description: If its due to any error then it will be displayed in error description.
10024 CalculateFileHash File not exist error
Description: When user tried to calculate hash for any file and its not found due to any technical reason.
10025 Duplicate Source File
10026 Hash EOD not retrieved
Description: If its due to any error then it will be displayed in error description.
10027 HashSalt Calculation Error
Description: If its due to any error then it will be displayed in error description.
10028 Block not published
Description: if block is not completed. So it will not published.
10029 Verify file source - CDL file not exist.
Description: If user doesn’t upload CDL file in Verify Source then this error message displayed
10030 Verify file source - source file not exist
Description: If user doesn’t upload file in Verify Source then this error message displayed
99998 Exception
Description: Its technical error due to any reason – so it will called as exception.
99999 Unknown Error
Description: If program didn’t identify any error message but still its didn’t generate output in that case we need to say Unknown. But later on we can Identify as per use cases and classify it.

Client DB Schema

Table Name : tblClient

Field Name Data Type Length Allow Null (Yes/No) Default
ClientID INT 10 No AUTO_INCREMENT
ClientCode VARCHAR 20 Yes NULL
ClientName VARCHAR 100 Yes NULL
ContactName VARCHAR 100 Yes NULL
ClientEmail VARCHAR 100 Yes NULL
Password VARCHAR 200 Yes NULL
IsMultiFactorEnabled BIT 1 No False
MultiFactorType VARCHAR 20 Yes
LastLoginDate DATETIME Yes
LastPasswordChangeDate DATETIME Yes
IsLocked bit 1 No False
LockReason VARCHAR 200 No False
PublicKey TEXT Yes
AuthorizedHash VARCHAR 128 Yes
SecurityCode VARCHAR 64 Yes
SecurityCodeExpiryDate DATETIME Yes

Table Name : tbleodhash
Field Name Data Type Length Allow Null (Yes/No) Default
HashID BIGINT No 0
ServerID VARCHAR 10 Yes NULL
HashSource VARBINARY 32 Yes NULL
HashPrevious VARBINARY 32 Yes NULL
HashSalted VARBINARY 32 Yes NULL
HashLinked VARBINARY 32 Yes NULL
HashConfirmedBy VARBINARY 32 Yes NULL
PrevBlock INT No 0
CurrentBlock INT No 0
NextBlock INT No 0
ChainTime DATETIME Yes
CodelTime DATETIME Yes

Table Name : tblpriorhash
Field Name Data Type Length Allow Null (Yes/No) Default
HashID BIGINT No 0
ServerID VARCHAR 10 Yes NULL
HashSource VARBINARY 32 Yes NULL
HashPrevious VARBINARY 32 Yes NULL
HashSalted VARBINARY 32 Yes NULL
HashLinked VARBINARY 32 Yes NULL
HashConfirmedBy VARBINARY 32 Yes NULL
PrevBlock INT No 0
CurrentBlock INT No 0
NextBlock INT No 0
ChainTime DATETIME Yes
CodelTime DATETIME Yes

Table Name : tblrefresh
Field Name Data Type Length Allow Null (Yes/No) Default
RefreshToken VARCHAR 200 Yes
ClientID INT 10 Yes NULL
CreatedDate DATETIME Yes NULL
ExpiryDate DATETIME Yes NULL

Table Name : tblsourcedetail
Field Name Data Type Length Allow Null (Yes/No) Default
SourceID BIGINT 19 No AUTO_INCREMENT
SourceName VARCHAR 100 Yes NULL
SourceLocation VARCHAR 200 Yes NULL
SourceAuthor VARCHAR 100 Yes NULL
SourceOnChain bit 1 No False
SourceTextData TEXT Yes
ChainDate DATETIME Yes NULL
SourceDate DATETIME Yes NULL
HashSource VARBINARY 32 Yes NULL
HashPrevious VARBINARY 32 Yes NULL
HashPreviousBlock INT No 0
HashPrior VARBINARY 32 Yes NULL
HashPriorBlock INT No 0
HashEOD VARBINARY 32 Yes NULL
HashEODBlock INT No 0
SaltComponents LONGBLOB Yes
SaltAnagram LONGBLOB Yes
HashSalt LONGBLOB Yes
HashConfirmedBy VARBINARY 32 Yes
HashConfirmedByBlock INT No 0
HashSalted VARBINARY 32 Yes
HashLinked VARBINARY 32 Yes
CurrentBlock INT No 0
ChainMetadata VARCHAR 200 Yes
HashMetadata VARBINARY 32 Yes NULL
HashMetadataBlock INT 10 No 0
HashCRLink1 LONGBLOB 32 Yes NULL
HashCRLink1Block INT 10 No 0
CanExpire BIT 1 No False
ExpiryDate DATETIME YES NULL
Url VARCHAR 200 YES NULL
Owner VARBINARY 32 YES NULL
IsPublic bit 1 NO False
Supercedes VARBINARY 32 YES NULL
SupercedesBlock INT 1 No 0
SupercededBy VARBINARY 32 YES NULL
SupercededByBlock INT 1 No 0
SourceRevoked BIT 1 No 0
SourceRevokeDate DATETIME Yes
AddSignature BIT 1 Yes False
Signature VARBINARY 32 YES NULL
IsBlockConifrmRecord BIT 1 No 0
IsUploaded BIT 1 No 0
HCBD BIT 1 No 0
IsValid BIT 1 No 0
PreviousBlock INT 1 No 0
NextBlock INT 1 No 0
IsPublishAsHeartbeat BIT 1 No False
HeartbeatDate DATETIME Yes
IsHeartbeatRecord BIT 1 Yes False

Intergrations

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Section Item 4.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 4.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 4.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Utilities

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Section Item 5.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 5.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 5.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Web

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Section Item 6.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 6.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 6.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Mobile

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Section Item 7.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 7.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 7.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Resources

Section intro goes here. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus condimentum nisl id vulputate. Praesent aliquet varius eros interdum suscipit. Donec eu purus sed nibh convallis bibendum quis vitae turpis. Duis vestibulum diam lorem, vitae dapibus nibh facilisis a. Fusce in malesuada odio.

Section Item 8.1

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 8.2

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

Section Item 8.3

Vivamus efficitur fringilla ullamcorper. Cras condimentum condimentum mauris, vitae facilisis leo. Aliquam sagittis purus nisi, at commodo augue convallis id. Sed interdum turpis quis felis bibendum imperdiet. Mauris pellentesque urna eu leo gravida iaculis. In fringilla odio in felis ultricies porttitor. Donec at purus libero. Vestibulum libero orci, commodo nec arcu sit amet, commodo sollicitudin est. Vestibulum ultricies malesuada tempor.

FAQs

Section intro goes here. You can list all your FAQs using the format below.

Section Item 9.1 (FAQ Category One)

What's sit amet quam eget lacinia?

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.

How to ipsum dolor sit amet quam tortor?

Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

Can I bibendum sodales?

Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

Where arcu sed urna gravida?

Aenean et sodales nisi, vel efficitur sapien. Quisque molestie diam libero, et elementum diam mollis ac. In dignissim aliquam est eget ullamcorper. Sed id sodales tortor, eu finibus leo. Vivamus dapibus sollicitudin justo vel fermentum. Curabitur nec arcu sed urna gravida lobortis. Donec lectus est, imperdiet eu viverra viverra, ultricies nec urna.

Section Item 9.2 (FAQ Category Two)

What's sit amet quam eget lacinia?

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.

How to ipsum dolor sit amet quam tortor?

Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

Can I bibendum sodales?

Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

Where arcu sed urna gravida?

Aenean et sodales nisi, vel efficitur sapien. Quisque molestie diam libero, et elementum diam mollis ac. In dignissim aliquam est eget ullamcorper. Sed id sodales tortor, eu finibus leo. Vivamus dapibus sollicitudin justo vel fermentum. Curabitur nec arcu sed urna gravida lobortis. Donec lectus est, imperdiet eu viverra viverra, ultricies nec urna.

Section Item 9.3 (FAQ Category Three)

How to dapibus sollicitudin justo vel fermentum?

Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

How long bibendum sodales?

Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui.

Where dapibus sollicitudin?

Aenean et sodales nisi, vel efficitur sapien. Quisque molestie diam libero, et elementum diam mollis ac. In dignissim aliquam est eget ullamcorper. Sed id sodales tortor, eu finibus leo. Vivamus dapibus sollicitudin justo vel fermentum. Curabitur nec arcu sed urna gravida lobortis. Donec lectus est, imperdiet eu viverra viverra, ultricies nec urna.