doc-nis-2 2.1.8 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-front/assets/QuoteElement-CFcdhavZ.js +1 -0
- package/dist-front/assets/QuoteLink-DSNoTf_G.js +1 -0
- package/dist-front/assets/advanced-search-by-IP-B2LqmXzp.png +0 -0
- package/dist-front/assets/advanced-search-by-IP-C6B-Mnn_.png +0 -0
- package/dist-front/assets/advanced-search-by-description-BQh6pwOz.png +0 -0
- package/dist-front/assets/advanced-search-by-description-DeuibbVB.png +0 -0
- package/dist-front/assets/advanced-search-by-url-DztVSGfW.png +0 -0
- package/dist-front/assets/advanced-search-by-url-RBKEve2P.png +0 -0
- package/dist-front/assets/advanced-search-with-prefix-CEOgevpn.png +0 -0
- package/dist-front/assets/advanced-search-with-prefix-Ck5N7mD9.png +0 -0
- package/dist-front/assets/dashboard-BONDdowW.png +0 -0
- package/dist-front/assets/dashboard-CCBJ1o4E.png +0 -0
- package/dist-front/assets/dashboard-open-repository-example-BNiZiPJz.png +0 -0
- package/dist-front/assets/dashboard-open-repository-example-DSfM0sX0.png +0 -0
- package/dist-front/assets/deployment-after-select-database-DiDyml4R.png +0 -0
- package/dist-front/assets/deployment-after-select-database-UPTEMfeH.png +0 -0
- package/dist-front/assets/deployment-before-filter-BEIB56RC.png +0 -0
- package/dist-front/assets/deployment-before-filter-DE1G-dz0.png +0 -0
- package/dist-front/assets/deployment-before-filter-hide-actors-obgFAPBN.png +0 -0
- package/dist-front/assets/deployment-before-filter-hide-actors-s3dqy1J1.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-1-BNfG_zzE.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-1-BkRHn1TY.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-2-B8F5-nju.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-2-BbE1fItW.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-3-CiRgDAJx.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-3-LyPiN4LO.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-4-DgKXL6Sm.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-4-Dl3zq3Es.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-5-NYRRJYsK.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-5-TfTB-Oqn.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-6-BnmwzSpW.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-6-SCgXRKlk.png +0 -0
- package/dist-front/assets/deployment-edit-element-name-BPdKcUZn.png +0 -0
- package/dist-front/assets/deployment-edit-element-name-BheWfdx2.png +0 -0
- package/dist-front/assets/diagram-without-test-layer-BhRiWpQ3.png +0 -0
- package/dist-front/assets/diagram-without-test-layer-D_RU0Xi1.png +0 -0
- package/dist-front/assets/element-list-not-filtered-Cvk8tB2f.png +0 -0
- package/dist-front/assets/element-list-not-filtered-XVyTUoxe.png +0 -0
- package/dist-front/assets/element-list-search-1-DOle2VkK.png +0 -0
- package/dist-front/assets/element-list-search-1-DPOY58Eg.png +0 -0
- package/dist-front/assets/element-list-search-2-CpcGE9_3.png +0 -0
- package/dist-front/assets/element-list-search-2-Dix_xXBI.png +0 -0
- package/dist-front/assets/element-list-search-3-BFiRuPza.png +0 -0
- package/dist-front/assets/element-list-search-3-E4XtlyZR.png +0 -0
- package/dist-front/assets/empty-diagram-BM1L95vH.png +0 -0
- package/dist-front/assets/empty-diagram-DhYDVI3_.png +0 -0
- package/dist-front/assets/home-page-B7fHs2kb.png +0 -0
- package/dist-front/assets/home-page-Ck94L7Rl.png +0 -0
- package/dist-front/assets/index-Bv4Dk-O8.js +515 -0
- package/dist-front/assets/{index-bXkKx5pj.css → index-CgPoNf8Z.css} +1 -1
- package/dist-front/assets/login-page-BIToVvfp.png +0 -0
- package/dist-front/assets/login-page-emYnvcIi.png +0 -0
- package/dist-front/assets/repository-home-page-D_F5-WZx.png +0 -0
- package/dist-front/assets/repository-home-page-KykG8Rih.png +0 -0
- package/dist-front/assets/select-diagrams-elements-CSBEk5Cr.png +0 -0
- package/dist-front/assets/select-diagrams-elements-C_VbqYVh.png +0 -0
- package/dist-front/index.html +2 -2
- package/package.json +2 -3
- package/src/doc-nis-2.js +38 -44
- package/dist-front/assets/advanced-search-by-IP-01mSXPE-.png +0 -0
- package/dist-front/assets/advanced-search-by-IP-iOmAopbQ.png +0 -0
- package/dist-front/assets/advanced-search-by-description-0nWbn4ol.png +0 -0
- package/dist-front/assets/advanced-search-by-description-BBwTm3AY.png +0 -0
- package/dist-front/assets/advanced-search-by-url-BSYDgDto.png +0 -0
- package/dist-front/assets/advanced-search-by-url-DsVNKyOa.png +0 -0
- package/dist-front/assets/advanced-search-with-prefix-Cpl1d4b7.png +0 -0
- package/dist-front/assets/advanced-search-with-prefix-NzhP64yh.png +0 -0
- package/dist-front/assets/dashboard-BlYyhdI4.png +0 -0
- package/dist-front/assets/dashboard-CR39aHlH.png +0 -0
- package/dist-front/assets/dashboard-open-repository-example-BuVPFRRm.png +0 -0
- package/dist-front/assets/dashboard-open-repository-example-Cg3qKcPN.png +0 -0
- package/dist-front/assets/deployment-after-select-database-B6Ncdx8t.png +0 -0
- package/dist-front/assets/deployment-after-select-database-fEsjjPVV.png +0 -0
- package/dist-front/assets/deployment-before-filter-LFqe44uh.png +0 -0
- package/dist-front/assets/deployment-before-filter-Om0xAZih.png +0 -0
- package/dist-front/assets/deployment-before-filter-hide-actors-BUmtkqD9.png +0 -0
- package/dist-front/assets/deployment-before-filter-hide-actors-DvvPmdm7.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-1-Bx3k5isS.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-1-CQefjBXk.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-2-DI-m_qPN.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-2-Pso0_g-T.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-3-BvkuXWie.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-3-DY0MB8Y-.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-4-CFJOUe_2.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-4-Clvy0yTR.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-5--pxyi244.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-5-DactLMGV.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-6-BJ80OGwk.png +0 -0
- package/dist-front/assets/deployment-diagram-select-elements-6-ft1kLpfZ.png +0 -0
- package/dist-front/assets/deployment-edit-element-name-BcTk-PGe.png +0 -0
- package/dist-front/assets/deployment-edit-element-name-Cqy5CnEc.png +0 -0
- package/dist-front/assets/diagram-without-test-layer-B_ULJsbz.png +0 -0
- package/dist-front/assets/diagram-without-test-layer-Bti0jqa8.png +0 -0
- package/dist-front/assets/element-list-not-filtered-B7UUQHB7.png +0 -0
- package/dist-front/assets/element-list-not-filtered-B99a8edl.png +0 -0
- package/dist-front/assets/element-list-search-1-VeloUMzf.png +0 -0
- package/dist-front/assets/element-list-search-2-D0AEqZTG.png +0 -0
- package/dist-front/assets/element-list-search-3-D1Yy1UuO.png +0 -0
- package/dist-front/assets/element-list-search-3-Fqkr1Trb.png +0 -0
- package/dist-front/assets/empty-diagram-BbPd93V3.png +0 -0
- package/dist-front/assets/empty-diagram-D56YTenf.png +0 -0
- package/dist-front/assets/home-page-DaJeojEF.png +0 -0
- package/dist-front/assets/home-page-jY29-DT-.png +0 -0
- package/dist-front/assets/index-xxl-_A68.js +0 -443
- package/dist-front/assets/login-page-BIZqteOi.png +0 -0
- package/dist-front/assets/login-page-BgOQt7Oc.png +0 -0
- package/dist-front/assets/repository-home-page-B6r7L1CR.png +0 -0
- package/dist-front/assets/repository-home-page-r-ZEWVTX.png +0 -0
- package/dist-front/assets/select-diagrams-elements-BmrhLSwn.png +0 -0
- package/dist-front/assets/select-diagrams-elements-DDR1kO1I.png +0 -0
- package/dist-front/images/new-library.jpg +0 -0
- package/dist-front/images/old-library.jpg +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist-front/index.html
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
6
|
+
<script type="module" crossorigin src="/assets/index-Bv4Dk-O8.js"></script>
|
|
7
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CgPoNf8Z.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
10
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "doc-nis-2",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "Marc Nicole",
|
|
6
6
|
"email": "info@nicoleinnovation.com",
|
|
@@ -25,8 +25,7 @@
|
|
|
25
25
|
"description": "a free IT System cartography tool that helps meet NIS-2 requirement with EBIOS support",
|
|
26
26
|
"type": "module",
|
|
27
27
|
"bin": {
|
|
28
|
-
"doc-nis-2": "./src/doc-nis-2.js"
|
|
29
|
-
"plantuml": "java -DPLANTUML_LIMIT_SIZE=8192 -jar plantuml/plantuml-1.2025.4.jar -picoweb"
|
|
28
|
+
"doc-nis-2": "./src/doc-nis-2.js"
|
|
30
29
|
},
|
|
31
30
|
"dependencies": {
|
|
32
31
|
"mariadb": "3.4.2"
|
package/src/doc-nis-2.js
CHANGED
|
@@ -79729,7 +79729,7 @@ var import_ms = __toESM(require_ms(), 1);
|
|
|
79729
79729
|
import path from "path";
|
|
79730
79730
|
|
|
79731
79731
|
// api/src/commit-sha.ts
|
|
79732
|
-
var COMMIT_SHA = "
|
|
79732
|
+
var COMMIT_SHA = "4150be97";
|
|
79733
79733
|
|
|
79734
79734
|
// api/src/utils/config.ts
|
|
79735
79735
|
var nodeEnv = process.env.NODE_ENV?.trim() ?? "dev";
|
|
@@ -79788,8 +79788,6 @@ var config = {
|
|
|
79788
79788
|
// ONBOARDING new Users 1=new users can selt create an account and a repository
|
|
79789
79789
|
// 0=users have to be invited by an existing user that has the rights
|
|
79790
79790
|
ONBOARDING: getOption("ONBOARDING")
|
|
79791
|
-
// all demo repositories that must be attached in readOnly on onboarding process
|
|
79792
|
-
//REMOVEDEMO_REPOSITORIES: process.env.DEMO_REPOSITORIES?.split(/[ ,]+/).map(idstr => Number(idstr)) ?? []
|
|
79793
79791
|
};
|
|
79794
79792
|
|
|
79795
79793
|
// api/src/databases/DatabaseManager.ts
|
|
@@ -84762,7 +84760,8 @@ var ELEMENT_DEFINITIONS = {
|
|
|
84762
84760
|
shortcut: "*"
|
|
84763
84761
|
},
|
|
84764
84762
|
"useCase": {
|
|
84765
|
-
shortcut: "+"
|
|
84763
|
+
shortcut: "+",
|
|
84764
|
+
process: true
|
|
84766
84765
|
},
|
|
84767
84766
|
"installation": {
|
|
84768
84767
|
shortcut: "<",
|
|
@@ -84799,48 +84798,60 @@ var ELEMENT_DEFINITIONS = {
|
|
|
84799
84798
|
shortcut: "$"
|
|
84800
84799
|
},
|
|
84801
84800
|
"risk": {
|
|
84802
|
-
shortcut: "!"
|
|
84801
|
+
shortcut: "!",
|
|
84802
|
+
process: true
|
|
84803
84803
|
},
|
|
84804
84804
|
"norm": {
|
|
84805
|
-
shortcut: "\xA7"
|
|
84805
|
+
shortcut: "\xA7",
|
|
84806
|
+
process: true
|
|
84806
84807
|
},
|
|
84807
84808
|
"capability": {
|
|
84808
84809
|
shortcut: "^",
|
|
84810
|
+
process: true,
|
|
84809
84811
|
hasSLA: true
|
|
84810
84812
|
},
|
|
84811
84813
|
"process": {
|
|
84812
84814
|
shortcut: ">",
|
|
84815
|
+
process: true,
|
|
84813
84816
|
hasSLA: true
|
|
84814
84817
|
},
|
|
84815
84818
|
"object": {
|
|
84816
|
-
shortcut: "#"
|
|
84819
|
+
shortcut: "#",
|
|
84820
|
+
process: true
|
|
84817
84821
|
},
|
|
84818
84822
|
"feared": {
|
|
84819
|
-
shortcut: "\xB0"
|
|
84823
|
+
shortcut: "\xB0",
|
|
84824
|
+
process: true
|
|
84820
84825
|
},
|
|
84821
84826
|
"target": {
|
|
84822
|
-
shortcut: "@"
|
|
84827
|
+
shortcut: "@",
|
|
84828
|
+
process: true
|
|
84823
84829
|
},
|
|
84824
84830
|
"strategicScenario": {
|
|
84825
|
-
shortcut: "&"
|
|
84831
|
+
shortcut: "&",
|
|
84832
|
+
process: true
|
|
84826
84833
|
},
|
|
84827
84834
|
"operationalScenario": {
|
|
84828
|
-
shortcut: "%"
|
|
84835
|
+
shortcut: "%",
|
|
84836
|
+
process: true
|
|
84829
84837
|
},
|
|
84830
84838
|
"report": {
|
|
84831
84839
|
shortcut: "|"
|
|
84832
84840
|
},
|
|
84833
84841
|
"disasterRecoveryPlan": {
|
|
84834
|
-
shortcut: "_"
|
|
84842
|
+
shortcut: "_",
|
|
84843
|
+
process: true
|
|
84835
84844
|
},
|
|
84836
84845
|
"ebiosStudy": {
|
|
84837
|
-
shortcut: "\xA3"
|
|
84846
|
+
shortcut: "\xA3",
|
|
84847
|
+
process: true
|
|
84838
84848
|
},
|
|
84839
84849
|
"help": {
|
|
84840
84850
|
shortcut: "?"
|
|
84841
84851
|
}
|
|
84842
84852
|
};
|
|
84843
84853
|
var isElementClasses = Object.keys(ELEMENT_DEFINITIONS);
|
|
84854
|
+
var processElementClasses = isElementClasses.filter((e) => ELEMENT_DEFINITIONS[e].process);
|
|
84844
84855
|
var classNameShortcut = {};
|
|
84845
84856
|
for (const c of isElementClasses) {
|
|
84846
84857
|
classNameShortcut[ELEMENT_DEFINITIONS[c].shortcut] = c;
|
|
@@ -84913,7 +84924,7 @@ var LINK_DEFINITIONS = {
|
|
|
84913
84924
|
},
|
|
84914
84925
|
developedBy: {
|
|
84915
84926
|
directLabel: "developed by",
|
|
84916
|
-
reverseLabel: "
|
|
84927
|
+
reverseLabel: "developer of",
|
|
84917
84928
|
description: "represents who has developed what",
|
|
84918
84929
|
sources: {
|
|
84919
84930
|
application: ["actor"],
|
|
@@ -85285,7 +85296,7 @@ var _elementsData = [
|
|
|
85285
85296
|
repId: 1,
|
|
85286
85297
|
name: "customer",
|
|
85287
85298
|
className: "actor",
|
|
85288
|
-
mdDescription: "notre raison d'\xEAtre",
|
|
85299
|
+
mdDescription: "notre raison d'\xEAtre + il nous paie",
|
|
85289
85300
|
createdAt: /* @__PURE__ */ new Date("2023-01-01"),
|
|
85290
85301
|
updatedAt: /* @__PURE__ */ new Date("2024-02-02")
|
|
85291
85302
|
},
|
|
@@ -85919,7 +85930,7 @@ async function resetDatabase() {
|
|
|
85919
85930
|
// package.json
|
|
85920
85931
|
var package_default = {
|
|
85921
85932
|
name: "doc-nis-2",
|
|
85922
|
-
version: "2.
|
|
85933
|
+
version: "2.2.0",
|
|
85923
85934
|
license: "GPL-3.0-only",
|
|
85924
85935
|
author: {
|
|
85925
85936
|
name: "Marc Nicole",
|
|
@@ -85948,16 +85959,10 @@ var package_default = {
|
|
|
85948
85959
|
},
|
|
85949
85960
|
homepage: "https://gitlab.com/nicole_innovation/doc-nis-2",
|
|
85950
85961
|
exports: {
|
|
85951
|
-
".": "./
|
|
85952
|
-
"./plugins-front": "./
|
|
85962
|
+
".": "./api/src/doc-nis-2.js",
|
|
85963
|
+
"./plugins-front": "./shared/plugins-front.ts"
|
|
85953
85964
|
},
|
|
85954
85965
|
type: "module",
|
|
85955
|
-
bin: {
|
|
85956
|
-
"doc-nis-2": "dist-api/api/src/doc-nis-2.js"
|
|
85957
|
-
},
|
|
85958
|
-
files: [
|
|
85959
|
-
"dist-api"
|
|
85960
|
-
],
|
|
85961
85966
|
scripts: {
|
|
85962
85967
|
"build:front": "cd _front && npm run build",
|
|
85963
85968
|
"build:api": `esbuild api/src/doc-nis-2.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/src/doc-nis-2.js --external:mariadb --banner:js="import { createRequire } from 'module'; const require = createRequire(import.meta.url);"`,
|
|
@@ -86564,7 +86569,6 @@ var getUsers = async (user, repId, pagination) => {
|
|
|
86564
86569
|
pagination
|
|
86565
86570
|
);
|
|
86566
86571
|
} else {
|
|
86567
|
-
console.debug(user, repId);
|
|
86568
86572
|
return await dbDocIt.query(
|
|
86569
86573
|
`
|
|
86570
86574
|
SELECT users.id, users.name, users.firstname, users.email, users.role, users.deleted, users.createdAt, users.updatedAt
|
|
@@ -86627,7 +86631,6 @@ async function getDemoUser() {
|
|
|
86627
86631
|
updatedAt: /* @__PURE__ */ new Date("2026-03-11"),
|
|
86628
86632
|
repsRights: await getDemoRepsRights()
|
|
86629
86633
|
};
|
|
86630
|
-
console.dir({ demoUser }, { depth: 10 });
|
|
86631
86634
|
return demoUser;
|
|
86632
86635
|
}
|
|
86633
86636
|
async function onboard(email, firstname, name) {
|
|
@@ -86825,7 +86828,6 @@ var updateRepositoryData2 = catchAsync(async (req, res, next) => {
|
|
|
86825
86828
|
const repositoryData = req.body;
|
|
86826
86829
|
logger.debug(`change repository data ${repositoryData}`);
|
|
86827
86830
|
const result = await updateRepositoryData(repositoryData, req.user);
|
|
86828
|
-
console.debug("result", result);
|
|
86829
86831
|
res.status(200).json({
|
|
86830
86832
|
status: "sucess",
|
|
86831
86833
|
data: result
|
|
@@ -88953,9 +88955,7 @@ var invite2 = catchAsync(async (req, res, next) => {
|
|
|
88953
88955
|
var updateUserRight = catchAsync(async (req, res, next) => {
|
|
88954
88956
|
const modifiedUser = await getUserById(Number(req.params.id));
|
|
88955
88957
|
try {
|
|
88956
|
-
console.debug("modifiedUser before", modifiedUser);
|
|
88957
88958
|
setUserPermission(req.user, modifiedUser, req.repId, req.body.path, req.body.permission);
|
|
88958
|
-
console.debug("modifiedUser after", modifiedUser);
|
|
88959
88959
|
await updateUser({ id: modifiedUser.id, repsRights: modifiedUser.repsRights });
|
|
88960
88960
|
} catch (err) {
|
|
88961
88961
|
throw new ApiError(err, 401);
|
|
@@ -89332,21 +89332,15 @@ import path4 from "path";
|
|
|
89332
89332
|
// api/src/controllers/plantuml.controler.ts
|
|
89333
89333
|
var getPlantuml = catchAsync(async (req, res, next) => {
|
|
89334
89334
|
const targetUrl = new URL(req.originalUrl, config.PLANTUML_SERVER).href;
|
|
89335
|
-
|
|
89336
|
-
|
|
89337
|
-
|
|
89338
|
-
|
|
89339
|
-
|
|
89340
|
-
|
|
89341
|
-
|
|
89342
|
-
|
|
89343
|
-
|
|
89344
|
-
res.message = `\u26A0\uFE0F served from ${config.PLANTUML_SERVER} through the back. consider using a reverse proxy like ngnix`;
|
|
89345
|
-
} catch (err) {
|
|
89346
|
-
const errMsg = `failed to fetch from plantuml ${targetUrl}
|
|
89347
|
-
${err}`;
|
|
89348
|
-
throw new ApiError(errMsg);
|
|
89349
|
-
}
|
|
89335
|
+
logger.debug(`get plantuml at ${targetUrl}`);
|
|
89336
|
+
const response = await fetch(targetUrl);
|
|
89337
|
+
if (response.status >= 500) {
|
|
89338
|
+
logger.error(`PlantUML ${config.PLANTUML_SERVER} responded with ${response.status}`);
|
|
89339
|
+
}
|
|
89340
|
+
res.set("Content-Type", response.headers.get("content-type") ?? "application/text");
|
|
89341
|
+
const text = await response.text();
|
|
89342
|
+
res.status(response.status).send(text);
|
|
89343
|
+
res.message = `\u26A0\uFE0F served from ${config.PLANTUML_SERVER} through the back. consider using a reverse proxy like ngnix`;
|
|
89350
89344
|
});
|
|
89351
89345
|
|
|
89352
89346
|
// api/src/doc-nis-2.ts
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|