mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-22 17:45:10 +00:00
[FAB-4996] NodeSDK - move sample to fabric-samples
Move the Balance Transfer sample application from fabric-sdk-node to fabric-samples. This cr will add the files to the fabric-samples. There will another one to remove the files from fabric-sdk-node. Change-Id: I2344ee00bcd47793ae07f203070af93bc2ee69d6 Signed-off-by: Bret Harrison <beharrison@nc.rr.com>
This commit is contained in:
parent
6610584c19
commit
04c9eff110
123 changed files with 4177 additions and 0 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -6,6 +6,8 @@
|
||||||
.*.sw*
|
.*.sw*
|
||||||
# installed platform-specific binaries
|
# installed platform-specific binaries
|
||||||
/bin
|
/bin
|
||||||
|
.DS_Store
|
||||||
|
.project
|
||||||
|
|
||||||
first-network/channel-artifacts/*.tx
|
first-network/channel-artifacts/*.tx
|
||||||
first-network/channel-artifacts/*.block
|
first-network/channel-artifacts/*.block
|
||||||
|
|
@ -17,3 +19,7 @@ chaincode-docker-devmode/chaincode/chaincode_example02/chaincode_example02
|
||||||
|
|
||||||
# fabric sdk node modules
|
# fabric sdk node modules
|
||||||
fabcar/node_modules/
|
fabcar/node_modules/
|
||||||
|
|
||||||
|
# balance transfer sample
|
||||||
|
balance-transfer/.DS_Store
|
||||||
|
balance-transfer/node_modules/*
|
||||||
|
|
|
||||||
284
balance-transfer/README.md
Normal file
284
balance-transfer/README.md
Normal file
|
|
@ -0,0 +1,284 @@
|
||||||
|
## Balance transfer
|
||||||
|
|
||||||
|
A sample Node.js app to demonstrate **__fabric-client__** & **__fabric-ca-client__** Node.js SDK APIs
|
||||||
|
|
||||||
|
### Prerequisites and setup:
|
||||||
|
|
||||||
|
* [Docker](https://www.docker.com/products/overview) - v1.12 or higher
|
||||||
|
* [Docker Compose](https://docs.docker.com/compose/overview/) - v1.8 or higher
|
||||||
|
* [Git client](https://git-scm.com/downloads) - needed for clone commands
|
||||||
|
* **Node.js** v6.9.0 - 6.10.0 ( __Node v7+ is not supported__ )
|
||||||
|
* Download docker images
|
||||||
|
|
||||||
|
```
|
||||||
|
cd fabric-sdk-node/examples/balance-transfer/
|
||||||
|
docker-compose -f artifacts/docker-compose.yaml pull
|
||||||
|
```
|
||||||
|
|
||||||
|
Once you have completed the above setup, you will have provisioned a local network with the following docker container configuration:
|
||||||
|
|
||||||
|
* 2 CAs
|
||||||
|
* A SOLO orderer
|
||||||
|
* 4 peers (2 peers per Org)
|
||||||
|
|
||||||
|
#### Artifacts
|
||||||
|
* Crypto material has been generated using the **cryptogen** tool from Hyperledger Fabric and mounted to all peers, the orderering node and CA containers. More details regarding the cryptogen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html#crypto-generator).
|
||||||
|
* An Orderer genesis block (genesis.block) and channel configuration transaction (mychannel.tx) has been pre generated using the **configtxgen** tool from Hyperledger Fabric and placed within the artifacts folder. More details regarding the configtxgen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html#configuration-transaction-generator).
|
||||||
|
|
||||||
|
## Running the sample program
|
||||||
|
|
||||||
|
There are two options available for running the balance-transfer sample
|
||||||
|
|
||||||
|
### Option 1:
|
||||||
|
|
||||||
|
##### Terminal Window 1
|
||||||
|
|
||||||
|
* Launch the network using docker-compose
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose -f artifacts/docker-compose.yaml up
|
||||||
|
```
|
||||||
|
##### Terminal Window 2
|
||||||
|
|
||||||
|
* Execute the REST APIs from the section [Sample REST APIs Requests](https://github.com/hyperledger/fabric-sdk-node/tree/master/examples/balance-transfer#running-the-sample-program)
|
||||||
|
|
||||||
|
|
||||||
|
### Option 2:
|
||||||
|
|
||||||
|
##### Terminal Window 1
|
||||||
|
|
||||||
|
```
|
||||||
|
cd fabric-sdk-node/examples/balance-transfer
|
||||||
|
|
||||||
|
./runApp.sh
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
* This lauches the required network on your local machine
|
||||||
|
* Installs the fabric-client and fabric-ca-client node modules
|
||||||
|
* And, starts the node app on PORT 4000
|
||||||
|
|
||||||
|
##### Terminal Window 2
|
||||||
|
|
||||||
|
|
||||||
|
In order for the following shell script to properly parse the JSON, you must install ``jq``:
|
||||||
|
|
||||||
|
instructions [https://stedolan.github.io/jq/](https://stedolan.github.io/jq/)
|
||||||
|
|
||||||
|
With the application started in terminal 1, next, test the APIs by executing the script - **testAPIs.sh**:
|
||||||
|
```
|
||||||
|
cd fabric-sdk-node/examples/balance-transfer
|
||||||
|
|
||||||
|
./testAPIs.sh
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sample REST APIs Requests
|
||||||
|
|
||||||
|
### Login Request
|
||||||
|
|
||||||
|
* Register and enroll new users in Organization - **Org1**:
|
||||||
|
|
||||||
|
`curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=org1'`
|
||||||
|
|
||||||
|
**OUTPUT:**
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"secret": "RaxhMgevgJcm",
|
||||||
|
"message": "Jim enrolled Successfully",
|
||||||
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The response contains the success/failure status, an **enrollment Secret** and a **JSON Web Token (JWT)** that is a required string in the Request Headers for subsequent requests.
|
||||||
|
|
||||||
|
### Create Channel request
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST \
|
||||||
|
http://localhost:4000/channels \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"channelName":"mychannel",
|
||||||
|
"channelConfigPath":"../artifacts/channel/mychannel.tx"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Please note that the Header **authorization** must contain the JWT returned from the `POST /users` call
|
||||||
|
|
||||||
|
### Join Channel request
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST \
|
||||||
|
http://localhost:4000/channels/mychannel/peers \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"peers": ["localhost:7051","localhost:7056"]
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
### Install chaincode
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST \
|
||||||
|
http://localhost:4000/chaincodes \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"peers": ["localhost:7051","localhost:7056"],
|
||||||
|
"chaincodeName":"mycc",
|
||||||
|
"chaincodePath":"github.com/example_cc",
|
||||||
|
"chaincodeVersion":"v0"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Instantiate chaincode
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST \
|
||||||
|
http://localhost:4000/channels/mychannel/chaincodes \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"peers": ["localhost:7051"],
|
||||||
|
"chaincodeName":"mycc",
|
||||||
|
"chaincodeVersion":"v0",
|
||||||
|
"functionName":"init",
|
||||||
|
"args":["a","100","b","200"]
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Invoke request
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST \
|
||||||
|
http://localhost:4000/channels/mychannel/chaincodes/mycc \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"peers": ["localhost:7051", "localhost:7056"],
|
||||||
|
"fcn":"move",
|
||||||
|
"args":["a","b","10"]
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
**NOTE:** Ensure that you save the Transaction ID from the response in order to pass this string in the subsequent query transactions.
|
||||||
|
|
||||||
|
### Chaincode Query
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&fcn=query&args=%5B%22a%22%5D" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query Block by BlockNumber
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/channels/mychannel/blocks/1?peer=peer1" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query Transaction by TransactionID
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET http://localhost:4000/channels/mychannel/transactions/TRX_ID?peer=peer1 \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
**NOTE**: Here the TRX_ID can be from any previous invoke transaction
|
||||||
|
|
||||||
|
|
||||||
|
### Query ChainInfo
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/channels/mychannel?peer=peer1" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query Installed chaincodes
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/chaincodes?peer=peer1&type=installed" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query Instantiated chaincodes
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/chaincodes?peer=peer1&type=instantiated" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query Channels
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X GET \
|
||||||
|
"http://localhost:4000/channels?peer=peer1" \
|
||||||
|
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||||
|
-H "content-type: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Network configuration considerations
|
||||||
|
|
||||||
|
You have the ability to change configuration parameters by editing the network-config.json file.
|
||||||
|
|
||||||
|
#### IP Address** and PORT information
|
||||||
|
|
||||||
|
If you choose to customize your docker-compose yaml file by hardcoding IP Addresses and PORT information for your peers and orderer, then you MUST also add the identical values into the network-config.json file. The paths shown below will need to be adjusted to match your docker-compose yaml file.
|
||||||
|
|
||||||
|
```
|
||||||
|
"orderer": {
|
||||||
|
"url": "grpcs://x.x.x.x:7050",
|
||||||
|
"server-hostname": "orderer0",
|
||||||
|
"tls_cacerts": "../artifacts/tls/orderer/ca-cert.pem"
|
||||||
|
},
|
||||||
|
"org1": {
|
||||||
|
"ca": "http://x.x.x.x:7054",
|
||||||
|
"peer1": {
|
||||||
|
"requests": "grpcs://x.x.x.x:7051",
|
||||||
|
"events": "grpcs://x.x.x.x:7053",
|
||||||
|
...
|
||||||
|
},
|
||||||
|
"peer2": {
|
||||||
|
"requests": "grpcs://x.x.x.x:7056",
|
||||||
|
"events": "grpcs://x.x.x.x:7058",
|
||||||
|
...
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"org2": {
|
||||||
|
"ca": "http://x.x.x.x:8054",
|
||||||
|
"peer1": {
|
||||||
|
"requests": "grpcs://x.x.x.x:8051",
|
||||||
|
"events": "grpcs://x.x.x.x:8053",
|
||||||
|
... },
|
||||||
|
"peer2": {
|
||||||
|
"requests": "grpcs://x.x.x.x:8056",
|
||||||
|
"events": "grpcs://x.x.x.x:8058",
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Discover IP Address
|
||||||
|
|
||||||
|
To retrieve the IP Address for one of your network entities, issue the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
# this will return the IP Address for peer0
|
||||||
|
docker inspect peer0 | grep IPAddress
|
||||||
|
```
|
||||||
|
|
||||||
|
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
|
||||||
425
balance-transfer/app.js
Normal file
425
balance-transfer/app.js
Normal file
|
|
@ -0,0 +1,425 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
var log4js = require('log4js');
|
||||||
|
var logger = log4js.getLogger('SampleWebApp');
|
||||||
|
var express = require('express');
|
||||||
|
var session = require('express-session');
|
||||||
|
var cookieParser = require('cookie-parser');
|
||||||
|
var bodyParser = require('body-parser');
|
||||||
|
var http = require('http');
|
||||||
|
var util = require('util');
|
||||||
|
var app = express();
|
||||||
|
var expressJWT = require('express-jwt');
|
||||||
|
var jwt = require('jsonwebtoken');
|
||||||
|
var bearerToken = require('express-bearer-token');
|
||||||
|
var cors = require('cors');
|
||||||
|
var config = require('./config.json');
|
||||||
|
var helper = require('./app/helper.js');
|
||||||
|
var channels = require('./app/create-channel.js');
|
||||||
|
var join = require('./app/join-channel.js');
|
||||||
|
var install = require('./app/install-chaincode.js');
|
||||||
|
var instantiate = require('./app/instantiate-chaincode.js');
|
||||||
|
var invoke = require('./app/invoke-transaction.js');
|
||||||
|
var query = require('./app/query.js');
|
||||||
|
var host = process.env.HOST || config.host;
|
||||||
|
var port = process.env.PORT || config.port;
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////// SET CONFIGURATONS ////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
app.options('*', cors());
|
||||||
|
app.use(cors());
|
||||||
|
//support parsing of application/json type post data
|
||||||
|
app.use(bodyParser.json());
|
||||||
|
//support parsing of application/x-www-form-urlencoded post data
|
||||||
|
app.use(bodyParser.urlencoded({
|
||||||
|
extended: false
|
||||||
|
}));
|
||||||
|
// set secret variable
|
||||||
|
app.set('secret', 'thisismysecret');
|
||||||
|
app.use(expressJWT({
|
||||||
|
secret: 'thisismysecret'
|
||||||
|
}).unless({
|
||||||
|
path: ['/users']
|
||||||
|
}));
|
||||||
|
app.use(bearerToken());
|
||||||
|
app.use(function(req, res, next) {
|
||||||
|
if (req.originalUrl.indexOf('/users') >= 0) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
|
var token = req.token;
|
||||||
|
jwt.verify(token, app.get('secret'), function(err, decoded) {
|
||||||
|
if (err) {
|
||||||
|
res.send({
|
||||||
|
success: false,
|
||||||
|
message: 'Failed to authenticate token. Make sure to include the ' +
|
||||||
|
'token returned from /users call in the authorization header ' +
|
||||||
|
' as a Bearer token'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
// add the decoded user name and org name to the request object
|
||||||
|
// for the downstream code to use
|
||||||
|
req.username = decoded.username;
|
||||||
|
req.orgname = decoded.orgName;
|
||||||
|
logger.debug(util.format('Decoded from JWT token: username - %s, orgname - %s', decoded.username, decoded.orgName));
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////// START SERVER /////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
var server = http.createServer(app).listen(port, function() {});
|
||||||
|
logger.info('****************** SERVER STARTED ************************');
|
||||||
|
logger.info('************** http://' + host + ':' + port +
|
||||||
|
' ******************');
|
||||||
|
server.timeout = 240000;
|
||||||
|
|
||||||
|
function getErrorMessage(field) {
|
||||||
|
var response = {
|
||||||
|
success: false,
|
||||||
|
message: field + ' field is missing or Invalid in the request'
|
||||||
|
};
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////// REST ENDPOINTS START HERE ///////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Register and enroll user
|
||||||
|
app.post('/users', function(req, res) {
|
||||||
|
var username = req.body.username;
|
||||||
|
var orgName = req.body.orgName;
|
||||||
|
logger.debug('End point : /users');
|
||||||
|
logger.debug('User name : ' + username);
|
||||||
|
logger.debug('Org name : ' + orgName);
|
||||||
|
if (!username) {
|
||||||
|
res.json(getErrorMessage('\'username\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!orgName) {
|
||||||
|
res.json(getErrorMessage('\'orgName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var token = jwt.sign({
|
||||||
|
exp: Math.floor(Date.now() / 1000) + parseInt(config.jwt_expiretime),
|
||||||
|
username: username,
|
||||||
|
orgName: orgName
|
||||||
|
}, app.get('secret'));
|
||||||
|
helper.getRegisteredUsers(username, orgName, true).then(function(response) {
|
||||||
|
if (response && typeof response !== 'string') {
|
||||||
|
response.token = token;
|
||||||
|
res.json(response);
|
||||||
|
} else {
|
||||||
|
res.json({
|
||||||
|
success: false,
|
||||||
|
message: response
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Create Channel
|
||||||
|
app.post('/channels', function(req, res) {
|
||||||
|
logger.info('<<<<<<<<<<<<<<<<< C R E A T E C H A N N E L >>>>>>>>>>>>>>>>>');
|
||||||
|
logger.debug('End point : /channels');
|
||||||
|
var channelName = req.body.channelName;
|
||||||
|
var channelConfigPath = req.body.channelConfigPath;
|
||||||
|
logger.debug('Channel name : ' + channelName);
|
||||||
|
logger.debug('channelConfigPath : ' + channelConfigPath); //../artifacts/channel/mychannel.tx
|
||||||
|
if (!channelName) {
|
||||||
|
res.json(getErrorMessage('\'channelName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!channelConfigPath) {
|
||||||
|
res.json(getErrorMessage('\'channelConfigPath\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
channels.createChannel(channelName, channelConfigPath, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Join Channel
|
||||||
|
app.post('/channels/:channelName/peers', function(req, res) {
|
||||||
|
logger.info('<<<<<<<<<<<<<<<<< J O I N C H A N N E L >>>>>>>>>>>>>>>>>');
|
||||||
|
var channelName = req.params.channelName;
|
||||||
|
var peers = req.body.peers;
|
||||||
|
logger.debug('channelName : ' + channelName);
|
||||||
|
logger.debug('peers : ' + peers);
|
||||||
|
if (!channelName) {
|
||||||
|
res.json(getErrorMessage('\'channelName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!peers || peers.length == 0) {
|
||||||
|
res.json(getErrorMessage('\'peers\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
join.joinChannel(channelName, peers, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Install chaincode on target peers
|
||||||
|
app.post('/chaincodes', function(req, res) {
|
||||||
|
logger.debug('==================== INSTALL CHAINCODE ==================');
|
||||||
|
var peers = req.body.peers;
|
||||||
|
var chaincodeName = req.body.chaincodeName;
|
||||||
|
var chaincodePath = req.body.chaincodePath;
|
||||||
|
var chaincodeVersion = req.body.chaincodeVersion;
|
||||||
|
logger.debug('peers : ' + peers); // target peers list
|
||||||
|
logger.debug('chaincodeName : ' + chaincodeName);
|
||||||
|
logger.debug('chaincodePath : ' + chaincodePath);
|
||||||
|
logger.debug('chaincodeVersion : ' + chaincodeVersion);
|
||||||
|
if (!peers || peers.length == 0) {
|
||||||
|
res.json(getErrorMessage('\'peers\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chaincodeName) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chaincodePath) {
|
||||||
|
res.json(getErrorMessage('\'chaincodePath\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chaincodeVersion) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeVersion\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
install.installChaincode(peers, chaincodeName, chaincodePath, chaincodeVersion, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Instantiate chaincode on target peers
|
||||||
|
app.post('/channels/:channelName/chaincodes', function(req, res) {
|
||||||
|
logger.debug('==================== INSTANTIATE CHAINCODE ==================');
|
||||||
|
var chaincodeName = req.body.chaincodeName;
|
||||||
|
var chaincodeVersion = req.body.chaincodeVersion;
|
||||||
|
var channelName = req.params.channelName;
|
||||||
|
var functionName = req.body.functionName;
|
||||||
|
var args = req.body.args;
|
||||||
|
logger.debug('channelName : ' + channelName);
|
||||||
|
logger.debug('chaincodeName : ' + chaincodeName);
|
||||||
|
logger.debug('chaincodeVersion : ' + chaincodeVersion);
|
||||||
|
logger.debug('functionName : ' + functionName);
|
||||||
|
logger.debug('args : ' + args);
|
||||||
|
if (!chaincodeName) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chaincodeVersion) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeVersion\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!channelName) {
|
||||||
|
res.json(getErrorMessage('\'channelName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!functionName) {
|
||||||
|
res.json(getErrorMessage('\'functionName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!args) {
|
||||||
|
res.json(getErrorMessage('\'args\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
instantiate.instantiateChaincode(channelName, chaincodeName, chaincodeVersion, functionName, args, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Invoke transaction on chaincode on target peers
|
||||||
|
app.post('/channels/:channelName/chaincodes/:chaincodeName', function(req, res) {
|
||||||
|
logger.debug('==================== INVOKE ON CHAINCODE ==================');
|
||||||
|
var peers = req.body.peers;
|
||||||
|
var chaincodeName = req.params.chaincodeName;
|
||||||
|
var channelName = req.params.channelName;
|
||||||
|
var fcn = req.body.fcn;
|
||||||
|
var args = req.body.args;
|
||||||
|
logger.debug('channelName : ' + channelName);
|
||||||
|
logger.debug('chaincodeName : ' + chaincodeName);
|
||||||
|
logger.debug('fcn : ' + fcn);
|
||||||
|
logger.debug('args : ' + args);
|
||||||
|
if (!peers || peers.length == 0) {
|
||||||
|
res.json(getErrorMessage('\'peers\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chaincodeName) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!channelName) {
|
||||||
|
res.json(getErrorMessage('\'channelName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!fcn) {
|
||||||
|
res.json(getErrorMessage('\'fcn\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!args) {
|
||||||
|
res.json(getErrorMessage('\'args\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
invoke.invokeChaincode(peers, channelName, chaincodeName, fcn, args, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query on chaincode on target peers
|
||||||
|
app.get('/channels/:channelName/chaincodes/:chaincodeName', function(req, res) {
|
||||||
|
logger.debug('==================== QUERY BY CHAINCODE ==================');
|
||||||
|
var channelName = req.params.channelName;
|
||||||
|
var chaincodeName = req.params.chaincodeName;
|
||||||
|
let args = req.query.args;
|
||||||
|
let fcn = req.query.fcn;
|
||||||
|
let peer = req.query.peer;
|
||||||
|
|
||||||
|
logger.debug('channelName : ' + channelName);
|
||||||
|
logger.debug('chaincodeName : ' + chaincodeName);
|
||||||
|
logger.debug('fcn : ' + fcn);
|
||||||
|
logger.debug('args : ' + args);
|
||||||
|
|
||||||
|
if (!chaincodeName) {
|
||||||
|
res.json(getErrorMessage('\'chaincodeName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!channelName) {
|
||||||
|
res.json(getErrorMessage('\'channelName\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!fcn) {
|
||||||
|
res.json(getErrorMessage('\'fcn\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!args) {
|
||||||
|
res.json(getErrorMessage('\'args\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
args = args.replace(/'/g, '"');
|
||||||
|
args = JSON.parse(args);
|
||||||
|
logger.debug(args);
|
||||||
|
|
||||||
|
query.queryChaincode(peer, channelName, chaincodeName, args, fcn, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query Get Block by BlockNumber
|
||||||
|
app.get('/channels/:channelName/blocks/:blockId', function(req, res) {
|
||||||
|
logger.debug('==================== GET BLOCK BY NUMBER ==================');
|
||||||
|
let blockId = req.params.blockId;
|
||||||
|
let peer = req.query.peer;
|
||||||
|
logger.debug('channelName : ' + req.params.channelName);
|
||||||
|
logger.debug('BlockID : ' + blockId);
|
||||||
|
logger.debug('Peer : ' + peer);
|
||||||
|
if (!blockId) {
|
||||||
|
res.json(getErrorMessage('\'blockId\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.getBlockByNumber(peer, blockId, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query Get Transaction by Transaction ID
|
||||||
|
app.get('/channels/:channelName/transactions/:trxnId', function(req, res) {
|
||||||
|
logger.debug(
|
||||||
|
'================ GET TRANSACTION BY TRANSACTION_ID ======================'
|
||||||
|
);
|
||||||
|
logger.debug('channelName : ' + req.params.channelName);
|
||||||
|
let trxnId = req.params.trxnId;
|
||||||
|
let peer = req.query.peer;
|
||||||
|
if (!trxnId) {
|
||||||
|
res.json(getErrorMessage('\'trxnId\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.getTransactionByID(peer, trxnId, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query Get Block by Hash
|
||||||
|
app.get('/channels/:channelName/blocks', function(req, res) {
|
||||||
|
logger.debug('================ GET BLOCK BY HASH ======================');
|
||||||
|
logger.debug('channelName : ' + req.params.channelName);
|
||||||
|
let hash = req.query.hash;
|
||||||
|
let peer = req.query.peer;
|
||||||
|
if (!hash) {
|
||||||
|
res.json(getErrorMessage('\'hash\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.getBlockByHash(peer, hash, req.username, req.orgname).then(
|
||||||
|
function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//Query for Channel Information
|
||||||
|
app.get('/channels/:channelName', function(req, res) {
|
||||||
|
logger.debug(
|
||||||
|
'================ GET CHANNEL INFORMATION ======================');
|
||||||
|
logger.debug('channelName : ' + req.params.channelName);
|
||||||
|
let peer = req.query.peer;
|
||||||
|
|
||||||
|
query.getChainInfo(peer, req.username, req.orgname).then(
|
||||||
|
function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query to fetch all Installed/instantiated chaincodes
|
||||||
|
app.get('/chaincodes', function(req, res) {
|
||||||
|
var peer = req.query.peer;
|
||||||
|
var installType = req.query.type;
|
||||||
|
//TODO: add Constnats
|
||||||
|
if (installType === 'installed') {
|
||||||
|
logger.debug(
|
||||||
|
'================ GET INSTALLED CHAINCODES ======================');
|
||||||
|
} else {
|
||||||
|
logger.debug(
|
||||||
|
'================ GET INSTANTIATED CHAINCODES ======================');
|
||||||
|
}
|
||||||
|
|
||||||
|
query.getInstalledChaincodes(peer, installType, req.username, req.orgname)
|
||||||
|
.then(function(message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Query to fetch channels
|
||||||
|
app.get('/channels', function(req, res) {
|
||||||
|
logger.debug('================ GET CHANNELS ======================');
|
||||||
|
logger.debug('peer: ' + req.query.peer);
|
||||||
|
var peer = req.query.peer;
|
||||||
|
if (!peer) {
|
||||||
|
res.json(getErrorMessage('\'peer\''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.getChannels(peer, req.username, req.orgname)
|
||||||
|
.then(function(
|
||||||
|
message) {
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
});
|
||||||
74
balance-transfer/app/create-channel.js
Normal file
74
balance-transfer/app/create-channel.js
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
var util = require('util');
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('Create-Channel');
|
||||||
|
//Attempt to send a request to the orderer with the sendCreateChain method
|
||||||
|
var createChannel = function(channelName, channelConfigPath, username, orgName) {
|
||||||
|
logger.debug('\n====== Creating Channel \'' + channelName + '\' ======\n');
|
||||||
|
var client = helper.getClientForOrg(orgName);
|
||||||
|
var channel = helper.getChannelForOrg(orgName);
|
||||||
|
|
||||||
|
// read in the envelope for the channel config raw bytes
|
||||||
|
var envelope = fs.readFileSync(path.join(__dirname, channelConfigPath));
|
||||||
|
// extract the channel config bytes from the envelope to be signed
|
||||||
|
var channelConfig = client.extractChannelConfig(envelope);
|
||||||
|
|
||||||
|
//Acting as a client in the given organization provided with "orgName" param
|
||||||
|
return helper.getOrgAdmin(orgName).then((admin) => {
|
||||||
|
logger.debug(util.format('Successfully acquired admin user for the organization "%s"', orgName));
|
||||||
|
// sign the channel config bytes as "endorsement", this is required by
|
||||||
|
// the orderer's channel creation policy
|
||||||
|
let signature = client.signChannelConfig(channelConfig);
|
||||||
|
|
||||||
|
let request = {
|
||||||
|
config: channelConfig,
|
||||||
|
signatures: [signature],
|
||||||
|
name: channelName,
|
||||||
|
orderer: channel.getOrderers()[0],
|
||||||
|
txId: client.newTransactionID()
|
||||||
|
};
|
||||||
|
|
||||||
|
// send to orderer
|
||||||
|
return client.createChannel(request);
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to enroll user \''+username+'\'. Error: ' + err);
|
||||||
|
throw new Error('Failed to enroll user \''+username+'\'' + err);
|
||||||
|
}).then((response) => {
|
||||||
|
logger.debug(' response ::%j', response);
|
||||||
|
if (response && response.status === 'SUCCESS') {
|
||||||
|
logger.debug('Successfully created the channel.');
|
||||||
|
let response = {
|
||||||
|
success: true,
|
||||||
|
message: 'Channel \'' + channelName + '\' created Successfully'
|
||||||
|
};
|
||||||
|
return response;
|
||||||
|
} else {
|
||||||
|
logger.error('\n!!!!!!!!! Failed to create the channel \'' + channelName +
|
||||||
|
'\' !!!!!!!!!\n\n');
|
||||||
|
throw new Error('Failed to create the channel \'' + channelName + '\'');
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to initialize the channel: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
throw new Error('Failed to initialize the channel: ' + err.stack ? err.stack : err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.createChannel = createChannel;
|
||||||
352
balance-transfer/app/helper.js
Normal file
352
balance-transfer/app/helper.js
Normal file
|
|
@ -0,0 +1,352 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
var log4js = require('log4js');
|
||||||
|
var logger = log4js.getLogger('Helper');
|
||||||
|
logger.setLevel('DEBUG');
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
var util = require('util');
|
||||||
|
var fs = require('fs-extra');
|
||||||
|
var User = require('fabric-client/lib/User.js');
|
||||||
|
var crypto = require('crypto');
|
||||||
|
var copService = require('fabric-ca-client');
|
||||||
|
var config = require('../config.json');
|
||||||
|
|
||||||
|
var hfc = require('fabric-client');
|
||||||
|
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||||
|
hfc.setLogger(logger);
|
||||||
|
var ORGS = hfc.getConfigSetting('network-config');
|
||||||
|
|
||||||
|
var clients = {};
|
||||||
|
var channels = {};
|
||||||
|
var caClients = {};
|
||||||
|
|
||||||
|
// set up the client and channel objects for each org
|
||||||
|
for (let key in ORGS) {
|
||||||
|
if (key.indexOf('org') === 0) {
|
||||||
|
let client = new hfc();
|
||||||
|
|
||||||
|
let cryptoSuite = hfc.newCryptoSuite();
|
||||||
|
cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(ORGS[key].name)}));
|
||||||
|
client.setCryptoSuite(cryptoSuite);
|
||||||
|
|
||||||
|
let channel = client.newChannel(config.channelName);
|
||||||
|
channel.addOrderer(newOrderer(client));
|
||||||
|
|
||||||
|
clients[key] = client;
|
||||||
|
channels[key] = channel;
|
||||||
|
|
||||||
|
setupPeers(channel, key, client);
|
||||||
|
|
||||||
|
let caUrl = ORGS[key].ca;
|
||||||
|
caClients[key] = new copService(caUrl, null /*defautl TLS opts*/, '' /* default CA */, cryptoSuite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupPeers(channel, org, client) {
|
||||||
|
for (let key in ORGS[org]) {
|
||||||
|
if (key.indexOf('peer') === 0) {
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, ORGS[org][key]['tls_cacerts']));
|
||||||
|
let peer = client.newPeer(
|
||||||
|
ORGS[org][key].requests,
|
||||||
|
{
|
||||||
|
pem: Buffer.from(data).toString(),
|
||||||
|
'ssl-target-name-override': ORGS[org][key]['server-hostname']
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
channel.addPeer(peer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function newOrderer(client) {
|
||||||
|
var caRootsPath = ORGS.orderer.tls_cacerts;
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, caRootsPath));
|
||||||
|
let caroots = Buffer.from(data).toString();
|
||||||
|
return client.newOrderer(config.orderer, {
|
||||||
|
'pem': caroots,
|
||||||
|
'ssl-target-name-override': ORGS.orderer['server-hostname']
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function readAllFiles(dir) {
|
||||||
|
var files = fs.readdirSync(dir);
|
||||||
|
var certs = [];
|
||||||
|
files.forEach((file_name) => {
|
||||||
|
let file_path = path.join(dir,file_name);
|
||||||
|
let data = fs.readFileSync(file_path);
|
||||||
|
certs.push(data);
|
||||||
|
});
|
||||||
|
return certs;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOrgName(org) {
|
||||||
|
return ORGS[org].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getKeyStoreForOrg(org) {
|
||||||
|
return config.keyValueStore + '_' + org;
|
||||||
|
}
|
||||||
|
|
||||||
|
function newRemotes(urls, forPeers, userOrg) {
|
||||||
|
var targets = [];
|
||||||
|
// find the peer that match the urls
|
||||||
|
outer:
|
||||||
|
for (let index in urls) {
|
||||||
|
let peerUrl = urls[index];
|
||||||
|
|
||||||
|
let found = false;
|
||||||
|
for (let key in ORGS) {
|
||||||
|
if (key.indexOf('org') === 0) {
|
||||||
|
// if looking for event hubs, an app can only connect to
|
||||||
|
// event hubs in its own org
|
||||||
|
if (!forPeers && key !== userOrg) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let org = ORGS[key];
|
||||||
|
let client = getClientForOrg(key);
|
||||||
|
|
||||||
|
for (let prop in org) {
|
||||||
|
if (prop.indexOf('peer') === 0) {
|
||||||
|
if (org[prop]['requests'].indexOf(peerUrl) >= 0) {
|
||||||
|
// found a peer matching the subject url
|
||||||
|
if (forPeers) {
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts']));
|
||||||
|
targets.push(client.newPeer('grpcs://' + peerUrl, {
|
||||||
|
pem: Buffer.from(data).toString(),
|
||||||
|
'ssl-target-name-override': org[prop]['server-hostname']
|
||||||
|
}));
|
||||||
|
|
||||||
|
continue outer;
|
||||||
|
} else {
|
||||||
|
let eh = client.newEventHub();
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts']));
|
||||||
|
eh.setPeerAddr(org[prop]['events'], {
|
||||||
|
pem: Buffer.from(data).toString(),
|
||||||
|
'ssl-target-name-override': org[prop]['server-hostname']
|
||||||
|
});
|
||||||
|
targets.push(eh);
|
||||||
|
|
||||||
|
continue outer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
logger.error(util.format('Failed to find a peer matching the url %s', peerUrl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return targets;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------//
|
||||||
|
// APIs
|
||||||
|
//-------------------------------------//
|
||||||
|
var getChannelForOrg = function(org) {
|
||||||
|
return channels[org];
|
||||||
|
};
|
||||||
|
|
||||||
|
var getClientForOrg = function(org) {
|
||||||
|
return clients[org];
|
||||||
|
};
|
||||||
|
|
||||||
|
var newPeers = function(urls) {
|
||||||
|
return newRemotes(urls, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
var newEventHubs = function(urls, org) {
|
||||||
|
return newRemotes(urls, false, org);
|
||||||
|
};
|
||||||
|
|
||||||
|
var getMspID = function(org) {
|
||||||
|
logger.debug('Msp ID : ' + ORGS[org].mspid);
|
||||||
|
return ORGS[org].mspid;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getAdminUser = function(userOrg) {
|
||||||
|
var users = config.users;
|
||||||
|
var username = users[0].username;
|
||||||
|
var password = users[0].secret;
|
||||||
|
var member;
|
||||||
|
var client = getClientForOrg(userOrg);
|
||||||
|
|
||||||
|
return hfc.newDefaultKeyValueStore({
|
||||||
|
path: getKeyStoreForOrg(getOrgName(userOrg))
|
||||||
|
}).then((store) => {
|
||||||
|
client.setStateStore(store);
|
||||||
|
// clearing the user context before switching
|
||||||
|
client._userContext = null;
|
||||||
|
return client.getUserContext(username, true).then((user) => {
|
||||||
|
if (user && user.isEnrolled()) {
|
||||||
|
logger.info('Successfully loaded member from persistence');
|
||||||
|
return user;
|
||||||
|
} else {
|
||||||
|
let caClient = caClients[userOrg];
|
||||||
|
// need to enroll it with CA server
|
||||||
|
return caClient.enroll({
|
||||||
|
enrollmentID: username,
|
||||||
|
enrollmentSecret: password
|
||||||
|
}).then((enrollment) => {
|
||||||
|
logger.info('Successfully enrolled user \'' + username + '\'');
|
||||||
|
member = new User(username);
|
||||||
|
member.setCryptoSuite(client.getCryptoSuite());
|
||||||
|
return member.setEnrollment(enrollment.key, enrollment.certificate, getMspID(userOrg));
|
||||||
|
}).then(() => {
|
||||||
|
return client.setUserContext(member);
|
||||||
|
}).then(() => {
|
||||||
|
return member;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to enroll and persist user. Error: ' + err.stack ?
|
||||||
|
err.stack : err);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getRegisteredUsers = function(username, userOrg, isJson) {
|
||||||
|
var member;
|
||||||
|
var client = getClientForOrg(userOrg);
|
||||||
|
var enrollmentSecret = null;
|
||||||
|
return hfc.newDefaultKeyValueStore({
|
||||||
|
path: getKeyStoreForOrg(getOrgName(userOrg))
|
||||||
|
}).then((store) => {
|
||||||
|
client.setStateStore(store);
|
||||||
|
// clearing the user context before switching
|
||||||
|
client._userContext = null;
|
||||||
|
return client.getUserContext(username, true).then((user) => {
|
||||||
|
if (user && user.isEnrolled()) {
|
||||||
|
logger.info('Successfully loaded member from persistence');
|
||||||
|
return user;
|
||||||
|
} else {
|
||||||
|
let caClient = caClients[userOrg];
|
||||||
|
return getAdminUser(userOrg).then(function(adminUserObj) {
|
||||||
|
member = adminUserObj;
|
||||||
|
return caClient.register({
|
||||||
|
enrollmentID: username,
|
||||||
|
affiliation: userOrg + '.department1'
|
||||||
|
}, member);
|
||||||
|
}).then((secret) => {
|
||||||
|
enrollmentSecret = secret;
|
||||||
|
logger.debug(username + ' registered successfully');
|
||||||
|
return caClient.enroll({
|
||||||
|
enrollmentID: username,
|
||||||
|
enrollmentSecret: secret
|
||||||
|
});
|
||||||
|
}, (err) => {
|
||||||
|
logger.debug(username + ' failed to register');
|
||||||
|
return '' + err;
|
||||||
|
//return 'Failed to register '+username+'. Error: ' + err.stack ? err.stack : err;
|
||||||
|
}).then((message) => {
|
||||||
|
if (message && typeof message === 'string' && message.includes(
|
||||||
|
'Error:')) {
|
||||||
|
logger.error(username + ' enrollment failed');
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
logger.debug(username + ' enrolled successfully');
|
||||||
|
|
||||||
|
member = new User(username);
|
||||||
|
member._enrollmentSecret = enrollmentSecret;
|
||||||
|
return member.setEnrollment(message.key, message.certificate, getMspID(userOrg));
|
||||||
|
}).then(() => {
|
||||||
|
client.setUserContext(member);
|
||||||
|
return member;
|
||||||
|
}, (err) => {
|
||||||
|
logger.error(util.format('%s enroll failed: %s', username, err.stack ? err.stack : err));
|
||||||
|
return '' + err;
|
||||||
|
});;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).then((user) => {
|
||||||
|
if (isJson && isJson === true) {
|
||||||
|
var response = {
|
||||||
|
success: true,
|
||||||
|
secret: user._enrollmentSecret,
|
||||||
|
message: username + ' enrolled Successfully',
|
||||||
|
};
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
}, (err) => {
|
||||||
|
logger.error(util.format('Failed to get registered user: %s, error: %s', username, err.stack ? err.stack : err));
|
||||||
|
return '' + err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getOrgAdmin = function(userOrg) {
|
||||||
|
var admin = ORGS[userOrg].admin;
|
||||||
|
var keyPath = path.join(__dirname, admin.key);
|
||||||
|
var keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString();
|
||||||
|
var certPath = path.join(__dirname, admin.cert);
|
||||||
|
var certPEM = readAllFiles(certPath)[0].toString();
|
||||||
|
|
||||||
|
var client = getClientForOrg(userOrg);
|
||||||
|
var cryptoSuite = hfc.newCryptoSuite();
|
||||||
|
if (userOrg) {
|
||||||
|
cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(getOrgName(userOrg))}));
|
||||||
|
client.setCryptoSuite(cryptoSuite);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hfc.newDefaultKeyValueStore({
|
||||||
|
path: getKeyStoreForOrg(getOrgName(userOrg))
|
||||||
|
}).then((store) => {
|
||||||
|
client.setStateStore(store);
|
||||||
|
|
||||||
|
return client.createUser({
|
||||||
|
username: 'peer'+userOrg+'Admin',
|
||||||
|
mspid: getMspID(userOrg),
|
||||||
|
cryptoContent: {
|
||||||
|
privateKeyPEM: keyPEM,
|
||||||
|
signedCertPEM: certPEM
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var setupChaincodeDeploy = function() {
|
||||||
|
process.env.GOPATH = path.join(__dirname, config.GOPATH);
|
||||||
|
};
|
||||||
|
|
||||||
|
var getLogger = function(moduleName) {
|
||||||
|
var logger = log4js.getLogger(moduleName);
|
||||||
|
logger.setLevel('DEBUG');
|
||||||
|
return logger;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getPeerAddressByName = function(org, peer) {
|
||||||
|
var address = ORGS[org][peer].requests;
|
||||||
|
return address.split('grpcs://')[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.getChannelForOrg = getChannelForOrg;
|
||||||
|
exports.getClientForOrg = getClientForOrg;
|
||||||
|
exports.getLogger = getLogger;
|
||||||
|
exports.setupChaincodeDeploy = setupChaincodeDeploy;
|
||||||
|
exports.getMspID = getMspID;
|
||||||
|
exports.ORGS = ORGS;
|
||||||
|
exports.newPeers = newPeers;
|
||||||
|
exports.newEventHubs = newEventHubs;
|
||||||
|
exports.getPeerAddressByName = getPeerAddressByName;
|
||||||
|
exports.getRegisteredUsers = getRegisteredUsers;
|
||||||
|
exports.getOrgAdmin = getOrgAdmin;
|
||||||
79
balance-transfer/app/install-chaincode.js
Normal file
79
balance-transfer/app/install-chaincode.js
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
var path = require('path');
|
||||||
|
var fs = require('fs');
|
||||||
|
var util = require('util');
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('install-chaincode');
|
||||||
|
var tx_id = null;
|
||||||
|
//function installChaincode(org) {
|
||||||
|
var installChaincode = function(peers, chaincodeName, chaincodePath,
|
||||||
|
chaincodeVersion, username, org) {
|
||||||
|
logger.debug(
|
||||||
|
'\n============ Install chaincode on organizations ============\n');
|
||||||
|
helper.setupChaincodeDeploy();
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
|
||||||
|
return helper.getOrgAdmin(org).then((user) => {
|
||||||
|
var request = {
|
||||||
|
targets: helper.newPeers(peers),
|
||||||
|
chaincodePath: chaincodePath,
|
||||||
|
chaincodeId: chaincodeName,
|
||||||
|
chaincodeVersion: chaincodeVersion
|
||||||
|
};
|
||||||
|
return client.installChaincode(request);
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
}).then((results) => {
|
||||||
|
var proposalResponses = results[0];
|
||||||
|
var proposal = results[1];
|
||||||
|
var all_good = true;
|
||||||
|
for (var i in proposalResponses) {
|
||||||
|
let one_good = false;
|
||||||
|
if (proposalResponses && proposalResponses[0].response &&
|
||||||
|
proposalResponses[0].response.status === 200) {
|
||||||
|
one_good = true;
|
||||||
|
logger.info('install proposal was good');
|
||||||
|
} else {
|
||||||
|
logger.error('install proposal was bad');
|
||||||
|
}
|
||||||
|
all_good = all_good & one_good;
|
||||||
|
}
|
||||||
|
if (all_good) {
|
||||||
|
logger.info(util.format(
|
||||||
|
'Successfully sent install Proposal and received ProposalResponse: Status - %s',
|
||||||
|
proposalResponses[0].response.status));
|
||||||
|
logger.debug('\nSuccessfully Installed chaincode on organization ' + org +
|
||||||
|
'\n');
|
||||||
|
return 'Successfully Installed chaincode on organization ' + org;
|
||||||
|
} else {
|
||||||
|
logger.error(
|
||||||
|
'Failed to send install Proposal or receive valid response. Response null or status is not 200. exiting...'
|
||||||
|
);
|
||||||
|
return 'Failed to send install Proposal or receive valid response. Response null or status is not 200. exiting...';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send install proposal due to error: ' + err.stack ?
|
||||||
|
err.stack : err);
|
||||||
|
throw new Error('Failed to send install proposal due to error: ' + err.stack ?
|
||||||
|
err.stack : err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
exports.installChaincode = installChaincode;
|
||||||
160
balance-transfer/app/instantiate-chaincode.js
Normal file
160
balance-transfer/app/instantiate-chaincode.js
Normal file
|
|
@ -0,0 +1,160 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
var path = require('path');
|
||||||
|
var fs = require('fs');
|
||||||
|
var util = require('util');
|
||||||
|
var hfc = require('fabric-client');
|
||||||
|
var Peer = require('fabric-client/lib/Peer.js');
|
||||||
|
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('instantiate-chaincode');
|
||||||
|
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||||
|
var ORGS = hfc.getConfigSetting('network-config');
|
||||||
|
var tx_id = null;
|
||||||
|
var eh = null;
|
||||||
|
|
||||||
|
var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion, functionName, args, username, org) {
|
||||||
|
logger.debug('\n============ Instantiate chaincode on organization ' + org +
|
||||||
|
' ============\n');
|
||||||
|
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
|
||||||
|
return helper.getOrgAdmin(org).then((user) => {
|
||||||
|
// read the config block from the orderer for the channel
|
||||||
|
// and initialize the verify MSPs based on the participating
|
||||||
|
// organizations
|
||||||
|
return channel.initialize();
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
}).then((success) => {
|
||||||
|
tx_id = client.newTransactionID();
|
||||||
|
// send proposal to endorser
|
||||||
|
var request = {
|
||||||
|
chaincodeId: chaincodeName,
|
||||||
|
chaincodeVersion: chaincodeVersion,
|
||||||
|
fcn: functionName,
|
||||||
|
args: args,
|
||||||
|
txId: tx_id
|
||||||
|
};
|
||||||
|
return channel.sendInstantiateProposal(request);
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to initialize the channel');
|
||||||
|
throw new Error('Failed to initialize the channel');
|
||||||
|
}).then((results) => {
|
||||||
|
var proposalResponses = results[0];
|
||||||
|
var proposal = results[1];
|
||||||
|
var all_good = true;
|
||||||
|
for (var i in proposalResponses) {
|
||||||
|
let one_good = false;
|
||||||
|
if (proposalResponses && proposalResponses[0].response &&
|
||||||
|
proposalResponses[0].response.status === 200) {
|
||||||
|
one_good = true;
|
||||||
|
logger.info('instantiate proposal was good');
|
||||||
|
} else {
|
||||||
|
logger.error('instantiate proposal was bad');
|
||||||
|
}
|
||||||
|
all_good = all_good & one_good;
|
||||||
|
}
|
||||||
|
if (all_good) {
|
||||||
|
logger.info(util.format(
|
||||||
|
'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s',
|
||||||
|
proposalResponses[0].response.status, proposalResponses[0].response.message,
|
||||||
|
proposalResponses[0].response.payload, proposalResponses[0].endorsement
|
||||||
|
.signature));
|
||||||
|
var request = {
|
||||||
|
proposalResponses: proposalResponses,
|
||||||
|
proposal: proposal
|
||||||
|
};
|
||||||
|
// set the transaction listener and set a timeout of 30sec
|
||||||
|
// if the transaction did not get committed within the timeout period,
|
||||||
|
// fail the test
|
||||||
|
var deployId = tx_id.getTransactionID();
|
||||||
|
|
||||||
|
eh = client.newEventHub();
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, ORGS[org]['peer1'][
|
||||||
|
'tls_cacerts'
|
||||||
|
]));
|
||||||
|
eh.setPeerAddr(ORGS[org]['peer1']['events'], {
|
||||||
|
pem: Buffer.from(data).toString(),
|
||||||
|
'ssl-target-name-override': ORGS[org]['peer1']['server-hostname']
|
||||||
|
});
|
||||||
|
eh.connect();
|
||||||
|
|
||||||
|
let txPromise = new Promise((resolve, reject) => {
|
||||||
|
let handle = setTimeout(() => {
|
||||||
|
eh.disconnect();
|
||||||
|
reject();
|
||||||
|
}, 30000);
|
||||||
|
|
||||||
|
eh.registerTxEvent(deployId, (tx, code) => {
|
||||||
|
logger.info(
|
||||||
|
'The chaincode instantiate transaction has been committed on peer ' +
|
||||||
|
eh._ep._endpoint.addr);
|
||||||
|
clearTimeout(handle);
|
||||||
|
eh.unregisterTxEvent(deployId);
|
||||||
|
eh.disconnect();
|
||||||
|
|
||||||
|
if (code !== 'VALID') {
|
||||||
|
logger.error('The chaincode instantiate transaction was invalid, code = ' + code);
|
||||||
|
reject();
|
||||||
|
} else {
|
||||||
|
logger.info('The chaincode instantiate transaction was valid.');
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var sendPromise = channel.sendTransaction(request);
|
||||||
|
return Promise.all([sendPromise].concat([txPromise])).then((results) => {
|
||||||
|
logger.debug('Event promise all complete and testing complete');
|
||||||
|
return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error(
|
||||||
|
util.format('Failed to send instantiate transaction and get notifications within the timeout period. %s', err)
|
||||||
|
);
|
||||||
|
return 'Failed to send instantiate transaction and get notifications within the timeout period.';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.error(
|
||||||
|
'Failed to send instantiate Proposal or receive valid response. Response null or status is not 200. exiting...'
|
||||||
|
);
|
||||||
|
return 'Failed to send instantiate Proposal or receive valid response. Response null or status is not 200. exiting...';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send instantiate proposal due to error: ' + err.stack ?
|
||||||
|
err.stack : err);
|
||||||
|
return 'Failed to send instantiate proposal due to error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response) => {
|
||||||
|
if (response.status === 'SUCCESS') {
|
||||||
|
logger.info('Successfully sent transaction to the orderer.');
|
||||||
|
return 'Chaincode Instantiateion is SUCCESS';
|
||||||
|
} else {
|
||||||
|
logger.error('Failed to order the transaction. Error code: ' + response.status);
|
||||||
|
return 'Failed to order the transaction. Error code: ' + response.status;
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send instantiate due to error: ' + err.stack ? err
|
||||||
|
.stack : err);
|
||||||
|
return 'Failed to send instantiate due to error: ' + err.stack ? err.stack :
|
||||||
|
err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
exports.instantiateChaincode = instantiateChaincode;
|
||||||
150
balance-transfer/app/invoke-transaction.js
Normal file
150
balance-transfer/app/invoke-transaction.js
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
var path = require('path');
|
||||||
|
var fs = require('fs');
|
||||||
|
var util = require('util');
|
||||||
|
var hfc = require('fabric-client');
|
||||||
|
var Peer = require('fabric-client/lib/Peer.js');
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('invoke-chaincode');
|
||||||
|
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||||
|
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||||
|
var ORGS = hfc.getConfigSetting('network-config');
|
||||||
|
|
||||||
|
var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, username, org) {
|
||||||
|
logger.debug(util.format('\n============ invoke transaction on organization %s ============\n', org));
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var targets = helper.newPeers(peersUrls);
|
||||||
|
var tx_id = null;
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((user) => {
|
||||||
|
tx_id = client.newTransactionID();
|
||||||
|
logger.debug(util.format('Sending transaction "%j"', tx_id));
|
||||||
|
// send proposal to endorser
|
||||||
|
var request = {
|
||||||
|
targets: targets,
|
||||||
|
chaincodeId: chaincodeName,
|
||||||
|
fcn: fcn,
|
||||||
|
args: args,
|
||||||
|
chainId: channelName,
|
||||||
|
txId: tx_id
|
||||||
|
};
|
||||||
|
return channel.sendTransactionProposal(request);
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||||
|
}).then((results) => {
|
||||||
|
var proposalResponses = results[0];
|
||||||
|
var proposal = results[1];
|
||||||
|
var all_good = true;
|
||||||
|
for (var i in proposalResponses) {
|
||||||
|
let one_good = false;
|
||||||
|
if (proposalResponses && proposalResponses[0].response &&
|
||||||
|
proposalResponses[0].response.status === 200) {
|
||||||
|
one_good = true;
|
||||||
|
logger.info('transaction proposal was good');
|
||||||
|
} else {
|
||||||
|
logger.error('transaction proposal was bad');
|
||||||
|
}
|
||||||
|
all_good = all_good & one_good;
|
||||||
|
}
|
||||||
|
if (all_good) {
|
||||||
|
logger.debug(util.format(
|
||||||
|
'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s',
|
||||||
|
proposalResponses[0].response.status, proposalResponses[0].response.message,
|
||||||
|
proposalResponses[0].response.payload, proposalResponses[0].endorsement
|
||||||
|
.signature));
|
||||||
|
var request = {
|
||||||
|
proposalResponses: proposalResponses,
|
||||||
|
proposal: proposal
|
||||||
|
};
|
||||||
|
// set the transaction listener and set a timeout of 30sec
|
||||||
|
// if the transaction did not get committed within the timeout period,
|
||||||
|
// fail the test
|
||||||
|
var transactionID = tx_id.getTransactionID();
|
||||||
|
var eventPromises = [];
|
||||||
|
|
||||||
|
var eventhubs = helper.newEventHubs(peersUrls, org);
|
||||||
|
for (let key in eventhubs) {
|
||||||
|
let eh = eventhubs[key];
|
||||||
|
eh.connect();
|
||||||
|
|
||||||
|
let txPromise = new Promise((resolve, reject) => {
|
||||||
|
let handle = setTimeout(() => {
|
||||||
|
eh.disconnect();
|
||||||
|
reject();
|
||||||
|
}, 30000);
|
||||||
|
|
||||||
|
eh.registerTxEvent(transactionID, (tx, code) => {
|
||||||
|
clearTimeout(handle);
|
||||||
|
eh.unregisterTxEvent(transactionID);
|
||||||
|
eh.disconnect();
|
||||||
|
|
||||||
|
if (code !== 'VALID') {
|
||||||
|
logger.error(
|
||||||
|
'The balance transfer transaction was invalid, code = ' + code);
|
||||||
|
reject();
|
||||||
|
} else {
|
||||||
|
logger.info(
|
||||||
|
'The balance transfer transaction has been committed on peer ' +
|
||||||
|
eh._ep._endpoint.addr);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
eventPromises.push(txPromise);
|
||||||
|
};
|
||||||
|
var sendPromise = channel.sendTransaction(request);
|
||||||
|
return Promise.all([sendPromise].concat(eventPromises)).then((results) => {
|
||||||
|
logger.debug(' event promise all complete and testing complete');
|
||||||
|
return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error(
|
||||||
|
'Failed to send transaction and get notifications within the timeout period.'
|
||||||
|
);
|
||||||
|
return 'Failed to send transaction and get notifications within the timeout period.';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.error(
|
||||||
|
'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'
|
||||||
|
);
|
||||||
|
return 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send proposal due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send proposal due to error: ' + err.stack ? err.stack :
|
||||||
|
err;
|
||||||
|
}).then((response) => {
|
||||||
|
if (response.status === 'SUCCESS') {
|
||||||
|
logger.info('Successfully sent transaction to the orderer.');
|
||||||
|
return tx_id.getTransactionID();
|
||||||
|
} else {
|
||||||
|
logger.error('Failed to order the transaction. Error code: ' + response.status);
|
||||||
|
return 'Failed to order the transaction. Error code: ' + response.status;
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send transaction due to error: ' + err.stack ? err
|
||||||
|
.stack : err);
|
||||||
|
return 'Failed to send transaction due to error: ' + err.stack ? err.stack :
|
||||||
|
err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.invokeChaincode = invokeChaincode;
|
||||||
150
balance-transfer/app/join-channel.js
Normal file
150
balance-transfer/app/join-channel.js
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
var util = require('util');
|
||||||
|
var path = require('path');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var Peer = require('fabric-client/lib/Peer.js');
|
||||||
|
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||||
|
var tx_id = null;
|
||||||
|
var nonce = null;
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('Join-Channel');
|
||||||
|
//helper.hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||||
|
var ORGS = helper.ORGS;
|
||||||
|
var allEventhubs = [];
|
||||||
|
|
||||||
|
//
|
||||||
|
//Attempt to send a request to the orderer with the sendCreateChain method
|
||||||
|
//
|
||||||
|
var joinChannel = function(channelName, peers, username, org) {
|
||||||
|
// on process exit, always disconnect the event hub
|
||||||
|
var closeConnections = function(isSuccess) {
|
||||||
|
if (isSuccess) {
|
||||||
|
logger.debug('\n============ Join Channel is SUCCESS ============\n');
|
||||||
|
} else {
|
||||||
|
logger.debug('\n!!!!!!!! ERROR: Join Channel FAILED !!!!!!!!\n');
|
||||||
|
}
|
||||||
|
logger.debug('');
|
||||||
|
for (var key in allEventhubs) {
|
||||||
|
var eventhub = allEventhubs[key];
|
||||||
|
if (eventhub && eventhub.isconnected()) {
|
||||||
|
//logger.debug('Disconnecting the event hub');
|
||||||
|
eventhub.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//logger.debug('\n============ Join Channel ============\n')
|
||||||
|
logger.info(util.format(
|
||||||
|
'Calling peers in organization "%s" to join the channel', org));
|
||||||
|
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var eventhubs = [];
|
||||||
|
|
||||||
|
return helper.getOrgAdmin(org).then((admin) => {
|
||||||
|
logger.info(util.format('received member object for admin of the organization "%s": ', org));
|
||||||
|
tx_id = client.newTransactionID();
|
||||||
|
let request = {
|
||||||
|
txId : tx_id
|
||||||
|
};
|
||||||
|
|
||||||
|
return channel.getGenesisBlock(request);
|
||||||
|
}).then((genesis_block) => {
|
||||||
|
tx_id = client.newTransactionID();
|
||||||
|
var request = {
|
||||||
|
targets: helper.newPeers(peers),
|
||||||
|
txId: tx_id,
|
||||||
|
block: genesis_block
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let key in ORGS[org]) {
|
||||||
|
if (ORGS[org].hasOwnProperty(key)) {
|
||||||
|
if (key.indexOf('peer') === 0) {
|
||||||
|
let data = fs.readFileSync(path.join(__dirname, ORGS[org][key][
|
||||||
|
'tls_cacerts'
|
||||||
|
]));
|
||||||
|
let eh = client.newEventHub();
|
||||||
|
eh.setPeerAddr(ORGS[org][key].events, {
|
||||||
|
pem: Buffer.from(data).toString(),
|
||||||
|
'ssl-target-name-override': ORGS[org][key]['server-hostname']
|
||||||
|
});
|
||||||
|
eh.connect();
|
||||||
|
eventhubs.push(eh);
|
||||||
|
allEventhubs.push(eh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var eventPromises = [];
|
||||||
|
eventhubs.forEach((eh) => {
|
||||||
|
let txPromise = new Promise((resolve, reject) => {
|
||||||
|
let handle = setTimeout(reject, parseInt(config.eventWaitTime));
|
||||||
|
eh.registerBlockEvent((block) => {
|
||||||
|
clearTimeout(handle);
|
||||||
|
// in real-world situations, a peer may have more than one channels so
|
||||||
|
// we must check that this block came from the channel we asked the peer to join
|
||||||
|
if (block.data.data.length === 1) {
|
||||||
|
// Config block must only contain one transaction
|
||||||
|
var channel_header = block.data.data[0].payload.header.channel_header;
|
||||||
|
if (channel_header.channel_id === channelName) {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
eventPromises.push(txPromise);
|
||||||
|
});
|
||||||
|
let sendPromise = channel.joinChannel(request);
|
||||||
|
return Promise.all([sendPromise].concat(eventPromises));
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to enroll user \'' + username + '\' due to error: ' +
|
||||||
|
err.stack ? err.stack : err);
|
||||||
|
throw new Error('Failed to enroll user \'' + username +
|
||||||
|
'\' due to error: ' + err.stack ? err.stack : err);
|
||||||
|
}).then((results) => {
|
||||||
|
logger.debug(util.format('Join Channel R E S P O N S E : %j', results));
|
||||||
|
if (results[0] && results[0][0] && results[0][0].response && results[0][0]
|
||||||
|
.response.status == 200) {
|
||||||
|
logger.info(util.format(
|
||||||
|
'Successfully joined peers in organization %s to the channel \'%s\'',
|
||||||
|
org, channelName));
|
||||||
|
closeConnections(true);
|
||||||
|
let response = {
|
||||||
|
success: true,
|
||||||
|
message: util.format(
|
||||||
|
'Successfully joined peers in organization %s to the channel \'%s\'',
|
||||||
|
org, channelName)
|
||||||
|
};
|
||||||
|
return response;
|
||||||
|
} else {
|
||||||
|
logger.error(' Failed to join channel');
|
||||||
|
closeConnections();
|
||||||
|
throw new Error('Failed to join channel');
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to join channel due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
closeConnections();
|
||||||
|
throw new Error('Failed to join channel due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
exports.joinChannel = joinChannel;
|
||||||
51
balance-transfer/app/network-config.json
Normal file
51
balance-transfer/app/network-config.json
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"network-config": {
|
||||||
|
"orderer": {
|
||||||
|
"url": "grpcs://localhost:7050",
|
||||||
|
"server-hostname": "orderer.example.com",
|
||||||
|
"tls_cacerts": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"org1": {
|
||||||
|
"name": "peerOrg1",
|
||||||
|
"mspid": "Org1MSP",
|
||||||
|
"ca": "https://localhost:7054",
|
||||||
|
"peer1": {
|
||||||
|
"requests": "grpcs://localhost:7051",
|
||||||
|
"events": "grpcs://localhost:7053",
|
||||||
|
"server-hostname": "peer0.org1.example.com",
|
||||||
|
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"peer2": {
|
||||||
|
"requests": "grpcs://localhost:7056",
|
||||||
|
"events": "grpcs://localhost:7058",
|
||||||
|
"server-hostname": "peer1.org1.example.com",
|
||||||
|
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"admin": {
|
||||||
|
"key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
|
||||||
|
"cert": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"org2": {
|
||||||
|
"name": "peerOrg2",
|
||||||
|
"mspid": "Org2MSP",
|
||||||
|
"ca": "https://localhost:8054",
|
||||||
|
"peer1": {
|
||||||
|
"requests": "grpcs://localhost:8051",
|
||||||
|
"events": "grpcs://localhost:8053",
|
||||||
|
"server-hostname": "peer0.org2.example.com",
|
||||||
|
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"peer2": {
|
||||||
|
"requests": "grpcs://localhost:8056",
|
||||||
|
"events": "grpcs://localhost:8058",
|
||||||
|
"server-hostname": "peer1.org2.example.com",
|
||||||
|
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"admin": {
|
||||||
|
"key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
|
||||||
|
"cert": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
277
balance-transfer/app/query.js
Normal file
277
balance-transfer/app/query.js
Normal file
|
|
@ -0,0 +1,277 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 IBM All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
var path = require('path');
|
||||||
|
var fs = require('fs');
|
||||||
|
var util = require('util');
|
||||||
|
var hfc = require('fabric-client');
|
||||||
|
var Peer = require('fabric-client/lib/Peer.js');
|
||||||
|
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||||
|
var config = require('../config.json');
|
||||||
|
var helper = require('./helper.js');
|
||||||
|
var logger = helper.getLogger('Query');
|
||||||
|
|
||||||
|
var queryChaincode = function(peer, channelName, chaincodeName, args, fcn, username, org) {
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
return helper.getRegisteredUsers(username, org).then((user) => {
|
||||||
|
tx_id = client.newTransactionID();
|
||||||
|
// send query
|
||||||
|
var request = {
|
||||||
|
chaincodeId: chaincodeName,
|
||||||
|
txId: tx_id,
|
||||||
|
fcn: fcn,
|
||||||
|
args: args
|
||||||
|
};
|
||||||
|
return channel.queryByChaincode(request, target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter \''+username+'\'');
|
||||||
|
return 'Failed to get submitter \''+username+'\'. Error: ' + err.stack ? err.stack :
|
||||||
|
err;
|
||||||
|
}).then((response_payloads) => {
|
||||||
|
if (response_payloads) {
|
||||||
|
for (let i = 0; i < response_payloads.length; i++) {
|
||||||
|
logger.info(args[0]+' now has ' + response_payloads[i].toString('utf8') +
|
||||||
|
' after the move');
|
||||||
|
return args[0]+' now has ' + response_payloads[i].toString('utf8') +
|
||||||
|
' after the move';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to end to end test with error:' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to end to end test with error:' + err.stack ? err.stack :
|
||||||
|
err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var getBlockByNumber = function(peer, blockNumber, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((member) => {
|
||||||
|
return channel.queryBlock(parseInt(blockNumber), target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response_payloads) => {
|
||||||
|
if (response_payloads) {
|
||||||
|
//logger.debug(response_payloads);
|
||||||
|
logger.debug(response_payloads);
|
||||||
|
return response_payloads; //response_payloads.data.data[0].buffer;
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var getTransactionByID = function(peer, trxnID, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((member) => {
|
||||||
|
return channel.queryTransaction(trxnID, target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response_payloads) => {
|
||||||
|
if (response_payloads) {
|
||||||
|
logger.debug(response_payloads);
|
||||||
|
return response_payloads;
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var getBlockByHash = function(peer, hash, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((member) => {
|
||||||
|
return channel.queryBlockByHash(Buffer.from(hash), target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response_payloads) => {
|
||||||
|
if (response_payloads) {
|
||||||
|
logger.debug(response_payloads);
|
||||||
|
return response_payloads;
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var getChainInfo = function(peer, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((member) => {
|
||||||
|
return channel.queryInfo(target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((blockchainInfo) => {
|
||||||
|
if (blockchainInfo) {
|
||||||
|
// FIXME: Save this for testing 'getBlockByHash' ?
|
||||||
|
logger.debug('===========================================');
|
||||||
|
logger.debug(blockchainInfo.currentBlockHash);
|
||||||
|
logger.debug('===========================================');
|
||||||
|
//logger.debug(blockchainInfo);
|
||||||
|
return blockchainInfo;
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//getInstalledChaincodes
|
||||||
|
var getInstalledChaincodes = function(peer, type, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
|
||||||
|
return helper.getOrgAdmin(org).then((member) => {
|
||||||
|
if (type === 'installed') {
|
||||||
|
return client.queryInstalledChaincodes(target);
|
||||||
|
} else {
|
||||||
|
return channel.queryInstantiatedChaincodes(target);
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response) => {
|
||||||
|
if (response) {
|
||||||
|
if (type === 'installed') {
|
||||||
|
logger.debug('<<< Installed Chaincodes >>>');
|
||||||
|
} else {
|
||||||
|
logger.debug('<<< Instantiated Chaincodes >>>');
|
||||||
|
}
|
||||||
|
var details = [];
|
||||||
|
for (let i = 0; i < response.chaincodes.length; i++) {
|
||||||
|
logger.debug('name: ' + response.chaincodes[i].name + ', version: ' +
|
||||||
|
response.chaincodes[i].version + ', path: ' + response.chaincodes[i].path
|
||||||
|
);
|
||||||
|
details.push('name: ' + response.chaincodes[i].name + ', version: ' +
|
||||||
|
response.chaincodes[i].version + ', path: ' + response.chaincodes[i].path
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return details;
|
||||||
|
} else {
|
||||||
|
logger.error('response is null');
|
||||||
|
return 'response is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var getChannels = function(peer, username, org) {
|
||||||
|
var target = buildTarget(peer, org);
|
||||||
|
var channel = helper.getChannelForOrg(org);
|
||||||
|
var client = helper.getClientForOrg(org);
|
||||||
|
|
||||||
|
return helper.getRegisteredUsers(username, org).then((member) => {
|
||||||
|
//channel.setPrimaryPeer(targets[0]);
|
||||||
|
return client.queryChannels(target);
|
||||||
|
}, (err) => {
|
||||||
|
logger.info('Failed to get submitter "' + username + '"');
|
||||||
|
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
|
||||||
|
err.stack : err;
|
||||||
|
}).then((response) => {
|
||||||
|
if (response) {
|
||||||
|
logger.debug('<<< channels >>>');
|
||||||
|
var channelNames = [];
|
||||||
|
for (let i = 0; i < response.channels.length; i++) {
|
||||||
|
channelNames.push('channel id: ' + response.channels[i].channel_id);
|
||||||
|
}
|
||||||
|
logger.debug(channelNames);
|
||||||
|
return response;
|
||||||
|
} else {
|
||||||
|
logger.error('response_payloads is null');
|
||||||
|
return 'response_payloads is null';
|
||||||
|
}
|
||||||
|
}, (err) => {
|
||||||
|
logger.error('Failed to send query due to error: ' + err.stack ? err.stack :
|
||||||
|
err);
|
||||||
|
return 'Failed to send query due to error: ' + err.stack ? err.stack : err;
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error('Failed to query with error:' + err.stack ? err.stack : err);
|
||||||
|
return 'Failed to query with error:' + err.stack ? err.stack : err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function buildTarget(peer, org) {
|
||||||
|
var target = null;
|
||||||
|
if (typeof peer !== 'undefined') {
|
||||||
|
let targets = helper.newPeers([helper.getPeerAddressByName(org, peer)]);
|
||||||
|
if (targets && targets.length > 0) target = targets[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.queryChaincode = queryChaincode;
|
||||||
|
exports.getBlockByNumber = getBlockByNumber;
|
||||||
|
exports.getTransactionByID = getTransactionByID;
|
||||||
|
exports.getBlockByHash = getBlockByHash;
|
||||||
|
exports.getChainInfo = getChainInfo;
|
||||||
|
exports.getInstalledChaincodes = getInstalledChaincodes;
|
||||||
|
exports.getChannels = getChannels;
|
||||||
30
balance-transfer/artifacts/base.yaml
Normal file
30
balance-transfer/artifacts/base.yaml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
peer-base:
|
||||||
|
image: hyperledger/fabric-peer:x86_64-1.0.0-rc1
|
||||||
|
environment:
|
||||||
|
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
|
||||||
|
# the following setting starts chaincode containers on the same
|
||||||
|
# bridge network as the peers
|
||||||
|
# https://docs.docker.com/compose/networking/
|
||||||
|
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_PEER_GOSSIP_USELEADERELECTION=true
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=false
|
||||||
|
# The following setting skips the gossip handshake since we are
|
||||||
|
# are not doing mutual TLS
|
||||||
|
- CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp
|
||||||
|
- CORE_PEER_TLS_ENABLED=true
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
|
||||||
|
command: peer node start
|
||||||
|
volumes:
|
||||||
|
- /var/run/:/host/var/run/
|
||||||
149
balance-transfer/artifacts/channel/configtx.yaml
Normal file
149
balance-transfer/artifacts/channel/configtx.yaml
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
---
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Profile
|
||||||
|
#
|
||||||
|
# - Different configuration profiles may be encoded here to be specified
|
||||||
|
# as parameters to the configtxgen tool
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Profiles:
|
||||||
|
|
||||||
|
TwoOrgsOrdererGenesis:
|
||||||
|
Orderer:
|
||||||
|
<<: *OrdererDefaults
|
||||||
|
Organizations:
|
||||||
|
- *OrdererOrg
|
||||||
|
Consortiums:
|
||||||
|
SampleConsortium:
|
||||||
|
Organizations:
|
||||||
|
- *Org1
|
||||||
|
- *Org2
|
||||||
|
TwoOrgsChannel:
|
||||||
|
Consortium: SampleConsortium
|
||||||
|
Application:
|
||||||
|
<<: *ApplicationDefaults
|
||||||
|
Organizations:
|
||||||
|
- *Org1
|
||||||
|
- *Org2
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Section: Organizations
|
||||||
|
#
|
||||||
|
# - This section defines the different organizational identities which will
|
||||||
|
# be referenced later in the configuration.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Organizations:
|
||||||
|
|
||||||
|
# SampleOrg defines an MSP using the sampleconfig. It should never be used
|
||||||
|
# in production but may be used as a template for other definitions
|
||||||
|
- &OrdererOrg
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
|
Name: OrdererMSP
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
|
ID: OrdererMSP
|
||||||
|
|
||||||
|
# MSPDir is the filesystem path which contains the MSP configuration
|
||||||
|
MSPDir: crypto-config/ordererOrganizations/example.com/msp
|
||||||
|
|
||||||
|
- &Org1
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
|
Name: Org1MSP
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
|
ID: Org1MSP
|
||||||
|
|
||||||
|
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
|
||||||
|
|
||||||
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
|
- Host: peer0.org1.example.com
|
||||||
|
Port: 7051
|
||||||
|
|
||||||
|
- &Org2
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
|
Name: Org2MSP
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
|
ID: Org2MSP
|
||||||
|
|
||||||
|
MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
|
||||||
|
|
||||||
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
|
- Host: peer0.org2.example.com
|
||||||
|
Port: 7051
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# SECTION: Orderer
|
||||||
|
#
|
||||||
|
# - This section defines the values to encode into a config transaction or
|
||||||
|
# genesis block for orderer related parameters
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Orderer: &OrdererDefaults
|
||||||
|
|
||||||
|
# Orderer Type: The orderer implementation to start
|
||||||
|
# Available types are "solo" and "kafka"
|
||||||
|
OrdererType: solo
|
||||||
|
|
||||||
|
Addresses:
|
||||||
|
- orderer.example.com:7050
|
||||||
|
|
||||||
|
# Batch Timeout: The amount of time to wait before creating a batch
|
||||||
|
BatchTimeout: 2s
|
||||||
|
|
||||||
|
# Batch Size: Controls the number of messages batched into a block
|
||||||
|
BatchSize:
|
||||||
|
|
||||||
|
# Max Message Count: The maximum number of messages to permit in a batch
|
||||||
|
MaxMessageCount: 10
|
||||||
|
|
||||||
|
# Absolute Max Bytes: The absolute maximum number of bytes allowed for
|
||||||
|
# the serialized messages in a batch.
|
||||||
|
AbsoluteMaxBytes: 98 MB
|
||||||
|
|
||||||
|
# Preferred Max Bytes: The preferred maximum number of bytes allowed for
|
||||||
|
# the serialized messages in a batch. A message larger than the preferred
|
||||||
|
# max bytes will result in a batch larger than preferred max bytes.
|
||||||
|
PreferredMaxBytes: 512 KB
|
||||||
|
|
||||||
|
Kafka:
|
||||||
|
# Brokers: A list of Kafka brokers to which the orderer connects
|
||||||
|
# NOTE: Use IP:port notation
|
||||||
|
Brokers:
|
||||||
|
- 127.0.0.1:9092
|
||||||
|
|
||||||
|
# Organizations is the list of orgs which are defined as participants on
|
||||||
|
# the orderer side of the network
|
||||||
|
Organizations:
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# SECTION: Application
|
||||||
|
#
|
||||||
|
# - This section defines the values to encode into a config transaction or
|
||||||
|
# genesis block for application related parameters
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Application: &ApplicationDefaults
|
||||||
|
|
||||||
|
# Organizations is the list of orgs which are defined as participants on
|
||||||
|
# the application side of the network
|
||||||
|
Organizations:
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9pRJ4Y87tn+vE1fU
|
||||||
|
uAGVg5OOGwHYlqBuvAOvy0Z+mEChRANCAAQyw4A26b4ouKj0TxbF3mM4I51vDLZ2
|
||||||
|
clA+fdrYJwZcI9F/lLmpu+oEd/XXdQn/ELzEsgeCi9xdThVYmeXJ/53K
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M
|
||||||
|
tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly
|
||||||
|
AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
|
||||||
|
SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf
|
||||||
|
f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy
|
||||||
|
7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6
|
||||||
|
im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M
|
||||||
|
tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly
|
||||||
|
AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
|
||||||
|
SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf
|
||||||
|
f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy
|
||||||
|
7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6
|
||||||
|
im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M
|
||||||
|
tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly
|
||||||
|
AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgc4TjL7yNIkRpowuC
|
||||||
|
Y0uEEkzJraTtTM380wlyrRoVs96hRANCAARi2C4soUEstzRVLDI8ccc17vocfvWg
|
||||||
|
5crrC6fxj/m+0xrA9n9ZOb+8FVRZ182XNz14DbxpfHrMEAHyJGbXoR5T
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICDTCCAbOgAwIBAgIRALFafJiTFN/47AvAGfvj1ZEwCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
|
||||||
|
KoZIzj0DAQcDQgAEYtguLKFBLLc0VSwyPHHHNe76HH71oOXK6wun8Y/5vtMawPZ/
|
||||||
|
WTm/vBVUWdfNlzc9eA28aXx6zBAB8iRm16EeU6NNMEswDgYDVR0PAQH/BAQDAgeA
|
||||||
|
MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDUbM8OlDbBvDtuK/gM2yAsSUNgT5
|
||||||
|
XHLuD/g50+wwBxkwCgYIKoZIzj0EAwIDSAAwRQIhANJuEGHBftrtlWgie9zgc60J
|
||||||
|
/XVytPN/D0rPlkMV17n7AiBBbStggGBfFYcQ2LhDhcKut8nScJ2OFrt+dJSdJbod
|
||||||
|
7A==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICWjCCAgCgAwIBAgIRAKk85zOKA4NKFQe/AmGxK7EwCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C
|
||||||
|
AQYIKoZIzj0DAQcDQgAE3Nve7G2pybxbA+S3bvKlP8BAR4kJG96Yd2k9UFc7+Mmd
|
||||||
|
XM5/7TeVCbaidnYpODYr2pNlzo8HijwoyvYxnN7U3aOBljCBkzAOBgNVHQ8BAf8E
|
||||||
|
BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
|
||||||
|
MAAwKwYDVR0jBCQwIoAgaiEe0YiAtNs4Z4Mcl3gJkCcTuOMhpatV7MEE2vwu7Ekw
|
||||||
|
JwYDVR0RBCAwHoITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcjAKBggqhkjO
|
||||||
|
PQQDAgNIADBFAiEAtW6SunJ0GXR2gZY2yOg4CAOLPqb3YB07/9byOSFYZygCIA77
|
||||||
|
iitG1Mkvlc7fyNFcgYKDUpbXQBS5iTmAuo/cISDx
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUsf4CUpdmdIaax7T
|
||||||
|
qjCJaQLCsSU1/xaoETdgCCZ8fDihRANCAATc297sbanJvFsD5Ldu8qU/wEBHiQkb
|
||||||
|
3ph3aT1QVzv4yZ1czn/tN5UJtqJ2dik4Nivak2XOjweKPCjK9jGc3tTd
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghjZ40AvUeupMV603
|
||||||
|
i9pA9S8uNLz5i6TePeBgJZhrY/ihRANCAAQkmbjr/9EK0m/4CpR6DiM+Eyke3vxP
|
||||||
|
X+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFTRWPw
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
|
||||||
|
SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf
|
||||||
|
f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy
|
||||||
|
7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6
|
||||||
|
im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M
|
||||||
|
tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly
|
||||||
|
AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg33NMbWc5E80ueSIA
|
||||||
|
iWqRlyC2M+1ce4shkkP/CVKOp4uhRANCAASgMruzeEtmT0Es7AFRf5sMAnsLrvvj
|
||||||
|
LX3DJlHXqCDxUQY9STAp33/PDNMI9d4EEiUOhn51K0++hvy+XxsQlIn1
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
|
||||||
|
SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf
|
||||||
|
f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy
|
||||||
|
7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6
|
||||||
|
im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6
|
||||||
|
DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT
|
||||||
|
RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa
|
||||||
|
/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6
|
||||||
|
WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICKzCCAdKgAwIBAgIQF7ZJRSdZJSb9HEWyJaxQuDAKBggqhkjOPQQDAjBsMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
|
||||||
|
YW1wbGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowVjELMAkG
|
||||||
|
A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
|
||||||
|
Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
|
||||||
|
KoZIzj0DAQcDQgAE+9xJbd39hXJw8Y49mtzzO1P/KaLjzkEAQGG7cnujbytJHRLL
|
||||||
|
+kHW2E02+ob8hAucwsjR/Sxg0J2yufaDxKWtSqNsMGowDgYDVR0PAQH/BAQDAgWg
|
||||||
|
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG
|
||||||
|
A1UdIwQkMCKAIGohHtGIgLTbOGeDHJd4CZAnE7jjIaWrVezBBNr8LuxJMAoGCCqG
|
||||||
|
SM49BAMCA0cAMEQCIA5f8O7WfymKaLrJ71f77GGb/6z72Jh7g5svHDZBgKkBAiAg
|
||||||
|
fkCIypxeGnU1Vbo3vYauhqU6lQYO6VcVBhk3182wyQ==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgixJReeen2sIgyqT6
|
||||||
|
F0z2Y9iYIu++FVOGg7ha4FR6G2WhRANCAAT73Elt3f2FcnDxjj2a3PM7U/8pouPO
|
||||||
|
QQBAYbtye6NvK0kdEsv6QdbYTTb6hvyEC5zCyNH9LGDQnbK59oPEpa1K
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgp4Y9v/Cx/ee3K2mP
|
||||||
|
N62ttbG2y1NkppMN6MlycYpqtT2hRANCAAQohXCFPMmsvPN+QiP874DXwHXyTZxI
|
||||||
|
oRZ1Jt9ZkikUlJv3LDxCgSxu2TjCP0kkP/A5JrV4MP+lCit6MKbbkKYF
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT
|
||||||
|
8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/
|
||||||
|
yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy
|
||||||
|
CKqf8052NVUs2CvPzA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT
|
||||||
|
8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/
|
||||||
|
yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy
|
||||||
|
CKqf8052NVUs2CvPzA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTEPwtCyJ1jFk2qQs
|
||||||
|
oFgHzMo3/MEXG1XJHiTgoRYvnPahRANCAATNL2TaAIodxq3xaPhPacHW7ILxHbOD
|
||||||
|
e6bF1MvueaAVanS7IIJtBDEP9VL7xH/cM28QWS/OFyNz01T+dGoyKuku
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGDCCAb+gAwIBAgIQPcMFFEB/vq6mEL6vXV7aUTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzS9k2gCKHcat8Wj4T2nB1uyC8R2zg3um
|
||||||
|
xdTL7nmgFWp0uyCCbQQxD/VS+8R/3DNvEFkvzhcjc9NU/nRqMirpLqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgHBdxbHUG
|
||||||
|
rFUzKPX9UmmN3SwigWcRUREUy/GTb3hDIAsCIEF1BxTqv8ilQYE8ql0wJL4mTber
|
||||||
|
HE6DFYvvBCUnicUh
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICczCCAhmgAwIBAgIRAIKTnLyvyRImVvGtyrD0wH4wCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCZF1/1UYwnRJk2d+3zB0cW9oi8H
|
||||||
|
h7g6CaBw6aEI1WwgtKZ+/s28oQVUYBVJsdT3RAGgRRRt12QrqO/xa7/i1UejgaIw
|
||||||
|
gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
|
||||||
|
AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn
|
||||||
|
N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIwLm9yZzEuZXhhbXBsZS5jb22C
|
||||||
|
BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAPs/YOkkkh2835Vb
|
||||||
|
pXtUuQNCi/PlhPhTiFlEdeE56vmmAiBadeHDYBIHkEA10wzr33wS1FpELg18eC5N
|
||||||
|
5gtmHzQUBA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCRU1ZAMLxDAlcr5d
|
||||||
|
D6ZSprL4Lf0+TkWwN6rCFVWmjDuhRANCAAQmRdf9VGMJ0SZNnft8wdHFvaIvB4e4
|
||||||
|
OgmgcOmhCNVsILSmfv7NvKEFVGAVSbHU90QBoEUUbddkK6jv8Wu/4tVH
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT
|
||||||
|
8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/
|
||||||
|
yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy
|
||||||
|
CKqf8052NVUs2CvPzA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtzNlo4v/qB1j5dJ6
|
||||||
|
CRLQb9UAfUMMevXdnbuXUux2K2GhRANCAAQp09OJbb47IImVbghi7EWMxIgkyWZW
|
||||||
|
cIdx0/9u9wdzZFgO8K5ciuxXwGpyMnsbkdVCPZuPmCjahRunIGJ3/DLH
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAI+BBtEBvpOqhfRZZH7eV/YwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABCnT04ltvjsgiZVuCGLsRYzEiCTJZlZw
|
||||||
|
h3HT/273B3NkWA7wrlyK7FfAanIyexuR1UI9m4+YKNqFG6cgYnf8MsejTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX
|
||||||
|
hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQCSRdWm
|
||||||
|
i4IgVUajvzWVxyE/wi7n617pVqS4+nJ7gbTRjQIgefzBwS+bkNhPc3/rktySFLRC
|
||||||
|
WMnq87KyqMLc6iRaJx0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICczCCAhmgAwIBAgIRALZ2km4W6KjPQb9rM12Ewb4wCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKpNWa4jf/Rk5bpSZqFYteLESkd7
|
||||||
|
KbrSOoiqLJmYSvM+KjDRPt+/pjLBNKM60tvknTUslU6Jne/7CVx1FpiHjRGjgaIw
|
||||||
|
gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
|
||||||
|
AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn
|
||||||
|
N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIxLm9yZzEuZXhhbXBsZS5jb22C
|
||||||
|
BXBlZXIxgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAKjhWT8ZdaYR2Hvx
|
||||||
|
hPUl3t6gDJmkVuhy2Mxin04XxrUUAiBmBN83NmGoluPHQnvtGQ1BQP/JpY+UCkMR
|
||||||
|
O0xeuEChjA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi4EN3aLIYYJMpLwD
|
||||||
|
r3yCKO+EBzcCcTA5QbNZ1SvDFa+hRANCAASqTVmuI3/0ZOW6UmahWLXixEpHeym6
|
||||||
|
0jqIqiyZmErzPiow0T7fv6YywTSjOtLb5J01LJVOiZ3v+wlcdRaYh40R
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/I1tIO3Xr1ZlsJUm
|
||||||
|
FDoUo/CNIJXLPlpUxtB7/LjcNzahRANCAASrgcdhvIXc7eJf5u3u0BM2B2tZboZh
|
||||||
|
dZ8oomOyuIEyG1ivnL+xOO+DrixnnXs3H9A2PbrIot1n29IFQaEBR951
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT
|
||||||
|
8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/
|
||||||
|
yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy
|
||||||
|
CKqf8052NVUs2CvPzA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNmsvQQm4nwrxOKFX
|
||||||
|
UNfLPgjNm+FtYu3vb6OZ9q/5GbChRANCAAQKZvNQOjMissqOnc4DMi1IbubsWXDv
|
||||||
|
qtPxU7wTqi2ULDEq0FGQ+lkvueisLc2yPITff0nk7ilcKqEgClDJFGxG
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT
|
||||||
|
8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE
|
||||||
|
yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/
|
||||||
|
yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy
|
||||||
|
CKqf8052NVUs2CvPzA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICOzCCAeKgAwIBAgIRALvUEE81tMguFRFvx00HyREwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCk0mXNbPIzN+YOJvx/0XnOVdb6G
|
||||||
|
RxNetOOuuWq+QBWLJhdlRKrhtI+NTiHKjq7UMmBNdIfBPC1YXHIGdeD2u+CjbDBq
|
||||||
|
MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
|
||||||
|
DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCCUUJLZNvWDjFpvZITbl02FeTNwZzfQ
|
||||||
|
DQS/ZfdOOXb5+DAKBggqhkjOPQQDAgNHADBEAiAp9+XFJ2igUvUlvkFVLeH7sWHf
|
||||||
|
+Q4m47hVT/81vedY1gIgTSz5CufvmWnI5AgwCuw4D0w0eDPFAc1HkO1rlVo5icY=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfVrs13ZtxgKp8l5T
|
||||||
|
WAq2IXqgd+zF1V6sTh7rbQ104rShRANCAAQpNJlzWzyMzfmDib8f9F5zlXW+hkcT
|
||||||
|
XrTjrrlqvkAViyYXZUSq4bSPjU4hyo6u1DJgTXSHwTwtWFxyBnXg9rvg
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y
|
||||||
|
jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX
|
||||||
|
hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW
|
||||||
|
eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ
|
||||||
|
QrjJMURXXchQ1Mnd5+o=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w
|
||||||
|
OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472
|
||||||
|
9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc
|
||||||
|
tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl
|
||||||
|
rg/GXwkv
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgaYlbFIz6yVz0SYqh
|
||||||
|
nrhdTCb797PBwSwtCw9HtOkbqQGhRANCAAR1el/5FrkCusYV3vTnp0GSgyO/82se
|
||||||
|
2I2JUb1JR4AqKiiMvHxQGrd4JRm1V9aKNqGe3DCVZRZ27oj3a4OL5Mo3
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y
|
||||||
|
jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX
|
||||||
|
hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW
|
||||||
|
eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ
|
||||||
|
QrjJMURXXchQ1Mnd5+o=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
|
||||||
|
VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
|
||||||
|
AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s
|
||||||
|
Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
|
||||||
|
JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa
|
||||||
|
b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw
|
||||||
|
14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F
|
||||||
|
qwkrkz69kT1ZsL7SXw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICOjCCAeGgAwIBAgIQSEKNVPcBOB7Kgrrzf05rJjAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyHrGhNgy26huH3hNap1UMtQRBVIx
|
||||||
|
xTX0NqIbUMKcBSw9DRF0ndZHd5KQUVrj5t2/QY+YSpqK6ufDk68fWSAZ7KNsMGow
|
||||||
|
DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3BnN9AN
|
||||||
|
BL9l9045dvn4MAoGCCqGSM49BAMCA0cAMEQCIE6HCTr9in2CqF6S+m/aGCVQrZwK
|
||||||
|
/o3oyXdcymDc/PbDAiAHIRDkIw1mU31KNhvPd6f8c/sReVDr3PQLydWh/HJpTQ==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOXZUBNCAmIwJR3bt
|
||||||
|
GfoOwtmo3QunwcBnBBUPjot4frihRANCAATIesaE2DLbqG4feE1qnVQy1BEFUjHF
|
||||||
|
NfQ2ohtQwpwFLD0NEXSd1kd3kpBRWuPm3b9Bj5hKmorq58OTrx9ZIBns
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUgMy/PQKxjfxITFM
|
||||||
|
mVPTu4ZwQlhYIh1vJkn3dkjqDBShRANCAARVtStps/F2HsCLFIdah6iJhTW6Vvro
|
||||||
|
DQ/HOkGAfPZjzjB4cYpfaRNX19I/9fPnuLqIWxSjj/FEwdeXNX/5hUhH
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
|
||||||
|
AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
|
||||||
|
BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4
|
||||||
|
uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
|
||||||
|
BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s
|
||||||
|
E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA
|
||||||
|
Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2
|
||||||
|
BIirBFsT0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5
|
||||||
|
302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH
|
||||||
|
cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R
|
||||||
|
+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0
|
||||||
|
m1UCqGDwNTHDm5mO+es=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
|
||||||
|
AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
|
||||||
|
BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4
|
||||||
|
uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
|
||||||
|
BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s
|
||||||
|
E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA
|
||||||
|
Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2
|
||||||
|
BIirBFsT0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5
|
||||||
|
302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH
|
||||||
|
cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R
|
||||||
|
+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0
|
||||||
|
m1UCqGDwNTHDm5mO+es=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
|
||||||
|
AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
|
||||||
|
BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4
|
||||||
|
uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
|
||||||
|
BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s
|
||||||
|
E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA
|
||||||
|
Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2
|
||||||
|
BIirBFsT0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNYZ86CFF4Iz0K+sE
|
||||||
|
HMg3lSS+mo5lRIFFLUOGrfseqhOhRANCAAT/Dd/SwXAdKicm97/WPViD32Bzn1j5
|
||||||
|
2k/FslsxorK2Lx1Rfhi3wyxa40LNLjfED7E7KmJZ1w7PzI7+7WWhPTbq
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRANDlqX1daKI2aN0Qm7vrfKAwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABP8N39LBcB0qJyb3v9Y9WIPfYHOfWPna
|
||||||
|
T8WyWzGisrYvHVF+GLfDLFrjQs0uN8QPsTsqYlnXDs/Mjv7tZaE9NuqjTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH
|
||||||
|
cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1gKe
|
||||||
|
PRVRN/i8hUptACw02V7V9Yeo7kKlbQ6vWU5fqAIgXg2xAQ4TjwXOHlKbIyYZ7fox
|
||||||
|
cekBJ+E8yAFm8XQrfy0=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICcjCCAhmgAwIBAgIRAKTjFkKbLMrbEP10dpOEqz4wCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMDiCfhksPZRhxpGyowvLu8lQjC6
|
||||||
|
H4y/SiQuTbhG+ZXK99VRyDDoKzkyzDpUxMco1xvD3gafSDvrXrKlZObN9bOjgaIw
|
||||||
|
gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
|
||||||
|
AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHu4uj/xHTyM9ZK9QyYGLnfQasSW
|
||||||
|
PHt65FkoTfvT61qsMDMGA1UdEQQsMCqCFnBlZXIwLm9yZzIuZXhhbXBsZS5jb22C
|
||||||
|
BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDRwAwRAIgf1MZC8BVgrxO76J+
|
||||||
|
aCGntiQsicgU1DPMt5l45jXiEeECIAHHYsIZcV8GW7iyKQevvdXSQ3JC7XgyuPrm
|
||||||
|
eDhWmPcO
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVlcwZfAKBQZ+W/JX
|
||||||
|
w64rHF3JiaddhBcUfxk7WuyZxrChRANCAATA4gn4ZLD2UYcaRsqMLy7vJUIwuh+M
|
||||||
|
v0okLk24RvmVyvfVUcgw6Cs5Msw6VMTHKNcbw94Gn0g7616ypWTmzfWz
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5
|
||||||
|
302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH
|
||||||
|
cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R
|
||||||
|
+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0
|
||||||
|
m1UCqGDwNTHDm5mO+es=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
|
||||||
|
AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
|
||||||
|
BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4
|
||||||
|
uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
|
||||||
|
BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s
|
||||||
|
E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA
|
||||||
|
Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2
|
||||||
|
BIirBFsT0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtRT9fcsCMexhHlCO
|
||||||
|
dfzBqkDIfC88UFE51dYxRHDSrMShRANCAAS4r7MB6WDw96YKpJIzOvqhXs1dQ3XQ
|
||||||
|
5QMMX4aOwVLT1vZHOkPghRr2wMhJeQs1vVY+5RcnOWy6OyB/oYCCIPka
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGTCCAb+gAwIBAgIQKeRyEPaHSUPvshfEtmg9tzAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuK+zAelg8PemCqSSMzr6oV7NXUN10OUD
|
||||||
|
DF+GjsFS09b2RzpD4IUa9sDISXkLNb1WPuUXJzlsujsgf6GAgiD5GqNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgp9R++kamugdz
|
||||||
|
DIUP7SwTdd8nNg1yJ/SM3C+A5QVngAUwCgYIKoZIzj0EAwIDSAAwRQIhAMIQLWEv
|
||||||
|
wpaNibkXEGJlT0IzSIBsCjMJD7VaqZLKm5h9AiAlYmNBB8siyLLxFawvEB/4F26x
|
||||||
|
e1jgyza7Yg+ardDzlw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICcjCCAhigAwIBAgIQEV3hkn7yJpdb29dDQvTKWDAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz
|
||||||
|
MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29t
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpXRG2CwqI+F0UoMSImo3In9R7lze
|
||||||
|
S+DuL1pLOjF5s05kVAcH604/9FRI61ujvWp4mYXornB+R1pcQwtolYNzPKOBojCB
|
||||||
|
nzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||||
|
MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAge7i6P/EdPIz1kr1DJgYud9BqxJY8
|
||||||
|
e3rkWShN+9PrWqwwMwYDVR0RBCwwKoIWcGVlcjEub3JnMi5leGFtcGxlLmNvbYIF
|
||||||
|
cGVlcjGCCWxvY2FsaG9zdDAKBggqhkjOPQQDAgNIADBFAiEAmzFD5Dd4yR5lKy44
|
||||||
|
Jdz4hy5AtRLQAmhlmLhli46z0r8CIDXFZJ7EwiD3F/jBT6906IFizjr9CD/DtOC9
|
||||||
|
bxT5JhIN
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxFdgRfevcXrABROv
|
||||||
|
sV6HvrpoN5PHW6qXIFj71CAwtzyhRANCAASldEbYLCoj4XRSgxIiajcif1HuXN5L
|
||||||
|
4O4vWks6MXmzTmRUBwfrTj/0VEjrW6O9aniZheiucH5HWlxDC2iVg3M8
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXu7VBLhnEUi4mu4d
|
||||||
|
tU1nT4lcMR9aoG29s5hLPmIKH/mhRANCAAQafufB/FcqVxwfR3/9RMWU5jXXAZU1
|
||||||
|
IAJhx+bG/Q4sx18JY6Os3cl32XC70wqaC8myf656eDyiezSlA5q0Mpi1
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz
|
||||||
|
MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ
|
||||||
|
cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM
|
||||||
|
9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD
|
||||||
|
mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a
|
||||||
|
nfIdbwvBbsl1XV/j0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5
|
||||||
|
302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH
|
||||||
|
cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R
|
||||||
|
+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0
|
||||||
|
m1UCqGDwNTHDm5mO+es=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5
|
||||||
|
WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
|
||||||
|
AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
|
||||||
|
BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4
|
||||||
|
uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
|
||||||
|
BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s
|
||||||
|
E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA
|
||||||
|
Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2
|
||||||
|
BIirBFsT0g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue