trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
446 lines • 109 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PSet = exports.DefaultPSetServiceUri = void 0;
const response_1 = require("./response");
const service_1 = require("./service");
exports.DefaultPSetServiceUri = 'https://pset-api.connect.trimble.com/v1/';
const PsetServiceUriMap = new Map([
['us-east-1', 'https://pset-api.us-east-1.connect.trimble.com/v1/'],
['ap-southeast-1', 'https://pset-api.ap-southeast-1.connect.trimble.com/v1/'],
['ap-southeast-2', 'https://pset-api.ap-southeast-2.connect.trimble.com/v1/'],
['eu-west-1', 'https://pset-api.eu-west-1.connect.trimble.com/v1/'],
['eu-west-2', 'https://pset-api.eu-west-2.connect.trimble.com/v1/'],
]);
function getDefaultConfiguration() {
return {
region: 'eu-west-1',
serviceUri: exports.DefaultPSetServiceUri,
};
}
class PSet extends service_1.Service {
constructor(config) {
const sanitizedConfig = Object.assign({}, config);
if (sanitizedConfig &&
sanitizedConfig.region &&
sanitizedConfig.serviceUri === undefined) {
if (PsetServiceUriMap.has(sanitizedConfig.region)) {
sanitizedConfig.serviceUri = PsetServiceUriMap.get(sanitizedConfig.region);
}
else {
throw new Error(`Unknown region: ${sanitizedConfig.region}, allowed values ${Array.from(PsetServiceUriMap.keys()).join(', ')}`);
}
}
super(Object.assign(Object.assign({}, getDefaultConfiguration()), sanitizedConfig));
}
getUserInfo(params) {
return __awaiter(this, void 0, void 0, function* () {
let url = 'me';
if (params) {
const query = [];
if (params.wait) {
query.push('wait');
}
if (params.refresh) {
query.push('refresh');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
createLibrary(request) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'libs';
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateLibrary(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
getLibraryPolicy(libId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url);
});
}
putLibraryPolicy(libId, policy) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url, 'PUT', JSON.stringify(policy));
});
}
listDefinitions(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.prefix) {
query.push(`prefix=${encodeURIComponent(params.prefix)}`);
}
if (params.type) {
query.push(`type=${encodeURIComponent(params.type)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listDefinitionVersions(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getDefinitionVersion(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getDefinitionVersionBySchema(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/schema/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSetDefinitions(libId, ids, params) {
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const defs = new Set();
ids.items.forEach((def) => {
defs.add({ libId, defId: def.id, v: def.v, schemaV: def.schemaV });
});
requestBatchGet.defs = Array.from(defs);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.defs });
if (responseBatchGet.data.errors.defs) {
const errors = new Set();
(_a = responseBatchGet.data.errors.defs) === null || _a === void 0 ? void 0 : _a.forEach((def) => {
errors.add({
item: {
id: def.item.defId,
v: def.item.v,
schemaV: def.item.schemaV,
},
code: def.code,
message: def.message,
});
});
response.data.errors = Array.from(errors);
}
if (responseBatchGet.data.unprocessed.defs) {
const unprocessed = new Set();
(_b = responseBatchGet.data.unprocessed.defs) === null || _b === void 0 ? void 0 : _b.forEach((def) => {
unprocessed.add({ id: def.defId, v: def.v, schemaV: def.schemaV });
});
response.data.unprocessed = Array.from(unprocessed);
}
return response;
});
}
createDefinition(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs`;
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateDefinition(libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({
'If-Match': `W/"${encodeURIComponent(params.v.toString())}"`,
});
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
validate(libId, defId, request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/validate`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
validateNextPage(prev, request) {
return __awaiter(this, void 0, void 0, function* () {
if (prev && prev.next) {
return this.makeRequest(prev.next, 'POST', JSON.stringify(request));
}
else {
throw new Error('There is no next page.');
}
});
}
listPSets(link, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetsByDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/psets`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.link) {
query.push(`link=${encodeURIComponent(params.link)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetVersions(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getPSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getPSetVersion(link, libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSets(keys, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
keys.items.forEach((pset) => {
psets.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
getPSetsByDefinition(libId, defId, links, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
links.items.forEach((link) => {
psets.add({ libId, defId, link });
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add(pset.link);
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
batchGet(request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `batch-get`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updatePSet(link, libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deletePSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
changeset(changeset) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset';
return this.makeRequest(url, 'POST', JSON.stringify(changeset));
});
}
changesetAsync() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset-async';
return this.makeRequest(url, 'POST');
});
}
changesetStatus(changesetId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/changeset/${encodeURIComponent(changesetId)}`;
return this.makeRequest(url);
});
}
subscribeWS() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'subscribe';
return this.makeRequest(url, 'GET');
});
}
}
exports.PSet = PSet;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicHNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFZQSx5Q0FBNkM7QUFDN0MsdUNBQW9DO0FBSXZCLFFBQUEscUJBQXFCLEdBQUcsMENBQTBDLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDaEQsQ0FBQyxXQUFXLEVBQUUsb0RBQW9ELENBQUM7SUFDbkUsQ0FBQyxnQkFBZ0IsRUFBRSx5REFBeUQsQ0FBQztJQUM3RSxDQUFDLGdCQUFnQixFQUFFLHlEQUF5RCxDQUFDO0lBQzdFLENBQUMsV0FBVyxFQUFFLG9EQUFvRCxDQUFDO0lBQ25FLENBQUMsV0FBVyxFQUFFLG9EQUFvRCxDQUFDO0NBQ3BFLENBQUMsQ0FBQztBQUdILFNBQVMsdUJBQXVCO0lBQzlCLE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVztRQUNuQixVQUFVLEVBQUUsNkJBQXFCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBNmpCRCxNQUFhLElBQUssU0FBUSxpQkFBTztJQU0vQixZQUFZLE1BQStCO1FBQ3pDLE1BQU0sZUFBZSxxQkFBZ0MsTUFBTSxDQUFFLENBQUM7UUFFOUQsSUFDRSxlQUFlO1lBQ2YsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQ3hDO1lBQ0EsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCxlQUFlLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FDaEQsZUFBZSxDQUFDLE1BQU0sQ0FDdkIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQ0UsZUFBZSxDQUFDLE1BQ2xCLG9CQUFvQixLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElB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LENBQWUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0UsQ0FBQztLQUFBO0lBUVksU0FBUyxDQUNwQixTQUErQjs7WUFJL0IsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUM7WUFFOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNyQixHQUFHLEVBQ0gsTUFBTSxFQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7UUFDSixDQUFDO0tBQUE7SUFPWSxjQUFjOztZQUd6QixNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQztZQUVwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQTZCLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQUE7SUFRWSxlQUFlLENBQzFCLFdBQW1COztZQUVuQixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUVqRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FBQTtJQU9ZLFdBQVc7O1lBQ3RCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQXlCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0tBQUE7Q0FDRjtBQXQ0QkQsb0JBczRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlbGV0ZU9wdGlvbnMsXG4gIEdldE9wdGlvbnMsXG4gIExpc3RPcHRpb25zLFxuICBQYWdlZEl0ZW1zLFxuICBSZXNvdXJjZUlkZW50aXR5V2l0aEVycm9yLFxuICBVc2VySW5mb0dldE9wdGlvbnMsXG4gIFVzZXJJbmZvUmVzcG9uc2UsXG4gIFdTU3Vic2NyaXB0aW9uUmVzcG9uc2UsXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBQb2xpY3kgfSBmcm9tICcuL3BvbGljeSc7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlJztcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0gY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRQU2V0U2VydmljZVVyaSA9ICdodHRwczovL3BzZXQtYXBpLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJztcblxuY29uc3QgUHNldFNlcnZpY2VVcmlNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsndXMtZWFzdC0xJywgJ2h0dHBzOi8vcHNldC1hcGkudXMtZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnYXAtc291dGhlYXN0LTEnLCAnaHR0cHM6Ly9wc2V0LWFwaS5hcC1zb3V0aGVhc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2FwLXNvdXRoZWFzdC0yJywgJ2h0dHBzOi8vcHNldC1hcGkuYXAtc291dGhlYXN0LTIuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydldS13ZXN0LTEnLCAnaHR0cHM6Ly9wc2V0LWFwaS5ldS13ZXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydldS13ZXN0LTInLCAnaHR0cHM6Ly9wc2V0LWFwaS5ldS13ZXN0LTIuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbl0pO1xuXG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlndXJhdGlvbigpOiBDb25maWd1cmF0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICByZWdpb246ICdldS13ZXN0LTEnLFxuICAgIHNlcnZpY2VVcmk6IERlZmF1bHRQU2V0U2VydmljZVVyaSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I2NyZWF0ZUxpYnJhcnkgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUxpYnJhcnlSZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IGxpYnJhcnksIGlmIG5vdCBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgZ2VuZXJhdGUgYW4gdW5pcXVlIGlkZW50aWZpZXIuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogVGhlIGFjY2VzcyBjb250cm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgbGlicmFyeS4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG9wdGlvbmFsIGxpYnJhcnkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgUFNldCNnZXRMaWJyYXJ5IG9wZXJhdGlvbi5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBHZXRMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEdldE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBQU2V0I2dldERlZmluaXRpb24gb3BlcmF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEdldERlZmluaXRpb25PcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdXBkYXRlTGlicmFyeSBvcGVyYXRpb24uXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGlmIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCB0aGUgcHJvcGVydHkgd2lsbCByZXRhaW4gaXQncyBvbGQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTGlicmFyeVJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgY29udHJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGxpYnJhcnkuXG4gICAqIElmIHByb3BlcnR5IGlzIHNwZWNpZmllZCBjYWxsZXIgbXVzdCBoYXZlIG9yZzpVcGRhdGVMaWJyYXJ5UG9saWN5IHJpZ2h0IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24gaW4gYWRkaXRpb24gdG8gb3JnOlVwZGF0ZUxpYnJhcnkuXG4gICAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdHJlZSBkZXNjcmlwdG9yIHJldHVybmVkIGZyb20gQHNlZSBQU2V0I2NyZWF0ZUxpYnJhcnkgLCBAc2VlIFBTZXQjdXBkYXRlTGlicmFyeSAsIEBzZWUgUFNldCNkZWxldGVMaWJyYXJ5IGFuZCBAc2VlIFBTZXQjZ2V0TGlicmFyeSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpYnJhcnlSZXNwb25zZSB7XG4gIC8qKiBUaGUgdW5pcXVlIGxpYnJhcnkgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSB0cmVlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBhY2Nlc3MgY29udHJvbCBwb2xpY3kgZG9jdW1lbnQgYXR0YWNoZWQgdG8gdGhlIGxpYnJhcnkuIFRoaXMgcHJvcGVydHkgaXMgcmV0dXJuZWQgb25seSBpZiBjYWxsZXIgaGFzIHBzZXQ6R2V0TGlicmFyeVBvbGljeSByaWdodC4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIGRlbGV0aW9uIG1hcmtlci4gSWYgbm90IHByZXNlbnQgb3IgZmFsc2UgdGhlIHRyZWUgaXMgYWN0aXZlLCBvdGhlcndpc2UgdGhlIHRyZWUgaXMgbWFya2VkIGFzIGRlbGV0ZWQuICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIGxpYnJhcnkgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I2NyZWF0ZURlZmluaXRpb24gb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZURlZmluaXRpb25SZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHBzZXQgZGVmaW5pdGlvbiwgaWYgbm90IHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCBnZW5lcmF0ZSBhbiB1bmlxdWUgaWRlbnRpZmllci4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgcHNldCBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgdHlwZXMgdGhlIHBzZXQgYXBwbGljYWJsZSB0by4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBwc2V0IHNjaGVtYS4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG4gIC8qKiBUaGUgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFydCB3aXRoIHRyYW5zbGF0aW9uIHRhYmxlcy4gKi9cbiAgaTE4bj86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I3VwZGF0ZURlZmluaXRpb24gb3BlcmF0aW9uLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZURlZmluaXRpb25SZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgY29sbGVjdGlvbiBvZiByZXNvdXJjZSB0eXBlcyB0aGUgcHNldCBhcHBsaWNhYmxlIHRvLiAqL1xuICB0eXBlcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG5ldyBwc2V0IHNjaGVtYS4gKi9cbiAgc2NoZW1hPzogb2JqZWN0O1xuICAvKiogVGhlIGludGVybmF0aW9uYWxpemF0aW9uIHBhcnQgd2l0aCB0cmFuc2xhdGlvbiB0YWJsZXMuICovXG4gIGkxOG4/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHBzZXQgZGVmaW5pdGlvbiBkZXNjcmlwdG9yIHJldHVybmVkIGZyb20gQHNlZSBQU2V0I2NyZWF0ZURlZmluaXRpb24sIEBzZWUgUFNldCN1cGRhdGVEZWZpbml0aW9uLCBAc2VlIFBTZXQjZGVsZXRlTm9kZSwgQHNlZSBQU2V0I2dldERlZmluaXRpb24gYW5kIEBzZWUgT3JnYW5pemVyI2dldERlZmluaXRpb25WZXJzaW9uIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvblJlc3BvbnNlIHtcbiAgLyoqIFRoZSBsaWJyYXJ5IGlkZW50aWZpZXIuICovXG4gIGxpYklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgZGVmaW5pdGlvbiBpZGVudGlmaWVyLiBVbmlxdWUgaW5zaWRlIHRoZSBsaWJyYXJ5LiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogVGhlIGNyZWF0aW9uIHRpbWVzdGFtcCBpbiBJU08gZm9ybWF0LiAqL1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lwYWwgd2hvIGNyZWF0ZWQgdGhlIG5vZGUuICovXG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBpbiBJU08gZm9ybWF0LiAqL1xuICBtb2RpZmllZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBub2RlLiAqL1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgdmVyc2lvbiBudW1iZXIuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBkZWxldGlvbiBtYXJrZXIuIElmIG5vdCBwcmVzZW50IG9yIGZhbHNlIHRoZSBub2RlIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIHRoZSBub2RlIGlzIG1hcmtlZCBhcyBkZWxldGVkLiAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgdHlwZXMgdGhlIHBzZXQgYXBwbGljYWJsZSB0by4gSWYgbm90IHByZXNlbnQgcHNldCBjYW4gYmUgYXR0YWNoZWQgdG8gYWxsIHJlc291cmNlIHR5cGVzLiAqL1xuICB0eXBlcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIHBzZXQgc2NoZW1hLiAqL1xuICBzY2hlbWE6IG9iamVjdDtcbiAgLyoqIFRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBwYXJ0IHdpdGggdHJhbnNsYXRpb24gdGFibGVzLiAqL1xuICBpMThuOiBvYmplY3Q7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGN1cnJlbnQgdXNlciBoYXMgcmlnaHRzIHRvIHBlcmZvcm0gb24gdGhpcyByZXNvdXJjZSBhdCB0aGUgbW9tZW50IHRoZSByZXNwb25zZSBpcyBnZW5lcmF0ZWQgYnkgc2VydmljZS4gTm90IHJldHVybmVkIHdoZW4gc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQuICovXG4gIF9hY3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb3B0aW9ucyB0byB2YWxpZGF0ZSBwc2V0cyBhZ2FpbnN0IGEgbmV3IHNjaGVtYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlmIGRlZmluZWQgYW5kIHRydWUgaW5mb3JtcyBzZXJ2ZXIgdGhhdCBlbnRpdGllcyBtYXJrZWQgYXMgZGVsZXRlZCBzaG91bGQgYmUgcmV0dXJuZWQgYXMgd2VsbC5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gc2tpcC9oaWRlIGVudGl0aWVzIG1hcmtlZCBhcyBkZWxldGVkLlxuICAgKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgc2tpcCB0b2tlbiB1c2VkIGEgYXMgY3Vyc29yIHRvIGluZGljYXRlIHRoZSBwbGFjZSB3aGVyZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBzaG91bGQgZmV0Y2hlZCBmcm9tLiAqL1xuICBza2lwdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCN2YWxpZGF0ZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVSZXF1ZXN0IHtcbiAgLyoqIFRoZSBzY2hlbWEgdG8gdmFsaWRhdGUgZXhpc3RpbmcgZGF0YSBhZ2FpbnN0LiAqL1xuICBzY2hlbWE6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcmVzcG9uc2UgYm9keSBmb3IgdGhlIEBzZWUgUFNldCN2YWxpZGF0ZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVSZXNwb25zZSB7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIHZhbGlkIHBzZXRzLiAqL1xuICB2YWxpZEl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgLyoqIFRoZSBudW1iZXIgb2Ygbm90IHZhbGlkIHBzZXRzLiAqL1xuICBpbnZhbGlkSXRlbXNDb3VudDogbnVtYmVyO1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgZXJyb3IgbWVzc2FnZXMgZm9yIGZvdW5kIGludmFsaWQgcHNldHMuIE9ubHkgZmlyc3QgMTAwIHVuaXF1ZSBlcnJvciB